From ade2d04cb30cd249794f53a2a92e1c601073402c Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 18 Jan 2011 15:58:28 -0800 Subject: [PATCH 001/146] Work in progress on helper wizard for feed mirror discovery/setup --- plugins/SubMirror/actions/mirrorsettings.php | 2 + .../SubMirror/images/providers/facebook.png | Bin 0 -> 958 bytes plugins/SubMirror/images/providers/feed.png | Bin 0 -> 2434 bytes .../SubMirror/images/providers/linkedin.png | Bin 0 -> 2100 bytes .../SubMirror/images/providers/statusnet.png | Bin 0 -> 6168 bytes .../SubMirror/images/providers/twitter.png | Bin 0 -> 1192 bytes .../SubMirror/images/providers/wordpress.png | Bin 0 -> 4861 bytes plugins/SubMirror/lib/addmirrorwizard.php | 155 ++++++++++++++++++ 8 files changed, 157 insertions(+) create mode 100644 plugins/SubMirror/images/providers/facebook.png create mode 100644 plugins/SubMirror/images/providers/feed.png create mode 100644 plugins/SubMirror/images/providers/linkedin.png create mode 100644 plugins/SubMirror/images/providers/statusnet.png create mode 100644 plugins/SubMirror/images/providers/twitter.png create mode 100644 plugins/SubMirror/images/providers/wordpress.png create mode 100644 plugins/SubMirror/lib/addmirrorwizard.php diff --git a/plugins/SubMirror/actions/mirrorsettings.php b/plugins/SubMirror/actions/mirrorsettings.php index 20e1807b3d..195946c884 100644 --- a/plugins/SubMirror/actions/mirrorsettings.php +++ b/plugins/SubMirror/actions/mirrorsettings.php @@ -88,6 +88,8 @@ class MirrorSettingsAction extends AccountSettingsAction function showAddFeedForm() { + $form = new AddMirrorWizard($this); + $form->show(); $form = new AddMirrorForm($this); $form->show(); } diff --git a/plugins/SubMirror/images/providers/facebook.png b/plugins/SubMirror/images/providers/facebook.png new file mode 100644 index 0000000000000000000000000000000000000000..13a53aa63cfb8204e93237a364f795717c16f58d GIT binary patch literal 958 zcmV;v13~Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipM> z7brL%Yf~uz00TZrL_t(&-tC%OPZL2D$NxLKy=)6>DNtxd35bM*i!mZz5>1H4G{z?r z)F&SOD1HW?eI@aYgs6#8qY0+*fp`N!K<=ed+NIs=?Dzl?3tNgxp{siy_spJ|-`R6! z&de+~G&0scH1ht@VlvwcfQK`L#v)Q;Al@~|b9GmS7n9iw00^8TM9yhVb4!^%vgLV4 z%3?CxOB@t7cES@lTpSM|9A)Pm0Iyeo-zUH;@Zfn4gm7RCuq+0~7))wmJ*&cEtg-+^ zzXy?U5NA4~IM;a`Elo8DhXSY)y)aA*IYo!AoA|bz!Gnj-v6fLP2OuPg=5u_Xo81_N8l?bgrq7z?!>!stG@#^lIW}?7I=bd7h7@ta@+m~UnKUA z1fZ!=!lkp#h}Ku{`yEZEV0%CuY6x|Es%AQGCDsfR3oF^* z9(=_BsG0#vt^czYasmF?YP9u47+t3u;1RZc)OIp#+t%k5aP@o(PTA-U)55bilgO*a z;R5uuH{$-?K2!&NCEEu4UJS&$ZFL!0#oMvDq5u^iLb^%!EQcx{Kvj*Rn;Ay{~b=5XA4aMZ_cgQ(ymu_Mv1>G%UD%RHX zAY}U^-@Dmk3!rEwhF^?hVkWgqC+D=HGf-Ip(pd%RY~e<{*v6bvirIxUK20UvQo;pr z0bBqVzy!p%5Qt2EN#rRp^ZM%d62;t!Il<&%H=P`OgDDY%oeG|fMdYidP>;kv| z1xd^pAm?=;C6}$USBV)cEN6B-*9?mBud7I{=S$j<^LoK4g#dtJ>$YCrP_dCy%LcHL zl5J-q2Ed{W46LM$9S0Oth()Bt*3TYx4GvT&V+EHNe=D(wlpq7~uEAJD8U; zsDvV8rwy^Rjde&$8%Uea=4JRI0?!_iUJUoDQH3s5QpyUbC~S*2_;!Y^cAfXthTCIy`IE<$0wg zWET_=2n8{&#uziwVPY?jMo&MVwoG4vF#;zZXRy16zV;4=`ug`;!rWc;L|2{faBplb z{+bmEK3KM-G8oCv$3ERlyng^UZX*C81wtgR5)dQT(RRcc-V2eu0z!gR7_u-jLjUPr z+TUu7yYcvKmp;+?SVjPE+*EvXC=z*e-bE{L2ZtGI>jJIE2K->*lkFq77-6ABF1Bsa za<~C|Xz=FMk9Y1E3t<0O3fBa~*{?6SWMv@H-H&~`cPzXQ8-DD!0M|r_*&$BUznO6D z*k!ACcGXJ&Ddn%qDk}ndD0a@m14uJSFz8aYWO2YC?gtPDHWzKk&dYnH{Gt`~H8x{h z_nd?`8jLn*Bhjja=KmbR9*9;eA;k50r6t(ieV*_Io42Ei$}x#yj6I0ka}u}fIBs_{ zZfgU?2R|@)qXE}Nm;v%iOKI(oUat_;WET_=JK65}=B-)9sJR#5X-4C;9>sa54yW-| zoKuI+D!g$`@_v{|em=smL18Ehgn|s(37@p_W*>Q?M9p1}n!6k>+k)ckV=)v z5pQq!nFIlV3KF>Z2C}#8BDnqz2!`KRc%uylGxE|#M!^$a$Qi(=np6a;HWU8xGgynN z-#>V5#vd_y<0q9)%bO%l)Zw%qMGtn*C=QWRO7JuH5vaZwp@L@&Z(K-D04n(iU!5QN z$M4b>qYUR_6`hYNuR@hyikepiDm1M?tYz0BOP1rj{C&*8sTsqk&VU+!P17q<#*X5) z9!9qvCVpTCGMr0b=|5a~i|KBh5xmjkHcYg2@+blk z)W+>Fd+B?JpO`|)_2dZ_`RtF71?OSnLztd-aC=UmPrZrhZT2lvy7^z&r|JlN^e(Jr z*ZBt#%pq{){n)#5|Hcq4%?K8dwpeMXVe-N#A%Z5uc--~L$}z73&* zDd96`U=oFSuO_ncP@mq8b@AqmBIUL<5P$h6q$P1`-*6t`nr}@BZ#>t4PYOA2ze=Lv zFSsprnBku3hJm%_n^nM zYT31joYG0dkSjJJhk9}9A5YWy*lWMXDqo8%TI?BocJb&lG z8~2SrVLx*t&b|l0j!qhcTKf&;!kYBFP9zxK^9%e^DYUExRZ`&(ugzH3>8X&{VZ^m@ z4?RWvnJ=JQ_DvFkAaKPGAZKn`kxIN%PrTtJpDvQ{x=mBUrv)(MGi-bSch5HT5&ygv z!5o4fIzPPk5z@+Pie;_*6v&__yw7It3=ZIE-2D&W9^By@gj#qRs-ikg=bet@*hgzU z{be|p(1q2W@ZK^yU3e8rwr3tjoc#}>Pwe##BDDTij4RUC!|;J!zW!M&Kj8_VF#}>W z2tRmfp;q2V@Jr7Ux}}!jEw!kPKS$)3kHL?ohP~&g|YJP}XcNb#Tc}bEWazQofnnxf%MJ-%|v4@EN`(giCSb0r) zk#aS$hJSkc%A5iMb1F08lR>2i-~(@!ufwXm(wiojgY~g{GWPTFh8J)@P&mR5tx zN-I)!(*gg0&%Y!C-m?<><-Dxe=sP%oELj2BrRh5FYT^gIb6cn&f%2-fB4s!FpW;;6 zq6~PSt%Q%-WY3;7006R!GY%t(w_e4sPz4rVnx-ypv!;N-%9!8v# z4W50h!uc5$*6C{T_RY!9gg2vrAhqLk8ZAIb&mv_y4xN&WHwlTctXP)pzgL~Q= zN=6DYDy)tTdHZHXGT;pYVM(;(bSR+JiN}joKmiHQFJ?~N9}(?Gv6kO}n7wG^+tBgX zvG+ZO9_sUi*RH`G>_HEE93{1zQDNO^H+pD-Z!%Sc3Zd=TSSkf_g1EK~hEt;MrsCh0 zRW81B_M99n6ZNdHGx}~b#eUwe!g?*(u{WO#D0g8IZZJVx)3M)3DcRN6-i{FwjIhpm zc%dwE=FO(RqXSE_TUPDp+&kPKeXYN%2Q6~XX?TFViV_CiH4+&lXBfxFt9 zjwNi{!Znd|7CyJUkYHh$w#KG}w)hStWpwqB%C+rzVRH{_L;63Nd;g|m`RHe>QOHnXX7 zoFaY3qb>D!<|bpjQAmjlNSv6>U~eyd?d=TrM{6Qj69e)*~2Qv7jk_&l0w z1aqWPlYfGEpG`YXJBC&v#4AFY=c;yedY+X250H6G$)NE5&Hw-a07*qoM6N<$f@%i6 A82|tP literal 0 HcmV?d00001 diff --git a/plugins/SubMirror/images/providers/linkedin.png b/plugins/SubMirror/images/providers/linkedin.png new file mode 100644 index 0000000000000000000000000000000000000000..82103d1f3f17839c6fe0bd90222d4f94c351feb5 GIT binary patch literal 2100 zcmV-42+Q}0P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipM> z7b+hAP_$M600*>5L_t(&-qo7lZyZ+@$3OSZ><_PZZ6|TOwezED(xy#NLJ0~gAfN;x z0YVi}e!jp965<7k9}<56LPCfK9zg0-fl5U@@KlKhP-zsYln_NBO+}luP8<>^O=552 zU;A_Bp2Ne;uGhOWYsUqgTxlM>bI;8A&N=7%J@;N4bKqmvmd3wW`o!0N_Q;-Hk7lfL zKaYk(FU|b>jrz$Kf8f_DCyf80FMsLKv)}#gH;(Nqjpyxs?K}ohxL$R<@VB?-@4Wn* z&zrFy{qgGeKKX;S!(AT zZ{A+nvKj~_jzB0vBXny3h{DcdmXAEVZH@Eov42N_!;>X0&R1D(hFG&TMJ%fLqR{M$ zKpRFW=P@;!Pkex94dr5%j5X8)hj0J?c@&DGQ4J`qP&$scfiy$GNqSomh|+XID=wz3 z01!n$l%_bkYgiO!mm0i1U*)O2V|~WWP?(;tQK_{EL~vUIAgWbgfR>ZB0Ehs*^wupV zidpt;FLXKYICX7-lQR|WHi9kFwony;h=qCq00d4rae1D4;Q06>+nE~4({jRv+bg_s zxx$6H6`bgn=~+|*aS^wi_5n}>&3eFJrsp_wW0BFEj}xU*Z?V)2QH>S(Jq(R2&uk)& zp+wfcsuDUy6S&HWQV$%9jj(gy0Gr;WY+TH$s$VN6h*N%(sI>^2#hgg ztif(T9lHQTFV~(H!ZWZvpP`iV`iz~z-FiT^<>I1OM)E#m`3#=vZ$}mzA$RKmfhfhS z#|NfHI5bhDT+EU24Aqw7-Q^}1=c>FNYfHu&%m5&r6jF`;=pG_UA?Ndz!;?I7sN83~ z(h7O*)K&g^X&zCf83>;_Fu}Ku?qaM*_(YW#&d&1OsjED_ZwKG};BKCrEK$n&{R0`rTF6eZ83@FN>ch`3>+?(_}Y<4_HQo?ObcTSg^b6M$r9f_wwKw( zCU4waiqg{b(`cq$1KQ)MiXtw#AlJ-^^H4%Xg~a&=`0V35$$EC6^WDR@mJdHX#wYh} zXL@dhTHx?{Y*iGsU?FlM=|WRO0IJbLq-%Zx0%HvMjEB9)ektQwp4vOc#BdgIlIWj_ zYJfGJXgftzbx;60E45Xy8{_V43w35HH8Q^C!1yrbQZ9A=;}b=uMsi%PR1wiNYY$Zj zox?{X)>+FO9S_q1XwNkWtSU>*ke|Lh&F{`!W2q718Nq(?wwknJn_oaqQE)fTl@2x{n7i>M0_sx21@ zlV?)NqR&SRrrk>Px~lCBp#e^5H~p>ywiODYXkwovs)Qn`5!7zd=&E9kH6}5IG`SIAx9>DRKYT z-T0zpgY%PEO*j08uC#9dYTDgs|8qJ{rEz;l$h!D{18S^EE3yqJK5bV_|9Z|R1;9o> z&}Qb|O8`^{&-GK2bK}w7ocC)ADWvG&78TP|rE#GOTb zFDYtA2a?B1D4e`hiF%M8fQ?Xi^VagJf?C7*o69_Z`YOe&-?yfmo~x#B6034{c9CDd zb|o<#PG4Q1;nL6V3_pBHleo(oLn&h!_Pm5nR9Orhb+_6x6?~78jP2j8GthKGrRn;e zh&#}NXBkb|saOsjEA8$7?hrd==h)D!pLPf(sw_4gi@5Yt2Gc(5Gt@#yEpX|noRlJQ zt6U8o)nLGT+KYqaRw8weOz@Z0f2-7z;ux~O9+4z06=<WDR*FRcSTFz- zW=q650N5=6FiBTtNC2?60Km==3$g$R3;-}uh=nNt1bYBr$Ri_o0EC$U6h`t_Jn<{8 z5a%iY0C<_QJh>z}MS)ugEpZ1|S1ukX&Pf+56gFW3VVXcL!g-k)GJ!M?;PcD?0HBc- z5#WRK{dmp}uFlRjj{U%*%WZ25jX z{P*?XzTzZ-GF^d31o+^>%=Ap99M6&ogks$0k4OBs3;+Bb(;~!4V!2o<6ys46agIcq zjPo+3B8fthDa9qy|77CdEc*jK-!%ZRYCZvbku9iQV*~a}ClFY4z~c7+0P?$U!PF=S z1Au6Q;m>#f??3%Vpd|o+W=WE9003S@Bra6Svp>fO002awfhw>;8}z{#EWidF!3EsG z3;bXU&9EIRU@z1_9W=mEXoiz;4lcq~xDGvV5BgyU zp1~-*fe8db$Osc*A=-!mVv1NJjtCc-h4>-CNCXm#Bp}I%6j35eku^v$Qi@a{RY)E3 zJ#qp$hg?Rwkvqr$GJ^buyhkyVfwECO)C{#lxu`c9ghrwZ&}4KmnvWKso6vH!8a<3Q zq36)6Xb;+tK10Vaz~~qUGsJ8#F2=(`u{bOVlVi)VBCHIn#u~6ztOL7=^<&SmcLWlF zMZgI*1b0FpVIDz9SWH+>*hr`#93(Um+6gxa1B6k+CnA%mOSC4s5&6UzVlpv@SV$}* z))J2sFA#f(L&P^E5{W}HC%KRUNwK6<(h|}}(r!{C=`5+6G)NjFlgZj-YqAG9lq?`C z$c5yc>d>VnA`E_*3F2Qp##d8RZb=H01_mm@+|Cqnc9PsG(F5HIG_C zt)aG3uTh7n6Et<2In9F>NlT@zqLtGcXcuVrX|L#Xx)I%#9!{6gSJKPrN9dR61N3(c z4Tcqi$B1Vr8Jidf7-t!G7_XR2rWwr)$3XQ?}=hpK0&Z&W{| zep&sA23f;Q!%st`QJ}G3cbou<7-yIK2z4nfCCCtN2-XOGSWo##{8Q{ATurxr~;I`ytDs%xbip}RzP zziy}Qn4Z2~fSycmr`~zJ=lUFdFa1>gZThG6M+{g7vkW8#+YHVaJjFF}Z#*3@$J_By zLtVo_L#1JrVVB{Ak-5=4qt!-@Mh}c>#$4kh<88)m#-k<%CLtzEP3leVno>={htGUuD;o7bD)w_sX$S}eAxwzy?UvgBH(S?;#HZiQMoS*2K2 zT3xe7t(~nU*1N5{rxB;QPLocnp4Ml>u<^FZwyC!nu;thW+pe~4wtZn|Vi#w(#jeBd zlf9FDx_yoPJqHbk*$%56S{;6Kv~mM9!g3B(KJ}#RZ#@)!hR|78Dq|Iq-afF%KE1Brn_fm;Im z_u$xr8UFki1L{Ox>G0o)(&RAZ;=|I=wN2l97;cLaHH6leTB-XXa*h%dBOEvi`+x zi?=Txl?TadvyiL>SuF~-LZ;|cS}4~l2eM~nS7yJ>iOM;atDY;(?aZ^v+mJV$@1Ote z62cPUlD4IWOIIx&SmwQ~YB{nzae3Pc;}r!fhE@iwJh+OsDs9zItL;~pu715HdQEGA zUct(O!LkCy1<%NCg+}G`0PgpNm-?d@-hMgNe6^V+j6x$b<6@S<$+<4_1hi}Ti zncS4LsjI}fWY1>OX6feMEuLErma3QLmkw?X+1j)X-&VBk_4Y;EFPF_I+q;9dL%E~B zJh;4Nr^(LEJ3myURP{Rblsw%57T)g973R8o)DE9*xN#~;4_o$q%o z4K@u`jhx2fBXC4{U8Qn{*%*B$Ge=nny$HAYq{=vy|sI0 z_vss+H_qMky?OB#|JK!>IX&II^LlUh#rO5!7TtbwC;iULyV-Xq?ybB}ykGP{?LpZ? z-G|jbTmIbG@7#ZCz;~eY(cDM(28Dyq{*m>M4?_iynUBkc4TkHUI6gT!;y-fz>HMcd z&t%Ugo)`Y2{>!cx7B7DI)$7;J(U{Spm-3gBzioV_{p!H$8L!*M!p0uH$#^p{Ui4P` z?ZJ24cOCDe-w#jZd?0@)|7iKK^;6KN`;!@ylm7$*nDhK&GcDTy000JJOGiWi{{a60 z|De66lK=n!32;bRa{vGf6951U69E94oEQKA00(qQO+^RW0TLH4E~Nf&zW@LYN=ZaP zRA}DST5D`v$94W@=05htCAp;d5Gjg!P?Rl;k}XSiWwlO4*^QIfaElsk8ny+BB0(C! zNsy)m{iA;Zlm+^uNRzfnfFym$MGGWp{Agm!rYyt{#f~k}lpLE6OBO{^;&PYV_uj|M zoc`G5@{*w_+LF-r0)sny@9xa^opa{Au)zQGi{0n~14F$4ApwRS09^n!0f+%G0C)iM z0OkN(0x)rWaIEluhQPp3?_mIc0^o2*^Uj9t?Rz7wja{L-aDyR)$vo-kTrurmS-9v< z&WsdOxhrW9dx0_f?(xC#cmG!i3=H+wb0&_&!u5lRc-wt<@9M|?oktJ}N07=-B2&DK zlDi0{BsjMbv768o>qerk8}o~^I5Y7Q&Ruv-XNvPbE;;$X1Mt@I!Ljl!ConM7D*)Ud zw(CBBSI^Op_ieu?7Oyj~P#nix?mc9RGf+xFYXT9V3AH&9AefCrtQ+l(x1%Al1*yye z&Q6|6jbA?VBTsq%#DJ0GgJZXbz`#(iMMR%(Y25M`1IGs2!(o@bclBxHO0)2!15E&F z{0ex~<^U~`0fQx?NYr)Xw$6S`U7gfFdHr85c+!0Wzz>fPj_I39U|^^>W(w=8w{N|7 z@b~+_XkJ=)0TWlBhtdjKR{#5O36;5Ngt4#tAy_<)pS*v` zf>b`H)9->vVfU6pp+uo_xz6e_Vo9# zP`p@^;tKGDnz?wMM5!#{xDrwVf*TOr0Kh>3%`6iEGNpO=s*D3Wj+)8E>4QZlpX}>z zIy*X?rt1+fuE~rW{d>B9?Mn|H`d$0<`+tLin_3gRlp1A6VlnF}$1ydB4bzB~IODF? zGQ23=Fj$Ff8@xUm5e8?FDQHEwZ_h*ZCrAEkFjGvw0bt}Koq>U&-tI)a z?Zh8G@aH}A<&(IYJzq0{VQ=GCJ<8=az;7TX3ZiUe1h8~a-7`gD;uqWL|uNU~l8sIsAZ#;PS zz{eUIJX}ou3`Dfjo(Z@zpGP{y+{b?X3Hgb8{?yvN<&d3-x7ns)TMUc?0AozpX4u+P z-(m0Syvx|P<9=p{X!)(NS46~)a?7;fOMk`MMK_10cst5&sk`9ha-+lPS2s-HGk?7c zjIkqajopKP(EoV!?9}(+`o$H}SBfwGyK?uIgE7kpamLuX9*r@^LRLid zbnLggT5r#se&=~%88$bBV7^)=p_GO%eRL#tu$lA+JNEV`o*o@eXRfs_U$u!Pxbg5K zhd=SdP?r zHwViMZ3b}L#t4{^BXyA|icUHJzM|HA!NHw79#D<3mhjEY=X*Nttlw1Ml~YQAGf|B% zl|4&d5e7FIWBl-S2@DMNLI`t@WpVh*h1QkafIv{1P%KM*=gxkOn|yK3`CUCnxi1w2 zGb%Brss*VO2moh%??yCWan4%}!63C?0lyTq6oE*1tqon)ttbn-+xEbhE}0^Ps@$r< zQbTJE09!UfAjTOtIA_pGuSmd@CJ1J^LKy5;5NM3G3Z<0h%vc6b1Vsd;6^O3wg^bl{ z1qE~XK#0FdCG@og$p8?m+J7Y=5CBEG@?rxTC}`4BX{sy~2wngnm1imK-x3Ckg*o5g zCYM@)h?Y}wO^{lHfWmbN5Rt33npcv*nOR$)B7Fv8%1&ixy<0)x;+6Acn-S*vmFfZrHb6F;x$BQ)08;;C1^ z$y3>x@{JIfoPE1|^6Y=|jzo{Rl%7PTCRhfqHK4WQ0(uxgZlme6tF(Ofsng$D*wgiK zL_^KX3j*+!k5I^Bx$?CAjigLDCZs@A zP6GJpdcC3*71`);8hyu_rwZlF-O*6Po-LbtFuO1YRXxZAKxu_oIL1m&-Woph1GTBX z(`k&g2-C3E%}|Mm3Qk77a{j5@zrOIb$mWI}ma8PYnw_n6E3l+(5C|SX?#}^yeRMdz z@tSyaI8A-Wnn#kE>4*Ea-{0W+Ipj*I<-U&wd?gVLMPZw^IWl>QPtJ_`j#pHMFubrG zlY$#&O{IQ0e>pj(-WWTfp8Lf=)4LzM9%^mqHuG))SFt zhOFq-s2#ToPDVLiv7UkPs9n#RVyz-#*JFC|5=vfqMcS~s8CJ1wqlMt_2XN{`HMT~F z)7aae_+UOe6D7jIL%TjH=CT*y`sEdyNUc!vOVE&rhZ}iQT?-Fe5rZ=p(@KUzW;mLN zwTVQug-g9s^}Jwb2D)KGJNgBS3b&q8H=SflDR9$losGiS-}?Q z&QSoou7R(4MGp92jQ)FcI9>YCz0uL(bg}PP^QmNJ+AcZ8LkD*Db4?nVQfkGf%dU?g zm4qj~+VGWx)_MhCO;qzXLDRvSGL~(CdS-MuJ^i5xR7tpd`x8G~$S0jk$%(x^?favN zSQ|=ieg(K-7kY(h1UuD1QwavFn%%F}I3yGBt-fPTKVHiliAVnU&(O2`4vfDuf>0=2 z1+-F+qr+*nbzl5-Eu8aH$?*oQsB=?Yr&%A_1kMdeB_Xw3(Xd^8Uv{T});_d$p~(kG z)iU0->kS6L+o84k;klCw3jiR5fNk55QbP3ZKZx@`KLyeXzV9(9m8fclSMLIV7(bn1 z=T4?CG;B6rEMxI}sxaG|Ev8!{W*p6R9cTzQ!{inOGr*VtX9ApY7+gSb0Y(hIbRcB` zQk7<;=X_my&T+s`G3K@~=Ep1g5UYqV0AvyQ;@nH=69707LCQ+^owc>K!}mQ_DwUY$ zd0Z*A1fExa%~y%1;vS-cKk(TtM`I1*^8j6JtVOanZniTVuPoD2dPdbk0 zmkUa%DW@QhkDN&T=;GO2d1s2Ar3JfY63!G#ssT;MT2NzDm_#F z7Ej&%XKW{2TxufL;Q$1l|S^st&vQ+z6Zr zzG@>{g9O$A&(;7QBoka`$xM94;eYIpI{F&h?cNJ-<-R|1B9&Z^K)8Ch1Lnj7ro;l9 zEp4dR0e?LLY?a0+KtNW3x&Ryidi)>y0tX07J((w zYz-n9lE@06Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipM> z7cBy$5PseO00byWL_t(o!|j;OYg|FBh)@WKBEf}L5kIPKsv-zt6m2CGHBH(y>7@DSgv{r?Gw0)V zp{X(L+`02ntuSYM;hf(+?|Yu-IR}Xd?xexs4jXNtHc%Vr{|clDG|^1SY{>d_PTU3* zn$DZE>pJbxO2r)R5w4-Jq}UZ^{|(U3Idf`JUMmv;bPKrTntf3g;n;$bWh9kNeH)%G zn^&$>mdZo`3?RhNW{?bFByek>kC%P0qRyo=~-vbptaVFqJKF_sh^ zzUA}lp&^HjM%fQJv!USYb^YCjPK4B>z5HlgbcpSf<`jIDQPpSwz%%gvva%3QB)L_6 zpZsbY6*!&}yTf>6#s!bwN~>oscptB-wF;RnyZcMt{93Hha20|NSLK{bjqA{GgpJ>2 zrR;zF(7J+&Mfvhv`J+``(gXm~!08ngr2lgYCYPkoQK@n4zs%_OmR0tqwG6;)iLSWv zT;4oCXk9FsxsnO43%?ij-cH^KP`{0yA+O3>l3*&UUz?}AhT!sG0KVNYdm@Y@5P>A% z2=-=Ip?`#}70D}%5jf;^e69^RpfrIpmTekoebnWUTZG2%UG@cSwbiYU=a|$d3fnWeMK{Mw1a1TGZQzSx&0nWoMbchJ13wmNv&U@61T_8Xrgij{Kv1A>W zt*XM9k#shrzgbt8U233%`)zzE#va)r?skyXBNTp0t%=qp{Fv3Bt?5}e=nZW!j87!Q z!7diJ&|-CKRv_!pM3-Hf%9`_ey;>n@Km%#|OIkRhh0t%~z9@UJn-4iny%%6zkDf$O z(6ph*GvI0Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipM> z7c2x+XzHo}01|ykL_t(&-o09RkX%Q3|8>9j=00|JcJ`WGox74(l66_OEZg!KY!f30 z;H1EWBd%am5C|a^5<(Rr5GcR~s$wu_5{|-v!3G;2NH&&`Z5c^k>p-hrX;<27cIUol z-n^^3^T&HTtI@0=7?W4^)x3UhzV7e$_1E9g{Rm!z>wTa98eO&h+JNl#_$lCJYPrYj z^YsEGB!rMCrK+K88G|D(d;L|;xmr%lRle}1t zK(hpLbqnXqx){r-#jIw|aLYWva>;Lg<*pmXgb;rk05{zGukiT&^2%#&yl7HlIx>a^@TRSaVSDJMExKD7RnlqCaahz=t$R1)GPr4fD!@%+x{14 zMF>C$0R})JK!-=hijW)IyZzYM>4PFsq-!Sj&zA7m*=(_{Y5(o2X20~vJ-5xjY5=eQ z*q2<=@HOvMiSo(2hC4g|YEv(KGKIw$9v#o%xw#6e7KadkL;;CXP)Bg$bWMnjKsaW_ zg}ok_u0Mg z?{Nph_usvxC$wi>7YxQRmagDiCzF^i8;}TrL2Z;pzh~b^?pzjxwA{m;Z@NqNUiap^C9nU! zzuD3kzI|;JoN+vMCWUXFNMNp_LvR5BTa!WvaKXU@2j>Ee+xN`5w>XEz7#Qa;*<#xv z=e=PuoJd!YtZ29_;zwW5jlp&=PUp1s8B1C_eDj_|lfV3N`S${#gka;}-~YxUT=&0s zd#v*f>$)Kkfp3h=;^FZ$3YrNn1R%IAI0OXe;6gaWZ2%5g7v8hxcT8|FW`h)hV|}{^ zcMNu7Wt$fYrReY|xIF5|f!X3b<}5cuZH)A-@(6bxnyEjYLBncEuY4j5Z7yUqDU!ZygB2}{_&+-b-BGQRk_VGMTo zA=4$>3wva2=?O^BOyxHiL>_Ms_)aBHzp|w8CiRCqrMlv~dpPR9>fWnX!(xJ7O2UYvLH(dBaxj^ZxCf!@Y9IB_UC+<5%Z1@XG{kZUtUN zM!+Q@vW@0+bLal)xoZ_!J32myC4Hz}b8a zmJ=t4;Mm&Jc1dq2Q-a&qcH;1C?((>`@)KUK_x<&Hoi+IhLWq3pgHP?dtS@ror*7Fq zJcaXFg2@GjB7QtKnW9z5N>4}IFXv7kwI~2w z^VWB|HE-x0YeH^p@9RL#a6CNO+pB+>Fp*wzX^(`v2P-Q`~_3G*jZo5hfUEC1Ydl{AsRDaYjrGJ!Ca}NZGm&T!0s!7J+~>3xleEQb(@xkDYqQ_(0Q zY(P(+S%7LGG;3!?8rMWib-~YdZqy3wf4xlR^m0mFpNy7Mq@r%ohMcFp;Z3 z2*B@>5%zh*3Pg-f#Zw+r(>ntS1s4MGlIr+!4v$1ZER!T_ zY&9*EYKp09AutBcII@KbSY3lKOcd%mMi%ldHVFXNuZ+T_NVedx1qZdGoFD}8s)iG( zQVUZ;I3`*^wN9}tMf^Zt{KQ?ZL^diz%&iHs@6$`;F2s+ z7bOIobJS`YSXG5tszA*YFmh%Nxr*u}Zc8q1MVlY1+x(6Yjy4Iki4q7xpkE>$?C5QS zN0A$Rf>H=)d~TQ^mIcNbblt#XFHgcMmSI(@s8?#RECxydS)w3>_+)VIfL&Uoji@CA zPRwNxFI3R(YYy{anP5->PGt+W79|@1v8x({-3qpLg}_)Vh}B^)`Y1y-Q-EO1A>PpX zz?Ob6#xR!1V>(*`7A=6nsXZ1w7X$^s4U6fPlOp?E%^6`?Gx5^-r&9tBz7KEXu zC^*+ks+P$+3nv!#H8!Lcueo9kN2Xe5VMRv(t0Tb{Av*mYtnY3^wp_!Lr{frz$+Yl> zy>48)s;fy^0s`9xIw4bnOj*TfqS(~$sz?w*09D;YzNQJYoS&vltJMVOv*(=Lr!(M1 zhu`BYN}C9!cI&h>(K%Fg3nQ}`7#3>*ant&kovAu} zibSz>AOeXJj3)9(RJ6uB0br;r3_ze%H;^q?GemZ!s5)^>1+&haTF6_A)6^ICwP^MD zLIE@RO3U+ItGf}pD5!0AqV4|46gYrWi6RmuwS{+GR|x%WfkwM0NRIi5YU&@?+9 zMZ&tSHb4k06spKo)w2++MAgaTmN50Pk(o?hGc9xlJQ#|GL7l*|NV+BP{A8*{i$RZq z8wY!q{tJSehI%oUDk52_gAjtrY#FnKY71|>&y7ue?G3(I*pFD)hfJx4k$9nL{8b%6 z3^;Yl$Xphtrk~K0GertO7}@#Xs-`*r^yr+O?X8N!>y|+XZ4d+SN<4@1MbQ-i{(M6W z5|uy*MJ(*Wy6!NJ&E-%v7zm-T1i^D>TJtKeBH{Ahc6bySl0>n-D~ym^!Q-QIFgY4y zQ$jJ^6Gm^y3suwc(p07_EaR2ZZ=R}C0Lbq9!7SIcmwtR~2C89V`#=QiqM;@YfDoL| z*D#fg=FCFNI#|^az>0Q1d6=qm+N-7pLb%scv9% zUkCOK$3Q6saYzt~m!@*iE!IdaIOmWl!KU6Yu3HmDz%64mQAECOHTV|kN5^NJy`Uvh zB#LWSMRDEgE_f9QN9OV{orDpTBH)tnk()Mv5`w43=8>xEdiCTB-_qyLX%}y7G3xe? zTU~4RbcKB3wUGeUMEv+|vW%>1G^R6C({amS7uvkdsf9!c)I@(RSH#-z?j5V)ktH0SPUErBg;Xsu_vPA|k;J7p zcZERx{K<-E#qdH#3hu6&qW$uoAcng_=nZ->maamx1ehQg2z#(L;%{QFX$J0pVG0@( zAP(4zNoN8Zx&r7AH=B`WGJNNiITSSuSI5Hm_$|ZmDH4v)=ke(Sll4k2{a|kY!{0a3 zbK39QUKiC+{I)<^9@HRidNS9j z=$0d$2}J!aZ0QL#@t(_8@Qbq$ZiT%i$|W=GgS~^tbZQ|LjxcBYP8QIyU^> z007Qdb?nHb+`m44R(I_f%hki%dV-|O@5b&`5v*Ne@k|xpKe2#^PQ+)b+2jL-gO7f>eEdM_wKyl1J74$LYyFp9`L0N8;O-6GZQXYa zMaYi65L^<45CUc0!udiS3l$ynWgU6VglaNyA>fuM!fqMe0T*H+54!v=^aNZ8xfKY( zF;}eP$;liJ&zJOgBE7E~pZr>O@AsZJGx6GTX7lP!>LnSHFXRhvziDfD=j;F7)82K< zP`ih`ePa|?_qRD|#|4{JPFdX;gj{gQO$Y?%h?i9SWGsVU&s9;Y*E8z56aSXk`~64E zd?G7Mga4^MHIM)Vd;apnyM1f7+(kV8tyKjfIsN#k5~P%2LRdC)gNrX{>~v+ zSO0d&;~%Cj&pNNyyE5!^M}2NrK#^q^A%Mjg(+sm-(ab_s)#goIofMijZk2N. + * + * @package StatusNet + * @copyright 2010-2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET') && !defined('LACONICA')) { + exit(1); +} + +class AddMirrorWizard extends Form +{ + /** + * Name of the form + * + * Sub-classes should overload this with the name of their form. + * + * @return void + */ + function formLegend() + { + } + + /** + * Visible or invisible data elements + * + * Display the form fields that make up the data of the form. + * Sub-classes should overload this to show their data. + * + * @return void + */ + function formData() + { + $this->out->elementStart('fieldset'); + + $providers = $this->providers(); + $this->showProviders($providers); + + $this->out->elementEnd('fieldset'); + } + + function providers() + { + return array( + array( + 'id' => 'statusnet', + 'name' => _m('StatusNet'), + ), + array( + 'id' => 'twitter', + 'name' => _m('Twitter'), + ), + array( + 'id' => 'wordpress', + 'name' => _m('WordPress'), + ), + array( + 'id' => 'linkedin', + 'name' => _m('LinkedIn'), + ), + array( + 'id' => 'feed', + 'name' => _m('RSS or Atom feed'), + ), + ); + } + + function showProviders(array $providers) + { + $out = $this->out; + + $out->elementStart('table', array('width' => '100%')); + foreach ($providers as $provider) { + $icon = common_path('plugins/SubMirror/images/providers/' . $provider['id'] . '.png'); + $out->elementStart('tr'); + + $out->elementStart('td', array('style' => 'text-align: right; vertical-align: middle')); + $out->element('img', array('src' => $icon)); + $out->elementEnd('td'); + + $out->elementStart('td', array('style' => 'text-align: left; vertical-align: middle')); + $out->text($provider['name']); + $out->elementEnd('td'); + + $out->elementEnd('tr'); + } + $out->elementEnd('table'); + } + + /** + * Buttons for form actions + * + * Submit and cancel buttons (or whatever) + * Sub-classes should overload this to show their own buttons. + * + * @return void + */ + function formActions() + { + } + + /** + * ID of the form + * + * Should be unique on the page. Sub-classes should overload this + * to show their own IDs. + * + * @return string ID of the form + */ + function id() + { + return 'add-mirror-wizard'; + } + + /** + * Action of the form. + * + * URL to post to. Should be overloaded by subclasses to give + * somewhere to post to. + * + * @return string URL to post to + */ + function action() + { + return common_local_url('addmirror'); + } + + /** + * Class of the form. + * + * @return string the form's class + */ + function formClass() + { + return 'form_settings'; + } +} From aa901bb61cd7bf3fc38d55f5b041abb0b766bcb6 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 18 Jan 2011 18:01:57 -0800 Subject: [PATCH 002/146] Work in progress: AJAXy interface for grabbing feed subscription helper detail forms. Currently they all show the regular subform. :) --- plugins/SubMirror/SubMirrorPlugin.php | 3 + plugins/SubMirror/actions/mirrorsettings.php | 64 +++++++++++++++++--- plugins/SubMirror/css/mirrorsettings.css | 17 ++++++ plugins/SubMirror/js/mirrorsettings.js | 45 ++++++++++++++ plugins/SubMirror/lib/addmirrorwizard.php | 18 +++--- 5 files changed, 131 insertions(+), 16 deletions(-) create mode 100644 plugins/SubMirror/css/mirrorsettings.css create mode 100644 plugins/SubMirror/js/mirrorsettings.js diff --git a/plugins/SubMirror/SubMirrorPlugin.php b/plugins/SubMirror/SubMirrorPlugin.php index 38a4c40d48..a9cb2315b4 100644 --- a/plugins/SubMirror/SubMirrorPlugin.php +++ b/plugins/SubMirror/SubMirrorPlugin.php @@ -35,6 +35,9 @@ class SubMirrorPlugin extends Plugin { $m->connect('settings/mirror', array('action' => 'mirrorsettings')); + $m->connect('settings/mirror/add/:provider', + array('action' => 'mirrorsettings'), + array('provider' => '[A-Za-z0-9_-]+')); $m->connect('settings/mirror/add', array('action' => 'addmirror')); $m->connect('settings/mirror/edit', diff --git a/plugins/SubMirror/actions/mirrorsettings.php b/plugins/SubMirror/actions/mirrorsettings.php index 195946c884..114b8b40fe 100644 --- a/plugins/SubMirror/actions/mirrorsettings.php +++ b/plugins/SubMirror/actions/mirrorsettings.php @@ -65,18 +65,30 @@ class MirrorSettingsAction extends AccountSettingsAction function showContent() { $user = common_current_user(); + $provider = $this->trimmed('provider'); + if ($provider) { + $this->showAddFeedForm($provider); + } else { + $this->elementStart('div', array('id' => 'add-mirror')); + $this->showAddWizard(); + $this->elementEnd('div'); - $this->showAddFeedForm(); - - $mirror = new SubMirror(); - $mirror->subscriber = $user->id; - if ($mirror->find()) { - while ($mirror->fetch()) { - $this->showFeedForm($mirror); + $mirror = new SubMirror(); + $mirror->subscriber = $user->id; + if ($mirror->find()) { + while ($mirror->fetch()) { + $this->showFeedForm($mirror); + } } } } + function showAddWizard() + { + $form = new AddMirrorWizard($this); + $form->show(); + } + function showFeedForm($mirror) { $profile = Profile::staticGet('id', $mirror->subscribed); @@ -88,12 +100,34 @@ class MirrorSettingsAction extends AccountSettingsAction function showAddFeedForm() { - $form = new AddMirrorWizard($this); - $form->show(); $form = new AddMirrorForm($this); $form->show(); } + /** + * + * @param array $args + * + * @todo move the ajax display handling to common code + */ + function handle($args) + { + if ($this->boolean('ajax')) { + header('Content-Type: text/html;charset=utf-8'); + $this->elementStart('html'); + $this->elementStart('head'); + $this->element('title', null, _('Provider add')); + $this->elementEnd('head'); + $this->elementStart('body'); + + $this->showAddFeedForm(); + + $this->elementEnd('body'); + $this->elementEnd('html'); + } else { + return parent::handle($args); + } + } /** * Handle a POST request * @@ -110,4 +144,16 @@ class MirrorSettingsAction extends AccountSettingsAction $nav = new SubGroupNav($this, common_current_user()); $nav->show(); } + + function showScripts() + { + parent::showScripts(); + $this->script('plugins/SubMirror/js/mirrorsettings.js'); + } + + function showStylesheets() + { + parent::showStylesheets(); + $this->cssLink('plugins/SubMirror/css/mirrorsettings.css'); + } } diff --git a/plugins/SubMirror/css/mirrorsettings.css b/plugins/SubMirror/css/mirrorsettings.css new file mode 100644 index 0000000000..d17c794f40 --- /dev/null +++ b/plugins/SubMirror/css/mirrorsettings.css @@ -0,0 +1,17 @@ +/* undo insane stuff from core styles */ +#add-mirror-wizard img { + display: inline; +} + +/* we need #something to override most of the #content crap */ + +#add-mirror-wizard .provider-list table { + width: 100%; +} + +#add-mirror-wizard .provider-heading img { + vertical-align: middle; +} +#add-mirror-wizard .provider-heading { + cursor: pointer; +} diff --git a/plugins/SubMirror/js/mirrorsettings.js b/plugins/SubMirror/js/mirrorsettings.js new file mode 100644 index 0000000000..e772af3dea --- /dev/null +++ b/plugins/SubMirror/js/mirrorsettings.js @@ -0,0 +1,45 @@ +$(function() { + /** + * Append 'ajax=1' parameter onto URL. + */ + function ajaxize(url) { + if (url.indexOf('?') == '-1') { + return url + '?ajax=1'; + } else { + return url + '&ajax=1'; + } + } + + var addMirror = $('#add-mirror'); + var wizard = $('#add-mirror-wizard'); + if (wizard.length > 0) { + var list = wizard.find('.provider-list'); + var providers = list.find('.provider-heading'); + providers.click(function(event) { + console.log(this); + var targetUrl = $(this).find('a').attr('href'); + if (targetUrl) { + // Make sure we don't accidentally follow the direct link + event.preventDefault(); + + var node = this; + function showNew() { + var detail = $('').insertAfter(node); + detail.load(ajaxize(targetUrl), function(responseText, testStatus, xhr) { + detail.slideDown(); + }); + } + + var old = addMirror.find('.provider-detail'); + if (old.length) { + old.slideUp(function() { + old.remove(); + showNew(); + }); + } else { + showNew(); + } + } + }); + } +}); \ No newline at end of file diff --git a/plugins/SubMirror/lib/addmirrorwizard.php b/plugins/SubMirror/lib/addmirrorwizard.php index 1ac8aa1388..0994819b41 100644 --- a/plugins/SubMirror/lib/addmirrorwizard.php +++ b/plugins/SubMirror/lib/addmirrorwizard.php @@ -87,22 +87,26 @@ class AddMirrorWizard extends Form { $out = $this->out; - $out->elementStart('table', array('width' => '100%')); + $out->elementStart('div', 'provider-list'); + $out->element('h2', null, _m('Select a feed provider')); + $out->elementStart('table'); foreach ($providers as $provider) { $icon = common_path('plugins/SubMirror/images/providers/' . $provider['id'] . '.png'); - $out->elementStart('tr'); + $targetUrl = common_local_url('mirrorsettings', array('provider' => $provider['id'])); - $out->elementStart('td', array('style' => 'text-align: right; vertical-align: middle')); + $out->elementStart('tr', array('class' => 'provider')); + $out->elementStart('td'); + + $out->elementStart('div', 'provider-heading'); $out->element('img', array('src' => $icon)); - $out->elementEnd('td'); + $out->element('a', array('href' => $targetUrl), $provider['name']); + $out->elementEnd('div'); - $out->elementStart('td', array('style' => 'text-align: left; vertical-align: middle')); - $out->text($provider['name']); $out->elementEnd('td'); - $out->elementEnd('tr'); } $out->elementEnd('table'); + $out->elementEnd('div'); } /** From b1897e019021af1128540bbde4682538ac0a0dc5 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 18 Jan 2011 18:13:24 -0800 Subject: [PATCH 003/146] viz cleanup on AddMirrorWizard --- plugins/SubMirror/css/mirrorsettings.css | 9 +++++++++ plugins/SubMirror/js/mirrorsettings.js | 6 ++++-- plugins/SubMirror/lib/addmirrorwizard.php | 8 ++++---- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/plugins/SubMirror/css/mirrorsettings.css b/plugins/SubMirror/css/mirrorsettings.css index d17c794f40..c91bb73b6b 100644 --- a/plugins/SubMirror/css/mirrorsettings.css +++ b/plugins/SubMirror/css/mirrorsettings.css @@ -5,6 +5,11 @@ /* we need #something to override most of the #content crap */ +#add-mirror-wizard { + margin-left: 20px; + margin-right: 20px; +} + #add-mirror-wizard .provider-list table { width: 100%; } @@ -15,3 +20,7 @@ #add-mirror-wizard .provider-heading { cursor: pointer; } +#add-mirror-wizard .provider-detail fieldset { + margin-top: 8px; /* hack */ + margin-bottom: 8px; /* hack */ +} \ No newline at end of file diff --git a/plugins/SubMirror/js/mirrorsettings.js b/plugins/SubMirror/js/mirrorsettings.js index e772af3dea..a27abe7ad5 100644 --- a/plugins/SubMirror/js/mirrorsettings.js +++ b/plugins/SubMirror/js/mirrorsettings.js @@ -26,13 +26,15 @@ $(function() { function showNew() { var detail = $('').insertAfter(node); detail.load(ajaxize(targetUrl), function(responseText, testStatus, xhr) { - detail.slideDown(); + detail.slideDown('fast', function() { + detail.find('input[type="text"]').focus(); + }); }); } var old = addMirror.find('.provider-detail'); if (old.length) { - old.slideUp(function() { + old.slideUp('fast', function() { old.remove(); showNew(); }); diff --git a/plugins/SubMirror/lib/addmirrorwizard.php b/plugins/SubMirror/lib/addmirrorwizard.php index 0994819b41..7a63f8366b 100644 --- a/plugins/SubMirror/lib/addmirrorwizard.php +++ b/plugins/SubMirror/lib/addmirrorwizard.php @@ -26,7 +26,7 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); } -class AddMirrorWizard extends Form +class AddMirrorWizard extends Widget { /** * Name of the form @@ -47,14 +47,14 @@ class AddMirrorWizard extends Form * * @return void */ - function formData() + function show() { - $this->out->elementStart('fieldset'); + $this->out->elementStart('div', array('id' => 'add-mirror-wizard')); $providers = $this->providers(); $this->showProviders($providers); - $this->out->elementEnd('fieldset'); + $this->out->elementEnd('div'); } function providers() From be53b94bfdb0498b335aaa558f5631c95a23e3d5 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Mon, 7 Mar 2011 17:26:19 -0800 Subject: [PATCH 004/146] - Fix table name; add comments --- plugins/ExtendedProfile/Profile_detail.php | 63 +++++++++++++++++++--- 1 file changed, 57 insertions(+), 6 deletions(-) diff --git a/plugins/ExtendedProfile/Profile_detail.php b/plugins/ExtendedProfile/Profile_detail.php index 6fd96cca70..25eca4d09c 100644 --- a/plugins/ExtendedProfile/Profile_detail.php +++ b/plugins/ExtendedProfile/Profile_detail.php @@ -21,18 +21,52 @@ if (!defined('STATUSNET')) { exit(1); } +/** + * DataObject class to store extended profile fields. Allows for storing + * multiple values per a "field" (field property is not unique). + * + * Example: + * + * Jed's Phone Numbers + * home : 510-384-1992 + * mobile: 510-719-1139 + * work : 415-231-1121 + * + * We can store these phone numbers in a "field" represented by three + * Profile_detail objects, each named 'phone_number' like this: + * + * $phone1 = new Profile_detail(); + * $phone1->field = 'phone_number'; + * $phone1->rel = 'home'; + * $phone1->field_index = 1; + * $phone1->value = '510-384-1992'; + * + * $phone1 = new Profile_detail(); + * $phone1->field = 'phone_number'; + * $phone1->rel = 'mobile'; + * $phone1->field_index = 2; + * $phone1->value = '510-719-1139'; + * + * $phone1 = new Profile_detail(); + * $phone1->field = 'phone_number'; + * $phone1->rel = 'work'; + * $phone1->field_index = 3; + * $phone1->value = '415-231-1121'; + * + */ class Profile_detail extends Memcached_DataObject { - public $__table = 'submirror'; + public $__table = 'profile_detail'; public $id; public $profile_id; + public $rel; // detail for some field types; eg "home", "mobile", "work" for phones or "aim", "irc", "xmpp" for IM public $field; + + public $value; // primary text value public $field_index; // relative ordering of multiple values in the same field - public $value; // primary text value - public $rel; // detail for some field types; eg "home", "mobile", "work" for phones or "aim", "irc", "xmpp" for IM public $ref_profile; // for people types, allows pointing to a known profile in the system public $created; @@ -68,9 +102,17 @@ class Profile_detail extends Memcached_DataObject 'modified' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL); } + /** + * Database schema setup + * + * @see Schema + * @see ColumnDef + * + * @return boolean hook value; true means continue processing, false means stop. + */ + static function schemaDef() { - // @fixme need a reverse key on (subscribed, subscriber) as well return array(new ColumnDef('id', 'integer', null, false, 'PRI'), @@ -113,7 +155,7 @@ class Profile_detail extends Memcached_DataObject } /** - * return key definitions for DB_DataObject + * Return key definitions for DB_DataObject * * DB_DataObject needs to know about keys that the table has; this function * defines them. @@ -127,7 +169,7 @@ class Profile_detail extends Memcached_DataObject } /** - * return key definitions for Memcached_DataObject + * Return key definitions for Memcached_DataObject * * Our caching system uses the same key definitions, but uses a different * method to get them. @@ -142,6 +184,15 @@ class Profile_detail extends Memcached_DataObject return array('id' => 'K'); } + /** + * Get the sequence key + * + * Returns the first serial column defined in the table, if any. + * + * @access private + * @return array (column,use_native,sequence_name) + */ + function sequenceKey() { return array('id', true); From 99bd8c670c3a1be5be944879ffed248c040c2770 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Mon, 7 Mar 2011 21:34:57 -0800 Subject: [PATCH 005/146] Fix a couple things --- plugins/ExtendedProfile/Profile_detail.php | 2 +- plugins/ExtendedProfile/extendedprofile.php | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/plugins/ExtendedProfile/Profile_detail.php b/plugins/ExtendedProfile/Profile_detail.php index 25eca4d09c..4b193e54ee 100644 --- a/plugins/ExtendedProfile/Profile_detail.php +++ b/plugins/ExtendedProfile/Profile_detail.php @@ -96,7 +96,7 @@ class Profile_detail extends Memcached_DataObject 'value' => DB_DATAOBJECT_STR, 'rel' => DB_DATAOBJECT_STR, - 'ref_profile' => DB_DATAOBJECT_ID, + 'ref_profile' => DB_DATAOBJECT_INT, 'created' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL, 'modified' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL); diff --git a/plugins/ExtendedProfile/extendedprofile.php b/plugins/ExtendedProfile/extendedprofile.php index 7f69f90899..3be753b23f 100644 --- a/plugins/ExtendedProfile/extendedprofile.php +++ b/plugins/ExtendedProfile/extendedprofile.php @@ -35,8 +35,10 @@ class ExtendedProfile $detail = new Profile_detail(); $detail->profile_id = $this->profile->id; $detail->find(); - - while ($detail->get()) { + + $fields = array(); + + while ($detail->fetch()) { $fields[$detail->field][] = clone($detail); } return $fields; From 794cb5609b94befce80f7ebaf68419e993821897 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Tue, 8 Mar 2011 19:20:43 -0800 Subject: [PATCH 006/146] Save basic profile data to the right place --- plugins/ExtendedProfile/extendedprofile.php | 57 +++++- .../ExtendedProfile/extendedprofilewidget.php | 165 ++++++++++++++++-- .../ExtendedProfile/profiledetailaction.php | 1 + .../profiledetailsettingsaction.php | 134 +++++++++++++- 4 files changed, 338 insertions(+), 19 deletions(-) diff --git a/plugins/ExtendedProfile/extendedprofile.php b/plugins/ExtendedProfile/extendedprofile.php index 3be753b23f..61a66b4b43 100644 --- a/plugins/ExtendedProfile/extendedprofile.php +++ b/plugins/ExtendedProfile/extendedprofile.php @@ -21,15 +21,29 @@ if (!defined('STATUSNET')) { exit(1); } +/** + * Class to represent extended profile data + */ class ExtendedProfile { + /** + * Constructor + * + * @param Profile $profile + */ function __construct(Profile $profile) { - $this->profile = $profile; + $this->profile = $profile; + $this->user = $profile->getUser(); $this->sections = $this->getSections(); - $this->fields = $this->loadFields(); + $this->fields = $this->loadFields(); } + /** + * Load extended profile fields + * + * @return array $fields the list of fields + */ function loadFields() { $detail = new Profile_detail(); @@ -41,9 +55,48 @@ class ExtendedProfile while ($detail->fetch()) { $fields[$detail->field][] = clone($detail); } + return $fields; } + /** + * Get a the self-tags associated with this profile + * + * @return string the concatenated string of tags + */ + function getTags() + { + return implode(' ', $this->user->getSelfTags()); + } + + /** + * Return a simple string value. Checks for fields that should + * be stored in the regular profile and returns values from it + * if appropriate. + * + * @param string $name name of the detail field to get the + * value from + * + * @return string the value + */ + function getTextValue($name) + { + $profileFields = array('fullname', 'location', 'bio'); + + if (in_array(strtolower($name), $profileFields)) { + return $this->profile->$name; + } else if (in_array($name, $this->fields)) { + return $this->fields[$name]->value; + } else { + return null; + } + } + + /** + * Return all the sections of the extended profile + * + * @return array the big list of sections and fields + */ function getSections() { return array( diff --git a/plugins/ExtendedProfile/extendedprofilewidget.php b/plugins/ExtendedProfile/extendedprofilewidget.php index bf9b4056cd..fbb3ff3c23 100644 --- a/plugins/ExtendedProfile/extendedprofilewidget.php +++ b/plugins/ExtendedProfile/extendedprofilewidget.php @@ -21,13 +21,35 @@ if (!defined('STATUSNET')) { exit(1); } -class ExtendedProfileWidget extends Widget +/** + * Class for outputting a widget to display or edit + * extended profiles + */ +class ExtendedProfileWidget extends Form { - const EDITABLE=true; + const EDITABLE = true; + /** + * The parent profile + * + * @var Profile + */ protected $profile; + + /** + * The extended profile + * + * @var Extended_profile + */ protected $ext; + /** + * Constructor + * + * @param XMLOutputter $out + * @param Profile $profile + * @param boolean $editable + */ public function __construct(XMLOutputter $out=null, Profile $profile=null, $editable=false) { parent::__construct($out); @@ -38,7 +60,30 @@ class ExtendedProfileWidget extends Widget $this->editable = $editable; } + /** + * Show the extended profile, or the edit form + */ public function show() + { + if ($this->editable) { + parent::show(); + } else { + $this->showSections(); + } + } + + /** + * Show form data + */ + public function formData() + { + $this->showSections(); + } + + /** + * Show each section of the extended profile + */ + public function showSections() { $sections = $this->ext->getSections(); foreach ($sections as $name => $section) { @@ -46,6 +91,12 @@ class ExtendedProfileWidget extends Widget } } + /** + * Show an extended profile section + * + * @param string $name name of the section + * @param array $section array of fields for the section + */ protected function showExtendedProfileSection($name, $section) { $this->out->element('h3', null, $section['label']); @@ -56,6 +107,12 @@ class ExtendedProfileWidget extends Widget $this->out->elementEnd('table'); } + /** + * Show an extended profile field + * + * @param string $name name of the field + * @param array $field set of key/value pairs for the field + */ protected function showExtendedProfileField($name, $field) { $this->out->elementStart('tr'); @@ -73,30 +130,110 @@ class ExtendedProfileWidget extends Widget $this->out->elementEnd('tr'); } + /** + * Outputs the value of a field + * + * @param string $name name of the field + * @param array $field set of key/value pairs for the field + */ protected function showFieldValue($name, $field) { - $this->out->text($name); + $type = strval(@$field['type']); + + switch($type) + { + case '': + case 'text': + case 'textarea': + $this->out->text($this->ext->getTextValue($name)); + break; + case 'tags': + $this->out->text($this->ext->getTags()); + break; + default: + $this->out->text("TYPE: $type"); + } + } + /** + * Show an editable version of the field + * + * @param string $name name fo the field + * @param array $field array of key/value pairs for the field + */ protected function showEditableField($name, $field) { $out = $this->out; - //$out = new HTMLOutputter(); - // @fixme + $type = strval(@$field['type']); $id = "extprofile-" . $name; + $value = 'placeholder'; switch ($type) { - case '': - case 'text': - $out->input($id, null, $value); - break; - case 'textarea': - $out->textarea($id, null, $value); - break; - default: - $out->input($id, null, "TYPE: $type"); + case '': + case 'text': + $out->input($id, null, $this->ext->getTextValue($name)); + break; + case 'textarea': + $out->textarea($id, null, $this->ext->getTextValue($name)); + break; + case 'tags': + $out->input($id, null, $this->ext->getTags()); + break; + default: + $out->input($id, null, "TYPE: $type"); } } + + /** + * Action elements + * + * @return void + */ + + function formActions() + { + $this->out->submit( + 'save', + _m('BUTTON','Save'), + 'submit form_action-secondary', + 'save', + _('Save details') + ); + } + + /** + * ID of the form + * + * @return string ID of the form + */ + + function id() + { + return 'profile-details-' . $this->profile->id; + } + + /** + * class of the form + * + * @return string of the form class + */ + + function formClass() + { + return 'form_profile_details'; + } + + /** + * Action of the form + * + * @return string URL of the action + */ + + function action() + { + return common_local_url('profiledetailsettings'); + } } diff --git a/plugins/ExtendedProfile/profiledetailaction.php b/plugins/ExtendedProfile/profiledetailaction.php index a4bb12956e..d2eb06775c 100644 --- a/plugins/ExtendedProfile/profiledetailaction.php +++ b/plugins/ExtendedProfile/profiledetailaction.php @@ -23,6 +23,7 @@ if (!defined('STATUSNET')) { class ProfileDetailAction extends ProfileAction { + function isReadOnly($args) { return true; diff --git a/plugins/ExtendedProfile/profiledetailsettingsaction.php b/plugins/ExtendedProfile/profiledetailsettingsaction.php index 77d755c0b0..d1153cc075 100644 --- a/plugins/ExtendedProfile/profiledetailsettingsaction.php +++ b/plugins/ExtendedProfile/profiledetailsettingsaction.php @@ -21,7 +21,7 @@ if (!defined('STATUSNET')) { exit(1); } -class ProfileDetailSettingsAction extends AccountSettingsAction +class ProfileDetailSettingsAction extends SettingsAction { function title() @@ -47,9 +47,26 @@ class ProfileDetailSettingsAction extends AccountSettingsAction return true; } - function handle($args) + function handlePost() { - $this->showPage(); + // CSRF protection + $token = $this->trimmed('token'); + if (!$token || $token != common_session_token()) { + $this->show_form( + _m( + 'There was a problem with your session token. ' + . 'Try again, please.' + ) + ); + return; + } + + if ($this->arg('save')) { + $this->saveDetails(); + } else { + // TRANS: Message given submitting a form with an unknown action + $this->showForm(_m('Unexpected form submission.')); + } } function showContent() @@ -60,4 +77,115 @@ class ProfileDetailSettingsAction extends AccountSettingsAction $widget = new ExtendedProfileWidget($this, $profile, ExtendedProfileWidget::EDITABLE); $widget->show(); } + + function saveDetails() + { + common_debug(var_export($_POST, true)); + + $user = common_current_user(); + + try { + $this->saveStandardProfileDetails($user); + } catch (Exception $e) { + $this->showForm($e->getMessage(), false); + return; + } + + $profile = $user->getProfile(); + + + $simple_fields = array('title', 'manager', 'tags', 'spouse'); + + $this->showForm(_('Details saved.'), true); + + } + + /** + * Save fields that should be stored in the main profile object + * + * XXX: There's a lot of dupe code here from ProfileSettingsAction. + * Do not want. + * + * @param User $user the current user + */ + function saveStandardProfileDetails($user) + { + $user->query('BEGIN'); + + $fullname = $this->trimmed('extprofile-fullname'); + $location = $this->trimmed('extprofile-location'); + $tagstring = $this->trimmed('extprofile-tags'); + $bio = $this->trimmed('extprofile-bio'); + + if ($tagstring) { + $tags = array_map( + 'common_canonical_tag', + preg_split('/[\s,]+/', $tagstring) + ); + } else { + $tags = array(); + } + + foreach ($tags as $tag) { + if (!common_valid_profile_tag($tag)) { + // TRANS: Validation error in form for profile settings. + // TRANS: %s is an invalid tag. + throw new Exception(sprintf(_m('Invalid tag: "%s".'), $tag)); + } + } + + $profile = $user->getProfile(); + + if ($fullname != $profile->fullname + || $location != $profile->location + || $tags != $profile->tags + || $bio != $profile->bio) { + + $orig = clone($profile); + + $profile->nickname = $user->nickname; + $profile->fullname = $fullname; + $profile->bio = $bio; + $profile->location = $location; + + $loc = Location::fromName($location); + + if (empty($loc)) { + $profile->lat = null; + $profile->lon = null; + $profile->location_id = null; + $profile->location_ns = null; + } else { + $profile->lat = $loc->lat; + $profile->lon = $loc->lon; + $profile->location_id = $loc->location_id; + $profile->location_ns = $loc->location_ns; + } + + $profile->profileurl = common_profile_url($user->nickname); + + $result = $profile->update($orig); + + if ($result === false) { + common_log_db_error($profile, 'UPDATE', __FILE__); + // TRANS: Server error thrown when user profile settings could not be saved. + $this->serverError(_('Could not save profile.')); + return; + } + + // Set the user tags + $result = $user->setSelfTags($tags); + + if (!$result) { + // TRANS: Server error thrown when user profile settings tags could not be saved. + $this->serverError(_('Could not save tags.')); + return; + } + + $user->query('COMMIT'); + Event::handle('EndProfileSaveForm', array($this)); + common_broadcast_profile($profile); + } + } + } From 65f9b5d954f35e9a89edaad9dfdb48f61bc9c2c5 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Wed, 9 Mar 2011 11:27:29 -0800 Subject: [PATCH 007/146] Attempt to save field (doesn't work right yet) --- .../profiledetailsettingsaction.php | 44 ++++++++++++++++++- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/plugins/ExtendedProfile/profiledetailsettingsaction.php b/plugins/ExtendedProfile/profiledetailsettingsaction.php index d1153cc075..ce0828c3e1 100644 --- a/plugins/ExtendedProfile/profiledetailsettingsaction.php +++ b/plugins/ExtendedProfile/profiledetailsettingsaction.php @@ -93,13 +93,50 @@ class ProfileDetailSettingsAction extends SettingsAction $profile = $user->getProfile(); + $simpleFieldNames = array('title'); - $simple_fields = array('title', 'manager', 'tags', 'spouse'); + foreach ($simpleFieldNames as $name) { + $value = $this->trimmed('extprofile-' . $name); + $this->saveSimpleField($user, $name, $value); + } $this->showForm(_('Details saved.'), true); } + function saveSimpleField($user, $name, $value) + { + $profile = $user->getProfile(); + + $detail = new Profile_detail(); + + $detail->profile_id = $profile->id; + $detail->field = $name; + $detail->field_index = 1; + + $result = $detail->find(true); + + + if (empty($result)) { + $detail->value = $value; + + $detail->created = common_sql_now(); + + common_debug("XXXXXXXXXXXXXXX not found"); + //common_debug('bbbbbbbbbbbb ' . var_export($detail, true)); + + $result = $detail->insert(); + } else { + common_debug('zzzzz FOUND'); + $orig = clone($detail); + $detail->value = $value; + $result = $detail->update($orig); + } + + $detail->free(); + + } + /** * Save fields that should be stored in the main profile object * @@ -136,9 +173,12 @@ class ProfileDetailSettingsAction extends SettingsAction $profile = $user->getProfile(); + $oldTags = $user->getSelfTags(); + $newTags = array_diff($tags, $oldTags); + if ($fullname != $profile->fullname || $location != $profile->location - || $tags != $profile->tags + || !empty($newTags) || $bio != $profile->bio) { $orig = clone($profile); From 0429a52c6e8bf135b03a86398c1aee95ddebea88 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Wed, 9 Mar 2011 18:00:24 -0800 Subject: [PATCH 008/146] Update to use new Managed_dataobject --- .../ExtendedProfile/ExtendedProfilePlugin.php | 2 - plugins/ExtendedProfile/Profile_detail.php | 193 ++++++------------ plugins/ExtendedProfile/extendedprofile.php | 4 +- .../profiledetailsettingsaction.php | 17 +- 4 files changed, 80 insertions(+), 136 deletions(-) diff --git a/plugins/ExtendedProfile/ExtendedProfilePlugin.php b/plugins/ExtendedProfile/ExtendedProfilePlugin.php index 3f541c0008..933b43cad7 100644 --- a/plugins/ExtendedProfile/ExtendedProfilePlugin.php +++ b/plugins/ExtendedProfile/ExtendedProfilePlugin.php @@ -95,8 +95,6 @@ class ExtendedProfilePlugin extends Plugin $schema = Schema::get(); $schema->ensureTable('profile_detail', Profile_detail::schemaDef()); - // @hack until key definition support is merged - Profile_detail::fixIndexes($schema); return true; } diff --git a/plugins/ExtendedProfile/Profile_detail.php b/plugins/ExtendedProfile/Profile_detail.php index 4b193e54ee..ebbeb86054 100644 --- a/plugins/ExtendedProfile/Profile_detail.php +++ b/plugins/ExtendedProfile/Profile_detail.php @@ -23,7 +23,7 @@ if (!defined('STATUSNET')) { /** * DataObject class to store extended profile fields. Allows for storing - * multiple values per a "field" (field property is not unique). + * multiple values per a "field_name" (field_name property is not unique). * * Example: * @@ -36,166 +36,105 @@ if (!defined('STATUSNET')) { * Profile_detail objects, each named 'phone_number' like this: * * $phone1 = new Profile_detail(); - * $phone1->field = 'phone_number'; + * $phone1->field_name = 'phone_number'; * $phone1->rel = 'home'; - * $phone1->field_index = 1; * $phone1->value = '510-384-1992'; + * $phone1->value_index = 1; * * $phone1 = new Profile_detail(); - * $phone1->field = 'phone_number'; + * $phone1->field_name = 'phone_number'; * $phone1->rel = 'mobile'; - * $phone1->field_index = 2; * $phone1->value = '510-719-1139'; + * $phone1->value_index = 2; * * $phone1 = new Profile_detail(); - * $phone1->field = 'phone_number'; + * $phone1->field_name = 'phone_number'; * $phone1->rel = 'work'; - * $phone1->field_index = 3; - * $phone1->value = '415-231-1121'; + * $phone1->field_value = '415-231-1121'; + * $phone1->value_index = 3; * */ -class Profile_detail extends Memcached_DataObject +class Profile_detail extends Managed_DataObject { public $__table = 'profile_detail'; public $id; - - public $profile_id; + public $profile_id; // profile this is for public $rel; // detail for some field types; eg "home", "mobile", "work" for phones or "aim", "irc", "xmpp" for IM - public $field; - + public $field_name; // name public $value; // primary text value - public $field_index; // relative ordering of multiple values in the same field - + public $value_index; // relative ordering of multiple values in the same field public $ref_profile; // for people types, allows pointing to a known profile in the system - public $created; public $modified; - public /*static*/ function staticGet($k, $v=null) + /** + * Get an instance by key + * + * This is a utility method to get a single instance with a given key value. + * + * @param string $k Key to use to lookup + * @param mixed $v Value to lookup + * + * @return User_greeting_count object found, or null for no hits + * + */ + + function staticGet($k, $v=null) { - return parent::staticGet(__CLASS__, $k, $v); + return Memcached_DataObject::staticGet('Profile_detail', $k, $v); } /** - * return table definition for DB_DataObject + * Get an instance by compound key * - * DB_DataObject needs to know something about the table to manipulate - * instances. This method provides all the DB_DataObject needs to know. + * This is a utility method to get a single instance with a given set of + * key-value pairs. Usually used for the primary key for a compound key; thus + * the name. + * + * @param array $kv array of key-value mappings + * + * @return Bookmark object found, or null for no hits * - * @return array array of column definitions */ - function table() + function pkeyGet($kv) { - return array('id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL, - - 'profile_id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL, - 'field' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL, - 'field_index' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL, - - 'value' => DB_DATAOBJECT_STR, - 'rel' => DB_DATAOBJECT_STR, - 'ref_profile' => DB_DATAOBJECT_INT, - - 'created' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL, - 'modified' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL); + return Memcached_DataObject::pkeyGet('Profile_detail', $kv); } - /** - * Database schema setup - * - * @see Schema - * @see ColumnDef - * - * @return boolean hook value; true means continue processing, false means stop. - */ - static function schemaDef() { - return array(new ColumnDef('id', 'integer', - null, false, 'PRI'), - - // @fixme need a unique index on these three - new ColumnDef('profile_id', 'integer', - null, false), - new ColumnDef('field', 'varchar', - 16, false), - new ColumnDef('field_index', 'integer', - null, false), - - new ColumnDef('value', 'text', - null, true), - new ColumnDef('rel', 'varchar', - 16, true), - new ColumnDef('ref_profile', 'integer', - null, true), - - new ColumnDef('created', 'datetime', - null, false), - new ColumnDef('modified', 'datetime', - null, false)); - } - - /** - * Temporary hack to set up the compound index, since we can't do - * it yet through regular Schema interface. (Coming for 1.0...) - * - * @param Schema $schema - * @return void - */ - static function fixIndexes($schema) - { - try { - // @fixme this won't be a unique index... SIGH - $schema->createIndex('profile_detail', array('profile_id', 'field', 'field_index')); - } catch (Exception $e) { - common_log(LOG_ERR, __METHOD__ . ': ' . $e->getMessage()); - } - } - - /** - * Return key definitions for DB_DataObject - * - * DB_DataObject needs to know about keys that the table has; this function - * defines them. - * - * @return array key definitions - */ - - function keys() - { - return array_keys($this->keyTypes()); - } - - /** - * Return key definitions for Memcached_DataObject - * - * Our caching system uses the same key definitions, but uses a different - * method to get them. - * - * @return array key definitions - */ - - function keyTypes() - { - // @fixme keys - // need a sane key for reverse lookup too - return array('id' => 'K'); - } - - /** - * Get the sequence key - * - * Returns the first serial column defined in the table, if any. - * - * @access private - * @return array (column,use_native,sequence_name) - */ - - function sequenceKey() - { - return array('id', true); + return array( + 'description' + => 'Additional profile details for the ExtendedProfile plugin', + 'fields' => array( + 'id' => array('type' => 'serial', 'not null' => true), + 'profile_id' => array('type' => 'int', 'not null' => true), + 'field_name' => array( + 'type' => 'varchar', + 'length' => 16, + 'not null' => true + ), + 'value_index' => array('type' => 'int'), + 'field_value' => array('type' => 'text'), + 'rel' => array('type' => 'varchar', 'length' => 16), + 'rel_profile' => array('type' => 'int'), + 'created' => array( + 'type' => 'datetime', + 'not null' => true + ), + 'modified' => array( + 'type' => 'timestamp', + 'not null' => true + ), + ), + 'primary key' => array('id'), + 'unique keys' => array( + 'profile_detial_profile_id_field_name_value_index' + => array('profile_id', 'field_name', 'value_index'), + ) + ); } } diff --git a/plugins/ExtendedProfile/extendedprofile.php b/plugins/ExtendedProfile/extendedprofile.php index 61a66b4b43..5731c808ae 100644 --- a/plugins/ExtendedProfile/extendedprofile.php +++ b/plugins/ExtendedProfile/extendedprofile.php @@ -53,7 +53,7 @@ class ExtendedProfile $fields = array(); while ($detail->fetch()) { - $fields[$detail->field][] = clone($detail); + $fields[$detail->field_name][] = clone($detail); } return $fields; @@ -86,7 +86,7 @@ class ExtendedProfile if (in_array(strtolower($name), $profileFields)) { return $this->profile->$name; } else if (in_array($name, $this->fields)) { - return $this->fields[$name]->value; + return $this->fields[$name]->field_value; } else { return null; } diff --git a/plugins/ExtendedProfile/profiledetailsettingsaction.php b/plugins/ExtendedProfile/profiledetailsettingsaction.php index ce0828c3e1..1f2be5a060 100644 --- a/plugins/ExtendedProfile/profiledetailsettingsaction.php +++ b/plugins/ExtendedProfile/profiledetailsettingsaction.php @@ -111,26 +111,33 @@ class ProfileDetailSettingsAction extends SettingsAction $detail = new Profile_detail(); $detail->profile_id = $profile->id; - $detail->field = $name; - $detail->field_index = 1; + $detail->field_name = $name; $result = $detail->find(true); if (empty($result)) { - $detail->value = $value; + + $detail->field_value = $value; $detail->created = common_sql_now(); common_debug("XXXXXXXXXXXXXXX not found"); - //common_debug('bbbbbbbbbbbb ' . var_export($detail, true)); $result = $detail->insert(); + + if (empty($result)) { + common_log_db_error($detail, 'INSERT', __FILE__); + $this->serverError(_m('Could not save profile details.')); + } + } else { + common_debug('zzzzz FOUND'); $orig = clone($detail); - $detail->value = $value; + $detail->field_value = $value; $result = $detail->update($orig); + } $detail->free(); From 3d61d003bc03dd18aa46dc9e96ecb9b0ed9034c7 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Wed, 9 Mar 2011 18:16:02 -0800 Subject: [PATCH 009/146] Fix property declaration --- plugins/ExtendedProfile/Profile_detail.php | 8 ++++---- plugins/ExtendedProfile/extendedprofile.php | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/plugins/ExtendedProfile/Profile_detail.php b/plugins/ExtendedProfile/Profile_detail.php index ebbeb86054..f9f4d00098 100644 --- a/plugins/ExtendedProfile/Profile_detail.php +++ b/plugins/ExtendedProfile/Profile_detail.php @@ -38,13 +38,13 @@ if (!defined('STATUSNET')) { * $phone1 = new Profile_detail(); * $phone1->field_name = 'phone_number'; * $phone1->rel = 'home'; - * $phone1->value = '510-384-1992'; + * $phone1->field_value = '510-384-1992'; * $phone1->value_index = 1; * * $phone1 = new Profile_detail(); * $phone1->field_name = 'phone_number'; * $phone1->rel = 'mobile'; - * $phone1->value = '510-719-1139'; + * $phone1->field_value = '510-719-1139'; * $phone1->value_index = 2; * * $phone1 = new Profile_detail(); @@ -62,7 +62,7 @@ class Profile_detail extends Managed_DataObject public $profile_id; // profile this is for public $rel; // detail for some field types; eg "home", "mobile", "work" for phones or "aim", "irc", "xmpp" for IM public $field_name; // name - public $value; // primary text value + public $field_value; // primary text value public $value_index; // relative ordering of multiple values in the same field public $ref_profile; // for people types, allows pointing to a known profile in the system public $created; @@ -131,7 +131,7 @@ class Profile_detail extends Managed_DataObject ), 'primary key' => array('id'), 'unique keys' => array( - 'profile_detial_profile_id_field_name_value_index' + 'profile_detail_profile_id_field_name_value_index' => array('profile_id', 'field_name', 'value_index'), ) ); diff --git a/plugins/ExtendedProfile/extendedprofile.php b/plugins/ExtendedProfile/extendedprofile.php index 5731c808ae..43f5b55b9c 100644 --- a/plugins/ExtendedProfile/extendedprofile.php +++ b/plugins/ExtendedProfile/extendedprofile.php @@ -37,6 +37,7 @@ class ExtendedProfile $this->user = $profile->getUser(); $this->sections = $this->getSections(); $this->fields = $this->loadFields(); + common_debug(var_export($this->fields, true)); } /** From adcda00e7668532b1261ba9808834ba45421c01a Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Wed, 9 Mar 2011 19:27:21 -0800 Subject: [PATCH 010/146] * Remove evil transaction * Fix text value retrieval method --- plugins/ExtendedProfile/extendedprofile.php | 9 ++++++--- .../ExtendedProfile/profiledetailsettingsaction.php | 11 ++++++----- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/plugins/ExtendedProfile/extendedprofile.php b/plugins/ExtendedProfile/extendedprofile.php index 43f5b55b9c..5ad6db114f 100644 --- a/plugins/ExtendedProfile/extendedprofile.php +++ b/plugins/ExtendedProfile/extendedprofile.php @@ -26,6 +26,8 @@ if (!defined('STATUSNET')) { */ class ExtendedProfile { + protected $fields; + /** * Constructor * @@ -82,12 +84,13 @@ class ExtendedProfile */ function getTextValue($name) { + $key = strtolower($name); $profileFields = array('fullname', 'location', 'bio'); - if (in_array(strtolower($name), $profileFields)) { + if (in_array($key, $profileFields)) { return $this->profile->$name; - } else if (in_array($name, $this->fields)) { - return $this->fields[$name]->field_value; + } else if (array_key_exists($key, $this->fields)) { + return $this->fields[$key][0]->field_value; } else { return null; } diff --git a/plugins/ExtendedProfile/profiledetailsettingsaction.php b/plugins/ExtendedProfile/profiledetailsettingsaction.php index 1f2be5a060..7c68216972 100644 --- a/plugins/ExtendedProfile/profiledetailsettingsaction.php +++ b/plugins/ExtendedProfile/profiledetailsettingsaction.php @@ -74,7 +74,11 @@ class ProfileDetailSettingsAction extends SettingsAction $cur = common_current_user(); $profile = $cur->getProfile(); - $widget = new ExtendedProfileWidget($this, $profile, ExtendedProfileWidget::EDITABLE); + $widget = new ExtendedProfileWidget( + $this, + $profile, + ExtendedProfileWidget::EDITABLE + ); $widget->show(); } @@ -154,8 +158,6 @@ class ProfileDetailSettingsAction extends SettingsAction */ function saveStandardProfileDetails($user) { - $user->query('BEGIN'); - $fullname = $this->trimmed('extprofile-fullname'); $location = $this->trimmed('extprofile-location'); $tagstring = $this->trimmed('extprofile-tags'); @@ -187,7 +189,7 @@ class ProfileDetailSettingsAction extends SettingsAction || $location != $profile->location || !empty($newTags) || $bio != $profile->bio) { - + $orig = clone($profile); $profile->nickname = $user->nickname; @@ -229,7 +231,6 @@ class ProfileDetailSettingsAction extends SettingsAction return; } - $user->query('COMMIT'); Event::handle('EndProfileSaveForm', array($this)); common_broadcast_profile($profile); } From 5203fa7151c099e0ba5a9ef80565ed681a3a200a Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Wed, 9 Mar 2011 19:31:37 -0800 Subject: [PATCH 011/146] Make all simple fields save --- plugins/ExtendedProfile/profiledetailsettingsaction.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/ExtendedProfile/profiledetailsettingsaction.php b/plugins/ExtendedProfile/profiledetailsettingsaction.php index 7c68216972..0f84dc0582 100644 --- a/plugins/ExtendedProfile/profiledetailsettingsaction.php +++ b/plugins/ExtendedProfile/profiledetailsettingsaction.php @@ -97,7 +97,7 @@ class ProfileDetailSettingsAction extends SettingsAction $profile = $user->getProfile(); - $simpleFieldNames = array('title'); + $simpleFieldNames = array('title', 'spouse', 'kids'); foreach ($simpleFieldNames as $name) { $value = $this->trimmed('extprofile-' . $name); From 39b308bf90e3da67cbe0e46f4db3b025704c0882 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Thu, 10 Mar 2011 10:14:09 -0600 Subject: [PATCH 012/146] reformatting on RSVP.php --- plugins/Event/RSVP.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/plugins/Event/RSVP.php b/plugins/Event/RSVP.php index c61ff3dbf0..dc7166b9ce 100644 --- a/plugins/Event/RSVP.php +++ b/plugins/Event/RSVP.php @@ -177,7 +177,8 @@ class RSVP extends Managed_DataObject $content = sprintf(_('RSVPed %s for an event.'), ($result == RSVP::POSITIVE) ? _('positively') : - ($result == RSVP::NEGATIVE) ? _('negatively') : _('possibly')); + ($result == RSVP::NEGATIVE) ? _('negatively') : + _('possibly')); $rendered = $content; @@ -231,7 +232,9 @@ class RSVP extends Managed_DataObject static function forEvent($event) { - $rsvps = array(RSVP::POSITIVE => array(), RSVP::NEGATIVE => array(), RSVP::POSSIBLE => array()); + $rsvps = array(RSVP::POSITIVE => array(), + RSVP::NEGATIVE => array(), + RSVP::POSSIBLE => array()); $rsvp = new RSVP(); From 347dd08272bf7b1e97c50cb2a5a92af3294ad4e4 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Thu, 10 Mar 2011 10:18:35 -0600 Subject: [PATCH 013/146] add jquery-ui js and css --- .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 180 bytes .../images/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 178 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 120 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 111 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 110 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 119 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 101 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_454545_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_888888_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4369 bytes js/css/smoothness/jquery-ui-1.8.10.custom.css | 573 + js/jquery-ui-1.8.10.custom.min.js | 782 ++ js/ui/i18n/jquery-ui-i18n.js | 1357 ++ js/ui/i18n/jquery.ui.datepicker-af.js | 23 + js/ui/i18n/jquery.ui.datepicker-ar-DZ.js | 23 + js/ui/i18n/jquery.ui.datepicker-ar.js | 23 + js/ui/i18n/jquery.ui.datepicker-az.js | 23 + js/ui/i18n/jquery.ui.datepicker-bg.js | 24 + js/ui/i18n/jquery.ui.datepicker-bs.js | 23 + js/ui/i18n/jquery.ui.datepicker-ca.js | 23 + js/ui/i18n/jquery.ui.datepicker-cs.js | 23 + js/ui/i18n/jquery.ui.datepicker-da.js | 23 + js/ui/i18n/jquery.ui.datepicker-de.js | 23 + js/ui/i18n/jquery.ui.datepicker-el.js | 23 + js/ui/i18n/jquery.ui.datepicker-en-AU.js | 23 + js/ui/i18n/jquery.ui.datepicker-en-GB.js | 23 + js/ui/i18n/jquery.ui.datepicker-en-NZ.js | 23 + js/ui/i18n/jquery.ui.datepicker-eo.js | 23 + js/ui/i18n/jquery.ui.datepicker-es.js | 23 + js/ui/i18n/jquery.ui.datepicker-et.js | 23 + js/ui/i18n/jquery.ui.datepicker-eu.js | 23 + js/ui/i18n/jquery.ui.datepicker-fa.js | 23 + js/ui/i18n/jquery.ui.datepicker-fi.js | 23 + js/ui/i18n/jquery.ui.datepicker-fo.js | 23 + js/ui/i18n/jquery.ui.datepicker-fr-CH.js | 23 + js/ui/i18n/jquery.ui.datepicker-fr.js | 25 + js/ui/i18n/jquery.ui.datepicker-gl.js | 23 + js/ui/i18n/jquery.ui.datepicker-he.js | 23 + js/ui/i18n/jquery.ui.datepicker-hr.js | 23 + js/ui/i18n/jquery.ui.datepicker-hu.js | 23 + js/ui/i18n/jquery.ui.datepicker-hy.js | 23 + js/ui/i18n/jquery.ui.datepicker-id.js | 23 + js/ui/i18n/jquery.ui.datepicker-is.js | 23 + js/ui/i18n/jquery.ui.datepicker-it.js | 23 + js/ui/i18n/jquery.ui.datepicker-ja.js | 23 + js/ui/i18n/jquery.ui.datepicker-ko.js | 23 + js/ui/i18n/jquery.ui.datepicker-kz.js | 23 + js/ui/i18n/jquery.ui.datepicker-lt.js | 23 + js/ui/i18n/jquery.ui.datepicker-lv.js | 23 + js/ui/i18n/jquery.ui.datepicker-ml.js | 23 + js/ui/i18n/jquery.ui.datepicker-ms.js | 23 + js/ui/i18n/jquery.ui.datepicker-nl.js | 23 + js/ui/i18n/jquery.ui.datepicker-no.js | 23 + js/ui/i18n/jquery.ui.datepicker-pl.js | 23 + js/ui/i18n/jquery.ui.datepicker-pt-BR.js | 23 + js/ui/i18n/jquery.ui.datepicker-pt.js | 22 + js/ui/i18n/jquery.ui.datepicker-rm.js | 21 + js/ui/i18n/jquery.ui.datepicker-ro.js | 26 + js/ui/i18n/jquery.ui.datepicker-ru.js | 23 + js/ui/i18n/jquery.ui.datepicker-sk.js | 23 + js/ui/i18n/jquery.ui.datepicker-sl.js | 24 + js/ui/i18n/jquery.ui.datepicker-sq.js | 23 + js/ui/i18n/jquery.ui.datepicker-sr-SR.js | 23 + js/ui/i18n/jquery.ui.datepicker-sr.js | 23 + js/ui/i18n/jquery.ui.datepicker-sv.js | 23 + js/ui/i18n/jquery.ui.datepicker-ta.js | 23 + js/ui/i18n/jquery.ui.datepicker-th.js | 23 + js/ui/i18n/jquery.ui.datepicker-tr.js | 23 + js/ui/i18n/jquery.ui.datepicker-uk.js | 23 + js/ui/i18n/jquery.ui.datepicker-vi.js | 23 + js/ui/i18n/jquery.ui.datepicker-zh-CN.js | 23 + js/ui/i18n/jquery.ui.datepicker-zh-HK.js | 23 + js/ui/i18n/jquery.ui.datepicker-zh-TW.js | 23 + js/ui/jquery-ui-1.8.10.custom.js | 11544 ++++++++++++++++ js/ui/jquery.effects.blind.js | 49 + js/ui/jquery.effects.bounce.js | 78 + js/ui/jquery.effects.clip.js | 54 + js/ui/jquery.effects.core.js | 747 + js/ui/jquery.effects.drop.js | 50 + js/ui/jquery.effects.explode.js | 79 + js/ui/jquery.effects.fade.js | 32 + js/ui/jquery.effects.fold.js | 56 + js/ui/jquery.effects.highlight.js | 50 + js/ui/jquery.effects.pulsate.js | 51 + js/ui/jquery.effects.scale.js | 178 + js/ui/jquery.effects.shake.js | 57 + js/ui/jquery.effects.slide.js | 50 + js/ui/jquery.effects.transfer.js | 45 + js/ui/jquery.ui.accordion.js | 606 + js/ui/jquery.ui.autocomplete.js | 607 + js/ui/jquery.ui.button.js | 378 + js/ui/jquery.ui.core.js | 308 + js/ui/jquery.ui.datepicker.js | 1766 +++ js/ui/jquery.ui.dialog.js | 857 ++ js/ui/jquery.ui.draggable.js | 797 ++ js/ui/jquery.ui.droppable.js | 285 + js/ui/jquery.ui.mouse.js | 151 + js/ui/jquery.ui.position.js | 252 + js/ui/jquery.ui.progressbar.js | 108 + js/ui/jquery.ui.resizable.js | 812 ++ js/ui/jquery.ui.selectable.js | 266 + js/ui/jquery.ui.slider.js | 682 + js/ui/jquery.ui.sortable.js | 1073 ++ js/ui/jquery.ui.tabs.js | 758 + js/ui/jquery.ui.widget.js | 262 + 108 files changed, 27184 insertions(+) create mode 100644 js/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100644 js/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png create mode 100644 js/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png create mode 100644 js/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 js/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png create mode 100644 js/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100644 js/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100644 js/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100644 js/css/smoothness/images/ui-icons_222222_256x240.png create mode 100644 js/css/smoothness/images/ui-icons_2e83ff_256x240.png create mode 100644 js/css/smoothness/images/ui-icons_454545_256x240.png create mode 100644 js/css/smoothness/images/ui-icons_888888_256x240.png create mode 100644 js/css/smoothness/images/ui-icons_cd0a0a_256x240.png create mode 100644 js/css/smoothness/jquery-ui-1.8.10.custom.css create mode 100644 js/jquery-ui-1.8.10.custom.min.js create mode 100644 js/ui/i18n/jquery-ui-i18n.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-af.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-ar-DZ.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-ar.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-az.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-bg.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-bs.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-ca.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-cs.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-da.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-de.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-el.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-en-AU.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-en-GB.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-en-NZ.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-eo.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-es.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-et.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-eu.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-fa.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-fi.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-fo.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-fr-CH.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-fr.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-gl.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-he.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-hr.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-hu.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-hy.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-id.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-is.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-it.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-ja.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-ko.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-kz.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-lt.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-lv.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-ml.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-ms.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-nl.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-no.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-pl.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-pt-BR.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-pt.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-rm.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-ro.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-ru.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-sk.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-sl.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-sq.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-sr-SR.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-sr.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-sv.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-ta.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-th.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-tr.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-uk.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-vi.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-zh-CN.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-zh-HK.js create mode 100644 js/ui/i18n/jquery.ui.datepicker-zh-TW.js create mode 100644 js/ui/jquery-ui-1.8.10.custom.js create mode 100644 js/ui/jquery.effects.blind.js create mode 100644 js/ui/jquery.effects.bounce.js create mode 100644 js/ui/jquery.effects.clip.js create mode 100644 js/ui/jquery.effects.core.js create mode 100644 js/ui/jquery.effects.drop.js create mode 100644 js/ui/jquery.effects.explode.js create mode 100644 js/ui/jquery.effects.fade.js create mode 100644 js/ui/jquery.effects.fold.js create mode 100644 js/ui/jquery.effects.highlight.js create mode 100644 js/ui/jquery.effects.pulsate.js create mode 100644 js/ui/jquery.effects.scale.js create mode 100644 js/ui/jquery.effects.shake.js create mode 100644 js/ui/jquery.effects.slide.js create mode 100644 js/ui/jquery.effects.transfer.js create mode 100644 js/ui/jquery.ui.accordion.js create mode 100644 js/ui/jquery.ui.autocomplete.js create mode 100644 js/ui/jquery.ui.button.js create mode 100644 js/ui/jquery.ui.core.js create mode 100644 js/ui/jquery.ui.datepicker.js create mode 100644 js/ui/jquery.ui.dialog.js create mode 100644 js/ui/jquery.ui.draggable.js create mode 100644 js/ui/jquery.ui.droppable.js create mode 100644 js/ui/jquery.ui.mouse.js create mode 100644 js/ui/jquery.ui.position.js create mode 100644 js/ui/jquery.ui.progressbar.js create mode 100644 js/ui/jquery.ui.resizable.js create mode 100644 js/ui/jquery.ui.selectable.js create mode 100644 js/ui/jquery.ui.slider.js create mode 100644 js/ui/jquery.ui.sortable.js create mode 100644 js/ui/jquery.ui.tabs.js create mode 100644 js/ui/jquery.ui.widget.js diff --git a/js/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png b/js/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..5b5dab2ab7b1c50dea9cfe73dc5a269a92d2d4b4 GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*FscKIb$B>N1x91EQ4=4yQ7#`R^ z$vje}bP0l+XkK DSH>_4 literal 0 HcmV?d00001 diff --git a/js/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png b/js/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..ac8b229af950c29356abf64a6c4aa894575445f0 GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*FsY*{5$B>N1x91EQ4=4yQYz+E8 zPo9&<{J;c_6SHRil>2s{Zw^OT)6@jj2u|u!(plXsM>LJD`vD!n;OXk;vd$@?2>^GI BH@yG= literal 0 HcmV?d00001 diff --git a/js/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png b/js/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..ad3d6346e00f246102f72f2e026ed0491988b394 GIT binary patch literal 120 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnour0hLi978O6-<~(*I$*%ybaDOn z{W;e!B}_MSUQoPXhYd^Y6RUoS1yepnPx`2Kz)7OXQG!!=-jY=F+d2OOy?#DnJ32>z UEim$g7SJdLPgg&ebxsLQ09~*s;{X5v literal 0 HcmV?d00001 diff --git a/js/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png b/js/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..42ccba269b6e91bef12ad0fa18be651b5ef0ee68 GIT binary patch literal 105 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnouqzpV=978O6-=0?FV^9z|eBtf= z|7WztIJ;WT>{+tN>ySr~=F{k$>;_x^_y?afmf9pRKH0)6?eSP?3s5hEr>mdKI;Vst E0O;M1& literal 0 HcmV?d00001 diff --git a/js/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png b/js/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..5a46b47cb16631068aee9e0bd61269fc4e95e5cd GIT binary patch literal 111 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnouq|7{B978O6lPf+wIa#m9#>Unb zm^4K~wN3Zq+uP{vDV26o)#~38k_!`W=^oo1w6ixmPC4R1b Tyd6G3lNdZ*{an^LB{Ts5`idse literal 0 HcmV?d00001 diff --git a/js/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/js/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png new file mode 100644 index 0000000000000000000000000000000000000000..7c9fa6c6edcfcdd3e5b77e6f547b719e6fc66e30 GIT binary patch literal 101 zcmeAS@N?(olHy`uVBq!ia0vp^j6j^i!3HGVb)pi0l#Zv1V~E7mPmYTG^FX}c% zlGE{DS1Q;~I7-6ze&TN@+F-xsI6sd%SwK#*O5K|pDRZqEy< zJg0Nd8F@!OxqElm`~U#piM22@u@8B<moyKE%ct`B(jysxK+1m?G)UyIFs1t0}L zemGR&?jGaM1YQblj?v&@0iXS#fi-VbR9zLEnHLP?xQ|=%Ihrc7^yPWR!tW$yH!zrw z#I2}_!JnT^(qk)VgJr`NGdPtT^dmQIZc%=6nTAyJDXk+^3}wUOilJuwq>s=T_!9V) zr1)DT6VQ2~rgd@!Jlrte3}}m~j}juCS`J4(d-5+e-3@EzzTJNCE2z)w(kJ90z*QE) zBtnV@4mM>jTrZZ*$01SnGov0&=A-JrX5Ge%Pce1Vj}=5YQqBD^W@n4KmFxxpFK`uH zP;(xKV+6VJ2|g+?_Lct7`uElL<&jzGS8Gfva2+=8A@#V+xsAj9|Dkg)vL5yhX@~B= zN2KZSAUD%QH`x>H+@Ou(D1~Pyv#0nc&$!1kI?IO01yw3jD0@80qvc?T*Nr8?-%rC8 z@5$|WY?Hqp`ixmEkzeJTz_`_wsSRi1%Zivd`#+T{Aib6-rf$}M8sz6v zb6ERbr-SniO2wbOv!M4)nb}6UVzoVZEh5kQWh_5x4rYy3c!871NeaM(_p=4(kbS6U#x<*k8Wg^KHs2ttCz<+pBxQ$Z zQMv;kVm5_fF_vH`Mzrq$Y&6u?j6~ftIV0Yg)Nw7JysIN_ z-_n*K_v1c&D}-1{NbBwS2h#m1y0a5RiEcYil+58$8IDh49bPnzE7R8In6P%V{2IZU z7#clr=V4yyrRe@oXNqbqo^^LvlLE?%8XaI&N(Np90-psU}7kqmbWk zZ;YBwJNnNs$~d!mx9oMGyT( znaBoj0d}gpQ^aRr?6nW)$4god*`@Uh2e+YpS@0(Mw{|z|6ko3NbTvDiCu3YO+)egL z>uW(^ahKFj>iJ-JF!^KhKQyPTznJa;xyHYwxJgr16&Wid_9)-%*mEwo{B_|M9t@S1 zf@T@q?b2Qgl!~_(Roe;fdK)y|XG0;ls;ZbT)w-aOVttk#daQcY7$cpY496H*`m@+L zeP#$&yRbBjFWv}B)|5-1v=(66M_;V1SWv6MHnO}}1=vby&9l+gaP?|pXwp0AFDe#L z&MRJ^*qX6wgxhA_`*o=LGZ>G_NTX%AKHPz4bO^R72ZYK}ale3lffDgM8H!Wrw{B7A z{?c_|dh2J*y8b04c37OmqUw;#;G<* z@nz@dV`;7&^$)e!B}cd5tl0{g(Q>5_7H^@bEJi7;fQ4B$NGZerH#Ae1#8WDTH`iB&) zC6Et3BYY#mcJxh&)b2C^{aLq~psFN)Q1SucCaBaBUr%5PYX{~-q{KGEh)*;n;?75k z=hq%i^I}rd;z-#YyI`8-OfMpWz5kgJE3I!3ean6=UZi!BxG7i(YBk? z02HM7wS0)Wni{dWbQMRtd-A)_Az!t>F;IwWf~!*)-Az4}yryNkz&9)w>ElA80Oc`6 zHo#9H!Y3*Qx9n@Jn)!w6G^hb;e_n8zpIyXCN`JFkPc)^Q?2MsLNFhMgrcZI-<#1ne zjH;KFf?4eAT9mQZ}ZfHLGA#d%s;SZK4p0FwZT2S^{ zQ2BG1xJsbK6?yrHTjJi|5C0u=!|r!?*4FL%y%3q#(d+e>b_2I9!*iI!30}42Ia0bq zUf`Z?LGSEvtz8s``Tg5o_CP(FbR0X$FlE0yCnB7suDPmI2=yOg^*2#cY9o`X z;NY-3VBHZjnVcGS){GZ98{e+lq~O$u6pEcgd0CrnIsWffN1MbCZDH<7c^hv+Z0Ucf0{w zSzi^qKuUHD9Dgp0EAGg@@$zr32dQx>N=ws`MESEsmzgT2&L;?MSTo&ky&!-JR3g~1 zPGTt515X)wr+Bx(G9lWd;@Y3^Vl}50Wb&6-Tiy;HPS0drF`rC}qYq22K4)G#AoD0X zYw$E+Bz@Zr^50MAwu@$?%f9$r4WHH?*2|67&FXFhXBrVFGmg)6?h3^-1?t;UzH0*I zNVf9wQLNLnG2@q>6CGm>&y|lC`iCFfYd}9i%+xkl^5oBJ?<;aneCfcHqJh7Yl5uLS z9Fx-(kMdcNyZejXh22N{mCw_rX1O!cOE&3>e(ZH81PR95wQC37En4O{w;{3q9n1t&;p)D%&Z%Nw$gSPa!nz8Slh7=ko2am)XARwOWw zpsz0~K!s{(dM$NB=(A=kkp>T(*yU6<_dwIx>cH4+LWl282hXa6-EUq>R3t?G2623< z*RwTN%-fgBmD{fu*ejNn)1@KG?Sg*8z3hYtkQJQjB6 zQ|x>wA=o$=O)+nLmgTXW3_6diA;b4EY{*i*R%6dO2EMg z@6g?M3rpbnfB@hOdUeb96=~I?OIA3@BWAGmTwiQ{x5Cqq<8c10L!P zd@Qk^BseTX%$Q7^s}5n%HB|)gKx}H$d8Sb$bBnq9-AglT2dGR2(+I;_fL|R4p$odJ zllfb0NqI)7=^z~qAm1V{(PkpxXsQ#4*NH9yYZ`Vf@)?#ueGgtCmGGY|9U#v|hRdg- zQ%0#cGIfXCd{Y)JB~qykO;KPvHu|5Ck&(Hn%DF~cct@}j+87xhs2ew;fLm5#2+mb| z8{9e*YI(u|gt|{x1G+U=DA3y)9s2w7@cvQ($ZJIA)x$e~5_3LKFV~ASci8W}jF&VeJoPDUy(BB>ExJpck;%;!`0AAo zAcHgcnT8%OX&UW_n|%{2B|<6Wp2MMGvd5`T2KKv;ltt_~H+w00x6+SlAD`{K4!9zx z*1?EpQ%Lwiik){3n{-+YNrT;fH_niD_Ng9|58@m8RsKFVF!6pk@qxa{BH-&8tsim0 zdAQ(GyC^9ane7_KW*#^vMIoeQdpJqmPp%%px3GIftbwESu#+vPyI*YTuJ6+4`z{s? zpkv~0x4c_PFH`-tqafw5)>4AuQ78SkZ!$8}INLK;Egr;2tS18hEO5=t;QDmZ-qu?I zG+=DN`nR72Xto{{bJp||`k}-2G;5#xg8E~xgz22)^_Z;=K|4@(E&5J)SY2of=olcw z5)@L)_Ntcm!*5nEy0M9v0`S33;pO4TN;>4(Z+19p_0>u#e-vE zXCU(6gAvu~I7Cw(xd%0e59MNLw^U37ZDbsBrj%eDCexw8a3G`nTcXVNL6{B7Hj@i& zbVB{;ApEtHk76q08DJ48dSxd$C(;$K6=FpU<~l9pVoT9arW^Vu{%Bcn4`eIpkOVC| z$)AKYG_`ypM{0@BUb3^9lqi_c?ONH|4UJMJWDowMVjacycX7}9g={O7swOB+{;+?; zjBo!9?+nd)ie#x5IbFW-zBOo0c4q@9wGVt5;pNt`=-~Zgcw#*`m($6ibxtZ`H=e=} zF#GZ~5$%AUn};8U#tRem0J(JTR}d4vR(dgK2ML~lZsPhayJ2h1%sD4FVst| zKF)+@`iNzLRjg4=K8@**0=5cE>%?FDc({I^+g9USk<8$&^qD~@%W0i4b|yMG*p4`N zh}I!ltTRI8Ex$+@V{02Br%xq#O?UlhO{r8WsaZnZCZq0MK9%AXU%MDLT;3=0A9(BV z9VxxxJd7jo$hw3q;3o?yBLmA=azBUrd9>-<_ANs0n3?-Ic*6&ytb@H~?0E(*d>T5n z-HiH2jsDf6uWhID%#n>SzOqrFCPDfUcu5QPd?<(=w6pv1BE#nsxS{n!UnC9qAha1< z;3cpZ9A-e$+Y)%b;w@!!YRA9p%Kf9IHGGg^{+p`mh;q8i7}&e@V3EQaMsItEMS&=X plT@$;k0WcB_jb;cn%_Idz4HO$QU*abf4}+wi?e96N>fbq{{i|W0@(ln literal 0 HcmV?d00001 diff --git a/js/css/smoothness/images/ui-icons_2e83ff_256x240.png b/js/css/smoothness/images/ui-icons_2e83ff_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..09d1cdc856c292c4ab6dd818c7543ac0828bd616 GIT binary patch literal 4369 zcmd^?`8O2)_s3@pGmLE*`#M>&Z`mr_kcu#tBo!IbqU=l7VaSrbQrTh%5m}S08Obh0 zGL{*mi8RK}U~J#s@6Y%1S9~7lb?$xLU+y{go_o*h`AW1wUF3v{Kmh;%r@5J_9RL9Q zdj+hqg8o{9`K7(TZrR4t{=9O`!T-(~c=yEWZ{eswJJe->5bP8)t4;f(Y*i_HU*sLM z2=7-8guZ}@*(HhVC)Mqgr$3T8?#a(hu& z?Kzuw!O%PM>AicSW`_U(cbvJYv3{HfpIP~Q>@$^c588E$vv)V2c|Mr% zuFO$+I~Hg@u}wPm17n%}j1Y+Pbu!bt?iPkjGAo7>9eRN0FZz3X2_QZj+V!}+*8oBQ z_=iI^_TCA;Ea2tPmRNOeX3+VM>KL;o1(h`c@`6Ah`vdH<&+$yTg)jGWW72T}6J`kUAv?2CgyV zrs0y@Fpvpj@kWVE0TzL@Cy#qHn~kgensb{hIm6J&I8hkoNHOz6o1QQ3QM4NZyu?;= zLd>`wPT*uGr+6vAxYv3k8{gMDR>tO}UavDKzzyi6hvbuP=XQ4Y|A)r4#B$U(q7{1Z z0iLeSjo3;T*diS*me%4|!s23l@>R}rn@#Zc{<%CFt;?gd5S<)b=8Yz32U zBBLprntW3RE3f|uNX5Aw|I(IlJjW-Byd?QFFRk%hLU}O*YyYQel}WcXilLMJp9cB4 z)E?D+*Y4zai&XY!>niMfTW-2pp-^KFT93%Leig@uoQGPYRCva-`w#orm`is`p8b4s zxD462;f*^XO$=3by=VzN9i@xxr<1w=pcxl!$!fjWt|fYmq1@@badT?v`d zIi$|e$Ji}FXsiVYf)?pN1R0LBw;+)B5aUJj2fP+=m;=_Eho84g%Jq#@MLPSQEX*@T z6sZb)m?)zby>{j1)(;rRML|gKSs+9jorf-XhQJ2Jyt5Cqc*`S3iX@A5C3jvgAns|4 z*|)YQ%Kmsj+YZ53;nMqh|AFvehUV-9R;1ZZ;w5r9l}8hjSw@#k;>)$P*r%)=Extyu zB!$Kd-F?*50aJ2;TNTR-fc8B{KAq3!vW{g$LlGPfGW+%#CXU zJDcMsvyT2`x~v>>w8@yssoA`KuIZ98CLU{Ia%*nW3G4t}@ApsbC@o^WCqL>OXx>Y^ zSuVWEQ;3=A=@RxCnt0>G@#(VWBQ`0$qTwA#e>SX{_N~JWGsBxFHCw|5|?CzDi>92F-^=b*8sMXnhUJdb!>yGD2nhN@{582 zRPcxuDzs&;8De)>_J19z{0xppXQop#T_5ejGCKv@l>$O#DA-@X{y_1B-AsiU)H}DR z3xDZ8G`amV_WmA&8!W=@jgm|%bnwH%qkg(@J$hLaSV zC-rXIFMM%y<|Gb)o?j zpe-`dJ*N5tC-iH)d0CgLdBsw*C!ST9hY1EkI|Y(&=p&dH&q;a&7HXa5#_wtMsenQL zcpyhwx)Ppw@XmVz?P)DI#^ee1oC!i`>>Jq1ESk-OuQ(Pbv=s{A0AjM@rw#FaU;RUh z*At0{U*NtGVY_-JcuG$?zuuf%ZBTWxKU2yf?iN#-MRWs>A*2;p0G1Tp3d29u5RbnY zDOON-G|PidOOGeybnbzu7UVv71l!b=w7eU5l*{EdKuoKu`#LZ}|fnUr-+lSST9(MTT`0tqOG z#+Q_=lXe-=;rE4u8s~;%i~~ z8v&&+VPeXG=2zw9B5sR$e?R(n%nf?p-(BCZ8}x!_-9T+LT;2=Zu?Wv)j3#>35$6dR z4*7xmI)#06qjh#sXvX(%`#D1mD8fn1G~I;l%Dk{pw)}>_{+3^Fv_q)>2#de5qGCId zPz?ix-3954nM&u@vaw{o%-#HU%_bLJMO#@enR^&B{3ihWdoU6%pBJ`o>im+b-c6r-;c{vd0Z_)`75$jApy2?!9G4_FGa)iZ~9`6VELiYM+n!-mUfvfm{jt zC?!1=%pxJhF>vyQ47Q}R;O48pxgMs)rz$SbM&jkp<6X$r4DHWg>ZnGB-$r2o1*nL# zW0^*itcRY_^Uv^XgQP>W#>KQgM~l{;S(GkVW@&vld^AhWzG^m|9#0#USbM>^en{k2 za8~DTL`(Q~=ofsL&Fc`!L6r~qTnnGo8r98<(aG*<0%aNEr!!BIyY>VV82kxhR%d>V(lN&#BId#urK_i~Pe6?>C~J!pU_lRon#&S_cXoQv;poG8FK4atc

N)npz1~X%p6x{M(Gw!!H=!}lmO0Xr*8ewyH(Q+>oy`fxQkxJ zzzB$)%*xM4s_2(O>)T-QXhwP|&DZam#{O+47q|WKfz_ZL-MypRN~o{fE*I#6@eM?I zs%f-6{Lz6j7rB#U$%O$~TIT!j?|Ip1CpSmb=JA9qCY3-mQf|fVCxswPjok|VofUEP zW5^pTd5B;wRkyW%1a;nYHB$ef6Pv8^);`m0jv6p72iNJl+sVBqZugsq6cq_pyNREi z>GN!h6ZQ6`aOMr_2KI@j=XR@$aJj(2jcpY?>f=2kMV@di5W7Swj?ug10zRe}F1nR* ztMm6+T^)LJe^SzGgSxahQajq0h7#|8oMV0>D~*N}jl?9_X`ka42R4@rryDc3o(c$R?1*!1O9zleSOczw zYPS3~xbJ$~C(3+D7Zkrfjs_lneY^zv^kHmxt)aqZ!aeGABHZ`gvA&K`72z}ihI$Ht z9V&)wQy0g@R9irwbf!{uE&_J2l9jXz^Vj#=qA77*3Pd9OjrE_tKDHADd!AjFQv(ji zct-BMUt9()1Ox!dsI_h1(^F_U)_QJrx|%+y`zWWlD4=Nd?JQ=URh0*{fb1!o4tS(H z^r_T(8t1SAHf1oduG+X^*EC_kL(!QnXL6Hp);449yO&1xE>MXGqT)t10lzvALllX;;Q)RiJX$dm zlR8ep5-GdHmRm9?N#QCjNUA);vC03Gw6yds6^?c4;(MH>;O5xmQ2nGK3Dmk8i*v5t z-{jJsQq30%z}0`g7SN-yN`l-`@6rkJ|V|>18`MV zwUeH}DxWw&h+A+Dn|4|YNr&EfKS`Hz_NkeW3*sI5Rq-J&FzG=!{-K`n65#7O%^&f> z`PkqxyC_K)>781~7H${^Nj{`>XEa&OPqqQhySR5%w2{5+sEakXXHazJp6~LP2QKDx zpkvZrkDOa+A4BbqqX6ls&O)5-Q7`qkZ_?6~c-wQ9tseNtET;nhEOL^`*naKwcMX;R zbto&a;oTR0s;vjfj3wigUg)Sj)!OHQfZoJwAsWYI1A4ntz>X=W4s|y?tUk1r=>#Ct zf+?hq^>rQ3$KNboG$UhCdEmp{qAR13DK$f0ES7kAG~7q+g!jfVq`1b5+c62N^0%~o zKw91o@Wv;0EW*7fINAX3O~L-V{`;xB0q()#^HKZOlLrXVL*Dtw-$SUp8*_J{r( zW`6r`cz0yZQ#f0#*y+m64{bs7GP|2V$phf42rswJB?s@9qf;Bfc^pm-ZS#^5dkG{u zzv;l&B$NYcegSqAnjnPN1?17VUQbPummcWry((85IFB(pFQNGN{hhN$Fv?~l_fr?| z9=%dK(+;kZ(8=mwptjwC-ikBD$Z{l2++~*8wq5ynF<+PNlZI7ba5V#fg~L}kE;UH5 zJ;{P(`G{tNl&z5rUiH~e{I>GT8~9&*(J;Myx9z5P!db!F8RTII^I7c)HU=ss*bYB` zgwiIMZ_q>KEC$4lFm+Afvu6^$X1jm1rB*4H)-EIO5Rvz_p24?OkJ zovD4{-1KA6*oL?a;3qR7GZRB!cE5oAdA#M@{w+fGgsJ-lSmQ^-?8E&Q%tbmjd=@gZ z(}Mg*jsDf6Z)|7s%@9pc-tuw5W&zqUXjv2bVkC%-X?O3F72W4EsIl#1e>Mdz=X4k*_>VxCu_2?jjg16N*5fwC-36OW&;Sz}@jMn}hgJdEd pO;bST+>R{W-aENZYk%(=^(_R5N$LmL{Qc?!%+I4tt4z=_{|902Wu5>4 literal 0 HcmV?d00001 diff --git a/js/css/smoothness/images/ui-icons_454545_256x240.png b/js/css/smoothness/images/ui-icons_454545_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..59bd45b907c4fd965697774ce8c5fc6b2fd9c105 GIT binary patch literal 4369 zcmd^?`8O2)_s3^p#%>toqJ#RmwV2==ic*rz7lOw=eaq=H~;_ux21)-Jpcgw zdj+hrf&W^f<%Qk9Zpqf#;jH;N^Z%VA?R|9mZ{esQd(2F=?y+!`XZ5CR?ue=UdHIfUDFM*m15I;g=VN2jw zQW9?wOhDI#+P0|`@JQoC3!pu=AzGMtYB>V&?8(2>_B5_p`1Sb1t{^|J%bZYv09RS? zQ*dcs7}$)taJ@vX0E<96P{ur)Eygr{&ALyNoMP%_94m}=qFVT)&CeG1DBBMLUSKP^ zp%%Q3$MEtKll)X*+$)3O_3x`4%cHY0uhy7U;5x^Ir}X1)mv&B%|A)@A$a>f}tP{5X z9-gkti`YyT+hk9)cZW7fAQhjT%$XLLI^&VR=qev36;`WGBOP!^&(?!sK6jSH0Dnz4 zoEMMNu}y&n=rd-GWI?rGBI8!GD*NJ$k&e5-6+~-9F^6tV<=5`FcY~t{iqRcncEU+F zkT~jww!oy(@~b~WGI8!lzjURX&IpJjFGxShOKUunP+rW$I{c|x0qM6!Gxf6n(;$D> z+QYiULqq)Fy4VDk&Mev)NyM@nvF z7O6M*A$C)kBi0HGMT_+xfQ^USTM)>*h_Rx%eSRxA%n|FuC&=F=Pz}E5uCqbcy;7j=%Qh`glqEA-jx0(a<)uKO5Fe|JLD-ndZ-vnW`G=O&^%pa}Ah(2%m?oANs{lJ`?RhrZ8n!`Q97TKw{YAw9 zD)=M{mD(~_jj`LTd%q6Veum)Cnd!7lw}(5h%ubHcg^2O`prn%u9es3C#&%TsnmSD3%3Ik^Yd@6-d%(I7kqT(B@dVX2 zIidXgd>qYT-oTZ=1sGI7^*_E9Q)1F2mooE0R zXopPnh^ci@+wz2ZDjo&Owyxh6t90Gt!u0miLxc!bue^LvHF?)O@Yf!dQUXfW$u8(f_n07^N)-vpIe;TrHv5uKm{h_v`-IN^zwWc>Lk ziGsSr89sDcdOR_wa~DjrqV&Nd*$18(vohPJ3hSzEJPF2d!u}415wrSMtS(zNa7 zbO0G4ajgKNp{`D7DO<(T?wowarQ0dIKLb<}#prQM)ytB73YNTPQgX^xoT zm>;yKSJ*c@QfD8HW`6&+mowOaA|A&~G0fO6&xwj;E3O9^Zu~ZXts~;-d%FyyeXrijORi<_S(dw_5@h&-fTY?#FJo% zQZZ1&ED%$if+n8JVM{s-ZoK@P>p@z4s`AoI6hYxE!Ie_Y)cpjZjc8@~uNMYVfy#J$ z)+sdEX7DK^{}kUAST8U6^p6#c>0Lc>T~9`0}`*2 zizaU)TFS4(u;BenUWZr?s{D)Z)rc9L5&gUvz3iSQaF#J)D)Ts{YgagdDcI1S`dtes zPqb4|h-RIkjhnpmn(Q2Je6Di5C?MkCUL)!WoKn|P#al41v#-Q8`K1$Gh64UhPQj|T zaZb%tJ}O{A?Cvl26!jeKS3OUkp5@8RDBYwh`Loxb5W<^m*R37+v}#*m-G{{ocF-#r z7!k3ZS^4Qu9sNRNZ3`laW2TqV{rsR#~gtVp6C zL0?}~gbLTv^jqtPQD@Cpq6{B6v&*Y)?tx})z=qQNB4Z_59 zpI2L)xQ`!|J8wWgs82jSw_8(;#}y7~Y^&hY9P1G)@`CGtIi*tZ%-%&;$PuG(!M%)E zQ?T#imBH8dCZxUBX^RWPwIh9LcnL3#$befQDr@UJl{=}o0){qIt52vU9X=3L_gvVW zPqp_YhhpM6XiE7Lvn-G0Wzo>0;g|$_-7|ucz~*w%bW@hr6M?~v9dT}L=>UotTj13& z?Uvt0_uOvzMq4iG6)gZqeU;W=P@EVod;}Vr7P*@=C19v;iz$4N+c5ewauTtKK5e;yIx(FQUec0 z`G)VlTUY|m2L=KusMRgMlapu#wt8MohK3=y`!J`tD6nYd%?xIZO`Q)skL)R%3Vf(P z__5Sx3h%fKF=sNdZo2p(w=_|}1M%ri7fO?8))sU1ySG;M4p4;zrr}4l0lzvA!WQ&a zrwX>%lJkv`Gr_u=K>kHOg6(AB(R3FOryElY)-vi|fRsBS<)$1;TC_?BnyScjY6>_ZD=T|bjcbjz@D6V+yfHd4SU+J*2Dh%n;$5ou zHh6R=)$>IH@%5js2KH#JkfFCVI}P>~U;|}>kk|06tA}^~B;|gJ$UvSF-l4GX43DAR z&M2mp8OgiTaK4li0|Q2qmGNYsm+Qq^JM8yfCP>5!31rjh4Mnq~+5X8+_$scfP1Fp!c zcQO*#6cfJ?ZRxn_$Se_|}Xo1oIF7s(7CllypCW@W8-y5%Bel_K*0G zd~8UWeYCWz>~^hF3ond|tQcClJ(8^9FW&&?U)a4O-pE;Y*u|FHGax>F*Kg_beOF5c z&?#xRN5Q?ckEwCnNr-${XC=w-te5%QH(6O~yxke=R!_ns))PU07Pu)CY`<>$+XicZ zCI=g^;q7NZnw=-vf;HoWLD+}`&Bph>kiqyX5jxjI1A41d$R3nahq@CHULV#9ItIwJ z0)^JGy{hB;@SD|}Zel8~2z;UjN96MR@dt;EV`9RP4X&zn8ib=n*107cICSp7z6srZ~4Qg|Vp$OB0By{IxAPaD7HGFw_HTza~wWN1A6 z3`7BZFse2a4{y#V^&;nRVcZOz*2>A?jm$%?)KawLR0cEz24qxxOOo9_2)9MrWpSg7 zPiPz+M7(zPRZ3$#11ti?uI!}bM!Dg%L#+uR+^2L2RX+QlMpL zg_DrR=GIT7C~b+^OZK)?l7*9c-78zWVbLo1oS}bItdscuF80}guwA8c^(47DfaBjV z^V@&JJHxYHqS+e7&X;ezZwsE2+t~n0?*m^(db@WnI{LgAnOqOa<8pRvo0E>*O&~J_ z&A)t2LOG)5=3$3n2_gi2Kpvgv)#LCUh2Y~ z!A&(~-8reT$sJk0=L;m~ES3k}k% zkF%gzzT(+nRU0IeUvuW8pq=8uzr&7HW>K5ZiD*8qL17AI^ zGqo>*mvIChU6+&t{A3|!W?~pi9_O$>k2d|#(Z721wcT{S1)_UFZ+}QS^KZ*u?5Y~bz z^cLI;2{$C_ZwWqM@sYMYwG+^N<^Ivq8ZOwV;7xT+WCh)I9PHC}ut;VNr?w z<@?HsG!Qg3zaV+-xQ3ldtad!U<6iGz_enGH*2akP_r)o1D&8p^5M)_c8IIj6Wy*7HJo&CBLuo~nj>(63pZzO(Vv^ZuB3 zMYigjkwA;FEy|G}1jpiMj6|NTm7Uyiw=@FDE*nX<>jR!W@9XIyf%$Fd*J5*D0Z0Lm z9}ZQxyT|x5ftNy?V>EbJz-K>bV9gs9RaXUP<^=;e?&Fqxj;6{ieR-a-@HycA1KMKhql8GOmcxwZ?_-(3hMK^^a*(gaFvBH ziIC!fgH4$W*NbKIaY&T?%&13``KbD@S-0`xQ%v3TV+B!;RC7O!+1a9QCA$H@3tR;k z)SSoR7(s4)f{zM}eWgFN{(ZH5d1O}l)f$ruT!)Q&NImXyZsTzOf9TwctcSfr+M)aJ z5otO+$jvm-P4)ykH)x|cO5xeb>?!`qGw$(>&axqLL6yoB${vsMXgL_-bz@2J_tS92 zdvZG-+vKl@K4Vr(EL{WQt@Z+Ea-hxX0}nTSZxnpi^#Kn8Ox8FgIS|hc}KJQ4tm*HO16ui{(O9} z1YN)GjiQt6fGq`Cj+^`zUf?8hk^(T{{cOQGWFP98am}is28A!5%{R#ENv8fCN!j69 zlMEK(2z?|BY=Je$XD9mB-Kkem*(d-j^9j$2#6r$Dz?s)-TCDCGCs z8>6Pvj{Y+YIeFA@qY22V$)awy@q!9A4rgk5b9TcC;s9Ig^G|6nDP+5=Fzg&?(L=vc zCbGd>fSu~@6!94td+o#d@sid!EIX$rx7*cawe6 z`dScJ+$HssdOjE)O#Ybs56vm-FQ$7yuJJD^Zqk%hMaIgAJ<2yb_MFQte_i;62ScT$ zpjifYyR_E=rQ+>H)pmlr-Udzg*-!|ssw(D7wJvC+Sf8bb9;;q8#z?0p!!bsd{wy|5 zpBaMHE-Ve>i#LLjHRaMLtp%9&(HCng7Sw96jVv!#0k%?F^K7&=T)mnYn)D9(i;4x5 z^NJTJwq~pv;kH@#ejTd*48~(J(r6j34|m`h9fEDj0im)~+%I5XphWymhT;_Zty|Q& zzjPg#-ufAHZ1M*Gccw?Kf|8Pnhtb0`!{N`Bqsa37J+>wC$!e z00k+2Egzz;rbcWoUB%Jvp8W1}$XD%e3>4y;;OZ1ccT-O#uW6Ys@C}Pa`nZrNKzR(2 z4e%3)@QI4SE&E!lW`5y14QhbepBG%_XBV-O(%5tj)@9#|;sC-MNev!zGDHk}JdpGC`iJF#8=8-P$Xoku_=Dw%Cv3{U7L>gf zRQ?<$t`cZ*MP5GQmbmx#!+*!zu>0MewRO9GFGS{b^m_fJ-N0?j@EqoFf>$khj+E|@ z7r3We&^tR^YZrxKe*d22agXqCO0l44&kqCv{u)T|(lv`~PK@DvE z{QI_TlCH5z*gR!>LO)k67{^R+vWx24U2^2ODXpwT;6y+6+$5m)_*w4WY&#do9dCeE z)>p+Ykdhq($DhmMiaYXey!@N%L26uz($aJ!QT{B^Wu}U$^9e#5)=c+XF9@Ill?ZmM zlNgHiz*9!vDc&uxOo;ZVxb`Q!Sk0*gnfxWzmbZh4(=%CD%qP?0=);n$&zaW_$UKV9 z8axdcN#AyZ{P)wj?V{P}vM)YY!>6@}^>U+iv$`9>nMTCPjN>z%yF&3yf%>+T@0vh4 zlC8Xa6zeo?%=o3}M8{aebLHcO{^1Ar8qiM=Gquf?Jo)q5`-+?sUpg?QXyEUpWSm+n z$K-UyqkIwHLquru~o(OF)hhz$Y*|X>ZIbswnxRvr~ z2=rdOGVuD|xRlpAZE<0!X1F(%Anpl^@V^D3vbM}qxe|NI;TTiZy7(IM;R69RkA>a& z6gwYE2sREzQ_LHmWqB+ogMk(fMaSFeoDq-!HkFB_nXt5+2ncFuk9BQL1I&oB1zZi) zYW{6_&-Ip1l*OVRA##1ILQS;5R{-K^0wGTiJbVSi@LA^$D$;@J>^G{6@&+%4{b3(s zC~LEHiTv(0b#zxt?YJ0r_~pUZM~mQ(??(n#>&tD%+@nq=Abj5*8R!~Ul1`G~=qFJ4 zfl|m8ZDCYgtr`4LcOpgiJYX9qRY5;DcWti~PmS$VB$E-Zt^f4)vLDOe_3XTq5^ylW zJ9PKm!V-8sAOJXnUfuFNIf0R9tK-pNs2hO04zr620}5B(Ok>yB)Of-3sP59qfQNbm zA4{w!2@cB;GbR(~szVrbO%(w=5S!X`o@o@x++wbN_tMPT0Vc)*I;Fgsbf^*g0 z2Di?HTApwKq3+YwfNsqd3iP%{hyK1iyuVZc@*0tO_3+N0#GFsz>8MjeJ2UJ%L!%hi zGYYAthH`E+ywA*u{(eJ=ia3h*%k?779rk-K<0VZAPkl;TFUbmei|$fqWO8!_zIvqt z$ly$VrlH46nnpX~X5Yk0iBJl;=WuA4>~X4-f&K0yWf42h&0b30t@NYX$7egQ1Fp!a zbui-D6cWCWV&|R1CY@G8(qOmWjWeX3eX7UggZPGimA}soOuQdXe4uZ#2>5zN>qlI0 z9xk}lE=tNpX1m6*nFr2EQ3xs79!^sCldDJYE$m(qYv3q7>}1R7?iZW7>$~*%zKaC| z=$N?ME$>#+%T&MZC`dW1wUl6Z)JgyCn~V%K&i0H|iwE%$>xsZW3tTfZxIUePci@p;cRu|d=ItIwF z1clVHy{hH?@SD|(Zfqi^0DQ1hczHN7xq85h)rzQqLHMX2^IkuK7FB!kI40s$|CY7~ zNX^{_UjN8}L%Med;|+=4RNTMozn8KT;2tb77bUPCmioh+rZBfIiM6f_P34cQ__o1G zWqQp3VL~~pE5?qODf%iiQQ3f42YF@09tQ*$4v_EKUx;t1KCPCBtgqg z@+Tn;O)a0uky_%jm+WjNB?=~VyH>V#L!*=l*@OS6SVyt_UEH&NA=?V2stHPyKkVNy z&jg<#cjros){#ji)dK z%)We0L_478=HZ8-@xnwsKrWs8)x`MB;(Y`Cmu2c-&SH(vN-F(*e`l?c%+l$|y_AJJ zhcDGnwLvN+bu;_sX|1AiePhx@u&%P$hf*xE+O=~D?_(_KGWQ!158YL-y9$*6mmPo;Rp*Dl5lm-mVM2i`h- zM@nxv590_tvMwPD_{l=b$iOm|+|S{D9&P%zeT$GgX6Akl-tfUF>tL@Ld!B&{pN39t zH>3Vhqkr}2Yul+jb7UiouWVGPNsxX7Ueba+9|~dz?d*QM$ng0DZfO0`7fAy?2yMm| zcnRzUhZ&IcwgjH9cuU!w+VStYa{p*)4IgBf|E8)sqMYtB2KH_}SfsFq(c9i(Q6S3U oBo%DI*Kv;w;*%(i9W@f3_WCF#rGn literal 0 HcmV?d00001 diff --git a/js/css/smoothness/images/ui-icons_cd0a0a_256x240.png b/js/css/smoothness/images/ui-icons_cd0a0a_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..2ab019b73ec11a485fa09378f3a0e155194f6a5d GIT binary patch literal 4369 zcmd^?`8O2)_s3@pGmLE*`#M>&Z`mr_kcwz5Nh&gy7G+@45H9p05OJ)J0CH2owMSaGIN$+5!N; z<11j56?ANg=9hMl-IBGX-T8hf$N$b*H?$f4Xt&I`oABt1nR=k%#z{{*a!Axm|t}hCz zJg0Ln7;M4Zjx{$mwhMW+kWN;|j>qTx_-zNX!GzqEZRa}QF8_0yk6+=w}$QD^&hM4%OkT=uh$q9;5u~NL-I+NQyaVc|3l+iWI5~|(hA-G z08i8AMr@{uY_cWTxo^y|Qyb33mlZLvc7H2Zm~>mB7&=-1X^@|D z&0*~i?GBE&NM(Pv&Vt^zWu_bD3e|R?wTL{cSFwD^Ij9v%g=aLY@1U2Bxn#Te*{>%D zOOW-O-bfnJ7T8jd<*>8`Z2DsFQi~S$%^npJwXam5>>p zMd}QEjM)@~##n$LXpz1Hkl|2UGXi-JFFePXBWL+-5f%!S>L#KL3>Vl0w#d^21Jn<~_7q zWx^Xg1(>PsPGO&cu{S;(pRQ;=Vw2J<9NdQVWx<+g-`ia=Q@puS)75M+?u>DTa95e9 zt#1T?#a)uWC>Mia!K6>g|InPW{&Kp9$tC_3*;R_Xsz6^Eu|xW1$6j#0?XLs7^l+%O zlxddE)h^|=K(2UqS*0ECuDe0ic|H_^t*VOoTCKx0Qmn_^LyJ|b8l$Jvl3{2=3x8&7 z$1ik&YG>w#@x@y~$r`fhlUDo;yXecc6$`30m`3K8s{k8G&3RVp8n#|l6h(Xw`Axw9 z%6Y^J6k0P@4YAuSd%q7=eg)&u8EMoEmq$CWj1GY|rGQWw3ida!FHk&wCqrQh_0Bcw z!ZBS3CbxgZ+}~wzgGIQ#QId%T_TE~_qdUqxjqS#8#jPxdwO@(@-5_nSP&uT?aGYYD z6km36K9=gjUjImwO=5Hl#u85VF?r0HbW)#h^SR|s_L47Tl$&Z&Rz*ksl!t*(2O2;D z+8`6$qpLn}LchhCmv*X}moGMX5?F@juGeHQAddAn}0~r zS_0|d3*0v%Y)8+8K{ zGyoYPb|W9Grm9M4E?vb^@16ePbI4omZv+(NoZ##fLUmKlB(G_jEbtDCM*27t$v`JovAZa+%*Q5dDXF*Ftt*n!O>#ohCM4lZ)h5rdKV-3A za}2AO6@!`W>ROk5FN*>2Zza^Z%}8KT%*jBGH|rml2X1LR{wZhWx8V4>|5i}; zMnLIHn3!^)`87GYh}&Y`KMwyLbA#^pch}Z!`@P_qH&N^LS9SxpEy8mc!wFusq&Z@` zeO}<6PC@VNaII|=n(^cNUiLseig*$;NjG7;IwvfYCBN>kzv@v-V2eBQZ@oIs^)NLqMR935k|1}U;5<{s(Ebdj4r`?QtrrAPfQooq zmPs_(YTy|??+nitNIFDoR7~qLPPFFCf^_~8OUt{#!|9o*3Q{!@9ZAI$7O~piD!;WX8#v&RxNH27i59$`1{o zEYU_zE{bKEI%f3BbE0Fc;f2!4LjUlC`wgh4@R{1?O78r5t$hWKiLV{#QWWq{QZiPx zm3?x$;&DDRVt0SByRiFczw$-e)GSvpCRbzk^=E zz=(+LjEc{Ps_2(OYg=G(93!oS=IeJ|WA8STv+LgI*Oj1c-QC06N~mvJ&KKx{arGp5 zswvJ6{%BvBYo>#2$%O$~TITuh?Rr^jCpAUXh)}m74`O|aOU>w2KI`k<#efwa5=-l4Xx!o>Z9Evg`RLN5W7SQp3$@D3_hY4EV!0( ztMm6>zBcgY{RvHZ{9Ey&&)jr2B4s0qDPBUh1ITaAp&>rj3ng*B=VGXz* zs@eR<;J(XkpD6Q1U3}#FR)wlafiFMU(-=&e9(eQ`isrS-9aNwJ)7frS8RiXM4*SbC zL|4*c?h^jfYvSOpn%Z$W?C|TuZ;uy2pFWHXuGW`ZkGV&kPJsKqJJQ!NswAE!!cb2k zumi=AE$YIkm})cVlg>nn&PBjBRI*@mfhhRMsa5U8k#A!ztfiw)d7I_UyAif8$5sJ9a7WUv5!o%fL z(J7-8EQzv1YIc)BNeWkLK~m%y4vqe&q@|_ZR5;eC3-9rkf*T{_19jtuWKhdW4Bn|~ zZ-YyFLN!k)0AKg{dO)|v3K?=oy+dzb4%T1F4}JsByncB1Z(`2p@O0!E!JQelouN^* z%Q^YfQUh66D$Zx-RDZvLctsr9`_+1p#tz&4SMd@i_-8()tyg3OyhU~?Gt#-a{NKFN z0VGf+AH%@o6;-_*?$$T4QX-f_>Ny-5CV8Ccq+@>gNSeovbFr0@b}RiTcJbLx>ws&r zsvY!rR{4al#MpVKut~?&kTmF>_v3UaC!gvuxgg%5-{l{20}~&F6CUarF9N=u)BG71 zoQDlAwT+T=mfo&$Xy%4-kmW;4wuh6{{ABClybHV6L>t&k4?9_Ny8A_^?)ff#dEjhL z2RbC~cFVbz^fJ`$I0%prYc0g-9(7X3eUp}^#Mzv)Z1EsGW;qr3cY$+e2HU5d_O9L% zpbljP*1!A0PqpzNo3W&y(hD87qgweq5YQWYEkxrOuSain2-q@Z*P`x*ht-9)Fr5Ho zSTKduvc9h6`S^#$i)LgjDi3_PQ+RbaGP!!di^Y;4kB0lGo$y{if)rJIaXTbpRgO#B z1El6|18;s}$0FRjgK-7~ZwmI`_1{a`32+Y>&O_iTpm%vz6hNkjGR(#*! zpfJ2>OAQbTFba9S3j9BlRHXaG{)Zt(J<3ppA?}j+7F#{bV{M7zU)5e@~R&J_xf$+GKK~ z3{R;Y9fZGe^ifEqKL;!VMXv26=R~^TG(#*2!JKCWoo&c^$utAs#Gfq-?t!c&9TH5- zj&i5L4NWbdNs*djvsY}bC&ddUbh=iyc0;3-@Y#d^s8|Ql{ax(yenFcG#i|K%lRxy| zFys4w!@EPXp2AsbMUGc*eP|7uliAq-O6~(+MR>V(EZTd&9G+MY&gF2lZ=I8j*o`OC z`AxrmOGMeD=H_9Cq47clT|h34>-EI=%;E!my;o&wU(aKV&PymBzrV9q2uA62XS@JrjKYANZAU>;8mag#BU?Nv`+ZVhlAPV`HF_gKY_O zhbV2L`8qvR&f=@M5vH~geD+L&*L2s<)|5)clA0yt9TM{X)iWtx@wJO_!{vR#|AD6t z*OAg2&P_i8jjW5y0DdtOGcqvrCHD*1Uq_q1ZQmngPnf!2fHizH%sSX>#$2Rh!>1ur z+s(*-)abDuePc6~XNG8m@|KMXHVM#G4?~+V z1z!An!D0GD-7WqXE8ddUXLkI%u01$fTEhhy=0)&&c(a).is(":focusable")}}); +c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=0;e0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a=9)&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a); +return a.preventDefault()}if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;a.target==this._mouseDownEvent.target&&c.data(a.target,this.widgetName+".preventClickEvent", +true);this._mouseStop(a)}return false},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery); +;/* + * jQuery UI Position 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Position + */ +(function(c){c.ui=c.ui||{};var n=/left|center|right/,o=/top|center|bottom/,t=c.fn.position,u=c.fn.offset;c.fn.position=function(b){if(!b||!b.of)return t.apply(this,arguments);b=c.extend({},b);var a=c(b.of),d=a[0],g=(b.collision||"flip").split(" "),e=b.offset?b.offset.split(" "):[0,0],h,k,j;if(d.nodeType===9){h=a.width();k=a.height();j={top:0,left:0}}else if(d.setTimeout){h=a.width();k=a.height();j={top:a.scrollTop(),left:a.scrollLeft()}}else if(d.preventDefault){b.at="left top";h=k=0;j={top:b.of.pageY, +left:b.of.pageX}}else{h=a.outerWidth();k=a.outerHeight();j=a.offset()}c.each(["my","at"],function(){var f=(b[this]||"").split(" ");if(f.length===1)f=n.test(f[0])?f.concat(["center"]):o.test(f[0])?["center"].concat(f):["center","center"];f[0]=n.test(f[0])?f[0]:"center";f[1]=o.test(f[1])?f[1]:"center";b[this]=f});if(g.length===1)g[1]=g[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(b.at[0]==="right")j.left+=h;else if(b.at[0]==="center")j.left+=h/2;if(b.at[1]==="bottom")j.top+= +k;else if(b.at[1]==="center")j.top+=k/2;j.left+=e[0];j.top+=e[1];return this.each(function(){var f=c(this),l=f.outerWidth(),m=f.outerHeight(),p=parseInt(c.curCSS(this,"marginLeft",true))||0,q=parseInt(c.curCSS(this,"marginTop",true))||0,v=l+p+(parseInt(c.curCSS(this,"marginRight",true))||0),w=m+q+(parseInt(c.curCSS(this,"marginBottom",true))||0),i=c.extend({},j),r;if(b.my[0]==="right")i.left-=l;else if(b.my[0]==="center")i.left-=l/2;if(b.my[1]==="bottom")i.top-=m;else if(b.my[1]==="center")i.top-= +m/2;i.left=Math.round(i.left);i.top=Math.round(i.top);r={left:i.left-p,top:i.top-q};c.each(["left","top"],function(s,x){c.ui.position[g[s]]&&c.ui.position[g[s]][x](i,{targetWidth:h,targetHeight:k,elemWidth:l,elemHeight:m,collisionPosition:r,collisionWidth:v,collisionHeight:w,offset:e,my:b.my,at:b.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(i,{using:b.using}))})};c.ui.position={fit:{left:function(b,a){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();b.left= +d>0?b.left-d:Math.max(b.left-a.collisionPosition.left,b.left)},top:function(b,a){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();b.top=d>0?b.top-d:Math.max(b.top-a.collisionPosition.top,b.top)}},flip:{left:function(b,a){if(a.at[0]!=="center"){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();var g=a.my[0]==="left"?-a.elemWidth:a.my[0]==="right"?a.elemWidth:0,e=a.at[0]==="left"?a.targetWidth:-a.targetWidth,h=-2*a.offset[0];b.left+= +a.collisionPosition.left<0?g+e+h:d>0?g+e+h:0}},top:function(b,a){if(a.at[1]!=="center"){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();var g=a.my[1]==="top"?-a.elemHeight:a.my[1]==="bottom"?a.elemHeight:0,e=a.at[1]==="top"?a.targetHeight:-a.targetHeight,h=-2*a.offset[1];b.top+=a.collisionPosition.top<0?g+e+h:d>0?g+e+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(b,a){if(/static/.test(c.curCSS(b,"position")))b.style.position="relative";var d=c(b), +g=d.offset(),e=parseInt(c.curCSS(b,"top",true),10)||0,h=parseInt(c.curCSS(b,"left",true),10)||0;g={top:a.top-g.top+e,left:a.left-g.left+h};"using"in a?a.using.call(b,g):d.css(g)};c.fn.offset=function(b){var a=this[0];if(!a||!a.ownerDocument)return null;if(b)return this.each(function(){c.offset.setOffset(this,b)});return u.call(this)}}})(jQuery); +;/* + * jQuery UI Draggable 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Draggables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function(d){d.widget("ui.draggable",d.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper== +"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(a){var b= +this.options;if(this.helper||b.disabled||d(a.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(a);if(!this.handle)return false;return true},_mouseStart:function(a){var b=this.options;this.helper=this._createHelper(a);this._cacheHelperProportions();if(d.ui.ddmanager)d.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top- +this.margins.top,left:this.offset.left-this.margins.left};d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this.position=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);b.containment&&this._setContainment();if(this._trigger("start",a)===false){this._clear();return false}this._cacheHelperProportions(); +d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(a,true);return true},_mouseDrag:function(a,b){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!b){b=this._uiHash();if(this._trigger("drag",a,b)===false){this._mouseUp({});return false}this.position=b.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis|| +this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);return false},_mouseStop:function(a){var b=false;if(d.ui.ddmanager&&!this.options.dropBehaviour)b=d.ui.ddmanager.drop(this,a);if(this.dropped){b=this.dropped;this.dropped=false}if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return false;if(this.options.revert=="invalid"&&!b||this.options.revert=="valid"&&b||this.options.revert===true||d.isFunction(this.options.revert)&& +this.options.revert.call(this.element,b)){var c=this;d(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){c._trigger("stop",a)!==false&&c._clear()})}else this._trigger("stop",a)!==false&&this._clear();return false},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(a){var b=!this.options.handle||!d(this.options.handle,this.element).length?true:false;d(this.options.handle,this.element).find("*").andSelf().each(function(){if(this== +a.target)b=true});return b},_createHelper:function(a){var b=this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a])):b.helper=="clone"?this.element.clone():this.element;a.parents("body").length||a.appendTo(b.appendTo=="parent"?this.element[0].parentNode:b.appendTo);a[0]!=this.element[0]&&!/(fixed|absolute)/.test(a.css("position"))&&a.css("position","absolute");return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]|| +0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0], +this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.element.position();return{top:a.top- +(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment== +"parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[(a.containment=="document"?0:d(window).scrollLeft())-this.offset.relative.left-this.offset.parent.left,(a.containment=="document"?0:d(window).scrollTop())-this.offset.relative.top-this.offset.parent.top,(a.containment=="document"?0:d(window).scrollLeft())+d(a.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a.containment=="document"? +0:d(window).scrollTop())+(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)&&a.containment.constructor!=Array){var b=d(a.containment)[0];if(b){a=d(a.containment).offset();var c=d(b).css("overflow")!="hidden";this.containment=[a.left+(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0)-this.margins.left,a.top+(parseInt(d(b).css("borderTopWidth"), +10)||0)+(parseInt(d(b).css("paddingTop"),10)||0)-this.margins.top,a.left+(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,a.top+(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}}else if(a.containment.constructor== +Array)this.containment=a.containment},_convertPositionTo:function(a,b){if(!b)b=this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName);return{top:b.top+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop(): +f?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName),e=a.pageX,g=a.pageY; +if(this.originalPosition){if(this.containment){if(a.pageX-this.offset.click.leftthis.containment[2])e=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g-this.originalPageY)/ +b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.topthis.containment[3])?g:!(g-this.offset.click.topthis.containment[2])?e:!(e-this.offset.click.left').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(d(this).offset()).appendTo("body")})}, +stop:function(){d("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)})}});d.ui.plugin.add("draggable","opacity",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("opacity"))b._opacity=a.css("opacity");a.css("opacity",b.opacity)},stop:function(a,b){a=d(this).data("draggable").options;a._opacity&&d(b.helper).css("opacity",a._opacity)}});d.ui.plugin.add("draggable","scroll",{start:function(){var a=d(this).data("draggable");if(a.scrollParent[0]!= +document&&a.scrollParent[0].tagName!="HTML")a.overflowOffset=a.scrollParent.offset()},drag:function(a){var b=d(this).data("draggable"),c=b.options,f=false;if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!="HTML"){if(!c.axis||c.axis!="x")if(b.overflowOffset.top+b.scrollParent[0].offsetHeight-a.pageY=0;h--){var i=c.snapElements[h].left,k=i+c.snapElements[h].width,j=c.snapElements[h].top,l=j+c.snapElements[h].height;if(i-e=j&&f<=l||h>=j&&h<=l||fl)&&(e>= +i&&e<=k||g>=i&&g<=k||ek);default:return false}};d.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(a,b){var c=d.ui.ddmanager.droppables[a.options.scope]||[],e=b?b.type:null,g=(a.currentItem||a.element).find(":data(droppable)").andSelf(),f=0;a:for(;f').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(), +top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle= +this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=a.handles||(!e(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne", +nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var c=this.handles.split(",");this.handles={};for(var d=0;d');/sw|se|ne|nw/.test(f)&&g.css({zIndex:++a.zIndex});"se"==f&&g.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[f]=".ui-resizable-"+f;this.element.append(g)}}this._renderAxis=function(h){h=h||this.element;for(var i in this.handles){if(this.handles[i].constructor== +String)this.handles[i]=e(this.handles[i],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var j=e(this.handles[i],this.element),k=0;k=/sw|ne|nw|se|n|s/.test(i)?j.outerHeight():j.outerWidth();j=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join("");h.css(j,k);this._proportionallyResize()}e(this.handles[i])}};this._renderAxis(this.element);this._handles=e(".ui-resizable-handle",this.element).disableSelection(); +this._handles.mouseover(function(){if(!b.resizing){if(this.className)var h=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=h&&h[1]?h[1]:"se"}});if(a.autoHide){this._handles.hide();e(this.element).addClass("ui-resizable-autohide").hover(function(){e(this).removeClass("ui-resizable-autohide");b._handles.show()},function(){if(!b.resizing){e(this).addClass("ui-resizable-autohide");b._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var b=function(c){e(c).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()}; +if(this.elementIsWrapper){b(this.element);var a=this.element;a.after(this.originalElement.css({position:a.css("position"),width:a.outerWidth(),height:a.outerHeight(),top:a.css("top"),left:a.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);b(this.originalElement);return this},_mouseCapture:function(b){var a=false;for(var c in this.handles)if(e(this.handles[c])[0]==b.target)a=true;return!this.options.disabled&&a},_mouseStart:function(b){var a=this.options,c=this.element.position(), +d=this.element;this.resizing=true;this.documentScroll={top:e(document).scrollTop(),left:e(document).scrollLeft()};if(d.is(".ui-draggable")||/absolute/.test(d.css("position")))d.css({position:"absolute",top:c.top,left:c.left});e.browser.opera&&/relative/.test(d.css("position"))&&d.css({position:"relative",top:"auto",left:"auto"});this._renderProxy();c=m(this.helper.css("left"));var f=m(this.helper.css("top"));if(a.containment){c+=e(a.containment).scrollLeft()||0;f+=e(a.containment).scrollTop()||0}this.offset= +this.helper.offset();this.position={left:c,top:f};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:c,top:f};this.sizeDiff={width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:b.pageX,top:b.pageY};this.aspectRatio=typeof a.aspectRatio=="number"?a.aspectRatio: +this.originalSize.width/this.originalSize.height||1;a=e(".ui-resizable-"+this.axis).css("cursor");e("body").css("cursor",a=="auto"?this.axis+"-resize":a);d.addClass("ui-resizable-resizing");this._propagate("start",b);return true},_mouseDrag:function(b){var a=this.helper,c=this.originalMousePosition,d=this._change[this.axis];if(!d)return false;c=d.apply(this,[b,b.pageX-c.left||0,b.pageY-c.top||0]);if(this._aspectRatio||b.shiftKey)c=this._updateRatio(c,b);c=this._respectSize(c,b);this._propagate("resize", +b);a.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(c);this._trigger("resize",b,this.ui());return false},_mouseStop:function(b){this.resizing=false;var a=this.options,c=this;if(this._helper){var d=this._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName);d=f&&e.ui.hasScroll(d[0],"left")?0:c.sizeDiff.height; +f=f?0:c.sizeDiff.width;f={width:c.helper.width()-f,height:c.helper.height()-d};d=parseInt(c.element.css("left"),10)+(c.position.left-c.originalPosition.left)||null;var g=parseInt(c.element.css("top"),10)+(c.position.top-c.originalPosition.top)||null;a.animate||this.element.css(e.extend(f,{top:g,left:d}));c.helper.height(c.size.height);c.helper.width(c.size.width);this._helper&&!a.animate&&this._proportionallyResize()}e("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing"); +this._propagate("stop",b);this._helper&&this.helper.remove();return false},_updateCache:function(b){this.offset=this.helper.offset();if(l(b.left))this.position.left=b.left;if(l(b.top))this.position.top=b.top;if(l(b.height))this.size.height=b.height;if(l(b.width))this.size.width=b.width},_updateRatio:function(b){var a=this.position,c=this.size,d=this.axis;if(b.height)b.width=c.height*this.aspectRatio;else if(b.width)b.height=c.width/this.aspectRatio;if(d=="sw"){b.left=a.left+(c.width-b.width);b.top= +null}if(d=="nw"){b.top=a.top+(c.height-b.height);b.left=a.left+(c.width-b.width)}return b},_respectSize:function(b){var a=this.options,c=this.axis,d=l(b.width)&&a.maxWidth&&a.maxWidthb.width,h=l(b.height)&&a.minHeight&&a.minHeight>b.height;if(g)b.width=a.minWidth;if(h)b.height=a.minHeight;if(d)b.width=a.maxWidth;if(f)b.height=a.maxHeight;var i=this.originalPosition.left+this.originalSize.width,j=this.position.top+ +this.size.height,k=/sw|nw|w/.test(c);c=/nw|ne|n/.test(c);if(g&&k)b.left=i-a.minWidth;if(d&&k)b.left=i-a.maxWidth;if(h&&c)b.top=j-a.minHeight;if(f&&c)b.top=j-a.maxHeight;if((a=!b.width&&!b.height)&&!b.left&&b.top)b.top=null;else if(a&&!b.top&&b.left)b.left=null;return b},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var b=this.helper||this.element,a=0;a');var a=e.browser.msie&&e.browser.version<7,c=a?1:0;a=a?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+a,height:this.element.outerHeight()+a,position:"absolute",left:this.elementOffset.left-c+"px",top:this.elementOffset.top-c+"px",zIndex:++b.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(b, +a){return{width:this.originalSize.width+a}},w:function(b,a){return{left:this.originalPosition.left+a,width:this.originalSize.width-a}},n:function(b,a,c){return{top:this.originalPosition.top+c,height:this.originalSize.height-c}},s:function(b,a,c){return{height:this.originalSize.height+c}},se:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},sw:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,a, +c]))},ne:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},nw:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,a,c]))}},_propagate:function(b,a){e.ui.plugin.call(this,b,[a,this.ui()]);b!="resize"&&this._trigger(b,a,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize, +originalPosition:this.originalPosition}}});e.extend(e.ui.resizable,{version:"1.8.10"});e.ui.plugin.add("resizable","alsoResize",{start:function(){var b=e(this).data("resizable").options,a=function(c){e(c).each(function(){var d=e(this);d.data("resizable-alsoresize",{width:parseInt(d.width(),10),height:parseInt(d.height(),10),left:parseInt(d.css("left"),10),top:parseInt(d.css("top"),10),position:d.css("position")})})};if(typeof b.alsoResize=="object"&&!b.alsoResize.parentNode)if(b.alsoResize.length){b.alsoResize= +b.alsoResize[0];a(b.alsoResize)}else e.each(b.alsoResize,function(c){a(c)});else a(b.alsoResize)},resize:function(b,a){var c=e(this).data("resizable");b=c.options;var d=c.originalSize,f=c.originalPosition,g={height:c.size.height-d.height||0,width:c.size.width-d.width||0,top:c.position.top-f.top||0,left:c.position.left-f.left||0},h=function(i,j){e(i).each(function(){var k=e(this),q=e(this).data("resizable-alsoresize"),p={},r=j&&j.length?j:k.parents(a.originalElement[0]).length?["width","height"]:["width", +"height","top","left"];e.each(r,function(n,o){if((n=(q[o]||0)+(g[o]||0))&&n>=0)p[o]=n||null});if(e.browser.opera&&/relative/.test(k.css("position"))){c._revertToRelativePosition=true;k.css({position:"absolute",top:"auto",left:"auto"})}k.css(p)})};typeof b.alsoResize=="object"&&!b.alsoResize.nodeType?e.each(b.alsoResize,function(i,j){h(i,j)}):h(b.alsoResize)},stop:function(){var b=e(this).data("resizable"),a=b.options,c=function(d){e(d).each(function(){var f=e(this);f.css({position:f.data("resizable-alsoresize").position})})}; +if(b._revertToRelativePosition){b._revertToRelativePosition=false;typeof a.alsoResize=="object"&&!a.alsoResize.nodeType?e.each(a.alsoResize,function(d){c(d)}):c(a.alsoResize)}e(this).removeData("resizable-alsoresize")}});e.ui.plugin.add("resizable","animate",{stop:function(b){var a=e(this).data("resizable"),c=a.options,d=a._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName),g=f&&e.ui.hasScroll(d[0],"left")?0:a.sizeDiff.height;f={width:a.size.width-(f?0:a.sizeDiff.width),height:a.size.height- +g};g=parseInt(a.element.css("left"),10)+(a.position.left-a.originalPosition.left)||null;var h=parseInt(a.element.css("top"),10)+(a.position.top-a.originalPosition.top)||null;a.element.animate(e.extend(f,h&&g?{top:h,left:g}:{}),{duration:c.animateDuration,easing:c.animateEasing,step:function(){var i={width:parseInt(a.element.css("width"),10),height:parseInt(a.element.css("height"),10),top:parseInt(a.element.css("top"),10),left:parseInt(a.element.css("left"),10)};d&&d.length&&e(d[0]).css({width:i.width, +height:i.height});a._updateCache(i);a._propagate("resize",b)}})}});e.ui.plugin.add("resizable","containment",{start:function(){var b=e(this).data("resizable"),a=b.element,c=b.options.containment;if(a=c instanceof e?c.get(0):/parent/.test(c)?a.parent().get(0):c){b.containerElement=e(a);if(/document/.test(c)||c==document){b.containerOffset={left:0,top:0};b.containerPosition={left:0,top:0};b.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}}else{var d= +e(a),f=[];e(["Top","Right","Left","Bottom"]).each(function(i,j){f[i]=m(d.css("padding"+j))});b.containerOffset=d.offset();b.containerPosition=d.position();b.containerSize={height:d.innerHeight()-f[3],width:d.innerWidth()-f[1]};c=b.containerOffset;var g=b.containerSize.height,h=b.containerSize.width;h=e.ui.hasScroll(a,"left")?a.scrollWidth:h;g=e.ui.hasScroll(a)?a.scrollHeight:g;b.parentData={element:a,left:c.left,top:c.top,width:h,height:g}}}},resize:function(b){var a=e(this).data("resizable"),c=a.options, +d=a.containerOffset,f=a.position;b=a._aspectRatio||b.shiftKey;var g={top:0,left:0},h=a.containerElement;if(h[0]!=document&&/static/.test(h.css("position")))g=d;if(f.left<(a._helper?d.left:0)){a.size.width+=a._helper?a.position.left-d.left:a.position.left-g.left;if(b)a.size.height=a.size.width/c.aspectRatio;a.position.left=c.helper?d.left:0}if(f.top<(a._helper?d.top:0)){a.size.height+=a._helper?a.position.top-d.top:a.position.top;if(b)a.size.width=a.size.height*c.aspectRatio;a.position.top=a._helper? +d.top:0}a.offset.left=a.parentData.left+a.position.left;a.offset.top=a.parentData.top+a.position.top;c=Math.abs((a._helper?a.offset.left-g.left:a.offset.left-g.left)+a.sizeDiff.width);d=Math.abs((a._helper?a.offset.top-g.top:a.offset.top-d.top)+a.sizeDiff.height);f=a.containerElement.get(0)==a.element.parent().get(0);g=/relative|absolute/.test(a.containerElement.css("position"));if(f&&g)c-=a.parentData.left;if(c+a.size.width>=a.parentData.width){a.size.width=a.parentData.width-c;if(b)a.size.height= +a.size.width/a.aspectRatio}if(d+a.size.height>=a.parentData.height){a.size.height=a.parentData.height-d;if(b)a.size.width=a.size.height*a.aspectRatio}},stop:function(){var b=e(this).data("resizable"),a=b.options,c=b.containerOffset,d=b.containerPosition,f=b.containerElement,g=e(b.helper),h=g.offset(),i=g.outerWidth()-b.sizeDiff.width;g=g.outerHeight()-b.sizeDiff.height;b._helper&&!a.animate&&/relative/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g});b._helper&&!a.animate&& +/static/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g})}});e.ui.plugin.add("resizable","ghost",{start:function(){var b=e(this).data("resizable"),a=b.options,c=b.size;b.ghost=b.originalElement.clone();b.ghost.css({opacity:0.25,display:"block",position:"relative",height:c.height,width:c.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof a.ghost=="string"?a.ghost:"");b.ghost.appendTo(b.helper)},resize:function(){var b=e(this).data("resizable"); +b.ghost&&b.ghost.css({position:"relative",height:b.size.height,width:b.size.width})},stop:function(){var b=e(this).data("resizable");b.ghost&&b.helper&&b.helper.get(0).removeChild(b.ghost.get(0))}});e.ui.plugin.add("resizable","grid",{resize:function(){var b=e(this).data("resizable"),a=b.options,c=b.size,d=b.originalSize,f=b.originalPosition,g=b.axis;a.grid=typeof a.grid=="number"?[a.grid,a.grid]:a.grid;var h=Math.round((c.width-d.width)/(a.grid[0]||1))*(a.grid[0]||1);a=Math.round((c.height-d.height)/ +(a.grid[1]||1))*(a.grid[1]||1);if(/^(se|s|e)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a}else if(/^(ne)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}else{if(/^(sw)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a}else{b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}b.position.left=f.left-h}}});var m=function(b){return parseInt(b,10)||0},l=function(b){return!isNaN(parseInt(b,10))}})(jQuery); +;/* + * jQuery UI Selectable 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Selectables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function(e){e.widget("ui.selectable",e.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var c=this;this.element.addClass("ui-selectable");this.dragged=false;var f;this.refresh=function(){f=e(c.options.filter,c.element[0]);f.each(function(){var d=e(this),b=d.offset();e.data(this,"selectable-item",{element:this,$element:d,left:b.left,top:b.top,right:b.left+d.outerWidth(),bottom:b.top+d.outerHeight(),startselected:false,selected:d.hasClass("ui-selected"), +selecting:d.hasClass("ui-selecting"),unselecting:d.hasClass("ui-unselecting")})})};this.refresh();this.selectees=f.addClass("ui-selectee");this._mouseInit();this.helper=e("

")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(c){var f=this;this.opos=[c.pageX, +c.pageY];if(!this.options.disabled){var d=this.options;this.selectees=e(d.filter,this.element[0]);this._trigger("start",c);e(d.appendTo).append(this.helper);this.helper.css({left:c.clientX,top:c.clientY,width:0,height:0});d.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var b=e.data(this,"selectable-item");b.startselected=true;if(!c.metaKey){b.$element.removeClass("ui-selected");b.selected=false;b.$element.addClass("ui-unselecting");b.unselecting=true;f._trigger("unselecting", +c,{unselecting:b.element})}});e(c.target).parents().andSelf().each(function(){var b=e.data(this,"selectable-item");if(b){var g=!c.metaKey||!b.$element.hasClass("ui-selected");b.$element.removeClass(g?"ui-unselecting":"ui-selected").addClass(g?"ui-selecting":"ui-unselecting");b.unselecting=!g;b.selecting=g;(b.selected=g)?f._trigger("selecting",c,{selecting:b.element}):f._trigger("unselecting",c,{unselecting:b.element});return false}})}},_mouseDrag:function(c){var f=this;this.dragged=true;if(!this.options.disabled){var d= +this.options,b=this.opos[0],g=this.opos[1],h=c.pageX,i=c.pageY;if(b>h){var j=h;h=b;b=j}if(g>i){j=i;i=g;g=j}this.helper.css({left:b,top:g,width:h-b,height:i-g});this.selectees.each(function(){var a=e.data(this,"selectable-item");if(!(!a||a.element==f.element[0])){var k=false;if(d.tolerance=="touch")k=!(a.left>h||a.righti||a.bottomb&&a.rightg&&a.bottom *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){this.containerCache={};this.element.addClass("ui-sortable"); +this.refresh();this.floating=this.items.length?/left|right/.test(this.items[0].item.css("float")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var a=this.items.length-1;a>=0;a--)this.items[a].item.removeData("sortable-item");return this},_setOption:function(a,b){if(a==="disabled"){this.options[a]=b;this.widget()[b?"addClass":"removeClass"]("ui-sortable-disabled")}else d.Widget.prototype._setOption.apply(this, +arguments)},_mouseCapture:function(a,b){if(this.reverting)return false;if(this.options.disabled||this.options.type=="static")return false;this._refreshItems(a);var c=null,e=this;d(a.target).parents().each(function(){if(d.data(this,"sortable-item")==e){c=d(this);return false}});if(d.data(a.target,"sortable-item")==e)c=d(a.target);if(!c)return false;if(this.options.handle&&!b){var f=false;d(this.options.handle,c).find("*").andSelf().each(function(){if(this==a.target)f=true});if(!f)return false}this.currentItem= +c;this._removeCurrentsFromItems();return true},_mouseStart:function(a,b,c){b=this.options;var e=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(a);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");d.extend(this.offset, +{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();b.containment&&this._setContainment(); +if(b.cursor){if(d("body").css("cursor"))this._storedCursor=d("body").css("cursor");d("body").css("cursor",b.cursor)}if(b.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",b.opacity)}if(b.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex",b.zIndex)}if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML")this.overflowOffset=this.scrollParent.offset();this._trigger("start", +a,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!c)for(c=this.containers.length-1;c>=0;c--)this.containers[c]._trigger("activate",a,e._uiHash(this));if(d.ui.ddmanager)d.ui.ddmanager.current=this;d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(a);return true},_mouseDrag:function(a){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute"); +if(!this.lastPositionAbs)this.lastPositionAbs=this.positionAbs;if(this.options.scroll){var b=this.options,c=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if(this.overflowOffset.top+this.scrollParent[0].offsetHeight-a.pageY=0;b--){c=this.items[b];var e=c.item[0],f=this._intersectsWithPointer(c);if(f)if(e!=this.currentItem[0]&&this.placeholder[f==1?"next":"prev"]()[0]!=e&&!d.ui.contains(this.placeholder[0],e)&&(this.options.type=="semi-dynamic"?!d.ui.contains(this.element[0],e):true)){this.direction=f==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(c))this._rearrange(a, +c);else break;this._trigger("change",a,this._uiHash());break}}this._contactContainers(a);d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);this._trigger("sort",a,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(a,b){if(a){d.ui.ddmanager&&!this.options.dropBehaviour&&d.ui.ddmanager.drop(this,a);if(this.options.revert){var c=this;b=c.placeholder.offset();c.reverting=true;d(this.helper).animate({left:b.left-this.offset.parent.left-c.margins.left+(this.offsetParent[0]== +document.body?0:this.offsetParent[0].scrollLeft),top:b.top-this.offset.parent.top-c.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){c._clear(a)})}else this._clear(a,b);return false}},cancel:function(){var a=this;if(this.dragging){this._mouseUp({target:null});this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var b=this.containers.length- +1;b>=0;b--){this.containers[b]._trigger("deactivate",null,a._uiHash(this));if(this.containers[b].containerCache.over){this.containers[b]._trigger("out",null,a._uiHash(this));this.containers[b].containerCache.over=0}}}if(this.placeholder){this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove();d.extend(this,{helper:null,dragging:false,reverting:false,_noFinalSort:null}); +this.domPosition.prev?d(this.domPosition.prev).after(this.currentItem):d(this.domPosition.parent).prepend(this.currentItem)}return this},serialize:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};d(b).each(function(){var e=(d(a.item||this).attr(a.attribute||"id")||"").match(a.expression||/(.+)[-=_](.+)/);if(e)c.push((a.key||e[1]+"[]")+"="+(a.key&&a.expression?e[1]:e[2]))});!c.length&&a.key&&c.push(a.key+"=");return c.join("&")},toArray:function(a){var b=this._getItemsAsjQuery(a&& +a.connected),c=[];a=a||{};b.each(function(){c.push(d(a.item||this).attr(a.attribute||"id")||"")});return c},_intersectsWith:function(a){var b=this.positionAbs.left,c=b+this.helperProportions.width,e=this.positionAbs.top,f=e+this.helperProportions.height,g=a.left,h=g+a.width,i=a.top,k=i+a.height,j=this.offset.click.top,l=this.offset.click.left;j=e+j>i&&e+jg&&b+la[this.floating?"width":"height"]?j:g0?"down":"up")},_getDragHorizontalDirection:function(){var a=this.positionAbs.left-this.lastPositionAbs.left;return a!=0&&(a>0?"right":"left")},refresh:function(a){this._refreshItems(a);this.refreshPositions();return this},_connectWith:function(){var a=this.options;return a.connectWith.constructor==String?[a.connectWith]:a.connectWith},_getItemsAsjQuery:function(a){var b=[],c=[],e=this._connectWith();if(e&&a)for(a=e.length-1;a>=0;a--)for(var f=d(e[a]),g=f.length-1;g>=0;g--){var h= +d.data(f[g],"sortable");if(h&&h!=this&&!h.options.disabled)c.push([d.isFunction(h.options.items)?h.options.items.call(h.element):d(h.options.items,h.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),h])}c.push([d.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):d(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]);for(a=c.length-1;a>=0;a--)c[a][0].each(function(){b.push(this)}); +return d(b)},_removeCurrentsFromItems:function(){for(var a=this.currentItem.find(":data(sortable-item)"),b=0;b=0;f--)for(var g= +d(e[f]),h=g.length-1;h>=0;h--){var i=d.data(g[h],"sortable");if(i&&i!=this&&!i.options.disabled){c.push([d.isFunction(i.options.items)?i.options.items.call(i.element[0],a,{item:this.currentItem}):d(i.options.items,i.element),i]);this.containers.push(i)}}for(f=c.length-1;f>=0;f--){a=c[f][1];e=c[f][0];h=0;for(g=e.length;h=0;b--){var c=this.items[b],e=this.options.toleranceElement?d(this.options.toleranceElement,c.item):c.item;if(!a){c.width=e.outerWidth();c.height=e.outerHeight()}e=e.offset();c.left=e.left;c.top=e.top}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(b=this.containers.length-1;b>=0;b--){e=this.containers[b].element.offset();this.containers[b].containerCache.left=e.left;this.containers[b].containerCache.top= +e.top;this.containers[b].containerCache.width=this.containers[b].element.outerWidth();this.containers[b].containerCache.height=this.containers[b].element.outerHeight()}return this},_createPlaceholder:function(a){var b=a||this,c=b.options;if(!c.placeholder||c.placeholder.constructor==String){var e=c.placeholder;c.placeholder={element:function(){var f=d(document.createElement(b.currentItem[0].nodeName)).addClass(e||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0]; +if(!e)f.style.visibility="hidden";return f},update:function(f,g){if(!(e&&!c.forcePlaceholderSize)){g.height()||g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10));g.width()||g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")||0,10))}}}}b.placeholder=d(c.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder); +c.placeholder.update(b,b.placeholder)},_contactContainers:function(a){for(var b=null,c=null,e=this.containers.length-1;e>=0;e--)if(!d.ui.contains(this.currentItem[0],this.containers[e].element[0]))if(this._intersectsWith(this.containers[e].containerCache)){if(!(b&&d.ui.contains(this.containers[e].element[0],b.element[0]))){b=this.containers[e];c=e}}else if(this.containers[e].containerCache.over){this.containers[e]._trigger("out",a,this._uiHash(this));this.containers[e].containerCache.over=0}if(b)if(this.containers.length=== +1){this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}else if(this.currentContainer!=this.containers[c]){b=1E4;e=null;for(var f=this.positionAbs[this.containers[c].floating?"left":"top"],g=this.items.length-1;g>=0;g--)if(d.ui.contains(this.containers[c].element[0],this.items[g].item[0])){var h=this.items[g][this.containers[c].floating?"left":"top"];if(Math.abs(h-f)this.containment[2])f=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g-this.originalPageY)/b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.top< +this.containment[1]||g-this.offset.click.top>this.containment[3])?g:!(g-this.offset.click.topthis.containment[2])?f:!(f-this.offset.click.left=0;e--)if(d.ui.contains(this.containers[e].element[0], +this.currentItem[0])&&!b){c.push(function(f){return function(g){f._trigger("receive",g,this._uiHash(this))}}.call(this,this.containers[e]));c.push(function(f){return function(g){f._trigger("update",g,this._uiHash(this))}}.call(this,this.containers[e]))}}for(e=this.containers.length-1;e>=0;e--){b||c.push(function(f){return function(g){f._trigger("deactivate",g,this._uiHash(this))}}.call(this,this.containers[e]));if(this.containers[e].containerCache.over){c.push(function(f){return function(g){f._trigger("out", +g,this._uiHash(this))}}.call(this,this.containers[e]));this.containers[e].containerCache.over=0}}this._storedCursor&&d("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!b){this._trigger("beforeStop",a,this._uiHash());for(e=0;e li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var a=this,b=a.options;a.running=0;a.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix"); +a.headers=a.element.find(b.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){b.disabled||c(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){b.disabled||c(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){b.disabled||c(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){b.disabled||c(this).removeClass("ui-state-focus")});a.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom"); +if(b.navigation){var d=a.element.find("a").filter(b.navigationFilter).eq(0);if(d.length){var h=d.closest(".ui-accordion-header");a.active=h.length?h:d.closest(".ui-accordion-content").prev()}}a.active=a._findActive(a.active||b.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");a.active.next().addClass("ui-accordion-content-active");a._createIcons();a.resize();a.element.attr("role","tablist");a.headers.attr("role","tab").bind("keydown.accordion", +function(f){return a._keydown(f)}).next().attr("role","tabpanel");a.headers.not(a.active||"").attr({"aria-expanded":"false",tabIndex:-1}).next().hide();a.active.length?a.active.attr({"aria-expanded":"true",tabIndex:0}):a.headers.eq(0).attr("tabIndex",0);c.browser.safari||a.headers.find("a").attr("tabIndex",-1);b.event&&a.headers.bind(b.event.split(" ").join(".accordion ")+".accordion",function(f){a._clickHandler.call(a,f,this);f.preventDefault()})},_createIcons:function(){var a=this.options;if(a.icons){c("").addClass("ui-icon "+ +a.icons.header).prependTo(this.headers);this.active.children(".ui-icon").toggleClass(a.icons.header).toggleClass(a.icons.headerSelected);this.element.addClass("ui-accordion-icons")}},_destroyIcons:function(){this.headers.children(".ui-icon").remove();this.element.removeClass("ui-accordion-icons")},destroy:function(){var a=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("tabIndex"); +this.headers.find("a").removeAttr("tabIndex");this._destroyIcons();var b=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");if(a.autoHeight||a.fillHeight)b.css("height","");return c.Widget.prototype.destroy.call(this)},_setOption:function(a,b){c.Widget.prototype._setOption.apply(this,arguments);a=="active"&&this.activate(b);if(a=="icons"){this._destroyIcons(); +b&&this._createIcons()}if(a=="disabled")this.headers.add(this.headers.next())[b?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(a){if(!(this.options.disabled||a.altKey||a.ctrlKey)){var b=c.ui.keyCode,d=this.headers.length,h=this.headers.index(a.target),f=false;switch(a.keyCode){case b.RIGHT:case b.DOWN:f=this.headers[(h+1)%d];break;case b.LEFT:case b.UP:f=this.headers[(h-1+d)%d];break;case b.SPACE:case b.ENTER:this._clickHandler({target:a.target},a.target); +a.preventDefault()}if(f){c(a.target).attr("tabIndex",-1);c(f).attr("tabIndex",0);f.focus();return false}return true}},resize:function(){var a=this.options,b;if(a.fillSpace){if(c.browser.msie){var d=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}b=this.element.parent().height();c.browser.msie&&this.element.parent().css("overflow",d);this.headers.each(function(){b-=c(this).outerHeight(true)});this.headers.next().each(function(){c(this).height(Math.max(0,b-c(this).innerHeight()+ +c(this).height()))}).css("overflow","auto")}else if(a.autoHeight){b=0;this.headers.next().each(function(){b=Math.max(b,c(this).height("").height())}).height(b)}return this},activate:function(a){this.options.active=a;a=this._findActive(a)[0];this._clickHandler({target:a},a);return this},_findActive:function(a){return a?typeof a==="number"?this.headers.filter(":eq("+a+")"):this.headers.not(this.headers.not(a)):a===false?c([]):this.headers.filter(":eq(0)")},_clickHandler:function(a,b){var d=this.options; +if(!d.disabled)if(a.target){a=c(a.currentTarget||b);b=a[0]===this.active[0];d.active=d.collapsible&&b?false:this.headers.index(a);if(!(this.running||!d.collapsible&&b)){var h=this.active;j=a.next();g=this.active.next();e={options:d,newHeader:b&&d.collapsible?c([]):a,oldHeader:this.active,newContent:b&&d.collapsible?c([]):j,oldContent:g};var f=this.headers.index(this.active[0])>this.headers.index(a[0]);this.active=b?c([]):a;this._toggle(j,g,e,b,f);h.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header); +if(!b){a.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected);a.next().addClass("ui-accordion-content-active")}}}else if(d.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);this.active.next().addClass("ui-accordion-content-active");var g=this.active.next(), +e={options:d,newHeader:c([]),oldHeader:d.active,newContent:c([]),oldContent:g},j=this.active=c([]);this._toggle(j,g,e)}},_toggle:function(a,b,d,h,f){var g=this,e=g.options;g.toShow=a;g.toHide=b;g.data=d;var j=function(){if(g)return g._completed.apply(g,arguments)};g._trigger("changestart",null,g.data);g.running=b.size()===0?a.size():b.size();if(e.animated){d={};d=e.collapsible&&h?{toShow:c([]),toHide:b,complete:j,down:f,autoHeight:e.autoHeight||e.fillSpace}:{toShow:a,toHide:b,complete:j,down:f,autoHeight:e.autoHeight|| +e.fillSpace};if(!e.proxied)e.proxied=e.animated;if(!e.proxiedDuration)e.proxiedDuration=e.duration;e.animated=c.isFunction(e.proxied)?e.proxied(d):e.proxied;e.duration=c.isFunction(e.proxiedDuration)?e.proxiedDuration(d):e.proxiedDuration;h=c.ui.accordion.animations;var i=e.duration,k=e.animated;if(k&&!h[k]&&!c.easing[k])k="slide";h[k]||(h[k]=function(l){this.slide(l,{easing:k,duration:i||700})});h[k](d)}else{if(e.collapsible&&h)a.toggle();else{b.hide();a.show()}j(true)}b.prev().attr({"aria-expanded":"false", +tabIndex:-1}).blur();a.prev().attr({"aria-expanded":"true",tabIndex:0}).focus()},_completed:function(a){this.running=a?0:--this.running;if(!this.running){this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""});this.toHide.removeClass("ui-accordion-content-active");if(this.toHide.length)this.toHide.parent()[0].className=this.toHide.parent()[0].className;this._trigger("change",null,this.data)}}});c.extend(c.ui.accordion,{version:"1.8.10",animations:{slide:function(a,b){a= +c.extend({easing:"swing",duration:300},a,b);if(a.toHide.size())if(a.toShow.size()){var d=a.toShow.css("overflow"),h=0,f={},g={},e;b=a.toShow;e=b[0].style.width;b.width(parseInt(b.parent().width(),10)-parseInt(b.css("paddingLeft"),10)-parseInt(b.css("paddingRight"),10)-(parseInt(b.css("borderLeftWidth"),10)||0)-(parseInt(b.css("borderRightWidth"),10)||0));c.each(["height","paddingTop","paddingBottom"],function(j,i){g[i]="hide";j=(""+c.css(a.toShow[0],i)).match(/^([\d+-.]+)(.*)$/);f[i]={value:j[1], +unit:j[2]||"px"}});a.toShow.css({height:0,overflow:"hidden"}).show();a.toHide.filter(":hidden").each(a.complete).end().filter(":visible").animate(g,{step:function(j,i){if(i.prop=="height")h=i.end-i.start===0?0:(i.now-i.start)/(i.end-i.start);a.toShow[0].style[i.prop]=h*f[i.prop].value+f[i.prop].unit},duration:a.duration,easing:a.easing,complete:function(){a.autoHeight||a.toShow.css("height","");a.toShow.css({width:e,overflow:d});a.complete()}})}else a.toHide.animate({height:"hide",paddingTop:"hide", +paddingBottom:"hide"},a);else a.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},a)},bounceslide:function(a){this.slide(a,{easing:a.down?"easeOutBounce":"swing",duration:a.down?1E3:200})}}})})(jQuery); +;/* + * jQuery UI Autocomplete 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Autocomplete + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + * jquery.ui.position.js + */ +(function(d){var e=0;d.widget("ui.autocomplete",{options:{appendTo:"body",delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var a=this,b=this.element[0].ownerDocument,g;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(!(a.options.disabled||a.element.attr("readonly"))){g=false;var f=d.ui.keyCode; +switch(c.keyCode){case f.PAGE_UP:a._move("previousPage",c);break;case f.PAGE_DOWN:a._move("nextPage",c);break;case f.UP:a._move("previous",c);c.preventDefault();break;case f.DOWN:a._move("next",c);c.preventDefault();break;case f.ENTER:case f.NUMPAD_ENTER:if(a.menu.active){g=true;c.preventDefault()}case f.TAB:if(!a.menu.active)return;a.menu.select(c);break;case f.ESCAPE:a.element.val(a.term);a.close(c);break;default:clearTimeout(a.searching);a.searching=setTimeout(function(){if(a.term!=a.element.val()){a.selectedItem= +null;a.search(null,c)}},a.options.delay);break}}}).bind("keypress.autocomplete",function(c){if(g){g=false;c.preventDefault()}}).bind("focus.autocomplete",function(){if(!a.options.disabled){a.selectedItem=null;a.previous=a.element.val()}}).bind("blur.autocomplete",function(c){if(!a.options.disabled){clearTimeout(a.searching);a.closing=setTimeout(function(){a.close(c);a._change(c)},150)}});this._initSource();this.response=function(){return a._response.apply(a,arguments)};this.menu=d("
    ").addClass("ui-autocomplete").appendTo(d(this.options.appendTo|| +"body",b)[0]).mousedown(function(c){var f=a.menu.element[0];d(c.target).closest(".ui-menu-item").length||setTimeout(function(){d(document).one("mousedown",function(h){h.target!==a.element[0]&&h.target!==f&&!d.ui.contains(f,h.target)&&a.close()})},1);setTimeout(function(){clearTimeout(a.closing)},13)}).menu({focus:function(c,f){f=f.item.data("item.autocomplete");false!==a._trigger("focus",c,{item:f})&&/^key/.test(c.originalEvent.type)&&a.element.val(f.value)},selected:function(c,f){var h=f.item.data("item.autocomplete"), +i=a.previous;if(a.element[0]!==b.activeElement){a.element.focus();a.previous=i;setTimeout(function(){a.previous=i;a.selectedItem=h},1)}false!==a._trigger("select",c,{item:h})&&a.element.val(h.value);a.term=a.element.val();a.close(c);a.selectedItem=h},blur:function(){a.menu.element.is(":visible")&&a.element.val()!==a.term&&a.element.val(a.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu");d.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup"); +this.menu.element.remove();d.Widget.prototype.destroy.call(this)},_setOption:function(a,b){d.Widget.prototype._setOption.apply(this,arguments);a==="source"&&this._initSource();if(a==="appendTo")this.menu.element.appendTo(d(b||"body",this.element[0].ownerDocument)[0]);a==="disabled"&&b&&this.xhr&&this.xhr.abort()},_initSource:function(){var a=this,b,g;if(d.isArray(this.options.source)){b=this.options.source;this.source=function(c,f){f(d.ui.autocomplete.filter(b,c.term))}}else if(typeof this.options.source=== +"string"){g=this.options.source;this.source=function(c,f){a.xhr&&a.xhr.abort();a.xhr=d.ajax({url:g,data:c,dataType:"json",autocompleteRequest:++e,success:function(h){this.autocompleteRequest===e&&f(h)},error:function(){this.autocompleteRequest===e&&f([])}})}}else this.source=this.options.source},search:function(a,b){a=a!=null?a:this.element.val();this.term=this.element.val();if(a.length").data("item.autocomplete",b).append(d("
    ").text(b.label)).appendTo(a)},_move:function(a,b){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term);this.menu.deactivate()}else this.menu[a](b); +else this.search(null,b)},widget:function(){return this.menu.element}});d.extend(d.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")},filter:function(a,b){var g=new RegExp(d.ui.autocomplete.escapeRegex(b),"i");return d.grep(a,function(c){return g.test(c.label||c.value||c)})}})})(jQuery); +(function(d){d.widget("ui.menu",{_create:function(){var e=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(a){if(d(a.target).closest(".ui-menu-item a").length){a.preventDefault();e.select(a)}});this.refresh()},refresh:function(){var e=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex", +-1).mouseenter(function(a){e.activate(a,d(this).parent())}).mouseleave(function(){e.deactivate()})},activate:function(e,a){this.deactivate();if(this.hasScroll()){var b=a.offset().top-this.element.offset().top,g=this.element.attr("scrollTop"),c=this.element.height();if(b<0)this.element.attr("scrollTop",g+b);else b>=c&&this.element.attr("scrollTop",g+b-c+a.height())}this.active=a.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",e,{item:a})}, +deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id");this._trigger("blur");this.active=null}},next:function(e){this.move("next",".ui-menu-item:first",e)},previous:function(e){this.move("prev",".ui-menu-item:last",e)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(e,a,b){if(this.active){e=this.active[e+"All"](".ui-menu-item").eq(0); +e.length?this.activate(b,e):this.activate(b,this.element.children(a))}else this.activate(b,this.element.children(a))},nextPage:function(e){if(this.hasScroll())if(!this.active||this.last())this.activate(e,this.element.children(".ui-menu-item:first"));else{var a=this.active.offset().top,b=this.element.height(),g=this.element.children(".ui-menu-item").filter(function(){var c=d(this).offset().top-a-b+d(this).height();return c<10&&c>-10});g.length||(g=this.element.children(".ui-menu-item:last"));this.activate(e, +g)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active||this.last()?":first":":last"))},previousPage:function(e){if(this.hasScroll())if(!this.active||this.first())this.activate(e,this.element.children(".ui-menu-item:last"));else{var a=this.active.offset().top,b=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var g=d(this).offset().top-a+b-d(this).height();return g<10&&g>-10});result.length||(result=this.element.children(".ui-menu-item:first")); +this.activate(e,result)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active||this.first()?":last":":first"))},hasScroll:function(){return this.element.height()").addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),d=this.options.icons,f=d.primary&&d.secondary,e=[];if(d.primary||d.secondary){e.push("ui-button-text-icon"+(f?"s":d.primary?"-primary":"-secondary"));d.primary&&b.prepend("");d.secondary&&b.append("");if(!this.options.text){e.push(f?"ui-button-icons-only":"ui-button-icon-only"); +b.removeClass("ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary");this.hasTitle||b.attr("title",c)}}else e.push("ui-button-text-only");b.addClass(e.join(" "))}}});a.widget("ui.buttonset",{options:{items:":button, :submit, :reset, :checkbox, :radio, a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(b,c){b==="disabled"&&this.buttons.button("option",b,c);a.Widget.prototype._setOption.apply(this, +arguments)},refresh:function(){this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass("ui-corner-left").end().filter(":last").addClass("ui-corner-right").end().end()},destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy"); +a.Widget.prototype.destroy.call(this)}})})(jQuery); +;/* + * jQuery UI Dialog 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Dialog + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + * jquery.ui.button.js + * jquery.ui.draggable.js + * jquery.ui.mouse.js + * jquery.ui.position.js + * jquery.ui.resizable.js + */ +(function(c,j){var k={buttons:true,height:true,maxHeight:true,maxWidth:true,minHeight:true,minWidth:true,width:true},l={maxHeight:true,maxWidth:true,minHeight:true,minWidth:true};c.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,position:{my:"center",at:"center",collision:"fit",using:function(a){var b=c(this).css(a).offset().top;b<0&& +c(this).css("top",a.top-b)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");if(typeof this.originalTitle!=="string")this.originalTitle="";this.options.title=this.options.title||this.originalTitle;var a=this,b=a.options,d=b.title||" ",e=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("
    ")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex", +-1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(i){a.moveToTop(false,i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var f=(a.uiDialogTitlebar=c("
    ")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g),h=c('').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role", +"button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i);return false}).appendTo(f);(a.uiDialogTitlebarCloseText=c("")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("").addClass("ui-dialog-title").attr("id",e).html(d).prependTo(f);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose= +b.beforeclose;f.find("*").add(f).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.fn.bgiframe&&g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy();a.uiDialog.hide();a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");a.uiDialog.remove();a.originalTitle&& +a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(a){var b=this,d,e;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog");b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!==b.uiDialog[0]){e=c(this).css("z-index"); +isNaN(e)||(d=Math.max(d,e))}});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,e=d.options;if(e.modal&&!a||!e.stack&&!e.modal)return d._trigger("focus",b);if(e.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ=e.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.attr("scrollTop"),scrollLeft:d.element.attr("scrollLeft")};c.ui.dialog.maxZ+=1;d.uiDialog.css("z-index",c.ui.dialog.maxZ); +d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;a._size();a._position(b.position);d.show(b.show);a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(e){if(e.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),f=g.filter(":first");g=g.filter(":last");if(e.target===g[0]&&!e.shiftKey){f.focus(1);return false}else if(e.target===f[0]&&e.shiftKey){g.focus(1);return false}}}); +c(a.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus();a._isOpen=true;a._trigger("open");return a}},_createButtons:function(a){var b=this,d=false,e=c("
    ").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=c("
    ").addClass("ui-dialog-buttonset").appendTo(e);b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a,function(){return!(d=true)});if(d){c.each(a,function(f, +h){h=c.isFunction(h)?{click:h,text:f}:h;f=c('').attr(h,true).unbind("click").click(function(){h.click.apply(b.element[0],arguments)}).appendTo(g);c.fn.button&&f.button()});e.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(f){return{position:f.position,offset:f.offset}}var b=this,d=b.options,e=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(f,h){g= +d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging");b._trigger("dragStart",f,a(h))},drag:function(f,h){b._trigger("drag",f,a(h))},stop:function(f,h){d.position=[h.position.left-e.scrollLeft(),h.position.top-e.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g);b._trigger("dragStop",f,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(f){return{originalPosition:f.originalPosition,originalSize:f.originalSize, +position:f.position,size:f.size}}a=a===j?this.options.resizable:a;var d=this,e=d.options,g=d.uiDialog.css("position");a=typeof a==="string"?a:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:e.maxWidth,maxHeight:e.maxHeight,minWidth:e.minWidth,minHeight:d._minHeight(),handles:a,start:function(f,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",f,b(h))},resize:function(f,h){d._trigger("resize",f,b(h))},stop:function(f, +h){c(this).removeClass("ui-dialog-resizing");e.height=c(this).height();e.width=c(this).width();d._trigger("resizeStop",f,b(h));c.ui.dialog.overlay.resize()}}).css("position",g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,a.height)},_position:function(a){var b=[],d=[0,0],e;if(a){if(typeof a==="string"||typeof a==="object"&&"0"in a){b=a.split?a.split(" "):[a[0],a[1]];if(b.length=== +1)b[1]=b[0];c.each(["left","top"],function(g,f){if(+b[g]===b[g]){d[g]=b[g];b[g]=f}});a={my:b.join(" "),at:b.join(" "),offset:d.join(" ")}}a=c.extend({},c.ui.dialog.prototype.options.position,a)}else a=c.ui.dialog.prototype.options.position;(e=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(c.extend({of:window},a));e||this.uiDialog.hide()},_setOptions:function(a){var b=this,d={},e=false;c.each(a,function(g,f){b._setOption(g,f);if(g in k)e=true;if(g in +l)d[g]=f});e&&this._size();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",d)},_setOption:function(a,b){var d=this,e=d.uiDialog;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":e.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?e.addClass("ui-dialog-disabled"):e.removeClass("ui-dialog-disabled"); +break;case "draggable":var g=e.is(":data(draggable)");g&&!b&&e.draggable("destroy");!g&&b&&d._makeDraggable();break;case "position":d._position(b);break;case "resizable":(g=e.is(":data(resizable)"))&&!b&&e.resizable("destroy");g&&typeof b==="string"&&e.resizable("option","handles",b);!g&&b!==false&&d._makeResizable(b);break;case "title":c(".ui-dialog-title",d.uiDialogTitlebar).html(""+(b||" "));break}c.Widget.prototype._setOption.apply(d,arguments)},_size:function(){var a=this.options,b,d,e= +this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0});if(a.minWidth>a.width)a.width=a.minWidth;b=this.uiDialog.css({height:"auto",width:a.width}).height();d=Math.max(0,a.minHeight-b);if(a.height==="auto")if(c.support.minHeight)this.element.css({minHeight:d,height:"auto"});else{this.uiDialog.show();a=this.element.css("height","auto").height();e||this.uiDialog.hide();this.element.height(Math.max(a,d))}else this.element.height(Math.max(a.height-b,0));this.uiDialog.is(":data(resizable)")&& +this.uiDialog.resizable("option","minHeight",this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.10",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "),create:function(a){if(this.instances.length=== +0){setTimeout(function(){c.ui.dialog.overlay.instances.length&&c(document).bind(c.ui.dialog.overlay.events,function(d){if(c(d.target).zIndex()").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(), +height:this.height()});c.fn.bgiframe&&b.bgiframe();this.instances.push(b);return b},destroy:function(a){var b=c.inArray(a,this.instances);b!=-1&&this.oldInstances.push(this.instances.splice(b,1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var d=0;c.each(this.instances,function(){d=Math.max(d,this.css("z-index"))});this.maxZ=d},height:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight); +b=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return a");if(!a.values)a.values=[this._valueMin(),this._valueMin()];if(a.values.length&&a.values.length!==2)a.values=[a.values[0],a.values[0]]}else this.range=d("
    ");this.range.appendTo(this.element).addClass("ui-slider-range");if(a.range==="min"||a.range==="max")this.range.addClass("ui-slider-range-"+a.range);this.range.addClass("ui-widget-header")}d(".ui-slider-handle",this.element).length===0&&d("").appendTo(this.element).addClass("ui-slider-handle"); +if(a.values&&a.values.length)for(;d(".ui-slider-handle",this.element).length").appendTo(this.element).addClass("ui-slider-handle");this.handles=d(".ui-slider-handle",this.element).addClass("ui-state-default ui-corner-all");this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(c){c.preventDefault()}).hover(function(){a.disabled||d(this).addClass("ui-state-hover")},function(){d(this).removeClass("ui-state-hover")}).focus(function(){if(a.disabled)d(this).blur(); +else{d(".ui-slider .ui-state-focus").removeClass("ui-state-focus");d(this).addClass("ui-state-focus")}}).blur(function(){d(this).removeClass("ui-state-focus")});this.handles.each(function(c){d(this).data("index.ui-slider-handle",c)});this.handles.keydown(function(c){var e=true,f=d(this).data("index.ui-slider-handle"),h,g,i;if(!b.options.disabled){switch(c.keyCode){case d.ui.keyCode.HOME:case d.ui.keyCode.END:case d.ui.keyCode.PAGE_UP:case d.ui.keyCode.PAGE_DOWN:case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:e= +false;if(!b._keySliding){b._keySliding=true;d(this).addClass("ui-state-active");h=b._start(c,f);if(h===false)return}break}i=b.options.step;h=b.options.values&&b.options.values.length?(g=b.values(f)):(g=b.value());switch(c.keyCode){case d.ui.keyCode.HOME:g=b._valueMin();break;case d.ui.keyCode.END:g=b._valueMax();break;case d.ui.keyCode.PAGE_UP:g=b._trimAlignValue(h+(b._valueMax()-b._valueMin())/5);break;case d.ui.keyCode.PAGE_DOWN:g=b._trimAlignValue(h-(b._valueMax()-b._valueMin())/5);break;case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:if(h=== +b._valueMax())return;g=b._trimAlignValue(h+i);break;case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:if(h===b._valueMin())return;g=b._trimAlignValue(h-i);break}b._slide(c,f,g);return e}}).keyup(function(c){var e=d(this).data("index.ui-slider-handle");if(b._keySliding){b._keySliding=false;b._stop(c,e);b._change(c,e);d(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider"); +this._mouseDestroy();return this},_mouseCapture:function(b){var a=this.options,c,e,f,h,g;if(a.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();c=this._normValueFromMouse({x:b.pageX,y:b.pageY});e=this._valueMax()-this._valueMin()+1;h=this;this.handles.each(function(i){var j=Math.abs(c-h.values(i));if(e>j){e=j;f=d(this);g=i}});if(a.range===true&&this.values(1)===a.min){g+=1;f=d(this.handles[g])}if(this._start(b, +g)===false)return false;this._mouseSliding=true;h._handleIndex=g;f.addClass("ui-state-active").focus();a=f.offset();this._clickOffset=!d(b.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:b.pageX-a.left-f.width()/2,top:b.pageY-a.top-f.height()/2-(parseInt(f.css("borderTopWidth"),10)||0)-(parseInt(f.css("borderBottomWidth"),10)||0)+(parseInt(f.css("marginTop"),10)||0)};this.handles.hasClass("ui-state-hover")||this._slide(b,g,c);return this._animateOff=true},_mouseStart:function(){return true}, +_mouseDrag:function(b){var a=this._normValueFromMouse({x:b.pageX,y:b.pageY});this._slide(b,this._handleIndex,a);return false},_mouseStop:function(b){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(b,this._handleIndex);this._change(b,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(b){var a; +if(this.orientation==="horizontal"){a=this.elementSize.width;b=b.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{a=this.elementSize.height;b=b.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}a=b/a;if(a>1)a=1;if(a<0)a=0;if(this.orientation==="vertical")a=1-a;b=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+a*b)},_start:function(b,a){var c={handle:this.handles[a],value:this.value()};if(this.options.values&&this.options.values.length){c.value= +this.values(a);c.values=this.values()}return this._trigger("start",b,c)},_slide:function(b,a,c){var e;if(this.options.values&&this.options.values.length){e=this.values(a?0:1);if(this.options.values.length===2&&this.options.range===true&&(a===0&&c>e||a===1&&c1){this.options.values[b]=this._trimAlignValue(a);this._refreshValue();this._change(null,b)}if(arguments.length)if(d.isArray(arguments[0])){c=this.options.values;e=arguments[0];for(f=0;f=this._valueMax())return this._valueMax();var a=this.options.step>0?this.options.step:1,c=(b-this._valueMin())%a;alignValue=b-c;if(Math.abs(c)*2>=a)alignValue+=c>0?a:-a;return parseFloat(alignValue.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max}, +_refreshValue:function(){var b=this.options.range,a=this.options,c=this,e=!this._animateOff?a.animate:false,f,h={},g,i,j,l;if(this.options.values&&this.options.values.length)this.handles.each(function(k){f=(c.values(k)-c._valueMin())/(c._valueMax()-c._valueMin())*100;h[c.orientation==="horizontal"?"left":"bottom"]=f+"%";d(this).stop(1,1)[e?"animate":"css"](h,a.animate);if(c.options.range===true)if(c.orientation==="horizontal"){if(k===0)c.range.stop(1,1)[e?"animate":"css"]({left:f+"%"},a.animate); +if(k===1)c.range[e?"animate":"css"]({width:f-g+"%"},{queue:false,duration:a.animate})}else{if(k===0)c.range.stop(1,1)[e?"animate":"css"]({bottom:f+"%"},a.animate);if(k===1)c.range[e?"animate":"css"]({height:f-g+"%"},{queue:false,duration:a.animate})}g=f});else{i=this.value();j=this._valueMin();l=this._valueMax();f=l!==j?(i-j)/(l-j)*100:0;h[c.orientation==="horizontal"?"left":"bottom"]=f+"%";this.handle.stop(1,1)[e?"animate":"css"](h,a.animate);if(b==="min"&&this.orientation==="horizontal")this.range.stop(1, +1)[e?"animate":"css"]({width:f+"%"},a.animate);if(b==="max"&&this.orientation==="horizontal")this.range[e?"animate":"css"]({width:100-f+"%"},{queue:false,duration:a.animate});if(b==="min"&&this.orientation==="vertical")this.range.stop(1,1)[e?"animate":"css"]({height:f+"%"},a.animate);if(b==="max"&&this.orientation==="vertical")this.range[e?"animate":"css"]({height:100-f+"%"},{queue:false,duration:a.animate})}}});d.extend(d.ui.slider,{version:"1.8.10"})})(jQuery); +;/* + * jQuery UI Tabs 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Tabs + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function(d,p){function u(){return++v}function w(){return++x}var v=0,x=0;d.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"
    ",remove:null,select:null,show:null,spinner:"Loading…",tabTemplate:"
  • #{label}
  • "},_create:function(){this._tabify(true)},_setOption:function(b,e){if(b=="selected")this.options.collapsible&& +e==this.options.selected||this.select(e);else{this.options[b]=e;this._tabify()}},_tabId:function(b){return b.title&&b.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+u()},_sanitizeSelector:function(b){return b.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+w());return d.cookie.apply(null,[b].concat(d.makeArray(arguments)))},_ui:function(b,e){return{tab:b,panel:e,index:this.anchors.index(b)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b= +d(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(b){function e(g,f){g.css("display","");!d.support.opacity&&f.opacity&&g[0].style.removeAttribute("filter")}var a=this,c=this.options,h=/^#.+/;this.list=this.element.find("ol,ul").eq(0);this.lis=d(" > li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return d("a",this)[0]});this.panels=d([]);this.anchors.each(function(g,f){var i=d(f).attr("href"),l=i.split("#")[0],q;if(l&&(l===location.toString().split("#")[0]|| +(q=d("base")[0])&&l===q.href)){i=f.hash;f.href=i}if(h.test(i))a.panels=a.panels.add(a.element.find(a._sanitizeSelector(i)));else if(i&&i!=="#"){d.data(f,"href.tabs",i);d.data(f,"load.tabs",i.replace(/#.*$/,""));i=a._tabId(f);f.href="#"+i;f=a.element.find("#"+i);if(!f.length){f=d(c.panelTemplate).attr("id",i).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(a.panels[g-1]||a.list);f.data("destroy.tabs",true)}a.panels=a.panels.add(f)}else c.disabled.push(g)});if(b){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all"); +this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(c.selected===p){location.hash&&this.anchors.each(function(g,f){if(f.hash==location.hash){c.selected=g;return false}});if(typeof c.selected!=="number"&&c.cookie)c.selected=parseInt(a._cookie(),10);if(typeof c.selected!=="number"&&this.lis.filter(".ui-tabs-selected").length)c.selected= +this.lis.index(this.lis.filter(".ui-tabs-selected"));c.selected=c.selected||(this.lis.length?0:-1)}else if(c.selected===null)c.selected=-1;c.selected=c.selected>=0&&this.anchors[c.selected]||c.selected<0?c.selected:0;c.disabled=d.unique(c.disabled.concat(d.map(this.lis.filter(".ui-state-disabled"),function(g){return a.lis.index(g)}))).sort();d.inArray(c.selected,c.disabled)!=-1&&c.disabled.splice(d.inArray(c.selected,c.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active"); +if(c.selected>=0&&this.anchors.length){a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash)).removeClass("ui-tabs-hide");this.lis.eq(c.selected).addClass("ui-tabs-selected ui-state-active");a.element.queue("tabs",function(){a._trigger("show",null,a._ui(a.anchors[c.selected],a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash))[0]))});this.load(c.selected)}d(window).bind("unload",function(){a.lis.add(a.anchors).unbind(".tabs");a.lis=a.anchors=a.panels=null})}else c.selected=this.lis.index(this.lis.filter(".ui-tabs-selected")); +this.element[c.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");c.cookie&&this._cookie(c.selected,c.cookie);b=0;for(var j;j=this.lis[b];b++)d(j)[d.inArray(b,c.disabled)!=-1&&!d(j).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");c.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(c.event!=="mouseover"){var k=function(g,f){f.is(":not(.ui-state-disabled)")&&f.addClass("ui-state-"+g)},n=function(g,f){f.removeClass("ui-state-"+ +g)};this.lis.bind("mouseover.tabs",function(){k("hover",d(this))});this.lis.bind("mouseout.tabs",function(){n("hover",d(this))});this.anchors.bind("focus.tabs",function(){k("focus",d(this).closest("li"))});this.anchors.bind("blur.tabs",function(){n("focus",d(this).closest("li"))})}var m,o;if(c.fx)if(d.isArray(c.fx)){m=c.fx[0];o=c.fx[1]}else m=o=c.fx;var r=o?function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.hide().removeClass("ui-tabs-hide").animate(o,o.duration||"normal", +function(){e(f,o);a._trigger("show",null,a._ui(g,f[0]))})}:function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");a._trigger("show",null,a._ui(g,f[0]))},s=m?function(g,f){f.animate(m,m.duration||"normal",function(){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");e(f,m);a.element.dequeue("tabs")})}:function(g,f){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");a.element.dequeue("tabs")}; +this.anchors.bind(c.event+".tabs",function(){var g=this,f=d(g).closest("li"),i=a.panels.filter(":not(.ui-tabs-hide)"),l=a.element.find(a._sanitizeSelector(g.hash));if(f.hasClass("ui-tabs-selected")&&!c.collapsible||f.hasClass("ui-state-disabled")||f.hasClass("ui-state-processing")||a.panels.filter(":animated").length||a._trigger("select",null,a._ui(this,l[0]))===false){this.blur();return false}c.selected=a.anchors.index(this);a.abort();if(c.collapsible)if(f.hasClass("ui-tabs-selected")){c.selected= +-1;c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){s(g,i)}).dequeue("tabs");this.blur();return false}else if(!i.length){c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this));this.blur();return false}c.cookie&&a._cookie(c.selected,c.cookie);if(l.length){i.length&&a.element.queue("tabs",function(){s(g,i)});a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier."; +d.browser.msie&&this.blur()});this.anchors.bind("click.tabs",function(){return false})},_getIndex:function(b){if(typeof b=="string")b=this.anchors.index(this.anchors.filter("[href$="+b+"]"));return b},destroy:function(){var b=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var e= +d.data(this,"href.tabs");if(e)this.href=e;var a=d(this).unbind(".tabs");d.each(["href","load","cache"],function(c,h){a.removeData(h+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){d.data(this,"destroy.tabs")?d(this).remove():d(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});b.cookie&&this._cookie(null,b.cookie);return this},add:function(b, +e,a){if(a===p)a=this.anchors.length;var c=this,h=this.options;e=d(h.tabTemplate.replace(/#\{href\}/g,b).replace(/#\{label\}/g,e));b=!b.indexOf("#")?b.replace("#",""):this._tabId(d("a",e)[0]);e.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var j=c.element.find("#"+b);j.length||(j=d(h.panelTemplate).attr("id",b).data("destroy.tabs",true));j.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(a>=this.lis.length){e.appendTo(this.list);j.appendTo(this.list[0].parentNode)}else{e.insertBefore(this.lis[a]); +j.insertBefore(this.panels[a])}h.disabled=d.map(h.disabled,function(k){return k>=a?++k:k});this._tabify();if(this.anchors.length==1){h.selected=0;e.addClass("ui-tabs-selected ui-state-active");j.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){c._trigger("show",null,c._ui(c.anchors[0],c.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[a],this.panels[a]));return this},remove:function(b){b=this._getIndex(b);var e=this.options,a=this.lis.eq(b).remove(),c=this.panels.eq(b).remove(); +if(a.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(b+(b+1=b?--h:h});this._tabify();this._trigger("remove",null,this._ui(a.find("a")[0],c[0]));return this},enable:function(b){b=this._getIndex(b);var e=this.options;if(d.inArray(b,e.disabled)!=-1){this.lis.eq(b).removeClass("ui-state-disabled");e.disabled=d.grep(e.disabled,function(a){return a!=b});this._trigger("enable",null, +this._ui(this.anchors[b],this.panels[b]));return this}},disable:function(b){b=this._getIndex(b);var e=this.options;if(b!=e.selected){this.lis.eq(b).addClass("ui-state-disabled");e.disabled.push(b);e.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[b],this.panels[b]))}return this},select:function(b){b=this._getIndex(b);if(b==-1)if(this.options.collapsible&&this.options.selected!=-1)b=this.options.selected;else return this;this.anchors.eq(b).trigger(this.options.event+".tabs");return this}, +load:function(b){b=this._getIndex(b);var e=this,a=this.options,c=this.anchors.eq(b)[0],h=d.data(c,"load.tabs");this.abort();if(!h||this.element.queue("tabs").length!==0&&d.data(c,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(b).addClass("ui-state-processing");if(a.spinner){var j=d("span",c);j.data("label.tabs",j.html()).html(a.spinner)}this.xhr=d.ajax(d.extend({},a.ajaxOptions,{url:h,success:function(k,n){e.element.find(e._sanitizeSelector(c.hash)).html(k);e._cleanup();a.cache&&d.data(c, +"cache.tabs",true);e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.success(k,n)}catch(m){}},error:function(k,n){e._cleanup();e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.error(k,n,b,c)}catch(m){}}}));e.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this}, +url:function(b,e){this.anchors.eq(b).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.10"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(b,e){var a=this,c=this.options,h=a._rotate||(a._rotate=function(j){clearTimeout(a.rotation);a.rotation=setTimeout(function(){var k=c.selected;a.select(++k')}function E(a,b){d.extend(a,b);for(var c in b)if(b[c]== +null||b[c]==G)a[c]=b[c];return a}d.extend(d.ui,{datepicker:{version:"1.8.10"}});var y=(new Date).getTime();d.extend(K.prototype,{markerClassName:"hasDatepicker",log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(a){E(this._defaults,a||{});return this},_attachDatepicker:function(a,b){var c=null;for(var e in this._defaults){var f=a.getAttribute("date:"+e);if(f){c=c||{};try{c[e]=eval(f)}catch(h){c[e]=f}}}e=a.nodeName.toLowerCase(); +f=e=="div"||e=="span";if(!a.id){this.uuid+=1;a.id="dp"+this.uuid}var i=this._newInst(d(a),f);i.settings=d.extend({},b||{},c||{});if(e=="input")this._connectDatepicker(a,i);else f&&this._inlineDatepicker(a,i)},_newInst:function(a,b){return{id:a[0].id.replace(/([^A-Za-z0-9_-])/g,"\\\\$1"),input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:!b?this.dpDiv:d('
    ')}}, +_connectDatepicker:function(a,b){var c=d(a);b.append=d([]);b.trigger=d([]);if(!c.hasClass(this.markerClassName)){this._attachments(c,b);c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});this._autoSize(b);d.data(a,"datepicker",b)}},_attachments:function(a,b){var c=this._get(b,"appendText"),e=this._get(b,"isRTL");b.append&& +b.append.remove();if(c){b.append=d(''+c+"");a[e?"before":"after"](b.append)}a.unbind("focus",this._showDatepicker);b.trigger&&b.trigger.remove();c=this._get(b,"showOn");if(c=="focus"||c=="both")a.focus(this._showDatepicker);if(c=="button"||c=="both"){c=this._get(b,"buttonText");var f=this._get(b,"buttonImage");b.trigger=d(this._get(b,"buttonImageOnly")?d("").addClass(this._triggerClass).attr({src:f,alt:c,title:c}):d('').addClass(this._triggerClass).html(f== +""?c:d("").attr({src:f,alt:c,title:c})));a[e?"before":"after"](b.trigger);b.trigger.click(function(){d.datepicker._datepickerShowing&&d.datepicker._lastInput==a[0]?d.datepicker._hideDatepicker():d.datepicker._showDatepicker(a[0]);return false})}},_autoSize:function(a){if(this._get(a,"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var e=function(f){for(var h=0,i=0,g=0;gh){h=f[g].length;i=g}return i};b.setMonth(e(this._get(a, +c.match(/MM/)?"monthNames":"monthNamesShort")));b.setDate(e(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a,b){var c=d(a);if(!c.hasClass(this.markerClassName)){c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});d.data(a,"datepicker",b);this._setDate(b,this._getDefaultDate(b), +true);this._updateDatepicker(b);this._updateAlternate(b);b.dpDiv.show()}},_dialogDatepicker:function(a,b,c,e,f){a=this._dialogInst;if(!a){this.uuid+=1;this._dialogInput=d('');this._dialogInput.keydown(this._doKeyDown);d("body").append(this._dialogInput);a=this._dialogInst=this._newInst(this._dialogInput,false);a.settings={};d.data(this._dialogInput[0],"datepicker",a)}E(a.settings,e||{}); +b=b&&b.constructor==Date?this._formatDate(a,b):b;this._dialogInput.val(b);this._pos=f?f.length?f:[f.pageX,f.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px");a.settings.onSelect=c;this._inDialog=true;this.dpDiv.addClass(this._dialogClass); +this._showDatepicker(this._dialogInput[0]);d.blockUI&&d.blockUI(this.dpDiv);d.data(this._dialogInput[0],"datepicker",a);return this},_destroyDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();d.removeData(a,"datepicker");if(e=="input"){c.append.remove();c.trigger.remove();b.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup", +this._doKeyUp)}else if(e=="div"||e=="span")b.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=false;c.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(e=="div"||e=="span")b.children("."+this._inlineClass).children().removeClass("ui-state-disabled");this._disabledInputs=d.map(this._disabledInputs, +function(f){return f==a?null:f})}},_disableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=true;c.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else if(e=="div"||e=="span")b.children("."+this._inlineClass).children().addClass("ui-state-disabled");this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null: +f});this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return false;for(var b=0;b-1}},_doKeyUp:function(a){a=d.datepicker._getInst(a.target);if(a.input.val()!=a.lastVal)try{if(d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),a.input?a.input.val():null,d.datepicker._getFormatConfig(a))){d.datepicker._setDateFromField(a);d.datepicker._updateAlternate(a);d.datepicker._updateDatepicker(a)}}catch(b){d.datepicker.log(b)}return true}, +_showDatepicker:function(a){a=a.target||a;if(a.nodeName.toLowerCase()!="input")a=d("input",a.parentNode)[0];if(!(d.datepicker._isDisabledDatepicker(a)||d.datepicker._lastInput==a)){var b=d.datepicker._getInst(a);d.datepicker._curInst&&d.datepicker._curInst!=b&&d.datepicker._curInst.dpDiv.stop(true,true);var c=d.datepicker._get(b,"beforeShow");E(b.settings,c?c.apply(a,[a,b]):{});b.lastVal=null;d.datepicker._lastInput=a;d.datepicker._setDateFromField(b);if(d.datepicker._inDialog)a.value="";if(!d.datepicker._pos){d.datepicker._pos= +d.datepicker._findPos(a);d.datepicker._pos[1]+=a.offsetHeight}var e=false;d(a).parents().each(function(){e|=d(this).css("position")=="fixed";return!e});if(e&&d.browser.opera){d.datepicker._pos[0]-=document.documentElement.scrollLeft;d.datepicker._pos[1]-=document.documentElement.scrollTop}c={left:d.datepicker._pos[0],top:d.datepicker._pos[1]};d.datepicker._pos=null;b.dpDiv.empty();b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});d.datepicker._updateDatepicker(b);c=d.datepicker._checkOffset(b, +c,e);b.dpDiv.css({position:d.datepicker._inDialog&&d.blockUI?"static":e?"fixed":"absolute",display:"none",left:c.left+"px",top:c.top+"px"});if(!b.inline){c=d.datepicker._get(b,"showAnim");var f=d.datepicker._get(b,"duration"),h=function(){d.datepicker._datepickerShowing=true;var i=b.dpDiv.find("iframe.ui-datepicker-cover");if(i.length){var g=d.datepicker._getBorders(b.dpDiv);i.css({left:-g[0],top:-g[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})}};b.dpDiv.zIndex(d(a).zIndex()+1);d.effects&& +d.effects[c]?b.dpDiv.show(c,d.datepicker._get(b,"showOptions"),f,h):b.dpDiv[c||"show"](c?f:null,h);if(!c||!f)h();b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus();d.datepicker._curInst=b}}},_updateDatepicker:function(a){var b=this,c=d.datepicker._getBorders(a.dpDiv);a.dpDiv.empty().append(this._generateHTML(a));var e=a.dpDiv.find("iframe.ui-datepicker-cover");e.length&&e.css({left:-c[0],top:-c[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()});a.dpDiv.find("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a").bind("mouseout", +function(){d(this).removeClass("ui-state-hover");this.className.indexOf("ui-datepicker-prev")!=-1&&d(this).removeClass("ui-datepicker-prev-hover");this.className.indexOf("ui-datepicker-next")!=-1&&d(this).removeClass("ui-datepicker-next-hover")}).bind("mouseover",function(){if(!b._isDisabledDatepicker(a.inline?a.dpDiv.parent()[0]:a.input[0])){d(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");d(this).addClass("ui-state-hover");this.className.indexOf("ui-datepicker-prev")!= +-1&&d(this).addClass("ui-datepicker-prev-hover");this.className.indexOf("ui-datepicker-next")!=-1&&d(this).addClass("ui-datepicker-next-hover")}}).end().find("."+this._dayOverClass+" a").trigger("mouseover").end();c=this._getNumberOfMonths(a);e=c[1];e>1?a.dpDiv.addClass("ui-datepicker-multi-"+e).css("width",17*e+"em"):a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");a.dpDiv[(c[0]!=1||c[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");a.dpDiv[(this._get(a, +"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");a==d.datepicker._curInst&&d.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&!a.input.is(":disabled")&&a.input[0]!=document.activeElement&&a.input.focus();if(a.yearshtml){var f=a.yearshtml;setTimeout(function(){f===a.yearshtml&&a.dpDiv.find("select.ui-datepicker-year:first").replaceWith(a.yearshtml);f=a.yearshtml=null},0)}},_getBorders:function(a){var b=function(c){return{thin:1,medium:2,thick:3}[c]||c};return[parseFloat(b(a.css("border-left-width"))), +parseFloat(b(a.css("border-top-width")))]},_checkOffset:function(a,b,c){var e=a.dpDiv.outerWidth(),f=a.dpDiv.outerHeight(),h=a.input?a.input.outerWidth():0,i=a.input?a.input.outerHeight():0,g=document.documentElement.clientWidth+d(document).scrollLeft(),j=document.documentElement.clientHeight+d(document).scrollTop();b.left-=this._get(a,"isRTL")?e-h:0;b.left-=c&&b.left==a.input.offset().left?d(document).scrollLeft():0;b.top-=c&&b.top==a.input.offset().top+i?d(document).scrollTop():0;b.left-=Math.min(b.left, +b.left+e>g&&g>e?Math.abs(b.left+e-g):0);b.top-=Math.min(b.top,b.top+f>j&&j>f?Math.abs(f+i):0);return b},_findPos:function(a){for(var b=this._get(this._getInst(a),"isRTL");a&&(a.type=="hidden"||a.nodeType!=1||d.expr.filters.hidden(a));)a=a[b?"previousSibling":"nextSibling"];a=d(a).offset();return[a.left,a.top]},_hideDatepicker:function(a){var b=this._curInst;if(!(!b||a&&b!=d.data(a,"datepicker")))if(this._datepickerShowing){a=this._get(b,"showAnim");var c=this._get(b,"duration"),e=function(){d.datepicker._tidyDialog(b); +this._curInst=null};d.effects&&d.effects[a]?b.dpDiv.hide(a,d.datepicker._get(b,"showOptions"),c,e):b.dpDiv[a=="slideDown"?"slideUp":a=="fadeIn"?"fadeOut":"hide"](a?c:null,e);a||e();if(a=this._get(b,"onClose"))a.apply(b.input?b.input[0]:null,[b.input?b.input.val():"",b]);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if(d.blockUI){d.unblockUI();d("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")}, +_checkExternalClick:function(a){if(d.datepicker._curInst){a=d(a.target);a[0].id!=d.datepicker._mainDivId&&a.parents("#"+d.datepicker._mainDivId).length==0&&!a.hasClass(d.datepicker.markerClassName)&&!a.hasClass(d.datepicker._triggerClass)&&d.datepicker._datepickerShowing&&!(d.datepicker._inDialog&&d.blockUI)&&d.datepicker._hideDatepicker()}},_adjustDate:function(a,b,c){a=d(a);var e=this._getInst(a[0]);if(!this._isDisabledDatepicker(a[0])){this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"): +0),c);this._updateDatepicker(e)}},_gotoToday:function(a){a=d(a);var b=this._getInst(a[0]);if(this._get(b,"gotoCurrent")&&b.currentDay){b.selectedDay=b.currentDay;b.drawMonth=b.selectedMonth=b.currentMonth;b.drawYear=b.selectedYear=b.currentYear}else{var c=new Date;b.selectedDay=c.getDate();b.drawMonth=b.selectedMonth=c.getMonth();b.drawYear=b.selectedYear=c.getFullYear()}this._notifyChange(b);this._adjustDate(a)},_selectMonthYear:function(a,b,c){a=d(a);var e=this._getInst(a[0]);e._selectingMonthYear= +false;e["selected"+(c=="M"?"Month":"Year")]=e["draw"+(c=="M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10);this._notifyChange(e);this._adjustDate(a)},_clickMonthYear:function(a){var b=this._getInst(d(a)[0]);b.input&&b._selectingMonthYear&&setTimeout(function(){b.input.focus()},0);b._selectingMonthYear=!b._selectingMonthYear},_selectDay:function(a,b,c,e){var f=d(a);if(!(d(e).hasClass(this._unselectableClass)||this._isDisabledDatepicker(f[0]))){f=this._getInst(f[0]);f.selectedDay=f.currentDay= +d("a",e).html();f.selectedMonth=f.currentMonth=b;f.selectedYear=f.currentYear=c;this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))}},_clearDate:function(a){a=d(a);this._getInst(a[0]);this._selectDate(a,"")},_selectDate:function(a,b){a=this._getInst(d(a)[0]);b=b!=null?b:this._formatDate(a);a.input&&a.input.val(b);this._updateAlternate(a);var c=this._get(a,"onSelect");if(c)c.apply(a.input?a.input[0]:null,[b,a]);else a.input&&a.input.trigger("change");if(a.inline)this._updateDatepicker(a); +else{this._hideDatepicker();this._lastInput=a.input[0];typeof a.input[0]!="object"&&a.input.focus();this._lastInput=null}},_updateAlternate:function(a){var b=this._get(a,"altField");if(b){var c=this._get(a,"altFormat")||this._get(a,"dateFormat"),e=this._getDate(a),f=this.formatDate(c,e,this._getFormatConfig(a));d(b).each(function(){d(this).val(f)})}},noWeekends:function(a){a=a.getDay();return[a>0&&a<6,""]},iso8601Week:function(a){a=new Date(a.getTime());a.setDate(a.getDate()+4-(a.getDay()||7));var b= +a.getTime();a.setMonth(0);a.setDate(1);return Math.floor(Math.round((b-a)/864E5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b=="object"?b.toString():b+"";if(b=="")return null;var e=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff;e=typeof e!="string"?e:(new Date).getFullYear()%100+parseInt(e,10);for(var f=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,h=(c?c.dayNames:null)||this._defaults.dayNames,i=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort, +g=(c?c.monthNames:null)||this._defaults.monthNames,j=c=-1,l=-1,u=-1,k=false,o=function(p){(p=z+1-1){j=1;l=u;do{e=this._getDaysInMonth(c,j-1);if(l<=e)break;j++;l-=e}while(1)}w=this._daylightSavingAdjust(new Date(c,j-1,l));if(w.getFullYear()!=c||w.getMonth()+1!=j||w.getDate()!=l)throw"Invalid date";return w},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y", +RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1E7,formatDate:function(a,b,c){if(!b)return"";var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames,h=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort;c=(c?c.monthNames:null)||this._defaults.monthNames;var i=function(o){(o=k+112?a.getHours()+2:0);return a},_setDate:function(a,b,c){var e=!b,f=a.selectedMonth,h=a.selectedYear;b=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay= +a.currentDay=b.getDate();a.drawMonth=a.selectedMonth=a.currentMonth=b.getMonth();a.drawYear=a.selectedYear=a.currentYear=b.getFullYear();if((f!=a.selectedMonth||h!=a.selectedYear)&&!c)this._notifyChange(a);this._adjustInstDate(a);if(a.input)a.input.val(e?"":this._formatDate(a))},_getDate:function(a){return!a.currentYear||a.input&&a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay))},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(), +b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),e=this._get(a,"showButtonPanel"),f=this._get(a,"hideIfNoPrevNext"),h=this._get(a,"navigationAsDateFormat"),i=this._getNumberOfMonths(a),g=this._get(a,"showCurrentAtPos"),j=this._get(a,"stepMonths"),l=i[0]!=1||i[1]!=1,u=this._daylightSavingAdjust(!a.currentDay?new Date(9999,9,9):new Date(a.currentYear,a.currentMonth,a.currentDay)),k=this._getMinMaxDate(a,"min"),o=this._getMinMaxDate(a,"max");g=a.drawMonth-g;var m=a.drawYear;if(g<0){g+=12;m--}if(o){var n= +this._daylightSavingAdjust(new Date(o.getFullYear(),o.getMonth()-i[0]*i[1]+1,o.getDate()));for(n=k&&nn;){g--;if(g<0){g=11;m--}}}a.drawMonth=g;a.drawYear=m;n=this._get(a,"prevText");n=!h?n:this.formatDate(n,this._daylightSavingAdjust(new Date(m,g-j,1)),this._getFormatConfig(a));n=this._canAdjustMonth(a,-1,m,g)?''+n+"":f?"":''+n+"";var r=this._get(a,"nextText");r=!h?r:this.formatDate(r,this._daylightSavingAdjust(new Date(m,g+j,1)),this._getFormatConfig(a));f=this._canAdjustMonth(a,+1,m,g)?''+r+"":f?"":''+r+"";j=this._get(a,"currentText");r=this._get(a,"gotoCurrent")&&a.currentDay?u:b;j=!h?j:this.formatDate(j,r,this._getFormatConfig(a));h=!a.inline?'":"";e=e?'
    '+(c?h:"")+(this._isInRange(a,r)?'":"")+(c?"":h)+"
    ":"";h=parseInt(this._get(a,"firstDay"),10);h=isNaN(h)?0:h;j=this._get(a,"showWeek");r=this._get(a,"dayNames");this._get(a,"dayNamesShort");var s=this._get(a,"dayNamesMin"),z= +this._get(a,"monthNames"),w=this._get(a,"monthNamesShort"),p=this._get(a,"beforeShowDay"),v=this._get(a,"showOtherMonths"),H=this._get(a,"selectOtherMonths");this._get(a,"calculateWeek");for(var L=this._getDefaultDate(a),I="",C=0;C1)switch(D){case 0:x+=" ui-datepicker-group-first";t=" ui-corner-"+(c?"right":"left");break;case i[1]- +1:x+=" ui-datepicker-group-last";t=" ui-corner-"+(c?"left":"right");break;default:x+=" ui-datepicker-group-middle";t="";break}x+='">'}x+='
    '+(/all|left/.test(t)&&C==0?c?f:n:"")+(/all|right/.test(t)&&C==0?c?n:f:"")+this._generateMonthYearHeader(a,g,m,k,o,C>0||D>0,z,w)+'
    ';var A=j?'":"";for(t=0;t<7;t++){var q= +(t+h)%7;A+="=5?' class="ui-datepicker-week-end"':"")+'>'+s[q]+""}x+=A+"";A=this._getDaysInMonth(m,g);if(m==a.selectedYear&&g==a.selectedMonth)a.selectedDay=Math.min(a.selectedDay,A);t=(this._getFirstDayOfMonth(m,g)-h+7)%7;A=l?6:Math.ceil((t+A)/7);q=this._daylightSavingAdjust(new Date(m,g,1-t));for(var O=0;O";var P=!j?"":'";for(t=0;t<7;t++){var F= +p?p.apply(a.input?a.input[0]:null,[q]):[true,""],B=q.getMonth()!=g,J=B&&!H||!F[0]||k&&qo;P+='";q.setDate(q.getDate()+1);q=this._daylightSavingAdjust(q)}x+= +P+""}g++;if(g>11){g=0;m++}x+="
    '+this._get(a,"weekHeader")+"
    '+this._get(a,"calculateWeek")(q)+""+(B&&!v?" ":J?''+q.getDate()+"":''+q.getDate()+"")+"
    "+(l?""+(i[0]>0&&D==i[1]-1?'
    ':""):"");M+=x}I+=M}I+=e+(d.browser.msie&&parseInt(d.browser.version,10)<7&&!a.inline?'':"");a._keyEvent=false;return I},_generateMonthYearHeader:function(a,b,c,e,f,h,i,g){var j=this._get(a,"changeMonth"),l=this._get(a,"changeYear"),u=this._get(a,"showMonthAfterYear"),k='
    ', +o="";if(h||!j)o+=''+i[b]+"";else{i=e&&e.getFullYear()==c;var m=f&&f.getFullYear()==c;o+='"}u||(k+=o+(h||!(j&& +l)?" ":""));a.yearshtml="";if(h||!l)k+=''+c+"";else{g=this._get(a,"yearRange").split(":");var r=(new Date).getFullYear();i=function(s){s=s.match(/c[+-].*/)?c+parseInt(s.substring(1),10):s.match(/[+-].*/)?r+parseInt(s,10):parseInt(s,10);return isNaN(s)?r:s};b=i(g[0]);g=Math.max(b,i(g[1]||""));b=e?Math.max(b,e.getFullYear()):b;g=f?Math.min(g,f.getFullYear()):g;for(a.yearshtml+='";if(d.browser.mozilla)k+='";else{k+=a.yearshtml;a.yearshtml=null}}k+=this._get(a,"yearSuffix");if(u)k+=(h||!(j&&l)?" ":"")+o;k+="
    ";return k},_adjustInstDate:function(a,b,c){var e= +a.drawYear+(c=="Y"?b:0),f=a.drawMonth+(c=="M"?b:0);b=Math.min(a.selectedDay,this._getDaysInMonth(e,f))+(c=="D"?b:0);e=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(e,f,b)));a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();if(c=="M"||c=="Y")this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");b=c&&ba?a:b},_notifyChange:function(a){var b=this._get(a, +"onChangeMonthYear");if(b)b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return a==null?[1,1]:typeof a=="number"?[1,a]:a},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,e){var f=this._getNumberOfMonths(a); +c=this._daylightSavingAdjust(new Date(c,e+(b<0?b:f[0]*f[1]),1));b<0&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!a||b.getTime()<=a.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a, +"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,e){if(!b){a.currentDay=a.selectedDay;a.currentMonth=a.selectedMonth;a.currentYear=a.selectedYear}b=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(e,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});d.fn.datepicker= +function(a){if(!this.length)return this;if(!d.datepicker.initialized){d(document).mousedown(d.datepicker._checkExternalClick).find("body").append(d.datepicker.dpDiv);d.datepicker.initialized=true}var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));if(a=="option"&&arguments.length==2&&typeof arguments[1]=="string")return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker, +[this[0]].concat(b));return this.each(function(){typeof a=="string"?d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this].concat(b)):d.datepicker._attachDatepicker(this,a)})};d.datepicker=new K;d.datepicker.initialized=false;d.datepicker.uuid=(new Date).getTime();d.datepicker.version="1.8.10";window["DP_jQuery_"+y]=d})(jQuery); +;/* + * jQuery UI Progressbar 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Progressbar + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function(b,d){b.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()});this.valueDiv=b("
    ").appendTo(this.element);this.oldValue=this._value();this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"); +this.valueDiv.remove();b.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===d)return this._value();this._setOption("value",a);return this},_setOption:function(a,c){if(a==="value"){this.options.value=c;this._refreshValue();this._value()===this.options.max&&this._trigger("complete")}b.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;if(typeof a!=="number")a=0;return Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100* +this._value()/this.options.max},_refreshValue:function(){var a=this.value(),c=this._percentage();if(this.oldValue!==a){this.oldValue=a;this._trigger("change")}this.valueDiv.toggleClass("ui-corner-right",a===this.options.max).width(c.toFixed(0)+"%");this.element.attr("aria-valuenow",a)}});b.extend(b.ui.progressbar,{version:"1.8.10"})})(jQuery); +;/* + * jQuery UI Effects 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/ + */ +jQuery.effects||function(f,j){function n(c){var a;if(c&&c.constructor==Array&&c.length==3)return c;if(a=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c))return[parseInt(a[1],10),parseInt(a[2],10),parseInt(a[3],10)];if(a=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c))return[parseFloat(a[1])*2.55,parseFloat(a[2])*2.55,parseFloat(a[3])*2.55];if(a=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c))return[parseInt(a[1], +16),parseInt(a[2],16),parseInt(a[3],16)];if(a=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c))return[parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16)];if(/rgba\(0, 0, 0, 0\)/.exec(c))return o.transparent;return o[f.trim(c).toLowerCase()]}function s(c,a){var b;do{b=f.curCSS(c,a);if(b!=""&&b!="transparent"||f.nodeName(c,"body"))break;a="backgroundColor"}while(c=c.parentNode);return n(b)}function p(){var c=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle, +a={},b,d;if(c&&c.length&&c[0]&&c[c[0]])for(var e=c.length;e--;){b=c[e];if(typeof c[b]=="string"){d=b.replace(/\-(\w)/g,function(g,h){return h.toUpperCase()});a[d]=c[b]}}else for(b in c)if(typeof c[b]==="string")a[b]=c[b];return a}function q(c){var a,b;for(a in c){b=c[a];if(b==null||f.isFunction(b)||a in t||/scrollbar/.test(a)||!/color/i.test(a)&&isNaN(parseFloat(b)))delete c[a]}return c}function u(c,a){var b={_:0},d;for(d in a)if(c[d]!=a[d])b[d]=a[d];return b}function k(c,a,b,d){if(typeof c=="object"){d= +a;b=null;a=c;c=a.effect}if(f.isFunction(a)){d=a;b=null;a={}}if(typeof a=="number"||f.fx.speeds[a]){d=b;b=a;a={}}if(f.isFunction(b)){d=b;b=null}a=a||{};b=b||a.duration;b=f.fx.off?0:typeof b=="number"?b:b in f.fx.speeds?f.fx.speeds[b]:f.fx.speeds._default;d=d||a.complete;return[c,a,b,d]}function m(c){if(!c||typeof c==="number"||f.fx.speeds[c])return true;if(typeof c==="string"&&!f.effects[c])return true;return false}f.effects={};f.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor", +"borderTopColor","borderColor","color","outlineColor"],function(c,a){f.fx.step[a]=function(b){if(!b.colorInit){b.start=s(b.elem,a);b.end=n(b.end);b.colorInit=true}b.elem.style[a]="rgb("+Math.max(Math.min(parseInt(b.pos*(b.end[0]-b.start[0])+b.start[0],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[1]-b.start[1])+b.start[1],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[2]-b.start[2])+b.start[2],10),255),0)+")"}});var o={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0, +0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211, +211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},r=["add","remove","toggle"],t={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};f.effects.animateClass=function(c,a,b, +d){if(f.isFunction(b)){d=b;b=null}return this.queue("fx",function(){var e=f(this),g=e.attr("style")||" ",h=q(p.call(this)),l,v=e.attr("className");f.each(r,function(w,i){c[i]&&e[i+"Class"](c[i])});l=q(p.call(this));e.attr("className",v);e.animate(u(h,l),a,b,function(){f.each(r,function(w,i){c[i]&&e[i+"Class"](c[i])});if(typeof e.attr("style")=="object"){e.attr("style").cssText="";e.attr("style").cssText=g}else e.attr("style",g);d&&d.apply(this,arguments)});h=f.queue(this);l=h.splice(h.length-1,1)[0]; +h.splice(1,0,l);f.dequeue(this)})};f.fn.extend({_addClass:f.fn.addClass,addClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{add:c},a,b,d]):this._addClass(c)},_removeClass:f.fn.removeClass,removeClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{remove:c},a,b,d]):this._removeClass(c)},_toggleClass:f.fn.toggleClass,toggleClass:function(c,a,b,d,e){return typeof a=="boolean"||a===j?b?f.effects.animateClass.apply(this,[a?{add:c}:{remove:c},b,d,e]):this._toggleClass(c, +a):f.effects.animateClass.apply(this,[{toggle:c},a,b,d])},switchClass:function(c,a,b,d,e){return f.effects.animateClass.apply(this,[{add:a,remove:c},b,d,e])}});f.extend(f.effects,{version:"1.8.10",save:function(c,a){for(var b=0;b").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent", +border:"none",margin:0,padding:0});c.wrap(b);b=c.parent();if(c.css("position")=="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(d,e){a[e]=c.css(e);if(isNaN(parseInt(a[e],10)))a[e]="auto"});c.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}return b.css(a).show()},removeWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent().replaceWith(c); +return c},setTransition:function(c,a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=k.apply(this,arguments),b={options:a[1],duration:a[2],callback:a[3]};a=b.options.mode;var d=f.effects[c];if(f.fx.off||!d)return a?this[a](b.duration,b.callback):this.each(function(){b.callback&&b.callback.call(this)});return d.call(this,b)},_show:f.fn.show,show:function(c){if(m(c))return this._show.apply(this,arguments); +else{var a=k.apply(this,arguments);a[1].mode="show";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(m(c))return this._hide.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="hide";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(m(c)||typeof c==="boolean"||f.isFunction(c))return this.__toggle.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="toggle";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c), +b=[];f.each(["em","px","%","pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c, +a,b,d,e){return d*((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+b},easeInQuint:function(c,a,b,d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c, +a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2,10*(a/e-1))+b},easeOutExpo:function(c,a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a== +e)return b+d;if((a/=e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)*a)+1)+b},easeInElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h").css({position:"absolute",visibility:"visible",left:-f*(h/d),top:-e*(i/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:h/d,height:i/c,left:g.left+f*(h/d)+(a.options.mode=="show"?(f-Math.floor(d/2))*(h/d):0),top:g.top+e*(i/c)+(a.options.mode=="show"?(e-Math.floor(c/2))*(i/c):0),opacity:a.options.mode=="show"?0:1}).animate({left:g.left+f*(h/d)+(a.options.mode=="show"?0:(f-Math.floor(d/2))*(h/d)),top:g.top+ +e*(i/c)+(a.options.mode=="show"?0:(e-Math.floor(c/2))*(i/c)),opacity:a.options.mode=="show"?1:0},a.duration||500);setTimeout(function(){a.options.mode=="show"?b.css({visibility:"visible"}):b.css({visibility:"visible"}).hide();a.callback&&a.callback.apply(b[0]);b.dequeue();j("div.ui-effects-explode").remove()},a.duration||500)})}})(jQuery); +;/* + * jQuery UI Effects Fade 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Fade + * + * Depends: + * jquery.effects.core.js + */ +(function(b){b.effects.fade=function(a){return this.queue(function(){var c=b(this),d=b.effects.setMode(c,a.options.mode||"hide");c.animate({opacity:d},{queue:false,duration:a.duration,easing:a.options.easing,complete:function(){a.callback&&a.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery); +;/* + * jQuery UI Effects Fold 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Fold + * + * Depends: + * jquery.effects.core.js + */ +(function(c){c.effects.fold=function(a){return this.queue(function(){var b=c(this),j=["position","top","bottom","left","right"],d=c.effects.setMode(b,a.options.mode||"hide"),g=a.options.size||15,h=!!a.options.horizFirst,k=a.duration?a.duration/2:c.fx.speeds._default/2;c.effects.save(b,j);b.show();var e=c.effects.createWrapper(b).css({overflow:"hidden"}),f=d=="show"!=h,l=f?["width","height"]:["height","width"];f=f?[e.width(),e.height()]:[e.height(),e.width()];var i=/([0-9]+)%/.exec(g);if(i)g=parseInt(i[1], +10)/100*f[d=="hide"?0:1];if(d=="show")e.css(h?{height:0,width:g}:{height:g,width:0});h={};i={};h[l[0]]=d=="show"?f[0]:g;i[l[1]]=d=="show"?f[1]:0;e.animate(h,k,a.options.easing).animate(i,k,a.options.easing,function(){d=="hide"&&b.hide();c.effects.restore(b,j);c.effects.removeWrapper(b);a.callback&&a.callback.apply(b[0],arguments);b.dequeue()})})}})(jQuery); +;/* + * jQuery UI Effects Highlight 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Highlight + * + * Depends: + * jquery.effects.core.js + */ +(function(b){b.effects.highlight=function(c){return this.queue(function(){var a=b(this),e=["backgroundImage","backgroundColor","opacity"],d=b.effects.setMode(a,c.options.mode||"show"),f={backgroundColor:a.css("backgroundColor")};if(d=="hide")f.opacity=0;b.effects.save(a,e);a.show().css({backgroundImage:"none",backgroundColor:c.options.color||"#ffff99"}).animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){d=="hide"&&a.hide();b.effects.restore(a,e);d=="show"&&!b.support.opacity&& +this.style.removeAttribute("filter");c.callback&&c.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery); +;/* + * jQuery UI Effects Pulsate 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Pulsate + * + * Depends: + * jquery.effects.core.js + */ +(function(d){d.effects.pulsate=function(a){return this.queue(function(){var b=d(this),c=d.effects.setMode(b,a.options.mode||"show");times=(a.options.times||5)*2-1;duration=a.duration?a.duration/2:d.fx.speeds._default/2;isVisible=b.is(":visible");animateTo=0;if(!isVisible){b.css("opacity",0).show();animateTo=1}if(c=="hide"&&isVisible||c=="show"&&!isVisible)times--;for(c=0;c').appendTo(document.body).addClass(a.options.className).css({top:d.top,left:d.left,height:b.innerHeight(),width:b.innerWidth(),position:"absolute"}).animate(c,a.duration,a.options.easing,function(){f.remove();a.callback&&a.callback.apply(b[0],arguments); +b.dequeue()})})}})(jQuery); +; \ No newline at end of file diff --git a/js/ui/i18n/jquery-ui-i18n.js b/js/ui/i18n/jquery-ui-i18n.js new file mode 100644 index 0000000000..7d207d976d --- /dev/null +++ b/js/ui/i18n/jquery-ui-i18n.js @@ -0,0 +1,1357 @@ +/* Afrikaans initialisation for the jQuery UI date picker plugin. */ +/* Written by Renier Pretorius. */ +jQuery(function($){ + $.datepicker.regional['af'] = { + closeText: 'Selekteer', + prevText: 'Vorige', + nextText: 'Volgende', + currentText: 'Vandag', + monthNames: ['Januarie','Februarie','Maart','April','Mei','Junie', + 'Julie','Augustus','September','Oktober','November','Desember'], + monthNamesShort: ['Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun', + 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Des'], + dayNames: ['Sondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrydag', 'Saterdag'], + dayNamesShort: ['Son', 'Maa', 'Din', 'Woe', 'Don', 'Vry', 'Sat'], + dayNamesMin: ['So','Ma','Di','Wo','Do','Vr','Sa'], + weekHeader: 'Wk', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['af']); +}); +/* Algerian Arabic Translation for jQuery UI date picker plugin. (can be used for Tunisia)*/ +/* Mohamed Cherif BOUCHELAGHEM -- cherifbouchelaghem@yahoo.fr */ + +jQuery(function($){ + $.datepicker.regional['ar-DZ'] = { + closeText: 'إغلاق', + prevText: '<السابق', + nextText: 'التالي>', + currentText: 'اليوم', + monthNames: ['جانفي', 'فيفري', 'مارس', 'أفريل', 'ماي', 'جوان', + 'جويلية', 'أوت', 'سبتمبر','أكتوبر', 'نوفمبر', 'ديسمبر'], + monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'], + dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], + dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], + dayNamesMin: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], + weekHeader: 'أسبوع', + dateFormat: 'dd/mm/yy', + firstDay: 6, + isRTL: true, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['ar-DZ']); +}); +/* Arabic Translation for jQuery UI date picker plugin. */ +/* Khaled Alhourani -- me@khaledalhourani.com */ +/* NOTE: monthNames are the original months names and they are the Arabic names, not the new months name فبراير - يناير and there isn't any Arabic roots for these months */ +jQuery(function($){ + $.datepicker.regional['ar'] = { + closeText: 'إغلاق', + prevText: '<السابق', + nextText: 'التالي>', + currentText: 'اليوم', + monthNames: ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'آذار', 'حزيران', + 'تموز', 'آب', 'أيلول', 'تشرين الأول', 'تشرين الثاني', 'كانون الأول'], + monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'], + dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], + dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], + dayNamesMin: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], + weekHeader: 'أسبوع', + dateFormat: 'dd/mm/yy', + firstDay: 6, + isRTL: true, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['ar']); +});/* Azerbaijani (UTF-8) initialisation for the jQuery UI date picker plugin. */ +/* Written by Jamil Najafov (necefov33@gmail.com). */ +jQuery(function($) { + $.datepicker.regional['az'] = { + closeText: 'Bağla', + prevText: '<Geri', + nextText: 'İrəli>', + currentText: 'Bugün', + monthNames: ['Yanvar','Fevral','Mart','Aprel','May','İyun', + 'İyul','Avqust','Sentyabr','Oktyabr','Noyabr','Dekabr'], + monthNamesShort: ['Yan','Fev','Mar','Apr','May','İyun', + 'İyul','Avq','Sen','Okt','Noy','Dek'], + dayNames: ['Bazar','Bazar ertəsi','Çərşənbə axşamı','Çərşənbə','Cümə axşamı','Cümə','Şənbə'], + dayNamesShort: ['B','Be','Ça','Ç','Ca','C','Ş'], + dayNamesMin: ['B','B','Ç','С','Ç','C','Ş'], + weekHeader: 'Hf', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['az']); +});/* Bulgarian initialisation for the jQuery UI date picker plugin. */ +/* Written by Stoyan Kyosev (http://svest.org). */ +jQuery(function($){ + $.datepicker.regional['bg'] = { + closeText: 'затвори', + prevText: '<назад', + nextText: 'напред>', + nextBigText: '>>', + currentText: 'днес', + monthNames: ['Януари','Февруари','Март','Април','Май','Юни', + 'Юли','Август','Септември','Октомври','Ноември','Декември'], + monthNamesShort: ['Яну','Фев','Мар','Апр','Май','Юни', + 'Юли','Авг','Сеп','Окт','Нов','Дек'], + dayNames: ['Неделя','Понеделник','Вторник','Сряда','Четвъртък','Петък','Събота'], + dayNamesShort: ['Нед','Пон','Вто','Сря','Чет','Пет','Съб'], + dayNamesMin: ['Не','По','Вт','Ср','Че','Пе','Съ'], + weekHeader: 'Wk', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['bg']); +}); +/* Bosnian i18n for the jQuery UI date picker plugin. */ +/* Written by Kenan Konjo. */ +jQuery(function($){ + $.datepicker.regional['bs'] = { + closeText: 'Zatvori', + prevText: '<', + nextText: '>', + currentText: 'Danas', + monthNames: ['Januar','Februar','Mart','April','Maj','Juni', + 'Juli','August','Septembar','Oktobar','Novembar','Decembar'], + monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', + 'Jul','Aug','Sep','Okt','Nov','Dec'], + dayNames: ['Nedelja','Ponedeljak','Utorak','Srijeda','Četvrtak','Petak','Subota'], + dayNamesShort: ['Ned','Pon','Uto','Sri','Čet','Pet','Sub'], + dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'], + weekHeader: 'Wk', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['bs']); +});/* Inicialització en català per a l'extenció 'calendar' per jQuery. */ +/* Writers: (joan.leon@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['ca'] = { + closeText: 'Tancar', + prevText: '<Ant', + nextText: 'Seg>', + currentText: 'Avui', + monthNames: ['Gener','Febrer','Març','Abril','Maig','Juny', + 'Juliol','Agost','Setembre','Octubre','Novembre','Desembre'], + monthNamesShort: ['Gen','Feb','Mar','Abr','Mai','Jun', + 'Jul','Ago','Set','Oct','Nov','Des'], + dayNames: ['Diumenge','Dilluns','Dimarts','Dimecres','Dijous','Divendres','Dissabte'], + dayNamesShort: ['Dug','Dln','Dmt','Dmc','Djs','Dvn','Dsb'], + dayNamesMin: ['Dg','Dl','Dt','Dc','Dj','Dv','Ds'], + weekHeader: 'Sm', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['ca']); +});/* Czech initialisation for the jQuery UI date picker plugin. */ +/* Written by Tomas Muller (tomas@tomas-muller.net). */ +jQuery(function($){ + $.datepicker.regional['cs'] = { + closeText: 'Zavřít', + prevText: '<Dříve', + nextText: 'Později>', + currentText: 'Nyní', + monthNames: ['leden','únor','březen','duben','květen','červen', + 'červenec','srpen','září','říjen','listopad','prosinec'], + monthNamesShort: ['led','úno','bře','dub','kvě','čer', + 'čvc','srp','zář','říj','lis','pro'], + dayNames: ['neděle', 'pondělí', 'úterý', 'středa', 'čtvrtek', 'pátek', 'sobota'], + dayNamesShort: ['ne', 'po', 'út', 'st', 'čt', 'pá', 'so'], + dayNamesMin: ['ne','po','út','st','čt','pá','so'], + weekHeader: 'Týd', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['cs']); +}); +/* Danish initialisation for the jQuery UI date picker plugin. */ +/* Written by Jan Christensen ( deletestuff@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['da'] = { + closeText: 'Luk', + prevText: '<Forrige', + nextText: 'Næste>', + currentText: 'Idag', + monthNames: ['Januar','Februar','Marts','April','Maj','Juni', + 'Juli','August','September','Oktober','November','December'], + monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', + 'Jul','Aug','Sep','Okt','Nov','Dec'], + dayNames: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'], + dayNamesShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'], + dayNamesMin: ['Sø','Ma','Ti','On','To','Fr','Lø'], + weekHeader: 'Uge', + dateFormat: 'dd-mm-yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['da']); +}); +/* German initialisation for the jQuery UI date picker plugin. */ +/* Written by Milian Wolff (mail@milianw.de). */ +jQuery(function($){ + $.datepicker.regional['de'] = { + closeText: 'schließen', + prevText: '<zurück', + nextText: 'Vor>', + currentText: 'heute', + monthNames: ['Januar','Februar','März','April','Mai','Juni', + 'Juli','August','September','Oktober','November','Dezember'], + monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun', + 'Jul','Aug','Sep','Okt','Nov','Dez'], + dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'], + dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'], + dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'], + weekHeader: 'Wo', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['de']); +}); +/* Greek (el) initialisation for the jQuery UI date picker plugin. */ +/* Written by Alex Cicovic (http://www.alexcicovic.com) */ +jQuery(function($){ + $.datepicker.regional['el'] = { + closeText: 'Κλείσιμο', + prevText: 'Προηγούμενος', + nextText: 'Επόμενος', + currentText: 'Τρέχων Μήνας', + monthNames: ['Ιανουάριος','Φεβρουάριος','Μάρτιος','Απρίλιος','Μάιος','Ιούνιος', + 'Ιούλιος','Αύγουστος','Σεπτέμβριος','Οκτώβριος','Νοέμβριος','Δεκέμβριος'], + monthNamesShort: ['Ιαν','Φεβ','Μαρ','Απρ','Μαι','Ιουν', + 'Ιουλ','Αυγ','Σεπ','Οκτ','Νοε','Δεκ'], + dayNames: ['Κυριακή','Δευτέρα','Τρίτη','Τετάρτη','Πέμπτη','Παρασκευή','Σάββατο'], + dayNamesShort: ['Κυρ','Δευ','Τρι','Τετ','Πεμ','Παρ','Σαβ'], + dayNamesMin: ['Κυ','Δε','Τρ','Τε','Πε','Πα','Σα'], + weekHeader: 'Εβδ', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['el']); +});/* English/Australia initialisation for the jQuery UI date picker plugin. */ +/* Based on the en-GB initialisation. */ +jQuery(function($){ + $.datepicker.regional['en-AU'] = { + closeText: 'Done', + prevText: 'Prev', + nextText: 'Next', + currentText: 'Today', + monthNames: ['January','February','March','April','May','June', + 'July','August','September','October','November','December'], + monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', + 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], + dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], + dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], + dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], + weekHeader: 'Wk', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['en-AU']); +}); +/* English/UK initialisation for the jQuery UI date picker plugin. */ +/* Written by Stuart. */ +jQuery(function($){ + $.datepicker.regional['en-GB'] = { + closeText: 'Done', + prevText: 'Prev', + nextText: 'Next', + currentText: 'Today', + monthNames: ['January','February','March','April','May','June', + 'July','August','September','October','November','December'], + monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', + 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], + dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], + dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], + dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], + weekHeader: 'Wk', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['en-GB']); +}); +/* English/New Zealand initialisation for the jQuery UI date picker plugin. */ +/* Based on the en-GB initialisation. */ +jQuery(function($){ + $.datepicker.regional['en-NZ'] = { + closeText: 'Done', + prevText: 'Prev', + nextText: 'Next', + currentText: 'Today', + monthNames: ['January','February','March','April','May','June', + 'July','August','September','October','November','December'], + monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', + 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], + dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], + dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], + dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], + weekHeader: 'Wk', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['en-NZ']); +}); +/* Esperanto initialisation for the jQuery UI date picker plugin. */ +/* Written by Olivier M. (olivierweb@ifrance.com). */ +jQuery(function($){ + $.datepicker.regional['eo'] = { + closeText: 'Fermi', + prevText: '<Anta', + nextText: 'Sekv>', + currentText: 'Nuna', + monthNames: ['Januaro','Februaro','Marto','Aprilo','Majo','Junio', + 'Julio','Aŭgusto','Septembro','Oktobro','Novembro','Decembro'], + monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', + 'Jul','Aŭg','Sep','Okt','Nov','Dec'], + dayNames: ['Dimanĉo','Lundo','Mardo','Merkredo','Ĵaŭdo','Vendredo','Sabato'], + dayNamesShort: ['Dim','Lun','Mar','Mer','Ĵaŭ','Ven','Sab'], + dayNamesMin: ['Di','Lu','Ma','Me','Ĵa','Ve','Sa'], + weekHeader: 'Sb', + dateFormat: 'dd/mm/yy', + firstDay: 0, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['eo']); +}); +/* Inicialización en español para la extensión 'UI date picker' para jQuery. */ +/* Traducido por Vester (xvester@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['es'] = { + closeText: 'Cerrar', + prevText: '<Ant', + nextText: 'Sig>', + currentText: 'Hoy', + monthNames: ['Enero','Febrero','Marzo','Abril','Mayo','Junio', + 'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'], + monthNamesShort: ['Ene','Feb','Mar','Abr','May','Jun', + 'Jul','Ago','Sep','Oct','Nov','Dic'], + dayNames: ['Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado'], + dayNamesShort: ['Dom','Lun','Mar','Mié','Juv','Vie','Sáb'], + dayNamesMin: ['Do','Lu','Ma','Mi','Ju','Vi','Sá'], + weekHeader: 'Sm', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['es']); +});/* Estonian initialisation for the jQuery UI date picker plugin. */ +/* Written by Mart Sõmermaa (mrts.pydev at gmail com). */ +jQuery(function($){ + $.datepicker.regional['et'] = { + closeText: 'Sulge', + prevText: 'Eelnev', + nextText: 'Järgnev', + currentText: 'Täna', + monthNames: ['Jaanuar','Veebruar','Märts','Aprill','Mai','Juuni', + 'Juuli','August','September','Oktoober','November','Detsember'], + monthNamesShort: ['Jaan', 'Veebr', 'Märts', 'Apr', 'Mai', 'Juuni', + 'Juuli', 'Aug', 'Sept', 'Okt', 'Nov', 'Dets'], + dayNames: ['Pühapäev', 'Esmaspäev', 'Teisipäev', 'Kolmapäev', 'Neljapäev', 'Reede', 'Laupäev'], + dayNamesShort: ['Pühap', 'Esmasp', 'Teisip', 'Kolmap', 'Neljap', 'Reede', 'Laup'], + dayNamesMin: ['P','E','T','K','N','R','L'], + weekHeader: 'Sm', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['et']); +}); /* Euskarako oinarria 'UI date picker' jquery-ko extentsioarentzat */ +/* Karrikas-ek itzulia (karrikas@karrikas.com) */ +jQuery(function($){ + $.datepicker.regional['eu'] = { + closeText: 'Egina', + prevText: '<Aur', + nextText: 'Hur>', + currentText: 'Gaur', + monthNames: ['Urtarrila','Otsaila','Martxoa','Apirila','Maiatza','Ekaina', + 'Uztaila','Abuztua','Iraila','Urria','Azaroa','Abendua'], + monthNamesShort: ['Urt','Ots','Mar','Api','Mai','Eka', + 'Uzt','Abu','Ira','Urr','Aza','Abe'], + dayNames: ['Igandea','Astelehena','Asteartea','Asteazkena','Osteguna','Ostirala','Larunbata'], + dayNamesShort: ['Iga','Ast','Ast','Ast','Ost','Ost','Lar'], + dayNamesMin: ['Ig','As','As','As','Os','Os','La'], + weekHeader: 'Wk', + dateFormat: 'yy/mm/dd', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['eu']); +});/* Persian (Farsi) Translation for the jQuery UI date picker plugin. */ +/* Javad Mowlanezhad -- jmowla@gmail.com */ +/* Jalali calendar should supported soon! (Its implemented but I have to test it) */ +jQuery(function($) { + $.datepicker.regional['fa'] = { + closeText: 'بستن', + prevText: '<قبلي', + nextText: 'بعدي>', + currentText: 'امروز', + monthNames: ['فروردين','ارديبهشت','خرداد','تير','مرداد','شهريور', + 'مهر','آبان','آذر','دي','بهمن','اسفند'], + monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'], + dayNames: ['يکشنبه','دوشنبه','سه‌شنبه','چهارشنبه','پنجشنبه','جمعه','شنبه'], + dayNamesShort: ['ي','د','س','چ','پ','ج', 'ش'], + dayNamesMin: ['ي','د','س','چ','پ','ج', 'ش'], + weekHeader: 'هف', + dateFormat: 'yy/mm/dd', + firstDay: 6, + isRTL: true, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['fa']); +});/* Finnish initialisation for the jQuery UI date picker plugin. */ +/* Written by Harri Kilpi� (harrikilpio@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['fi'] = { + closeText: 'Sulje', + prevText: '«Edellinen', + nextText: 'Seuraava»', + currentText: 'Tänään', + monthNames: ['Tammikuu','Helmikuu','Maaliskuu','Huhtikuu','Toukokuu','Kesäkuu', + 'Heinäkuu','Elokuu','Syyskuu','Lokakuu','Marraskuu','Joulukuu'], + monthNamesShort: ['Tammi','Helmi','Maalis','Huhti','Touko','Kesä', + 'Heinä','Elo','Syys','Loka','Marras','Joulu'], + dayNamesShort: ['Su','Ma','Ti','Ke','To','Pe','Su'], + dayNames: ['Sunnuntai','Maanantai','Tiistai','Keskiviikko','Torstai','Perjantai','Lauantai'], + dayNamesMin: ['Su','Ma','Ti','Ke','To','Pe','La'], + weekHeader: 'Vk', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['fi']); +}); +/* Faroese initialisation for the jQuery UI date picker plugin */ +/* Written by Sverri Mohr Olsen, sverrimo@gmail.com */ +jQuery(function($){ + $.datepicker.regional['fo'] = { + closeText: 'Lat aftur', + prevText: '<Fyrra', + nextText: 'Næsta>', + currentText: 'Í dag', + monthNames: ['Januar','Februar','Mars','Apríl','Mei','Juni', + 'Juli','August','September','Oktober','November','Desember'], + monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun', + 'Jul','Aug','Sep','Okt','Nov','Des'], + dayNames: ['Sunnudagur','Mánadagur','Týsdagur','Mikudagur','Hósdagur','Fríggjadagur','Leyardagur'], + dayNamesShort: ['Sun','Mán','Týs','Mik','Hós','Frí','Ley'], + dayNamesMin: ['Su','Má','Tý','Mi','Hó','Fr','Le'], + weekHeader: 'Vk', + dateFormat: 'dd-mm-yy', + firstDay: 0, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['fo']); +}); +/* Swiss-French initialisation for the jQuery UI date picker plugin. */ +/* Written Martin Voelkle (martin.voelkle@e-tc.ch). */ +jQuery(function($){ + $.datepicker.regional['fr-CH'] = { + closeText: 'Fermer', + prevText: '<Préc', + nextText: 'Suiv>', + currentText: 'Courant', + monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin', + 'Juillet','Août','Septembre','Octobre','Novembre','Décembre'], + monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun', + 'Jul','Aoû','Sep','Oct','Nov','Déc'], + dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'], + dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'], + dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'], + weekHeader: 'Sm', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['fr-CH']); +});/* French initialisation for the jQuery UI date picker plugin. */ +/* Written by Keith Wood (kbwood{at}iinet.com.au), + Stéphane Nahmani (sholby@sholby.net), + Stéphane Raimbault */ +jQuery(function($){ + $.datepicker.regional['fr'] = { + closeText: 'Fermer', + prevText: 'Précédent', + nextText: 'Suivant', + currentText: 'Aujourd\'hui', + monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin', + 'Juillet','Août','Septembre','Octobre','Novembre','Décembre'], + monthNamesShort: ['Janv.','Févr.','Mars','Avril','Mai','Juin', + 'Juil.','Août','Sept.','Oct.','Nov.','Déc.'], + dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'], + dayNamesShort: ['Dim.','Lun.','Mar.','Mer.','Jeu.','Ven.','Sam.'], + dayNamesMin: ['D','L','M','M','J','V','S'], + weekHeader: 'Sem.', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['fr']); +}); +/* Galician localization for 'UI date picker' jQuery extension. */ +/* Translated by Jorge Barreiro . */ +jQuery(function($){ + $.datepicker.regional['gl'] = { + closeText: 'Pechar', + prevText: '<Ant', + nextText: 'Seg>', + currentText: 'Hoxe', + monthNames: ['Xaneiro','Febreiro','Marzo','Abril','Maio','Xuño', + 'Xullo','Agosto','Setembro','Outubro','Novembro','Decembro'], + monthNamesShort: ['Xan','Feb','Mar','Abr','Mai','Xuñ', + 'Xul','Ago','Set','Out','Nov','Dec'], + dayNames: ['Domingo','Luns','Martes','Mércores','Xoves','Venres','Sábado'], + dayNamesShort: ['Dom','Lun','Mar','Mér','Xov','Ven','Sáb'], + dayNamesMin: ['Do','Lu','Ma','Mé','Xo','Ve','Sá'], + weekHeader: 'Sm', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['gl']); +});/* Hebrew initialisation for the UI Datepicker extension. */ +/* Written by Amir Hardon (ahardon at gmail dot com). */ +jQuery(function($){ + $.datepicker.regional['he'] = { + closeText: 'סגור', + prevText: '<הקודם', + nextText: 'הבא>', + currentText: 'היום', + monthNames: ['ינואר','פברואר','מרץ','אפריל','מאי','יוני', + 'יולי','אוגוסט','ספטמבר','אוקטובר','נובמבר','דצמבר'], + monthNamesShort: ['1','2','3','4','5','6', + '7','8','9','10','11','12'], + dayNames: ['ראשון','שני','שלישי','רביעי','חמישי','שישי','שבת'], + dayNamesShort: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'], + dayNamesMin: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'], + weekHeader: 'Wk', + dateFormat: 'dd/mm/yy', + firstDay: 0, + isRTL: true, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['he']); +}); +/* Croatian i18n for the jQuery UI date picker plugin. */ +/* Written by Vjekoslav Nesek. */ +jQuery(function($){ + $.datepicker.regional['hr'] = { + closeText: 'Zatvori', + prevText: '<', + nextText: '>', + currentText: 'Danas', + monthNames: ['Siječanj','Veljača','Ožujak','Travanj','Svibanj','Lipanj', + 'Srpanj','Kolovoz','Rujan','Listopad','Studeni','Prosinac'], + monthNamesShort: ['Sij','Velj','Ožu','Tra','Svi','Lip', + 'Srp','Kol','Ruj','Lis','Stu','Pro'], + dayNames: ['Nedjelja','Ponedjeljak','Utorak','Srijeda','Četvrtak','Petak','Subota'], + dayNamesShort: ['Ned','Pon','Uto','Sri','Čet','Pet','Sub'], + dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'], + weekHeader: 'Tje', + dateFormat: 'dd.mm.yy.', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['hr']); +});/* Hungarian initialisation for the jQuery UI date picker plugin. */ +/* Written by Istvan Karaszi (jquery@spam.raszi.hu). */ +jQuery(function($){ + $.datepicker.regional['hu'] = { + closeText: 'bezárás', + prevText: '« vissza', + nextText: 'előre »', + currentText: 'ma', + monthNames: ['Január', 'Február', 'Március', 'Április', 'Május', 'Június', + 'Július', 'Augusztus', 'Szeptember', 'Október', 'November', 'December'], + monthNamesShort: ['Jan', 'Feb', 'Már', 'Ápr', 'Máj', 'Jún', + 'Júl', 'Aug', 'Szep', 'Okt', 'Nov', 'Dec'], + dayNames: ['Vasárnap', 'Hétfö', 'Kedd', 'Szerda', 'Csütörtök', 'Péntek', 'Szombat'], + dayNamesShort: ['Vas', 'Hét', 'Ked', 'Sze', 'Csü', 'Pén', 'Szo'], + dayNamesMin: ['V', 'H', 'K', 'Sze', 'Cs', 'P', 'Szo'], + weekHeader: 'Hé', + dateFormat: 'yy-mm-dd', + firstDay: 1, + isRTL: false, + showMonthAfterYear: true, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['hu']); +}); +/* Armenian(UTF-8) initialisation for the jQuery UI date picker plugin. */ +/* Written by Levon Zakaryan (levon.zakaryan@gmail.com)*/ +jQuery(function($){ + $.datepicker.regional['hy'] = { + closeText: 'Փակել', + prevText: '<Նախ.', + nextText: 'Հաջ.>', + currentText: 'Այսօր', + monthNames: ['Հունվար','Փետրվար','Մարտ','Ապրիլ','Մայիս','Հունիս', + 'Հուլիս','Օգոստոս','Սեպտեմբեր','Հոկտեմբեր','Նոյեմբեր','Դեկտեմբեր'], + monthNamesShort: ['Հունվ','Փետր','Մարտ','Ապր','Մայիս','Հունիս', + 'Հուլ','Օգս','Սեպ','Հոկ','Նոյ','Դեկ'], + dayNames: ['կիրակի','եկուշաբթի','երեքշաբթի','չորեքշաբթի','հինգշաբթի','ուրբաթ','շաբաթ'], + dayNamesShort: ['կիր','երկ','երք','չրք','հնգ','ուրբ','շբթ'], + dayNamesMin: ['կիր','երկ','երք','չրք','հնգ','ուրբ','շբթ'], + weekHeader: 'ՇԲՏ', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['hy']); +});/* Indonesian initialisation for the jQuery UI date picker plugin. */ +/* Written by Deden Fathurahman (dedenf@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['id'] = { + closeText: 'Tutup', + prevText: '<mundur', + nextText: 'maju>', + currentText: 'hari ini', + monthNames: ['Januari','Februari','Maret','April','Mei','Juni', + 'Juli','Agustus','September','Oktober','Nopember','Desember'], + monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun', + 'Jul','Agus','Sep','Okt','Nop','Des'], + dayNames: ['Minggu','Senin','Selasa','Rabu','Kamis','Jumat','Sabtu'], + dayNamesShort: ['Min','Sen','Sel','Rab','kam','Jum','Sab'], + dayNamesMin: ['Mg','Sn','Sl','Rb','Km','jm','Sb'], + weekHeader: 'Mg', + dateFormat: 'dd/mm/yy', + firstDay: 0, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['id']); +});/* Icelandic initialisation for the jQuery UI date picker plugin. */ +/* Written by Haukur H. Thorsson (haukur@eskill.is). */ +jQuery(function($){ + $.datepicker.regional['is'] = { + closeText: 'Loka', + prevText: '< Fyrri', + nextText: 'Næsti >', + currentText: 'Í dag', + monthNames: ['Janúar','Febrúar','Mars','Apríl','Maí','Júní', + 'Júlí','Ágúst','September','Október','Nóvember','Desember'], + monthNamesShort: ['Jan','Feb','Mar','Apr','Maí','Jún', + 'Júl','Ágú','Sep','Okt','Nóv','Des'], + dayNames: ['Sunnudagur','Mánudagur','Þriðjudagur','Miðvikudagur','Fimmtudagur','Föstudagur','Laugardagur'], + dayNamesShort: ['Sun','Mán','Þri','Mið','Fim','Fös','Lau'], + dayNamesMin: ['Su','Má','Þr','Mi','Fi','Fö','La'], + weekHeader: 'Vika', + dateFormat: 'dd/mm/yy', + firstDay: 0, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['is']); +});/* Italian initialisation for the jQuery UI date picker plugin. */ +/* Written by Antonello Pasella (antonello.pasella@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['it'] = { + closeText: 'Chiudi', + prevText: '<Prec', + nextText: 'Succ>', + currentText: 'Oggi', + monthNames: ['Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno', + 'Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre'], + monthNamesShort: ['Gen','Feb','Mar','Apr','Mag','Giu', + 'Lug','Ago','Set','Ott','Nov','Dic'], + dayNames: ['Domenica','Lunedì','Martedì','Mercoledì','Giovedì','Venerdì','Sabato'], + dayNamesShort: ['Dom','Lun','Mar','Mer','Gio','Ven','Sab'], + dayNamesMin: ['Do','Lu','Ma','Me','Gi','Ve','Sa'], + weekHeader: 'Sm', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['it']); +}); +/* Japanese initialisation for the jQuery UI date picker plugin. */ +/* Written by Kentaro SATO (kentaro@ranvis.com). */ +jQuery(function($){ + $.datepicker.regional['ja'] = { + closeText: '閉じる', + prevText: '<前', + nextText: '次>', + currentText: '今日', + monthNames: ['1月','2月','3月','4月','5月','6月', + '7月','8月','9月','10月','11月','12月'], + monthNamesShort: ['1月','2月','3月','4月','5月','6月', + '7月','8月','9月','10月','11月','12月'], + dayNames: ['日曜日','月曜日','火曜日','水曜日','木曜日','金曜日','土曜日'], + dayNamesShort: ['日','月','火','水','木','金','土'], + dayNamesMin: ['日','月','火','水','木','金','土'], + weekHeader: '週', + dateFormat: 'yy/mm/dd', + firstDay: 0, + isRTL: false, + showMonthAfterYear: true, + yearSuffix: '年'}; + $.datepicker.setDefaults($.datepicker.regional['ja']); +});/* Korean initialisation for the jQuery calendar extension. */ +/* Written by DaeKwon Kang (ncrash.dk@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['ko'] = { + closeText: '닫기', + prevText: '이전달', + nextText: '다음달', + currentText: '오늘', + monthNames: ['1월(JAN)','2월(FEB)','3월(MAR)','4월(APR)','5월(MAY)','6월(JUN)', + '7월(JUL)','8월(AUG)','9월(SEP)','10월(OCT)','11월(NOV)','12월(DEC)'], + monthNamesShort: ['1월(JAN)','2월(FEB)','3월(MAR)','4월(APR)','5월(MAY)','6월(JUN)', + '7월(JUL)','8월(AUG)','9월(SEP)','10월(OCT)','11월(NOV)','12월(DEC)'], + dayNames: ['일','월','화','수','목','금','토'], + dayNamesShort: ['일','월','화','수','목','금','토'], + dayNamesMin: ['일','월','화','수','목','금','토'], + weekHeader: 'Wk', + dateFormat: 'yy-mm-dd', + firstDay: 0, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: '년'}; + $.datepicker.setDefaults($.datepicker.regional['ko']); +});/* Kazakh (UTF-8) initialisation for the jQuery UI date picker plugin. */ +/* Written by Dmitriy Karasyov (dmitriy.karasyov@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['kz'] = { + closeText: 'Жабу', + prevText: '<Алдыңғы', + nextText: 'Келесі>', + currentText: 'Бүгін', + monthNames: ['Қаңтар','Ақпан','Наурыз','Сәуір','Мамыр','Маусым', + 'Шілде','Тамыз','Қыркүйек','Қазан','Қараша','Желтоқсан'], + monthNamesShort: ['Қаң','Ақп','Нау','Сәу','Мам','Мау', + 'Шіл','Там','Қыр','Қаз','Қар','Жел'], + dayNames: ['Жексенбі','Дүйсенбі','Сейсенбі','Сәрсенбі','Бейсенбі','Жұма','Сенбі'], + dayNamesShort: ['жкс','дсн','ссн','срс','бсн','жма','снб'], + dayNamesMin: ['Жк','Дс','Сс','Ср','Бс','Жм','Сн'], + weekHeader: 'Не', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['kz']); +}); +/* Lithuanian (UTF-8) initialisation for the jQuery UI date picker plugin. */ +/* @author Arturas Paleicikas */ +jQuery(function($){ + $.datepicker.regional['lt'] = { + closeText: 'Uždaryti', + prevText: '<Atgal', + nextText: 'Pirmyn>', + currentText: 'Šiandien', + monthNames: ['Sausis','Vasaris','Kovas','Balandis','Gegužė','Birželis', + 'Liepa','Rugpjūtis','Rugsėjis','Spalis','Lapkritis','Gruodis'], + monthNamesShort: ['Sau','Vas','Kov','Bal','Geg','Bir', + 'Lie','Rugp','Rugs','Spa','Lap','Gru'], + dayNames: ['sekmadienis','pirmadienis','antradienis','trečiadienis','ketvirtadienis','penktadienis','šeštadienis'], + dayNamesShort: ['sek','pir','ant','tre','ket','pen','šeš'], + dayNamesMin: ['Se','Pr','An','Tr','Ke','Pe','Še'], + weekHeader: 'Wk', + dateFormat: 'yy-mm-dd', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['lt']); +});/* Latvian (UTF-8) initialisation for the jQuery UI date picker plugin. */ +/* @author Arturas Paleicikas */ +jQuery(function($){ + $.datepicker.regional['lv'] = { + closeText: 'Aizvērt', + prevText: 'Iepr', + nextText: 'Nāka', + currentText: 'Šodien', + monthNames: ['Janvāris','Februāris','Marts','Aprīlis','Maijs','Jūnijs', + 'Jūlijs','Augusts','Septembris','Oktobris','Novembris','Decembris'], + monthNamesShort: ['Jan','Feb','Mar','Apr','Mai','Jūn', + 'Jūl','Aug','Sep','Okt','Nov','Dec'], + dayNames: ['svētdiena','pirmdiena','otrdiena','trešdiena','ceturtdiena','piektdiena','sestdiena'], + dayNamesShort: ['svt','prm','otr','tre','ctr','pkt','sst'], + dayNamesMin: ['Sv','Pr','Ot','Tr','Ct','Pk','Ss'], + weekHeader: 'Nav', + dateFormat: 'dd-mm-yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['lv']); +});/* Malayalam (UTF-8) initialisation for the jQuery UI date picker plugin. */ +/* Written by Saji Nediyanchath (saji89@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['ml'] = { + closeText: 'ശരി', + prevText: 'മുന്നത്തെ', + nextText: 'അടുത്തത് ', + currentText: 'ഇന്ന്', + monthNames: ['ജനുവരി','ഫെബ്രുവരി','മാര്‍ച്ച്','ഏപ്രില്‍','മേയ്','ജൂണ്‍', + 'ജൂലൈ','ആഗസ്റ്റ്','സെപ്റ്റംബര്‍','ഒക്ടോബര്‍','നവംബര്‍','ഡിസംബര്‍'], + monthNamesShort: ['ജനു', 'ഫെബ്', 'മാര്‍', 'ഏപ്രി', 'മേയ്', 'ജൂണ്‍', + 'ജൂലാ', 'ആഗ', 'സെപ്', 'ഒക്ടോ', 'നവം', 'ഡിസ'], + dayNames: ['ഞായര്‍', 'തിങ്കള്‍', 'ചൊവ്വ', 'ബുധന്‍', 'വ്യാഴം', 'വെള്ളി', 'ശനി'], + dayNamesShort: ['ഞായ', 'തിങ്ക', 'ചൊവ്വ', 'ബുധ', 'വ്യാഴം', 'വെള്ളി', 'ശനി'], + dayNamesMin: ['ഞാ','തി','ചൊ','ബു','വ്യാ','വെ','ശ'], + weekHeader: 'ആ', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['ml']); +}); +/* Malaysian initialisation for the jQuery UI date picker plugin. */ +/* Written by Mohd Nawawi Mohamad Jamili (nawawi@ronggeng.net). */ +jQuery(function($){ + $.datepicker.regional['ms'] = { + closeText: 'Tutup', + prevText: '<Sebelum', + nextText: 'Selepas>', + currentText: 'hari ini', + monthNames: ['Januari','Februari','Mac','April','Mei','Jun', + 'Julai','Ogos','September','Oktober','November','Disember'], + monthNamesShort: ['Jan','Feb','Mac','Apr','Mei','Jun', + 'Jul','Ogo','Sep','Okt','Nov','Dis'], + dayNames: ['Ahad','Isnin','Selasa','Rabu','Khamis','Jumaat','Sabtu'], + dayNamesShort: ['Aha','Isn','Sel','Rab','kha','Jum','Sab'], + dayNamesMin: ['Ah','Is','Se','Ra','Kh','Ju','Sa'], + weekHeader: 'Mg', + dateFormat: 'dd/mm/yy', + firstDay: 0, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['ms']); +});/* Dutch (UTF-8) initialisation for the jQuery UI date picker plugin. */ +/* Written by Mathias Bynens */ +jQuery(function($){ + $.datepicker.regional.nl = { + closeText: 'Sluiten', + prevText: '←', + nextText: '→', + currentText: 'Vandaag', + monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni', + 'juli', 'augustus', 'september', 'oktober', 'november', 'december'], + monthNamesShort: ['jan', 'feb', 'maa', 'apr', 'mei', 'jun', + 'jul', 'aug', 'sep', 'okt', 'nov', 'dec'], + dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'], + dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'], + dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'], + weekHeader: 'Wk', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional.nl); +});/* Norwegian initialisation for the jQuery UI date picker plugin. */ +/* Written by Naimdjon Takhirov (naimdjon@gmail.com). */ + +jQuery(function($){ + $.datepicker.regional['no'] = { + closeText: 'Lukk', + prevText: '«Forrige', + nextText: 'Neste»', + currentText: 'I dag', + monthNames: ['januar','februar','mars','april','mai','juni','juli','august','september','oktober','november','desember'], + monthNamesShort: ['jan','feb','mar','apr','mai','jun','jul','aug','sep','okt','nov','des'], + dayNamesShort: ['søn','man','tir','ons','tor','fre','lør'], + dayNames: ['søndag','mandag','tirsdag','onsdag','torsdag','fredag','lørdag'], + dayNamesMin: ['sø','ma','ti','on','to','fr','lø'], + weekHeader: 'Uke', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: '' + }; + $.datepicker.setDefaults($.datepicker.regional['no']); +}); +/* Polish initialisation for the jQuery UI date picker plugin. */ +/* Written by Jacek Wysocki (jacek.wysocki@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['pl'] = { + closeText: 'Zamknij', + prevText: '<Poprzedni', + nextText: 'Następny>', + currentText: 'Dziś', + monthNames: ['Styczeń','Luty','Marzec','Kwiecień','Maj','Czerwiec', + 'Lipiec','Sierpień','Wrzesień','Październik','Listopad','Grudzień'], + monthNamesShort: ['Sty','Lu','Mar','Kw','Maj','Cze', + 'Lip','Sie','Wrz','Pa','Lis','Gru'], + dayNames: ['Niedziela','Poniedziałek','Wtorek','Środa','Czwartek','Piątek','Sobota'], + dayNamesShort: ['Nie','Pn','Wt','Śr','Czw','Pt','So'], + dayNamesMin: ['N','Pn','Wt','Śr','Cz','Pt','So'], + weekHeader: 'Tydz', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['pl']); +}); +/* Brazilian initialisation for the jQuery UI date picker plugin. */ +/* Written by Leonildo Costa Silva (leocsilva@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['pt-BR'] = { + closeText: 'Fechar', + prevText: '<Anterior', + nextText: 'Próximo>', + currentText: 'Hoje', + monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho', + 'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'], + monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun', + 'Jul','Ago','Set','Out','Nov','Dez'], + dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'], + dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], + dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], + weekHeader: 'Sm', + dateFormat: 'dd/mm/yy', + firstDay: 0, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['pt-BR']); +});/* Portuguese initialisation for the jQuery UI date picker plugin. */ +jQuery(function($){ + $.datepicker.regional['pt'] = { + closeText: 'Fechar', + prevText: '<Anterior', + nextText: 'Seguinte', + currentText: 'Hoje', + monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho', + 'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'], + monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun', + 'Jul','Ago','Set','Out','Nov','Dez'], + dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'], + dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], + dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], + weekHeader: 'Sem', + dateFormat: 'dd/mm/yy', + firstDay: 0, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['pt']); +});/* Romansh initialisation for the jQuery UI date picker plugin. */ +/* Written by Yvonne Gienal (yvonne.gienal@educa.ch). */ +jQuery(function($){ + $.datepicker.regional['rm'] = { + closeText: 'Serrar', + prevText: '<Suandant', + nextText: 'Precedent>', + currentText: 'Actual', + monthNames: ['Schaner','Favrer','Mars','Avrigl','Matg','Zercladur', 'Fanadur','Avust','Settember','October','November','December'], + monthNamesShort: ['Scha','Fev','Mar','Avr','Matg','Zer', 'Fan','Avu','Sett','Oct','Nov','Dec'], + dayNames: ['Dumengia','Glindesdi','Mardi','Mesemna','Gievgia','Venderdi','Sonda'], + dayNamesShort: ['Dum','Gli','Mar','Mes','Gie','Ven','Som'], + dayNamesMin: ['Du','Gl','Ma','Me','Gi','Ve','So'], + weekHeader: 'emna', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['rm']); +}); +/* Romanian initialisation for the jQuery UI date picker plugin. + * + * Written by Edmond L. (ll_edmond@walla.com) + * and Ionut G. Stan (ionut.g.stan@gmail.com) + */ +jQuery(function($){ + $.datepicker.regional['ro'] = { + closeText: 'Închide', + prevText: '« Luna precedentă', + nextText: 'Luna următoare »', + currentText: 'Azi', + monthNames: ['Ianuarie','Februarie','Martie','Aprilie','Mai','Iunie', + 'Iulie','August','Septembrie','Octombrie','Noiembrie','Decembrie'], + monthNamesShort: ['Ian', 'Feb', 'Mar', 'Apr', 'Mai', 'Iun', + 'Iul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], + dayNames: ['Duminică', 'Luni', 'Marţi', 'Miercuri', 'Joi', 'Vineri', 'Sâmbătă'], + dayNamesShort: ['Dum', 'Lun', 'Mar', 'Mie', 'Joi', 'Vin', 'Sâm'], + dayNamesMin: ['Du','Lu','Ma','Mi','Jo','Vi','Sâ'], + weekHeader: 'Săpt', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['ro']); +}); +/* Russian (UTF-8) initialisation for the jQuery UI date picker plugin. */ +/* Written by Andrew Stromnov (stromnov@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['ru'] = { + closeText: 'Закрыть', + prevText: '<Пред', + nextText: 'След>', + currentText: 'Сегодня', + monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь', + 'Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'], + monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн', + 'Июл','Авг','Сен','Окт','Ноя','Дек'], + dayNames: ['воскресенье','понедельник','вторник','среда','четверг','пятница','суббота'], + dayNamesShort: ['вск','пнд','втр','срд','чтв','птн','сбт'], + dayNamesMin: ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'], + weekHeader: 'Нед', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['ru']); +});/* Slovak initialisation for the jQuery UI date picker plugin. */ +/* Written by Vojtech Rinik (vojto@hmm.sk). */ +jQuery(function($){ + $.datepicker.regional['sk'] = { + closeText: 'Zavrieť', + prevText: '<Predchádzajúci', + nextText: 'Nasledujúci>', + currentText: 'Dnes', + monthNames: ['Január','Február','Marec','Apríl','Máj','Jún', + 'Júl','August','September','Október','November','December'], + monthNamesShort: ['Jan','Feb','Mar','Apr','Máj','Jún', + 'Júl','Aug','Sep','Okt','Nov','Dec'], + dayNames: ['Nedel\'a','Pondelok','Utorok','Streda','Štvrtok','Piatok','Sobota'], + dayNamesShort: ['Ned','Pon','Uto','Str','Štv','Pia','Sob'], + dayNamesMin: ['Ne','Po','Ut','St','Št','Pia','So'], + weekHeader: 'Ty', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['sk']); +}); +/* Slovenian initialisation for the jQuery UI date picker plugin. */ +/* Written by Jaka Jancar (jaka@kubje.org). */ +/* c = č, s = š z = ž C = Č S = Š Z = Ž */ +jQuery(function($){ + $.datepicker.regional['sl'] = { + closeText: 'Zapri', + prevText: '<Prejšnji', + nextText: 'Naslednji>', + currentText: 'Trenutni', + monthNames: ['Januar','Februar','Marec','April','Maj','Junij', + 'Julij','Avgust','September','Oktober','November','December'], + monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', + 'Jul','Avg','Sep','Okt','Nov','Dec'], + dayNames: ['Nedelja','Ponedeljek','Torek','Sreda','Četrtek','Petek','Sobota'], + dayNamesShort: ['Ned','Pon','Tor','Sre','Čet','Pet','Sob'], + dayNamesMin: ['Ne','Po','To','Sr','Če','Pe','So'], + weekHeader: 'Teden', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['sl']); +}); +/* Albanian initialisation for the jQuery UI date picker plugin. */ +/* Written by Flakron Bytyqi (flakron@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['sq'] = { + closeText: 'mbylle', + prevText: '<mbrapa', + nextText: 'Përpara>', + currentText: 'sot', + monthNames: ['Janar','Shkurt','Mars','Prill','Maj','Qershor', + 'Korrik','Gusht','Shtator','Tetor','Nëntor','Dhjetor'], + monthNamesShort: ['Jan','Shk','Mar','Pri','Maj','Qer', + 'Kor','Gus','Sht','Tet','Nën','Dhj'], + dayNames: ['E Diel','E Hënë','E Martë','E Mërkurë','E Enjte','E Premte','E Shtune'], + dayNamesShort: ['Di','Hë','Ma','Më','En','Pr','Sh'], + dayNamesMin: ['Di','Hë','Ma','Më','En','Pr','Sh'], + weekHeader: 'Ja', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['sq']); +}); +/* Serbian i18n for the jQuery UI date picker plugin. */ +/* Written by Dejan Dimić. */ +jQuery(function($){ + $.datepicker.regional['sr-SR'] = { + closeText: 'Zatvori', + prevText: '<', + nextText: '>', + currentText: 'Danas', + monthNames: ['Januar','Februar','Mart','April','Maj','Jun', + 'Jul','Avgust','Septembar','Oktobar','Novembar','Decembar'], + monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', + 'Jul','Avg','Sep','Okt','Nov','Dec'], + dayNames: ['Nedelja','Ponedeljak','Utorak','Sreda','Četvrtak','Petak','Subota'], + dayNamesShort: ['Ned','Pon','Uto','Sre','Čet','Pet','Sub'], + dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'], + weekHeader: 'Sed', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['sr-SR']); +}); +/* Serbian i18n for the jQuery UI date picker plugin. */ +/* Written by Dejan Dimić. */ +jQuery(function($){ + $.datepicker.regional['sr'] = { + closeText: 'Затвори', + prevText: '<', + nextText: '>', + currentText: 'Данас', + monthNames: ['Јануар','Фебруар','Март','Април','Мај','Јун', + 'Јул','Август','Септембар','Октобар','Новембар','Децембар'], + monthNamesShort: ['Јан','Феб','Мар','Апр','Мај','Јун', + 'Јул','Авг','Сеп','Окт','Нов','Дец'], + dayNames: ['Недеља','Понедељак','Уторак','Среда','Четвртак','Петак','Субота'], + dayNamesShort: ['Нед','Пон','Уто','Сре','Чет','Пет','Суб'], + dayNamesMin: ['Не','По','Ут','Ср','Че','Пе','Су'], + weekHeader: 'Сед', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['sr']); +}); +/* Swedish initialisation for the jQuery UI date picker plugin. */ +/* Written by Anders Ekdahl ( anders@nomadiz.se). */ +jQuery(function($){ + $.datepicker.regional['sv'] = { + closeText: 'Stäng', + prevText: '«Förra', + nextText: 'Nästa»', + currentText: 'Idag', + monthNames: ['Januari','Februari','Mars','April','Maj','Juni', + 'Juli','Augusti','September','Oktober','November','December'], + monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', + 'Jul','Aug','Sep','Okt','Nov','Dec'], + dayNamesShort: ['Sön','Mån','Tis','Ons','Tor','Fre','Lör'], + dayNames: ['Söndag','Måndag','Tisdag','Onsdag','Torsdag','Fredag','Lördag'], + dayNamesMin: ['Sö','Må','Ti','On','To','Fr','Lö'], + weekHeader: 'Ve', + dateFormat: 'yy-mm-dd', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['sv']); +}); +/* Tamil (UTF-8) initialisation for the jQuery UI date picker plugin. */ +/* Written by S A Sureshkumar (saskumar@live.com). */ +jQuery(function($){ + $.datepicker.regional['ta'] = { + closeText: 'மூடு', + prevText: 'முன்னையது', + nextText: 'அடுத்தது', + currentText: 'இன்று', + monthNames: ['தை','மாசி','பங்குனி','சித்திரை','வைகாசி','ஆனி', + 'ஆடி','ஆவணி','புரட்டாசி','ஐப்பசி','கார்த்திகை','மார்கழி'], + monthNamesShort: ['தை','மாசி','பங்','சித்','வைகா','ஆனி', + 'ஆடி','ஆவ','புர','ஐப்','கார்','மார்'], + dayNames: ['ஞாயிற்றுக்கிழமை','திங்கட்கிழமை','செவ்வாய்க்கிழமை','புதன்கிழமை','வியாழக்கிழமை','வெள்ளிக்கிழமை','சனிக்கிழமை'], + dayNamesShort: ['ஞாயிறு','திங்கள்','செவ்வாய்','புதன்','வியாழன்','வெள்ளி','சனி'], + dayNamesMin: ['ஞா','தி','செ','பு','வி','வெ','ச'], + weekHeader: 'Не', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['ta']); +}); +/* Thai initialisation for the jQuery UI date picker plugin. */ +/* Written by pipo (pipo@sixhead.com). */ +jQuery(function($){ + $.datepicker.regional['th'] = { + closeText: 'ปิด', + prevText: '« ย้อน', + nextText: 'ถัดไป »', + currentText: 'วันนี้', + monthNames: ['มกราคม','กุมภาพันธ์','มีนาคม','เมษายน','พฤษภาคม','มิถุนายน', + 'กรกฎาคม','สิงหาคม','กันยายน','ตุลาคม','พฤศจิกายน','ธันวาคม'], + monthNamesShort: ['ม.ค.','ก.พ.','มี.ค.','เม.ย.','พ.ค.','มิ.ย.', + 'ก.ค.','ส.ค.','ก.ย.','ต.ค.','พ.ย.','ธ.ค.'], + dayNames: ['อาทิตย์','จันทร์','อังคาร','พุธ','พฤหัสบดี','ศุกร์','เสาร์'], + dayNamesShort: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'], + dayNamesMin: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'], + weekHeader: 'Wk', + dateFormat: 'dd/mm/yy', + firstDay: 0, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['th']); +});/* Turkish initialisation for the jQuery UI date picker plugin. */ +/* Written by Izzet Emre Erkan (kara@karalamalar.net). */ +jQuery(function($){ + $.datepicker.regional['tr'] = { + closeText: 'kapat', + prevText: '<geri', + nextText: 'ileri>', + currentText: 'bugün', + monthNames: ['Ocak','Şubat','Mart','Nisan','Mayıs','Haziran', + 'Temmuz','Ağustos','Eylül','Ekim','Kasım','Aralık'], + monthNamesShort: ['Oca','Şub','Mar','Nis','May','Haz', + 'Tem','Ağu','Eyl','Eki','Kas','Ara'], + dayNames: ['Pazar','Pazartesi','Salı','Çarşamba','Perşembe','Cuma','Cumartesi'], + dayNamesShort: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'], + dayNamesMin: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'], + weekHeader: 'Hf', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['tr']); +});/* Ukrainian (UTF-8) initialisation for the jQuery UI date picker plugin. */ +/* Written by Maxim Drogobitskiy (maxdao@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['uk'] = { + closeText: 'Закрити', + prevText: '<', + nextText: '>', + currentText: 'Сьогодні', + monthNames: ['Січень','Лютий','Березень','Квітень','Травень','Червень', + 'Липень','Серпень','Вересень','Жовтень','Листопад','Грудень'], + monthNamesShort: ['Січ','Лют','Бер','Кві','Тра','Чер', + 'Лип','Сер','Вер','Жов','Лис','Гру'], + dayNames: ['неділя','понеділок','вівторок','середа','четвер','п’ятниця','субота'], + dayNamesShort: ['нед','пнд','вів','срд','чтв','птн','сбт'], + dayNamesMin: ['Нд','Пн','Вт','Ср','Чт','Пт','Сб'], + weekHeader: 'Не', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['uk']); +});/* Vietnamese initialisation for the jQuery UI date picker plugin. */ +/* Translated by Le Thanh Huy (lthanhhuy@cit.ctu.edu.vn). */ +jQuery(function($){ + $.datepicker.regional['vi'] = { + closeText: 'Đóng', + prevText: '<Trước', + nextText: 'Tiếp>', + currentText: 'Hôm nay', + monthNames: ['Tháng Một', 'Tháng Hai', 'Tháng Ba', 'Tháng Tư', 'Tháng Năm', 'Tháng Sáu', + 'Tháng Bảy', 'Tháng Tám', 'Tháng Chín', 'Tháng Mười', 'Tháng Mười Một', 'Tháng Mười Hai'], + monthNamesShort: ['Tháng 1', 'Tháng 2', 'Tháng 3', 'Tháng 4', 'Tháng 5', 'Tháng 6', + 'Tháng 7', 'Tháng 8', 'Tháng 9', 'Tháng 10', 'Tháng 11', 'Tháng 12'], + dayNames: ['Chủ Nhật', 'Thứ Hai', 'Thứ Ba', 'Thứ Tư', 'Thứ Năm', 'Thứ Sáu', 'Thứ Bảy'], + dayNamesShort: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'], + dayNamesMin: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'], + weekHeader: 'Tu', + dateFormat: 'dd/mm/yy', + firstDay: 0, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['vi']); +}); +/* Chinese initialisation for the jQuery UI date picker plugin. */ +/* Written by Cloudream (cloudream@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['zh-CN'] = { + closeText: '关闭', + prevText: '<上月', + nextText: '下月>', + currentText: '今天', + monthNames: ['一月','二月','三月','四月','五月','六月', + '七月','八月','九月','十月','十一月','十二月'], + monthNamesShort: ['一','二','三','四','五','六', + '七','八','九','十','十一','十二'], + dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], + dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], + dayNamesMin: ['日','一','二','三','四','五','六'], + weekHeader: '周', + dateFormat: 'yy-mm-dd', + firstDay: 1, + isRTL: false, + showMonthAfterYear: true, + yearSuffix: '年'}; + $.datepicker.setDefaults($.datepicker.regional['zh-CN']); +}); +/* Chinese initialisation for the jQuery UI date picker plugin. */ +/* Written by SCCY (samuelcychan@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['zh-HK'] = { + closeText: '關閉', + prevText: '<上月', + nextText: '下月>', + currentText: '今天', + monthNames: ['一月','二月','三月','四月','五月','六月', + '七月','八月','九月','十月','十一月','十二月'], + monthNamesShort: ['一','二','三','四','五','六', + '七','八','九','十','十一','十二'], + dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], + dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], + dayNamesMin: ['日','一','二','三','四','五','六'], + weekHeader: '周', + dateFormat: 'dd-mm-yy', + firstDay: 0, + isRTL: false, + showMonthAfterYear: true, + yearSuffix: '年'}; + $.datepicker.setDefaults($.datepicker.regional['zh-HK']); +}); +/* Chinese initialisation for the jQuery UI date picker plugin. */ +/* Written by Ressol (ressol@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['zh-TW'] = { + closeText: '關閉', + prevText: '<上月', + nextText: '下月>', + currentText: '今天', + monthNames: ['一月','二月','三月','四月','五月','六月', + '七月','八月','九月','十月','十一月','十二月'], + monthNamesShort: ['一','二','三','四','五','六', + '七','八','九','十','十一','十二'], + dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], + dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], + dayNamesMin: ['日','一','二','三','四','五','六'], + weekHeader: '周', + dateFormat: 'yy/mm/dd', + firstDay: 1, + isRTL: false, + showMonthAfterYear: true, + yearSuffix: '年'}; + $.datepicker.setDefaults($.datepicker.regional['zh-TW']); +}); diff --git a/js/ui/i18n/jquery.ui.datepicker-af.js b/js/ui/i18n/jquery.ui.datepicker-af.js new file mode 100644 index 0000000000..43fbf6cd8e --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-af.js @@ -0,0 +1,23 @@ +/* Afrikaans initialisation for the jQuery UI date picker plugin. */ +/* Written by Renier Pretorius. */ +jQuery(function($){ + $.datepicker.regional['af'] = { + closeText: 'Selekteer', + prevText: 'Vorige', + nextText: 'Volgende', + currentText: 'Vandag', + monthNames: ['Januarie','Februarie','Maart','April','Mei','Junie', + 'Julie','Augustus','September','Oktober','November','Desember'], + monthNamesShort: ['Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun', + 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Des'], + dayNames: ['Sondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrydag', 'Saterdag'], + dayNamesShort: ['Son', 'Maa', 'Din', 'Woe', 'Don', 'Vry', 'Sat'], + dayNamesMin: ['So','Ma','Di','Wo','Do','Vr','Sa'], + weekHeader: 'Wk', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['af']); +}); diff --git a/js/ui/i18n/jquery.ui.datepicker-ar-DZ.js b/js/ui/i18n/jquery.ui.datepicker-ar-DZ.js new file mode 100644 index 0000000000..e0e1685d84 --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-ar-DZ.js @@ -0,0 +1,23 @@ +/* Algerian Arabic Translation for jQuery UI date picker plugin. (can be used for Tunisia)*/ +/* Mohamed Cherif BOUCHELAGHEM -- cherifbouchelaghem@yahoo.fr */ + +jQuery(function($){ + $.datepicker.regional['ar-DZ'] = { + closeText: 'إغلاق', + prevText: '<السابق', + nextText: 'التالي>', + currentText: 'اليوم', + monthNames: ['جانفي', 'فيفري', 'مارس', 'أفريل', 'ماي', 'جوان', + 'جويلية', 'أوت', 'سبتمبر','أكتوبر', 'نوفمبر', 'ديسمبر'], + monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'], + dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], + dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], + dayNamesMin: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], + weekHeader: 'أسبوع', + dateFormat: 'dd/mm/yy', + firstDay: 6, + isRTL: true, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['ar-DZ']); +}); diff --git a/js/ui/i18n/jquery.ui.datepicker-ar.js b/js/ui/i18n/jquery.ui.datepicker-ar.js new file mode 100644 index 0000000000..9e37911c26 --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-ar.js @@ -0,0 +1,23 @@ +/* Arabic Translation for jQuery UI date picker plugin. */ +/* Khaled Alhourani -- me@khaledalhourani.com */ +/* NOTE: monthNames are the original months names and they are the Arabic names, not the new months name فبراير - يناير and there isn't any Arabic roots for these months */ +jQuery(function($){ + $.datepicker.regional['ar'] = { + closeText: 'إغلاق', + prevText: '<السابق', + nextText: 'التالي>', + currentText: 'اليوم', + monthNames: ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'آذار', 'حزيران', + 'تموز', 'آب', 'أيلول', 'تشرين الأول', 'تشرين الثاني', 'كانون الأول'], + monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'], + dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], + dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], + dayNamesMin: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], + weekHeader: 'أسبوع', + dateFormat: 'dd/mm/yy', + firstDay: 6, + isRTL: true, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['ar']); +}); \ No newline at end of file diff --git a/js/ui/i18n/jquery.ui.datepicker-az.js b/js/ui/i18n/jquery.ui.datepicker-az.js new file mode 100644 index 0000000000..b5434057b7 --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-az.js @@ -0,0 +1,23 @@ +/* Azerbaijani (UTF-8) initialisation for the jQuery UI date picker plugin. */ +/* Written by Jamil Najafov (necefov33@gmail.com). */ +jQuery(function($) { + $.datepicker.regional['az'] = { + closeText: 'Bağla', + prevText: '<Geri', + nextText: 'İrəli>', + currentText: 'Bugün', + monthNames: ['Yanvar','Fevral','Mart','Aprel','May','İyun', + 'İyul','Avqust','Sentyabr','Oktyabr','Noyabr','Dekabr'], + monthNamesShort: ['Yan','Fev','Mar','Apr','May','İyun', + 'İyul','Avq','Sen','Okt','Noy','Dek'], + dayNames: ['Bazar','Bazar ertəsi','Çərşənbə axşamı','Çərşənbə','Cümə axşamı','Cümə','Şənbə'], + dayNamesShort: ['B','Be','Ça','Ç','Ca','C','Ş'], + dayNamesMin: ['B','B','Ç','С','Ç','C','Ş'], + weekHeader: 'Hf', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['az']); +}); \ No newline at end of file diff --git a/js/ui/i18n/jquery.ui.datepicker-bg.js b/js/ui/i18n/jquery.ui.datepicker-bg.js new file mode 100644 index 0000000000..b5113f7817 --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-bg.js @@ -0,0 +1,24 @@ +/* Bulgarian initialisation for the jQuery UI date picker plugin. */ +/* Written by Stoyan Kyosev (http://svest.org). */ +jQuery(function($){ + $.datepicker.regional['bg'] = { + closeText: 'затвори', + prevText: '<назад', + nextText: 'напред>', + nextBigText: '>>', + currentText: 'днес', + monthNames: ['Януари','Февруари','Март','Април','Май','Юни', + 'Юли','Август','Септември','Октомври','Ноември','Декември'], + monthNamesShort: ['Яну','Фев','Мар','Апр','Май','Юни', + 'Юли','Авг','Сеп','Окт','Нов','Дек'], + dayNames: ['Неделя','Понеделник','Вторник','Сряда','Четвъртък','Петък','Събота'], + dayNamesShort: ['Нед','Пон','Вто','Сря','Чет','Пет','Съб'], + dayNamesMin: ['Не','По','Вт','Ср','Че','Пе','Съ'], + weekHeader: 'Wk', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['bg']); +}); diff --git a/js/ui/i18n/jquery.ui.datepicker-bs.js b/js/ui/i18n/jquery.ui.datepicker-bs.js new file mode 100644 index 0000000000..30ab826b0f --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-bs.js @@ -0,0 +1,23 @@ +/* Bosnian i18n for the jQuery UI date picker plugin. */ +/* Written by Kenan Konjo. */ +jQuery(function($){ + $.datepicker.regional['bs'] = { + closeText: 'Zatvori', + prevText: '<', + nextText: '>', + currentText: 'Danas', + monthNames: ['Januar','Februar','Mart','April','Maj','Juni', + 'Juli','August','Septembar','Oktobar','Novembar','Decembar'], + monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', + 'Jul','Aug','Sep','Okt','Nov','Dec'], + dayNames: ['Nedelja','Ponedeljak','Utorak','Srijeda','Četvrtak','Petak','Subota'], + dayNamesShort: ['Ned','Pon','Uto','Sri','Čet','Pet','Sub'], + dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'], + weekHeader: 'Wk', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['bs']); +}); \ No newline at end of file diff --git a/js/ui/i18n/jquery.ui.datepicker-ca.js b/js/ui/i18n/jquery.ui.datepicker-ca.js new file mode 100644 index 0000000000..b128e699ef --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-ca.js @@ -0,0 +1,23 @@ +/* Inicialització en català per a l'extenció 'calendar' per jQuery. */ +/* Writers: (joan.leon@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['ca'] = { + closeText: 'Tancar', + prevText: '<Ant', + nextText: 'Seg>', + currentText: 'Avui', + monthNames: ['Gener','Febrer','Març','Abril','Maig','Juny', + 'Juliol','Agost','Setembre','Octubre','Novembre','Desembre'], + monthNamesShort: ['Gen','Feb','Mar','Abr','Mai','Jun', + 'Jul','Ago','Set','Oct','Nov','Des'], + dayNames: ['Diumenge','Dilluns','Dimarts','Dimecres','Dijous','Divendres','Dissabte'], + dayNamesShort: ['Dug','Dln','Dmt','Dmc','Djs','Dvn','Dsb'], + dayNamesMin: ['Dg','Dl','Dt','Dc','Dj','Dv','Ds'], + weekHeader: 'Sm', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['ca']); +}); \ No newline at end of file diff --git a/js/ui/i18n/jquery.ui.datepicker-cs.js b/js/ui/i18n/jquery.ui.datepicker-cs.js new file mode 100644 index 0000000000..c3c07ea672 --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-cs.js @@ -0,0 +1,23 @@ +/* Czech initialisation for the jQuery UI date picker plugin. */ +/* Written by Tomas Muller (tomas@tomas-muller.net). */ +jQuery(function($){ + $.datepicker.regional['cs'] = { + closeText: 'Zavřít', + prevText: '<Dříve', + nextText: 'Později>', + currentText: 'Nyní', + monthNames: ['leden','únor','březen','duben','květen','červen', + 'červenec','srpen','září','říjen','listopad','prosinec'], + monthNamesShort: ['led','úno','bře','dub','kvě','čer', + 'čvc','srp','zář','říj','lis','pro'], + dayNames: ['neděle', 'pondělí', 'úterý', 'středa', 'čtvrtek', 'pátek', 'sobota'], + dayNamesShort: ['ne', 'po', 'út', 'st', 'čt', 'pá', 'so'], + dayNamesMin: ['ne','po','út','st','čt','pá','so'], + weekHeader: 'Týd', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['cs']); +}); diff --git a/js/ui/i18n/jquery.ui.datepicker-da.js b/js/ui/i18n/jquery.ui.datepicker-da.js new file mode 100644 index 0000000000..4a99a5833b --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-da.js @@ -0,0 +1,23 @@ +/* Danish initialisation for the jQuery UI date picker plugin. */ +/* Written by Jan Christensen ( deletestuff@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['da'] = { + closeText: 'Luk', + prevText: '<Forrige', + nextText: 'Næste>', + currentText: 'Idag', + monthNames: ['Januar','Februar','Marts','April','Maj','Juni', + 'Juli','August','September','Oktober','November','December'], + monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', + 'Jul','Aug','Sep','Okt','Nov','Dec'], + dayNames: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'], + dayNamesShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'], + dayNamesMin: ['Sø','Ma','Ti','On','To','Fr','Lø'], + weekHeader: 'Uge', + dateFormat: 'dd-mm-yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['da']); +}); diff --git a/js/ui/i18n/jquery.ui.datepicker-de.js b/js/ui/i18n/jquery.ui.datepicker-de.js new file mode 100644 index 0000000000..ac2d516aa9 --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-de.js @@ -0,0 +1,23 @@ +/* German initialisation for the jQuery UI date picker plugin. */ +/* Written by Milian Wolff (mail@milianw.de). */ +jQuery(function($){ + $.datepicker.regional['de'] = { + closeText: 'schließen', + prevText: '<zurück', + nextText: 'Vor>', + currentText: 'heute', + monthNames: ['Januar','Februar','März','April','Mai','Juni', + 'Juli','August','September','Oktober','November','Dezember'], + monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun', + 'Jul','Aug','Sep','Okt','Nov','Dez'], + dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'], + dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'], + dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'], + weekHeader: 'Wo', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['de']); +}); diff --git a/js/ui/i18n/jquery.ui.datepicker-el.js b/js/ui/i18n/jquery.ui.datepicker-el.js new file mode 100644 index 0000000000..9542769d9a --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-el.js @@ -0,0 +1,23 @@ +/* Greek (el) initialisation for the jQuery UI date picker plugin. */ +/* Written by Alex Cicovic (http://www.alexcicovic.com) */ +jQuery(function($){ + $.datepicker.regional['el'] = { + closeText: 'Κλείσιμο', + prevText: 'Προηγούμενος', + nextText: 'Επόμενος', + currentText: 'Τρέχων Μήνας', + monthNames: ['Ιανουάριος','Φεβρουάριος','Μάρτιος','Απρίλιος','Μάιος','Ιούνιος', + 'Ιούλιος','Αύγουστος','Σεπτέμβριος','Οκτώβριος','Νοέμβριος','Δεκέμβριος'], + monthNamesShort: ['Ιαν','Φεβ','Μαρ','Απρ','Μαι','Ιουν', + 'Ιουλ','Αυγ','Σεπ','Οκτ','Νοε','Δεκ'], + dayNames: ['Κυριακή','Δευτέρα','Τρίτη','Τετάρτη','Πέμπτη','Παρασκευή','Σάββατο'], + dayNamesShort: ['Κυρ','Δευ','Τρι','Τετ','Πεμ','Παρ','Σαβ'], + dayNamesMin: ['Κυ','Δε','Τρ','Τε','Πε','Πα','Σα'], + weekHeader: 'Εβδ', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['el']); +}); \ No newline at end of file diff --git a/js/ui/i18n/jquery.ui.datepicker-en-AU.js b/js/ui/i18n/jquery.ui.datepicker-en-AU.js new file mode 100644 index 0000000000..c1a1020a14 --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-en-AU.js @@ -0,0 +1,23 @@ +/* English/Australia initialisation for the jQuery UI date picker plugin. */ +/* Based on the en-GB initialisation. */ +jQuery(function($){ + $.datepicker.regional['en-AU'] = { + closeText: 'Done', + prevText: 'Prev', + nextText: 'Next', + currentText: 'Today', + monthNames: ['January','February','March','April','May','June', + 'July','August','September','October','November','December'], + monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', + 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], + dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], + dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], + dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], + weekHeader: 'Wk', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['en-AU']); +}); diff --git a/js/ui/i18n/jquery.ui.datepicker-en-GB.js b/js/ui/i18n/jquery.ui.datepicker-en-GB.js new file mode 100644 index 0000000000..aac7b6195c --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-en-GB.js @@ -0,0 +1,23 @@ +/* English/UK initialisation for the jQuery UI date picker plugin. */ +/* Written by Stuart. */ +jQuery(function($){ + $.datepicker.regional['en-GB'] = { + closeText: 'Done', + prevText: 'Prev', + nextText: 'Next', + currentText: 'Today', + monthNames: ['January','February','March','April','May','June', + 'July','August','September','October','November','December'], + monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', + 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], + dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], + dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], + dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], + weekHeader: 'Wk', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['en-GB']); +}); diff --git a/js/ui/i18n/jquery.ui.datepicker-en-NZ.js b/js/ui/i18n/jquery.ui.datepicker-en-NZ.js new file mode 100644 index 0000000000..7819df0528 --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-en-NZ.js @@ -0,0 +1,23 @@ +/* English/New Zealand initialisation for the jQuery UI date picker plugin. */ +/* Based on the en-GB initialisation. */ +jQuery(function($){ + $.datepicker.regional['en-NZ'] = { + closeText: 'Done', + prevText: 'Prev', + nextText: 'Next', + currentText: 'Today', + monthNames: ['January','February','March','April','May','June', + 'July','August','September','October','November','December'], + monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', + 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], + dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], + dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], + dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], + weekHeader: 'Wk', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['en-NZ']); +}); diff --git a/js/ui/i18n/jquery.ui.datepicker-eo.js b/js/ui/i18n/jquery.ui.datepicker-eo.js new file mode 100644 index 0000000000..ba5715687b --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-eo.js @@ -0,0 +1,23 @@ +/* Esperanto initialisation for the jQuery UI date picker plugin. */ +/* Written by Olivier M. (olivierweb@ifrance.com). */ +jQuery(function($){ + $.datepicker.regional['eo'] = { + closeText: 'Fermi', + prevText: '<Anta', + nextText: 'Sekv>', + currentText: 'Nuna', + monthNames: ['Januaro','Februaro','Marto','Aprilo','Majo','Junio', + 'Julio','Aŭgusto','Septembro','Oktobro','Novembro','Decembro'], + monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', + 'Jul','Aŭg','Sep','Okt','Nov','Dec'], + dayNames: ['Dimanĉo','Lundo','Mardo','Merkredo','Ĵaŭdo','Vendredo','Sabato'], + dayNamesShort: ['Dim','Lun','Mar','Mer','Ĵaŭ','Ven','Sab'], + dayNamesMin: ['Di','Lu','Ma','Me','Ĵa','Ve','Sa'], + weekHeader: 'Sb', + dateFormat: 'dd/mm/yy', + firstDay: 0, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['eo']); +}); diff --git a/js/ui/i18n/jquery.ui.datepicker-es.js b/js/ui/i18n/jquery.ui.datepicker-es.js new file mode 100644 index 0000000000..a02133de3f --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-es.js @@ -0,0 +1,23 @@ +/* Inicialización en español para la extensión 'UI date picker' para jQuery. */ +/* Traducido por Vester (xvester@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['es'] = { + closeText: 'Cerrar', + prevText: '<Ant', + nextText: 'Sig>', + currentText: 'Hoy', + monthNames: ['Enero','Febrero','Marzo','Abril','Mayo','Junio', + 'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'], + monthNamesShort: ['Ene','Feb','Mar','Abr','May','Jun', + 'Jul','Ago','Sep','Oct','Nov','Dic'], + dayNames: ['Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado'], + dayNamesShort: ['Dom','Lun','Mar','Mié','Juv','Vie','Sáb'], + dayNamesMin: ['Do','Lu','Ma','Mi','Ju','Vi','Sá'], + weekHeader: 'Sm', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['es']); +}); \ No newline at end of file diff --git a/js/ui/i18n/jquery.ui.datepicker-et.js b/js/ui/i18n/jquery.ui.datepicker-et.js new file mode 100644 index 0000000000..f97311f31a --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-et.js @@ -0,0 +1,23 @@ +/* Estonian initialisation for the jQuery UI date picker plugin. */ +/* Written by Mart Sõmermaa (mrts.pydev at gmail com). */ +jQuery(function($){ + $.datepicker.regional['et'] = { + closeText: 'Sulge', + prevText: 'Eelnev', + nextText: 'Järgnev', + currentText: 'Täna', + monthNames: ['Jaanuar','Veebruar','Märts','Aprill','Mai','Juuni', + 'Juuli','August','September','Oktoober','November','Detsember'], + monthNamesShort: ['Jaan', 'Veebr', 'Märts', 'Apr', 'Mai', 'Juuni', + 'Juuli', 'Aug', 'Sept', 'Okt', 'Nov', 'Dets'], + dayNames: ['Pühapäev', 'Esmaspäev', 'Teisipäev', 'Kolmapäev', 'Neljapäev', 'Reede', 'Laupäev'], + dayNamesShort: ['Pühap', 'Esmasp', 'Teisip', 'Kolmap', 'Neljap', 'Reede', 'Laup'], + dayNamesMin: ['P','E','T','K','N','R','L'], + weekHeader: 'Sm', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['et']); +}); \ No newline at end of file diff --git a/js/ui/i18n/jquery.ui.datepicker-eu.js b/js/ui/i18n/jquery.ui.datepicker-eu.js new file mode 100644 index 0000000000..9ba6ee22e3 --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-eu.js @@ -0,0 +1,23 @@ +/* Euskarako oinarria 'UI date picker' jquery-ko extentsioarentzat */ +/* Karrikas-ek itzulia (karrikas@karrikas.com) */ +jQuery(function($){ + $.datepicker.regional['eu'] = { + closeText: 'Egina', + prevText: '<Aur', + nextText: 'Hur>', + currentText: 'Gaur', + monthNames: ['Urtarrila','Otsaila','Martxoa','Apirila','Maiatza','Ekaina', + 'Uztaila','Abuztua','Iraila','Urria','Azaroa','Abendua'], + monthNamesShort: ['Urt','Ots','Mar','Api','Mai','Eka', + 'Uzt','Abu','Ira','Urr','Aza','Abe'], + dayNames: ['Igandea','Astelehena','Asteartea','Asteazkena','Osteguna','Ostirala','Larunbata'], + dayNamesShort: ['Iga','Ast','Ast','Ast','Ost','Ost','Lar'], + dayNamesMin: ['Ig','As','As','As','Os','Os','La'], + weekHeader: 'Wk', + dateFormat: 'yy/mm/dd', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['eu']); +}); \ No newline at end of file diff --git a/js/ui/i18n/jquery.ui.datepicker-fa.js b/js/ui/i18n/jquery.ui.datepicker-fa.js new file mode 100644 index 0000000000..adb3709fed --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-fa.js @@ -0,0 +1,23 @@ +/* Persian (Farsi) Translation for the jQuery UI date picker plugin. */ +/* Javad Mowlanezhad -- jmowla@gmail.com */ +/* Jalali calendar should supported soon! (Its implemented but I have to test it) */ +jQuery(function($) { + $.datepicker.regional['fa'] = { + closeText: 'بستن', + prevText: '<قبلي', + nextText: 'بعدي>', + currentText: 'امروز', + monthNames: ['فروردين','ارديبهشت','خرداد','تير','مرداد','شهريور', + 'مهر','آبان','آذر','دي','بهمن','اسفند'], + monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'], + dayNames: ['يکشنبه','دوشنبه','سه‌شنبه','چهارشنبه','پنجشنبه','جمعه','شنبه'], + dayNamesShort: ['ي','د','س','چ','پ','ج', 'ش'], + dayNamesMin: ['ي','د','س','چ','پ','ج', 'ش'], + weekHeader: 'هف', + dateFormat: 'yy/mm/dd', + firstDay: 6, + isRTL: true, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['fa']); +}); \ No newline at end of file diff --git a/js/ui/i18n/jquery.ui.datepicker-fi.js b/js/ui/i18n/jquery.ui.datepicker-fi.js new file mode 100644 index 0000000000..e1f25fd84c --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-fi.js @@ -0,0 +1,23 @@ +/* Finnish initialisation for the jQuery UI date picker plugin. */ +/* Written by Harri Kilpi� (harrikilpio@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['fi'] = { + closeText: 'Sulje', + prevText: '«Edellinen', + nextText: 'Seuraava»', + currentText: 'Tänään', + monthNames: ['Tammikuu','Helmikuu','Maaliskuu','Huhtikuu','Toukokuu','Kesäkuu', + 'Heinäkuu','Elokuu','Syyskuu','Lokakuu','Marraskuu','Joulukuu'], + monthNamesShort: ['Tammi','Helmi','Maalis','Huhti','Touko','Kesä', + 'Heinä','Elo','Syys','Loka','Marras','Joulu'], + dayNamesShort: ['Su','Ma','Ti','Ke','To','Pe','Su'], + dayNames: ['Sunnuntai','Maanantai','Tiistai','Keskiviikko','Torstai','Perjantai','Lauantai'], + dayNamesMin: ['Su','Ma','Ti','Ke','To','Pe','La'], + weekHeader: 'Vk', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['fi']); +}); diff --git a/js/ui/i18n/jquery.ui.datepicker-fo.js b/js/ui/i18n/jquery.ui.datepicker-fo.js new file mode 100644 index 0000000000..c14362216e --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-fo.js @@ -0,0 +1,23 @@ +/* Faroese initialisation for the jQuery UI date picker plugin */ +/* Written by Sverri Mohr Olsen, sverrimo@gmail.com */ +jQuery(function($){ + $.datepicker.regional['fo'] = { + closeText: 'Lat aftur', + prevText: '<Fyrra', + nextText: 'Næsta>', + currentText: 'Í dag', + monthNames: ['Januar','Februar','Mars','Apríl','Mei','Juni', + 'Juli','August','September','Oktober','November','Desember'], + monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun', + 'Jul','Aug','Sep','Okt','Nov','Des'], + dayNames: ['Sunnudagur','Mánadagur','Týsdagur','Mikudagur','Hósdagur','Fríggjadagur','Leyardagur'], + dayNamesShort: ['Sun','Mán','Týs','Mik','Hós','Frí','Ley'], + dayNamesMin: ['Su','Má','Tý','Mi','Hó','Fr','Le'], + weekHeader: 'Vk', + dateFormat: 'dd-mm-yy', + firstDay: 0, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['fo']); +}); diff --git a/js/ui/i18n/jquery.ui.datepicker-fr-CH.js b/js/ui/i18n/jquery.ui.datepicker-fr-CH.js new file mode 100644 index 0000000000..38212d5482 --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-fr-CH.js @@ -0,0 +1,23 @@ +/* Swiss-French initialisation for the jQuery UI date picker plugin. */ +/* Written Martin Voelkle (martin.voelkle@e-tc.ch). */ +jQuery(function($){ + $.datepicker.regional['fr-CH'] = { + closeText: 'Fermer', + prevText: '<Préc', + nextText: 'Suiv>', + currentText: 'Courant', + monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin', + 'Juillet','Août','Septembre','Octobre','Novembre','Décembre'], + monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun', + 'Jul','Aoû','Sep','Oct','Nov','Déc'], + dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'], + dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'], + dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'], + weekHeader: 'Sm', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['fr-CH']); +}); \ No newline at end of file diff --git a/js/ui/i18n/jquery.ui.datepicker-fr.js b/js/ui/i18n/jquery.ui.datepicker-fr.js new file mode 100644 index 0000000000..74ea1c231a --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-fr.js @@ -0,0 +1,25 @@ +/* French initialisation for the jQuery UI date picker plugin. */ +/* Written by Keith Wood (kbwood{at}iinet.com.au), + Stéphane Nahmani (sholby@sholby.net), + Stéphane Raimbault */ +jQuery(function($){ + $.datepicker.regional['fr'] = { + closeText: 'Fermer', + prevText: 'Précédent', + nextText: 'Suivant', + currentText: 'Aujourd\'hui', + monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin', + 'Juillet','Août','Septembre','Octobre','Novembre','Décembre'], + monthNamesShort: ['Janv.','Févr.','Mars','Avril','Mai','Juin', + 'Juil.','Août','Sept.','Oct.','Nov.','Déc.'], + dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'], + dayNamesShort: ['Dim.','Lun.','Mar.','Mer.','Jeu.','Ven.','Sam.'], + dayNamesMin: ['D','L','M','M','J','V','S'], + weekHeader: 'Sem.', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['fr']); +}); diff --git a/js/ui/i18n/jquery.ui.datepicker-gl.js b/js/ui/i18n/jquery.ui.datepicker-gl.js new file mode 100644 index 0000000000..278403e8f1 --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-gl.js @@ -0,0 +1,23 @@ +/* Galician localization for 'UI date picker' jQuery extension. */ +/* Translated by Jorge Barreiro . */ +jQuery(function($){ + $.datepicker.regional['gl'] = { + closeText: 'Pechar', + prevText: '<Ant', + nextText: 'Seg>', + currentText: 'Hoxe', + monthNames: ['Xaneiro','Febreiro','Marzo','Abril','Maio','Xuño', + 'Xullo','Agosto','Setembro','Outubro','Novembro','Decembro'], + monthNamesShort: ['Xan','Feb','Mar','Abr','Mai','Xuñ', + 'Xul','Ago','Set','Out','Nov','Dec'], + dayNames: ['Domingo','Luns','Martes','Mércores','Xoves','Venres','Sábado'], + dayNamesShort: ['Dom','Lun','Mar','Mér','Xov','Ven','Sáb'], + dayNamesMin: ['Do','Lu','Ma','Mé','Xo','Ve','Sá'], + weekHeader: 'Sm', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['gl']); +}); \ No newline at end of file diff --git a/js/ui/i18n/jquery.ui.datepicker-he.js b/js/ui/i18n/jquery.ui.datepicker-he.js new file mode 100644 index 0000000000..3b3dc387f2 --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-he.js @@ -0,0 +1,23 @@ +/* Hebrew initialisation for the UI Datepicker extension. */ +/* Written by Amir Hardon (ahardon at gmail dot com). */ +jQuery(function($){ + $.datepicker.regional['he'] = { + closeText: 'סגור', + prevText: '<הקודם', + nextText: 'הבא>', + currentText: 'היום', + monthNames: ['ינואר','פברואר','מרץ','אפריל','מאי','יוני', + 'יולי','אוגוסט','ספטמבר','אוקטובר','נובמבר','דצמבר'], + monthNamesShort: ['1','2','3','4','5','6', + '7','8','9','10','11','12'], + dayNames: ['ראשון','שני','שלישי','רביעי','חמישי','שישי','שבת'], + dayNamesShort: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'], + dayNamesMin: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'], + weekHeader: 'Wk', + dateFormat: 'dd/mm/yy', + firstDay: 0, + isRTL: true, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['he']); +}); diff --git a/js/ui/i18n/jquery.ui.datepicker-hr.js b/js/ui/i18n/jquery.ui.datepicker-hr.js new file mode 100644 index 0000000000..0285c1aa9b --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-hr.js @@ -0,0 +1,23 @@ +/* Croatian i18n for the jQuery UI date picker plugin. */ +/* Written by Vjekoslav Nesek. */ +jQuery(function($){ + $.datepicker.regional['hr'] = { + closeText: 'Zatvori', + prevText: '<', + nextText: '>', + currentText: 'Danas', + monthNames: ['Siječanj','Veljača','Ožujak','Travanj','Svibanj','Lipanj', + 'Srpanj','Kolovoz','Rujan','Listopad','Studeni','Prosinac'], + monthNamesShort: ['Sij','Velj','Ožu','Tra','Svi','Lip', + 'Srp','Kol','Ruj','Lis','Stu','Pro'], + dayNames: ['Nedjelja','Ponedjeljak','Utorak','Srijeda','Četvrtak','Petak','Subota'], + dayNamesShort: ['Ned','Pon','Uto','Sri','Čet','Pet','Sub'], + dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'], + weekHeader: 'Tje', + dateFormat: 'dd.mm.yy.', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['hr']); +}); \ No newline at end of file diff --git a/js/ui/i18n/jquery.ui.datepicker-hu.js b/js/ui/i18n/jquery.ui.datepicker-hu.js new file mode 100644 index 0000000000..46e63f59b2 --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-hu.js @@ -0,0 +1,23 @@ +/* Hungarian initialisation for the jQuery UI date picker plugin. */ +/* Written by Istvan Karaszi (jquery@spam.raszi.hu). */ +jQuery(function($){ + $.datepicker.regional['hu'] = { + closeText: 'bezárás', + prevText: '« vissza', + nextText: 'előre »', + currentText: 'ma', + monthNames: ['Január', 'Február', 'Március', 'Április', 'Május', 'Június', + 'Július', 'Augusztus', 'Szeptember', 'Október', 'November', 'December'], + monthNamesShort: ['Jan', 'Feb', 'Már', 'Ápr', 'Máj', 'Jún', + 'Júl', 'Aug', 'Szep', 'Okt', 'Nov', 'Dec'], + dayNames: ['Vasárnap', 'Hétfö', 'Kedd', 'Szerda', 'Csütörtök', 'Péntek', 'Szombat'], + dayNamesShort: ['Vas', 'Hét', 'Ked', 'Sze', 'Csü', 'Pén', 'Szo'], + dayNamesMin: ['V', 'H', 'K', 'Sze', 'Cs', 'P', 'Szo'], + weekHeader: 'Hé', + dateFormat: 'yy-mm-dd', + firstDay: 1, + isRTL: false, + showMonthAfterYear: true, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['hu']); +}); diff --git a/js/ui/i18n/jquery.ui.datepicker-hy.js b/js/ui/i18n/jquery.ui.datepicker-hy.js new file mode 100644 index 0000000000..c6cc1946c4 --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-hy.js @@ -0,0 +1,23 @@ +/* Armenian(UTF-8) initialisation for the jQuery UI date picker plugin. */ +/* Written by Levon Zakaryan (levon.zakaryan@gmail.com)*/ +jQuery(function($){ + $.datepicker.regional['hy'] = { + closeText: 'Փակել', + prevText: '<Նախ.', + nextText: 'Հաջ.>', + currentText: 'Այսօր', + monthNames: ['Հունվար','Փետրվար','Մարտ','Ապրիլ','Մայիս','Հունիս', + 'Հուլիս','Օգոստոս','Սեպտեմբեր','Հոկտեմբեր','Նոյեմբեր','Դեկտեմբեր'], + monthNamesShort: ['Հունվ','Փետր','Մարտ','Ապր','Մայիս','Հունիս', + 'Հուլ','Օգս','Սեպ','Հոկ','Նոյ','Դեկ'], + dayNames: ['կիրակի','եկուշաբթի','երեքշաբթի','չորեքշաբթի','հինգշաբթի','ուրբաթ','շաբաթ'], + dayNamesShort: ['կիր','երկ','երք','չրք','հնգ','ուրբ','շբթ'], + dayNamesMin: ['կիր','երկ','երք','չրք','հնգ','ուրբ','շբթ'], + weekHeader: 'ՇԲՏ', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['hy']); +}); \ No newline at end of file diff --git a/js/ui/i18n/jquery.ui.datepicker-id.js b/js/ui/i18n/jquery.ui.datepicker-id.js new file mode 100644 index 0000000000..c626fbb7b8 --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-id.js @@ -0,0 +1,23 @@ +/* Indonesian initialisation for the jQuery UI date picker plugin. */ +/* Written by Deden Fathurahman (dedenf@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['id'] = { + closeText: 'Tutup', + prevText: '<mundur', + nextText: 'maju>', + currentText: 'hari ini', + monthNames: ['Januari','Februari','Maret','April','Mei','Juni', + 'Juli','Agustus','September','Oktober','Nopember','Desember'], + monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun', + 'Jul','Agus','Sep','Okt','Nop','Des'], + dayNames: ['Minggu','Senin','Selasa','Rabu','Kamis','Jumat','Sabtu'], + dayNamesShort: ['Min','Sen','Sel','Rab','kam','Jum','Sab'], + dayNamesMin: ['Mg','Sn','Sl','Rb','Km','jm','Sb'], + weekHeader: 'Mg', + dateFormat: 'dd/mm/yy', + firstDay: 0, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['id']); +}); \ No newline at end of file diff --git a/js/ui/i18n/jquery.ui.datepicker-is.js b/js/ui/i18n/jquery.ui.datepicker-is.js new file mode 100644 index 0000000000..c53235a49e --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-is.js @@ -0,0 +1,23 @@ +/* Icelandic initialisation for the jQuery UI date picker plugin. */ +/* Written by Haukur H. Thorsson (haukur@eskill.is). */ +jQuery(function($){ + $.datepicker.regional['is'] = { + closeText: 'Loka', + prevText: '< Fyrri', + nextText: 'Næsti >', + currentText: 'Í dag', + monthNames: ['Janúar','Febrúar','Mars','Apríl','Maí','Júní', + 'Júlí','Ágúst','September','Október','Nóvember','Desember'], + monthNamesShort: ['Jan','Feb','Mar','Apr','Maí','Jún', + 'Júl','Ágú','Sep','Okt','Nóv','Des'], + dayNames: ['Sunnudagur','Mánudagur','Þriðjudagur','Miðvikudagur','Fimmtudagur','Föstudagur','Laugardagur'], + dayNamesShort: ['Sun','Mán','Þri','Mið','Fim','Fös','Lau'], + dayNamesMin: ['Su','Má','Þr','Mi','Fi','Fö','La'], + weekHeader: 'Vika', + dateFormat: 'dd/mm/yy', + firstDay: 0, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['is']); +}); \ No newline at end of file diff --git a/js/ui/i18n/jquery.ui.datepicker-it.js b/js/ui/i18n/jquery.ui.datepicker-it.js new file mode 100644 index 0000000000..59da2df671 --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-it.js @@ -0,0 +1,23 @@ +/* Italian initialisation for the jQuery UI date picker plugin. */ +/* Written by Antonello Pasella (antonello.pasella@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['it'] = { + closeText: 'Chiudi', + prevText: '<Prec', + nextText: 'Succ>', + currentText: 'Oggi', + monthNames: ['Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno', + 'Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre'], + monthNamesShort: ['Gen','Feb','Mar','Apr','Mag','Giu', + 'Lug','Ago','Set','Ott','Nov','Dic'], + dayNames: ['Domenica','Lunedì','Martedì','Mercoledì','Giovedì','Venerdì','Sabato'], + dayNamesShort: ['Dom','Lun','Mar','Mer','Gio','Ven','Sab'], + dayNamesMin: ['Do','Lu','Ma','Me','Gi','Ve','Sa'], + weekHeader: 'Sm', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['it']); +}); diff --git a/js/ui/i18n/jquery.ui.datepicker-ja.js b/js/ui/i18n/jquery.ui.datepicker-ja.js new file mode 100644 index 0000000000..79cd827c76 --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-ja.js @@ -0,0 +1,23 @@ +/* Japanese initialisation for the jQuery UI date picker plugin. */ +/* Written by Kentaro SATO (kentaro@ranvis.com). */ +jQuery(function($){ + $.datepicker.regional['ja'] = { + closeText: '閉じる', + prevText: '<前', + nextText: '次>', + currentText: '今日', + monthNames: ['1月','2月','3月','4月','5月','6月', + '7月','8月','9月','10月','11月','12月'], + monthNamesShort: ['1月','2月','3月','4月','5月','6月', + '7月','8月','9月','10月','11月','12月'], + dayNames: ['日曜日','月曜日','火曜日','水曜日','木曜日','金曜日','土曜日'], + dayNamesShort: ['日','月','火','水','木','金','土'], + dayNamesMin: ['日','月','火','水','木','金','土'], + weekHeader: '週', + dateFormat: 'yy/mm/dd', + firstDay: 0, + isRTL: false, + showMonthAfterYear: true, + yearSuffix: '年'}; + $.datepicker.setDefaults($.datepicker.regional['ja']); +}); \ No newline at end of file diff --git a/js/ui/i18n/jquery.ui.datepicker-ko.js b/js/ui/i18n/jquery.ui.datepicker-ko.js new file mode 100644 index 0000000000..5b3531652d --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-ko.js @@ -0,0 +1,23 @@ +/* Korean initialisation for the jQuery calendar extension. */ +/* Written by DaeKwon Kang (ncrash.dk@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['ko'] = { + closeText: '닫기', + prevText: '이전달', + nextText: '다음달', + currentText: '오늘', + monthNames: ['1월(JAN)','2월(FEB)','3월(MAR)','4월(APR)','5월(MAY)','6월(JUN)', + '7월(JUL)','8월(AUG)','9월(SEP)','10월(OCT)','11월(NOV)','12월(DEC)'], + monthNamesShort: ['1월(JAN)','2월(FEB)','3월(MAR)','4월(APR)','5월(MAY)','6월(JUN)', + '7월(JUL)','8월(AUG)','9월(SEP)','10월(OCT)','11월(NOV)','12월(DEC)'], + dayNames: ['일','월','화','수','목','금','토'], + dayNamesShort: ['일','월','화','수','목','금','토'], + dayNamesMin: ['일','월','화','수','목','금','토'], + weekHeader: 'Wk', + dateFormat: 'yy-mm-dd', + firstDay: 0, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: '년'}; + $.datepicker.setDefaults($.datepicker.regional['ko']); +}); \ No newline at end of file diff --git a/js/ui/i18n/jquery.ui.datepicker-kz.js b/js/ui/i18n/jquery.ui.datepicker-kz.js new file mode 100644 index 0000000000..f1f897b006 --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-kz.js @@ -0,0 +1,23 @@ +/* Kazakh (UTF-8) initialisation for the jQuery UI date picker plugin. */ +/* Written by Dmitriy Karasyov (dmitriy.karasyov@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['kz'] = { + closeText: 'Жабу', + prevText: '<Алдыңғы', + nextText: 'Келесі>', + currentText: 'Бүгін', + monthNames: ['Қаңтар','Ақпан','Наурыз','Сәуір','Мамыр','Маусым', + 'Шілде','Тамыз','Қыркүйек','Қазан','Қараша','Желтоқсан'], + monthNamesShort: ['Қаң','Ақп','Нау','Сәу','Мам','Мау', + 'Шіл','Там','Қыр','Қаз','Қар','Жел'], + dayNames: ['Жексенбі','Дүйсенбі','Сейсенбі','Сәрсенбі','Бейсенбі','Жұма','Сенбі'], + dayNamesShort: ['жкс','дсн','ссн','срс','бсн','жма','снб'], + dayNamesMin: ['Жк','Дс','Сс','Ср','Бс','Жм','Сн'], + weekHeader: 'Не', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['kz']); +}); diff --git a/js/ui/i18n/jquery.ui.datepicker-lt.js b/js/ui/i18n/jquery.ui.datepicker-lt.js new file mode 100644 index 0000000000..67d5119ca7 --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-lt.js @@ -0,0 +1,23 @@ +/* Lithuanian (UTF-8) initialisation for the jQuery UI date picker plugin. */ +/* @author Arturas Paleicikas */ +jQuery(function($){ + $.datepicker.regional['lt'] = { + closeText: 'Uždaryti', + prevText: '<Atgal', + nextText: 'Pirmyn>', + currentText: 'Šiandien', + monthNames: ['Sausis','Vasaris','Kovas','Balandis','Gegužė','Birželis', + 'Liepa','Rugpjūtis','Rugsėjis','Spalis','Lapkritis','Gruodis'], + monthNamesShort: ['Sau','Vas','Kov','Bal','Geg','Bir', + 'Lie','Rugp','Rugs','Spa','Lap','Gru'], + dayNames: ['sekmadienis','pirmadienis','antradienis','trečiadienis','ketvirtadienis','penktadienis','šeštadienis'], + dayNamesShort: ['sek','pir','ant','tre','ket','pen','šeš'], + dayNamesMin: ['Se','Pr','An','Tr','Ke','Pe','Še'], + weekHeader: 'Wk', + dateFormat: 'yy-mm-dd', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['lt']); +}); \ No newline at end of file diff --git a/js/ui/i18n/jquery.ui.datepicker-lv.js b/js/ui/i18n/jquery.ui.datepicker-lv.js new file mode 100644 index 0000000000..003934e721 --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-lv.js @@ -0,0 +1,23 @@ +/* Latvian (UTF-8) initialisation for the jQuery UI date picker plugin. */ +/* @author Arturas Paleicikas */ +jQuery(function($){ + $.datepicker.regional['lv'] = { + closeText: 'Aizvērt', + prevText: 'Iepr', + nextText: 'Nāka', + currentText: 'Šodien', + monthNames: ['Janvāris','Februāris','Marts','Aprīlis','Maijs','Jūnijs', + 'Jūlijs','Augusts','Septembris','Oktobris','Novembris','Decembris'], + monthNamesShort: ['Jan','Feb','Mar','Apr','Mai','Jūn', + 'Jūl','Aug','Sep','Okt','Nov','Dec'], + dayNames: ['svētdiena','pirmdiena','otrdiena','trešdiena','ceturtdiena','piektdiena','sestdiena'], + dayNamesShort: ['svt','prm','otr','tre','ctr','pkt','sst'], + dayNamesMin: ['Sv','Pr','Ot','Tr','Ct','Pk','Ss'], + weekHeader: 'Nav', + dateFormat: 'dd-mm-yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['lv']); +}); \ No newline at end of file diff --git a/js/ui/i18n/jquery.ui.datepicker-ml.js b/js/ui/i18n/jquery.ui.datepicker-ml.js new file mode 100644 index 0000000000..753dba411d --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-ml.js @@ -0,0 +1,23 @@ +/* Malayalam (UTF-8) initialisation for the jQuery UI date picker plugin. */ +/* Written by Saji Nediyanchath (saji89@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['ml'] = { + closeText: 'ശരി', + prevText: 'മുന്നത്തെ', + nextText: 'അടുത്തത് ', + currentText: 'ഇന്ന്', + monthNames: ['ജനുവരി','ഫെബ്രുവരി','മാര്‍ച്ച്','ഏപ്രില്‍','മേയ്','ജൂണ്‍', + 'ജൂലൈ','ആഗസ്റ്റ്','സെപ്റ്റംബര്‍','ഒക്ടോബര്‍','നവംബര്‍','ഡിസംബര്‍'], + monthNamesShort: ['ജനു', 'ഫെബ്', 'മാര്‍', 'ഏപ്രി', 'മേയ്', 'ജൂണ്‍', + 'ജൂലാ', 'ആഗ', 'സെപ്', 'ഒക്ടോ', 'നവം', 'ഡിസ'], + dayNames: ['ഞായര്‍', 'തിങ്കള്‍', 'ചൊവ്വ', 'ബുധന്‍', 'വ്യാഴം', 'വെള്ളി', 'ശനി'], + dayNamesShort: ['ഞായ', 'തിങ്ക', 'ചൊവ്വ', 'ബുധ', 'വ്യാഴം', 'വെള്ളി', 'ശനി'], + dayNamesMin: ['ഞാ','തി','ചൊ','ബു','വ്യാ','വെ','ശ'], + weekHeader: 'ആ', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['ml']); +}); diff --git a/js/ui/i18n/jquery.ui.datepicker-ms.js b/js/ui/i18n/jquery.ui.datepicker-ms.js new file mode 100644 index 0000000000..e953ac04f1 --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-ms.js @@ -0,0 +1,23 @@ +/* Malaysian initialisation for the jQuery UI date picker plugin. */ +/* Written by Mohd Nawawi Mohamad Jamili (nawawi@ronggeng.net). */ +jQuery(function($){ + $.datepicker.regional['ms'] = { + closeText: 'Tutup', + prevText: '<Sebelum', + nextText: 'Selepas>', + currentText: 'hari ini', + monthNames: ['Januari','Februari','Mac','April','Mei','Jun', + 'Julai','Ogos','September','Oktober','November','Disember'], + monthNamesShort: ['Jan','Feb','Mac','Apr','Mei','Jun', + 'Jul','Ogo','Sep','Okt','Nov','Dis'], + dayNames: ['Ahad','Isnin','Selasa','Rabu','Khamis','Jumaat','Sabtu'], + dayNamesShort: ['Aha','Isn','Sel','Rab','kha','Jum','Sab'], + dayNamesMin: ['Ah','Is','Se','Ra','Kh','Ju','Sa'], + weekHeader: 'Mg', + dateFormat: 'dd/mm/yy', + firstDay: 0, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['ms']); +}); \ No newline at end of file diff --git a/js/ui/i18n/jquery.ui.datepicker-nl.js b/js/ui/i18n/jquery.ui.datepicker-nl.js new file mode 100644 index 0000000000..663d6bb26b --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-nl.js @@ -0,0 +1,23 @@ +/* Dutch (UTF-8) initialisation for the jQuery UI date picker plugin. */ +/* Written by Mathias Bynens */ +jQuery(function($){ + $.datepicker.regional.nl = { + closeText: 'Sluiten', + prevText: '←', + nextText: '→', + currentText: 'Vandaag', + monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni', + 'juli', 'augustus', 'september', 'oktober', 'november', 'december'], + monthNamesShort: ['jan', 'feb', 'maa', 'apr', 'mei', 'jun', + 'jul', 'aug', 'sep', 'okt', 'nov', 'dec'], + dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'], + dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'], + dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'], + weekHeader: 'Wk', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional.nl); +}); \ No newline at end of file diff --git a/js/ui/i18n/jquery.ui.datepicker-no.js b/js/ui/i18n/jquery.ui.datepicker-no.js new file mode 100644 index 0000000000..2507043a3f --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-no.js @@ -0,0 +1,23 @@ +/* Norwegian initialisation for the jQuery UI date picker plugin. */ +/* Written by Naimdjon Takhirov (naimdjon@gmail.com). */ + +jQuery(function($){ + $.datepicker.regional['no'] = { + closeText: 'Lukk', + prevText: '«Forrige', + nextText: 'Neste»', + currentText: 'I dag', + monthNames: ['januar','februar','mars','april','mai','juni','juli','august','september','oktober','november','desember'], + monthNamesShort: ['jan','feb','mar','apr','mai','jun','jul','aug','sep','okt','nov','des'], + dayNamesShort: ['søn','man','tir','ons','tor','fre','lør'], + dayNames: ['søndag','mandag','tirsdag','onsdag','torsdag','fredag','lørdag'], + dayNamesMin: ['sø','ma','ti','on','to','fr','lø'], + weekHeader: 'Uke', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: '' + }; + $.datepicker.setDefaults($.datepicker.regional['no']); +}); diff --git a/js/ui/i18n/jquery.ui.datepicker-pl.js b/js/ui/i18n/jquery.ui.datepicker-pl.js new file mode 100644 index 0000000000..61fa29ccd8 --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-pl.js @@ -0,0 +1,23 @@ +/* Polish initialisation for the jQuery UI date picker plugin. */ +/* Written by Jacek Wysocki (jacek.wysocki@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['pl'] = { + closeText: 'Zamknij', + prevText: '<Poprzedni', + nextText: 'Następny>', + currentText: 'Dziś', + monthNames: ['Styczeń','Luty','Marzec','Kwiecień','Maj','Czerwiec', + 'Lipiec','Sierpień','Wrzesień','Październik','Listopad','Grudzień'], + monthNamesShort: ['Sty','Lu','Mar','Kw','Maj','Cze', + 'Lip','Sie','Wrz','Pa','Lis','Gru'], + dayNames: ['Niedziela','Poniedziałek','Wtorek','Środa','Czwartek','Piątek','Sobota'], + dayNamesShort: ['Nie','Pn','Wt','Śr','Czw','Pt','So'], + dayNamesMin: ['N','Pn','Wt','Śr','Cz','Pt','So'], + weekHeader: 'Tydz', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['pl']); +}); diff --git a/js/ui/i18n/jquery.ui.datepicker-pt-BR.js b/js/ui/i18n/jquery.ui.datepicker-pt-BR.js new file mode 100644 index 0000000000..3cc8c796c8 --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-pt-BR.js @@ -0,0 +1,23 @@ +/* Brazilian initialisation for the jQuery UI date picker plugin. */ +/* Written by Leonildo Costa Silva (leocsilva@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['pt-BR'] = { + closeText: 'Fechar', + prevText: '<Anterior', + nextText: 'Próximo>', + currentText: 'Hoje', + monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho', + 'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'], + monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun', + 'Jul','Ago','Set','Out','Nov','Dez'], + dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'], + dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], + dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], + weekHeader: 'Sm', + dateFormat: 'dd/mm/yy', + firstDay: 0, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['pt-BR']); +}); \ No newline at end of file diff --git a/js/ui/i18n/jquery.ui.datepicker-pt.js b/js/ui/i18n/jquery.ui.datepicker-pt.js new file mode 100644 index 0000000000..f09f5aeb00 --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-pt.js @@ -0,0 +1,22 @@ +/* Portuguese initialisation for the jQuery UI date picker plugin. */ +jQuery(function($){ + $.datepicker.regional['pt'] = { + closeText: 'Fechar', + prevText: '<Anterior', + nextText: 'Seguinte', + currentText: 'Hoje', + monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho', + 'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'], + monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun', + 'Jul','Ago','Set','Out','Nov','Dez'], + dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'], + dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], + dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], + weekHeader: 'Sem', + dateFormat: 'dd/mm/yy', + firstDay: 0, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['pt']); +}); \ No newline at end of file diff --git a/js/ui/i18n/jquery.ui.datepicker-rm.js b/js/ui/i18n/jquery.ui.datepicker-rm.js new file mode 100644 index 0000000000..cf03cd4c1a --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-rm.js @@ -0,0 +1,21 @@ +/* Romansh initialisation for the jQuery UI date picker plugin. */ +/* Written by Yvonne Gienal (yvonne.gienal@educa.ch). */ +jQuery(function($){ + $.datepicker.regional['rm'] = { + closeText: 'Serrar', + prevText: '<Suandant', + nextText: 'Precedent>', + currentText: 'Actual', + monthNames: ['Schaner','Favrer','Mars','Avrigl','Matg','Zercladur', 'Fanadur','Avust','Settember','October','November','December'], + monthNamesShort: ['Scha','Fev','Mar','Avr','Matg','Zer', 'Fan','Avu','Sett','Oct','Nov','Dec'], + dayNames: ['Dumengia','Glindesdi','Mardi','Mesemna','Gievgia','Venderdi','Sonda'], + dayNamesShort: ['Dum','Gli','Mar','Mes','Gie','Ven','Som'], + dayNamesMin: ['Du','Gl','Ma','Me','Gi','Ve','So'], + weekHeader: 'emna', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['rm']); +}); diff --git a/js/ui/i18n/jquery.ui.datepicker-ro.js b/js/ui/i18n/jquery.ui.datepicker-ro.js new file mode 100644 index 0000000000..4fe95aeac1 --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-ro.js @@ -0,0 +1,26 @@ +/* Romanian initialisation for the jQuery UI date picker plugin. + * + * Written by Edmond L. (ll_edmond@walla.com) + * and Ionut G. Stan (ionut.g.stan@gmail.com) + */ +jQuery(function($){ + $.datepicker.regional['ro'] = { + closeText: 'Închide', + prevText: '« Luna precedentă', + nextText: 'Luna următoare »', + currentText: 'Azi', + monthNames: ['Ianuarie','Februarie','Martie','Aprilie','Mai','Iunie', + 'Iulie','August','Septembrie','Octombrie','Noiembrie','Decembrie'], + monthNamesShort: ['Ian', 'Feb', 'Mar', 'Apr', 'Mai', 'Iun', + 'Iul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], + dayNames: ['Duminică', 'Luni', 'Marţi', 'Miercuri', 'Joi', 'Vineri', 'Sâmbătă'], + dayNamesShort: ['Dum', 'Lun', 'Mar', 'Mie', 'Joi', 'Vin', 'Sâm'], + dayNamesMin: ['Du','Lu','Ma','Mi','Jo','Vi','Sâ'], + weekHeader: 'Săpt', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['ro']); +}); diff --git a/js/ui/i18n/jquery.ui.datepicker-ru.js b/js/ui/i18n/jquery.ui.datepicker-ru.js new file mode 100644 index 0000000000..50a4613523 --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-ru.js @@ -0,0 +1,23 @@ +/* Russian (UTF-8) initialisation for the jQuery UI date picker plugin. */ +/* Written by Andrew Stromnov (stromnov@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['ru'] = { + closeText: 'Закрыть', + prevText: '<Пред', + nextText: 'След>', + currentText: 'Сегодня', + monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь', + 'Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'], + monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн', + 'Июл','Авг','Сен','Окт','Ноя','Дек'], + dayNames: ['воскресенье','понедельник','вторник','среда','четверг','пятница','суббота'], + dayNamesShort: ['вск','пнд','втр','срд','чтв','птн','сбт'], + dayNamesMin: ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'], + weekHeader: 'Нед', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['ru']); +}); \ No newline at end of file diff --git a/js/ui/i18n/jquery.ui.datepicker-sk.js b/js/ui/i18n/jquery.ui.datepicker-sk.js new file mode 100644 index 0000000000..8a6771c1e0 --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-sk.js @@ -0,0 +1,23 @@ +/* Slovak initialisation for the jQuery UI date picker plugin. */ +/* Written by Vojtech Rinik (vojto@hmm.sk). */ +jQuery(function($){ + $.datepicker.regional['sk'] = { + closeText: 'Zavrieť', + prevText: '<Predchádzajúci', + nextText: 'Nasledujúci>', + currentText: 'Dnes', + monthNames: ['Január','Február','Marec','Apríl','Máj','Jún', + 'Júl','August','September','Október','November','December'], + monthNamesShort: ['Jan','Feb','Mar','Apr','Máj','Jún', + 'Júl','Aug','Sep','Okt','Nov','Dec'], + dayNames: ['Nedel\'a','Pondelok','Utorok','Streda','Štvrtok','Piatok','Sobota'], + dayNamesShort: ['Ned','Pon','Uto','Str','Štv','Pia','Sob'], + dayNamesMin: ['Ne','Po','Ut','St','Št','Pia','So'], + weekHeader: 'Ty', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['sk']); +}); diff --git a/js/ui/i18n/jquery.ui.datepicker-sl.js b/js/ui/i18n/jquery.ui.datepicker-sl.js new file mode 100644 index 0000000000..516550192a --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-sl.js @@ -0,0 +1,24 @@ +/* Slovenian initialisation for the jQuery UI date picker plugin. */ +/* Written by Jaka Jancar (jaka@kubje.org). */ +/* c = č, s = š z = ž C = Č S = Š Z = Ž */ +jQuery(function($){ + $.datepicker.regional['sl'] = { + closeText: 'Zapri', + prevText: '<Prejšnji', + nextText: 'Naslednji>', + currentText: 'Trenutni', + monthNames: ['Januar','Februar','Marec','April','Maj','Junij', + 'Julij','Avgust','September','Oktober','November','December'], + monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', + 'Jul','Avg','Sep','Okt','Nov','Dec'], + dayNames: ['Nedelja','Ponedeljek','Torek','Sreda','Četrtek','Petek','Sobota'], + dayNamesShort: ['Ned','Pon','Tor','Sre','Čet','Pet','Sob'], + dayNamesMin: ['Ne','Po','To','Sr','Če','Pe','So'], + weekHeader: 'Teden', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['sl']); +}); diff --git a/js/ui/i18n/jquery.ui.datepicker-sq.js b/js/ui/i18n/jquery.ui.datepicker-sq.js new file mode 100644 index 0000000000..be84104c09 --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-sq.js @@ -0,0 +1,23 @@ +/* Albanian initialisation for the jQuery UI date picker plugin. */ +/* Written by Flakron Bytyqi (flakron@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['sq'] = { + closeText: 'mbylle', + prevText: '<mbrapa', + nextText: 'Përpara>', + currentText: 'sot', + monthNames: ['Janar','Shkurt','Mars','Prill','Maj','Qershor', + 'Korrik','Gusht','Shtator','Tetor','Nëntor','Dhjetor'], + monthNamesShort: ['Jan','Shk','Mar','Pri','Maj','Qer', + 'Kor','Gus','Sht','Tet','Nën','Dhj'], + dayNames: ['E Diel','E Hënë','E Martë','E Mërkurë','E Enjte','E Premte','E Shtune'], + dayNamesShort: ['Di','Hë','Ma','Më','En','Pr','Sh'], + dayNamesMin: ['Di','Hë','Ma','Më','En','Pr','Sh'], + weekHeader: 'Ja', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['sq']); +}); diff --git a/js/ui/i18n/jquery.ui.datepicker-sr-SR.js b/js/ui/i18n/jquery.ui.datepicker-sr-SR.js new file mode 100644 index 0000000000..8f8ea5e630 --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-sr-SR.js @@ -0,0 +1,23 @@ +/* Serbian i18n for the jQuery UI date picker plugin. */ +/* Written by Dejan Dimić. */ +jQuery(function($){ + $.datepicker.regional['sr-SR'] = { + closeText: 'Zatvori', + prevText: '<', + nextText: '>', + currentText: 'Danas', + monthNames: ['Januar','Februar','Mart','April','Maj','Jun', + 'Jul','Avgust','Septembar','Oktobar','Novembar','Decembar'], + monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', + 'Jul','Avg','Sep','Okt','Nov','Dec'], + dayNames: ['Nedelja','Ponedeljak','Utorak','Sreda','Četvrtak','Petak','Subota'], + dayNamesShort: ['Ned','Pon','Uto','Sre','Čet','Pet','Sub'], + dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'], + weekHeader: 'Sed', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['sr-SR']); +}); diff --git a/js/ui/i18n/jquery.ui.datepicker-sr.js b/js/ui/i18n/jquery.ui.datepicker-sr.js new file mode 100644 index 0000000000..49c9b4a303 --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-sr.js @@ -0,0 +1,23 @@ +/* Serbian i18n for the jQuery UI date picker plugin. */ +/* Written by Dejan Dimić. */ +jQuery(function($){ + $.datepicker.regional['sr'] = { + closeText: 'Затвори', + prevText: '<', + nextText: '>', + currentText: 'Данас', + monthNames: ['Јануар','Фебруар','Март','Април','Мај','Јун', + 'Јул','Август','Септембар','Октобар','Новембар','Децембар'], + monthNamesShort: ['Јан','Феб','Мар','Апр','Мај','Јун', + 'Јул','Авг','Сеп','Окт','Нов','Дец'], + dayNames: ['Недеља','Понедељак','Уторак','Среда','Четвртак','Петак','Субота'], + dayNamesShort: ['Нед','Пон','Уто','Сре','Чет','Пет','Суб'], + dayNamesMin: ['Не','По','Ут','Ср','Че','Пе','Су'], + weekHeader: 'Сед', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['sr']); +}); diff --git a/js/ui/i18n/jquery.ui.datepicker-sv.js b/js/ui/i18n/jquery.ui.datepicker-sv.js new file mode 100644 index 0000000000..8236b62b53 --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-sv.js @@ -0,0 +1,23 @@ +/* Swedish initialisation for the jQuery UI date picker plugin. */ +/* Written by Anders Ekdahl ( anders@nomadiz.se). */ +jQuery(function($){ + $.datepicker.regional['sv'] = { + closeText: 'Stäng', + prevText: '«Förra', + nextText: 'Nästa»', + currentText: 'Idag', + monthNames: ['Januari','Februari','Mars','April','Maj','Juni', + 'Juli','Augusti','September','Oktober','November','December'], + monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', + 'Jul','Aug','Sep','Okt','Nov','Dec'], + dayNamesShort: ['Sön','Mån','Tis','Ons','Tor','Fre','Lör'], + dayNames: ['Söndag','Måndag','Tisdag','Onsdag','Torsdag','Fredag','Lördag'], + dayNamesMin: ['Sö','Må','Ti','On','To','Fr','Lö'], + weekHeader: 'Ve', + dateFormat: 'yy-mm-dd', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['sv']); +}); diff --git a/js/ui/i18n/jquery.ui.datepicker-ta.js b/js/ui/i18n/jquery.ui.datepicker-ta.js new file mode 100644 index 0000000000..91116d3877 --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-ta.js @@ -0,0 +1,23 @@ +/* Tamil (UTF-8) initialisation for the jQuery UI date picker plugin. */ +/* Written by S A Sureshkumar (saskumar@live.com). */ +jQuery(function($){ + $.datepicker.regional['ta'] = { + closeText: 'மூடு', + prevText: 'முன்னையது', + nextText: 'அடுத்தது', + currentText: 'இன்று', + monthNames: ['தை','மாசி','பங்குனி','சித்திரை','வைகாசி','ஆனி', + 'ஆடி','ஆவணி','புரட்டாசி','ஐப்பசி','கார்த்திகை','மார்கழி'], + monthNamesShort: ['தை','மாசி','பங்','சித்','வைகா','ஆனி', + 'ஆடி','ஆவ','புர','ஐப்','கார்','மார்'], + dayNames: ['ஞாயிற்றுக்கிழமை','திங்கட்கிழமை','செவ்வாய்க்கிழமை','புதன்கிழமை','வியாழக்கிழமை','வெள்ளிக்கிழமை','சனிக்கிழமை'], + dayNamesShort: ['ஞாயிறு','திங்கள்','செவ்வாய்','புதன்','வியாழன்','வெள்ளி','சனி'], + dayNamesMin: ['ஞா','தி','செ','பு','வி','வெ','ச'], + weekHeader: 'Не', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['ta']); +}); diff --git a/js/ui/i18n/jquery.ui.datepicker-th.js b/js/ui/i18n/jquery.ui.datepicker-th.js new file mode 100644 index 0000000000..c090c6b81c --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-th.js @@ -0,0 +1,23 @@ +/* Thai initialisation for the jQuery UI date picker plugin. */ +/* Written by pipo (pipo@sixhead.com). */ +jQuery(function($){ + $.datepicker.regional['th'] = { + closeText: 'ปิด', + prevText: '« ย้อน', + nextText: 'ถัดไป »', + currentText: 'วันนี้', + monthNames: ['มกราคม','กุมภาพันธ์','มีนาคม','เมษายน','พฤษภาคม','มิถุนายน', + 'กรกฎาคม','สิงหาคม','กันยายน','ตุลาคม','พฤศจิกายน','ธันวาคม'], + monthNamesShort: ['ม.ค.','ก.พ.','มี.ค.','เม.ย.','พ.ค.','มิ.ย.', + 'ก.ค.','ส.ค.','ก.ย.','ต.ค.','พ.ย.','ธ.ค.'], + dayNames: ['อาทิตย์','จันทร์','อังคาร','พุธ','พฤหัสบดี','ศุกร์','เสาร์'], + dayNamesShort: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'], + dayNamesMin: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'], + weekHeader: 'Wk', + dateFormat: 'dd/mm/yy', + firstDay: 0, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['th']); +}); \ No newline at end of file diff --git a/js/ui/i18n/jquery.ui.datepicker-tr.js b/js/ui/i18n/jquery.ui.datepicker-tr.js new file mode 100644 index 0000000000..dedfc7ff99 --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-tr.js @@ -0,0 +1,23 @@ +/* Turkish initialisation for the jQuery UI date picker plugin. */ +/* Written by Izzet Emre Erkan (kara@karalamalar.net). */ +jQuery(function($){ + $.datepicker.regional['tr'] = { + closeText: 'kapat', + prevText: '<geri', + nextText: 'ileri>', + currentText: 'bugün', + monthNames: ['Ocak','Şubat','Mart','Nisan','Mayıs','Haziran', + 'Temmuz','Ağustos','Eylül','Ekim','Kasım','Aralık'], + monthNamesShort: ['Oca','Şub','Mar','Nis','May','Haz', + 'Tem','Ağu','Eyl','Eki','Kas','Ara'], + dayNames: ['Pazar','Pazartesi','Salı','Çarşamba','Perşembe','Cuma','Cumartesi'], + dayNamesShort: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'], + dayNamesMin: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'], + weekHeader: 'Hf', + dateFormat: 'dd.mm.yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['tr']); +}); \ No newline at end of file diff --git a/js/ui/i18n/jquery.ui.datepicker-uk.js b/js/ui/i18n/jquery.ui.datepicker-uk.js new file mode 100644 index 0000000000..112b40e7f8 --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-uk.js @@ -0,0 +1,23 @@ +/* Ukrainian (UTF-8) initialisation for the jQuery UI date picker plugin. */ +/* Written by Maxim Drogobitskiy (maxdao@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['uk'] = { + closeText: 'Закрити', + prevText: '<', + nextText: '>', + currentText: 'Сьогодні', + monthNames: ['Січень','Лютий','Березень','Квітень','Травень','Червень', + 'Липень','Серпень','Вересень','Жовтень','Листопад','Грудень'], + monthNamesShort: ['Січ','Лют','Бер','Кві','Тра','Чер', + 'Лип','Сер','Вер','Жов','Лис','Гру'], + dayNames: ['неділя','понеділок','вівторок','середа','четвер','п’ятниця','субота'], + dayNamesShort: ['нед','пнд','вів','срд','чтв','птн','сбт'], + dayNamesMin: ['Нд','Пн','Вт','Ср','Чт','Пт','Сб'], + weekHeader: 'Не', + dateFormat: 'dd/mm/yy', + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['uk']); +}); \ No newline at end of file diff --git a/js/ui/i18n/jquery.ui.datepicker-vi.js b/js/ui/i18n/jquery.ui.datepicker-vi.js new file mode 100644 index 0000000000..9813a59e01 --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-vi.js @@ -0,0 +1,23 @@ +/* Vietnamese initialisation for the jQuery UI date picker plugin. */ +/* Translated by Le Thanh Huy (lthanhhuy@cit.ctu.edu.vn). */ +jQuery(function($){ + $.datepicker.regional['vi'] = { + closeText: 'Đóng', + prevText: '<Trước', + nextText: 'Tiếp>', + currentText: 'Hôm nay', + monthNames: ['Tháng Một', 'Tháng Hai', 'Tháng Ba', 'Tháng Tư', 'Tháng Năm', 'Tháng Sáu', + 'Tháng Bảy', 'Tháng Tám', 'Tháng Chín', 'Tháng Mười', 'Tháng Mười Một', 'Tháng Mười Hai'], + monthNamesShort: ['Tháng 1', 'Tháng 2', 'Tháng 3', 'Tháng 4', 'Tháng 5', 'Tháng 6', + 'Tháng 7', 'Tháng 8', 'Tháng 9', 'Tháng 10', 'Tháng 11', 'Tháng 12'], + dayNames: ['Chủ Nhật', 'Thứ Hai', 'Thứ Ba', 'Thứ Tư', 'Thứ Năm', 'Thứ Sáu', 'Thứ Bảy'], + dayNamesShort: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'], + dayNamesMin: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'], + weekHeader: 'Tu', + dateFormat: 'dd/mm/yy', + firstDay: 0, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: ''}; + $.datepicker.setDefaults($.datepicker.regional['vi']); +}); diff --git a/js/ui/i18n/jquery.ui.datepicker-zh-CN.js b/js/ui/i18n/jquery.ui.datepicker-zh-CN.js new file mode 100644 index 0000000000..6c4883f536 --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-zh-CN.js @@ -0,0 +1,23 @@ +/* Chinese initialisation for the jQuery UI date picker plugin. */ +/* Written by Cloudream (cloudream@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['zh-CN'] = { + closeText: '关闭', + prevText: '<上月', + nextText: '下月>', + currentText: '今天', + monthNames: ['一月','二月','三月','四月','五月','六月', + '七月','八月','九月','十月','十一月','十二月'], + monthNamesShort: ['一','二','三','四','五','六', + '七','八','九','十','十一','十二'], + dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], + dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], + dayNamesMin: ['日','一','二','三','四','五','六'], + weekHeader: '周', + dateFormat: 'yy-mm-dd', + firstDay: 1, + isRTL: false, + showMonthAfterYear: true, + yearSuffix: '年'}; + $.datepicker.setDefaults($.datepicker.regional['zh-CN']); +}); diff --git a/js/ui/i18n/jquery.ui.datepicker-zh-HK.js b/js/ui/i18n/jquery.ui.datepicker-zh-HK.js new file mode 100644 index 0000000000..06c4c628c4 --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-zh-HK.js @@ -0,0 +1,23 @@ +/* Chinese initialisation for the jQuery UI date picker plugin. */ +/* Written by SCCY (samuelcychan@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['zh-HK'] = { + closeText: '關閉', + prevText: '<上月', + nextText: '下月>', + currentText: '今天', + monthNames: ['一月','二月','三月','四月','五月','六月', + '七月','八月','九月','十月','十一月','十二月'], + monthNamesShort: ['一','二','三','四','五','六', + '七','八','九','十','十一','十二'], + dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], + dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], + dayNamesMin: ['日','一','二','三','四','五','六'], + weekHeader: '周', + dateFormat: 'dd-mm-yy', + firstDay: 0, + isRTL: false, + showMonthAfterYear: true, + yearSuffix: '年'}; + $.datepicker.setDefaults($.datepicker.regional['zh-HK']); +}); diff --git a/js/ui/i18n/jquery.ui.datepicker-zh-TW.js b/js/ui/i18n/jquery.ui.datepicker-zh-TW.js new file mode 100644 index 0000000000..d211573c67 --- /dev/null +++ b/js/ui/i18n/jquery.ui.datepicker-zh-TW.js @@ -0,0 +1,23 @@ +/* Chinese initialisation for the jQuery UI date picker plugin. */ +/* Written by Ressol (ressol@gmail.com). */ +jQuery(function($){ + $.datepicker.regional['zh-TW'] = { + closeText: '關閉', + prevText: '<上月', + nextText: '下月>', + currentText: '今天', + monthNames: ['一月','二月','三月','四月','五月','六月', + '七月','八月','九月','十月','十一月','十二月'], + monthNamesShort: ['一','二','三','四','五','六', + '七','八','九','十','十一','十二'], + dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], + dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], + dayNamesMin: ['日','一','二','三','四','五','六'], + weekHeader: '周', + dateFormat: 'yy/mm/dd', + firstDay: 1, + isRTL: false, + showMonthAfterYear: true, + yearSuffix: '年'}; + $.datepicker.setDefaults($.datepicker.regional['zh-TW']); +}); diff --git a/js/ui/jquery-ui-1.8.10.custom.js b/js/ui/jquery-ui-1.8.10.custom.js new file mode 100644 index 0000000000..8219acdf28 --- /dev/null +++ b/js/ui/jquery-ui-1.8.10.custom.js @@ -0,0 +1,11544 @@ +/*! + * jQuery UI 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI + */ +(function( $, undefined ) { + +// prevent duplicate loading +// this is only a problem because we proxy existing functions +// and we don't want to double proxy them +$.ui = $.ui || {}; +if ( $.ui.version ) { + return; +} + +$.extend( $.ui, { + version: "1.8.10", + + keyCode: { + ALT: 18, + BACKSPACE: 8, + CAPS_LOCK: 20, + COMMA: 188, + COMMAND: 91, + COMMAND_LEFT: 91, // COMMAND + COMMAND_RIGHT: 93, + CONTROL: 17, + DELETE: 46, + DOWN: 40, + END: 35, + ENTER: 13, + ESCAPE: 27, + HOME: 36, + INSERT: 45, + LEFT: 37, + MENU: 93, // COMMAND_RIGHT + NUMPAD_ADD: 107, + NUMPAD_DECIMAL: 110, + NUMPAD_DIVIDE: 111, + NUMPAD_ENTER: 108, + NUMPAD_MULTIPLY: 106, + NUMPAD_SUBTRACT: 109, + PAGE_DOWN: 34, + PAGE_UP: 33, + PERIOD: 190, + RIGHT: 39, + SHIFT: 16, + SPACE: 32, + TAB: 9, + UP: 38, + WINDOWS: 91 // COMMAND + } +}); + +// plugins +$.fn.extend({ + _focus: $.fn.focus, + focus: function( delay, fn ) { + return typeof delay === "number" ? + this.each(function() { + var elem = this; + setTimeout(function() { + $( elem ).focus(); + if ( fn ) { + fn.call( elem ); + } + }, delay ); + }) : + this._focus.apply( this, arguments ); + }, + + scrollParent: function() { + var scrollParent; + if (($.browser.msie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) { + scrollParent = this.parents().filter(function() { + return (/(relative|absolute|fixed)/).test($.curCSS(this,'position',1)) && (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1)); + }).eq(0); + } else { + scrollParent = this.parents().filter(function() { + return (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1)); + }).eq(0); + } + + return (/fixed/).test(this.css('position')) || !scrollParent.length ? $(document) : scrollParent; + }, + + zIndex: function( zIndex ) { + if ( zIndex !== undefined ) { + return this.css( "zIndex", zIndex ); + } + + if ( this.length ) { + var elem = $( this[ 0 ] ), position, value; + while ( elem.length && elem[ 0 ] !== document ) { + // Ignore z-index if position is set to a value where z-index is ignored by the browser + // This makes behavior of this function consistent across browsers + // WebKit always returns auto if the element is positioned + position = elem.css( "position" ); + if ( position === "absolute" || position === "relative" || position === "fixed" ) { + // IE returns 0 when zIndex is not specified + // other browsers return a string + // we ignore the case of nested elements with an explicit value of 0 + //
    + value = parseInt( elem.css( "zIndex" ), 10 ); + if ( !isNaN( value ) && value !== 0 ) { + return value; + } + } + elem = elem.parent(); + } + } + + return 0; + }, + + disableSelection: function() { + return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) + + ".ui-disableSelection", function( event ) { + event.preventDefault(); + }); + }, + + enableSelection: function() { + return this.unbind( ".ui-disableSelection" ); + } +}); + +$.each( [ "Width", "Height" ], function( i, name ) { + var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ], + type = name.toLowerCase(), + orig = { + innerWidth: $.fn.innerWidth, + innerHeight: $.fn.innerHeight, + outerWidth: $.fn.outerWidth, + outerHeight: $.fn.outerHeight + }; + + function reduce( elem, size, border, margin ) { + $.each( side, function() { + size -= parseFloat( $.curCSS( elem, "padding" + this, true) ) || 0; + if ( border ) { + size -= parseFloat( $.curCSS( elem, "border" + this + "Width", true) ) || 0; + } + if ( margin ) { + size -= parseFloat( $.curCSS( elem, "margin" + this, true) ) || 0; + } + }); + return size; + } + + $.fn[ "inner" + name ] = function( size ) { + if ( size === undefined ) { + return orig[ "inner" + name ].call( this ); + } + + return this.each(function() { + $( this ).css( type, reduce( this, size ) + "px" ); + }); + }; + + $.fn[ "outer" + name] = function( size, margin ) { + if ( typeof size !== "number" ) { + return orig[ "outer" + name ].call( this, size ); + } + + return this.each(function() { + $( this).css( type, reduce( this, size, true, margin ) + "px" ); + }); + }; +}); + +// selectors +function visible( element ) { + return !$( element ).parents().andSelf().filter(function() { + return $.curCSS( this, "visibility" ) === "hidden" || + $.expr.filters.hidden( this ); + }).length; +} + +$.extend( $.expr[ ":" ], { + data: function( elem, i, match ) { + return !!$.data( elem, match[ 3 ] ); + }, + + focusable: function( element ) { + var nodeName = element.nodeName.toLowerCase(), + tabIndex = $.attr( element, "tabindex" ); + if ( "area" === nodeName ) { + var map = element.parentNode, + mapName = map.name, + img; + if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) { + return false; + } + img = $( "img[usemap=#" + mapName + "]" )[0]; + return !!img && visible( img ); + } + return ( /input|select|textarea|button|object/.test( nodeName ) + ? !element.disabled + : "a" == nodeName + ? element.href || !isNaN( tabIndex ) + : !isNaN( tabIndex )) + // the element and all of its ancestors must be visible + && visible( element ); + }, + + tabbable: function( element ) { + var tabIndex = $.attr( element, "tabindex" ); + return ( isNaN( tabIndex ) || tabIndex >= 0 ) && $( element ).is( ":focusable" ); + } +}); + +// support +$(function() { + var body = document.body, + div = body.appendChild( div = document.createElement( "div" ) ); + + $.extend( div.style, { + minHeight: "100px", + height: "auto", + padding: 0, + borderWidth: 0 + }); + + $.support.minHeight = div.offsetHeight === 100; + $.support.selectstart = "onselectstart" in div; + + // set display to none to avoid a layout bug in IE + // http://dev.jquery.com/ticket/4014 + body.removeChild( div ).style.display = "none"; +}); + + + + + +// deprecated +$.extend( $.ui, { + // $.ui.plugin is deprecated. Use the proxy pattern instead. + plugin: { + add: function( module, option, set ) { + var proto = $.ui[ module ].prototype; + for ( var i in set ) { + proto.plugins[ i ] = proto.plugins[ i ] || []; + proto.plugins[ i ].push( [ option, set[ i ] ] ); + } + }, + call: function( instance, name, args ) { + var set = instance.plugins[ name ]; + if ( !set || !instance.element[ 0 ].parentNode ) { + return; + } + + for ( var i = 0; i < set.length; i++ ) { + if ( instance.options[ set[ i ][ 0 ] ] ) { + set[ i ][ 1 ].apply( instance.element, args ); + } + } + } + }, + + // will be deprecated when we switch to jQuery 1.4 - use jQuery.contains() + contains: function( a, b ) { + return document.compareDocumentPosition ? + a.compareDocumentPosition( b ) & 16 : + a !== b && a.contains( b ); + }, + + // only used by resizable + hasScroll: function( el, a ) { + + //If overflow is hidden, the element might have extra content, but the user wants to hide it + if ( $( el ).css( "overflow" ) === "hidden") { + return false; + } + + var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop", + has = false; + + if ( el[ scroll ] > 0 ) { + return true; + } + + // TODO: determine which cases actually cause this to happen + // if the element doesn't have the scroll set, see if it's possible to + // set the scroll + el[ scroll ] = 1; + has = ( el[ scroll ] > 0 ); + el[ scroll ] = 0; + return has; + }, + + // these are odd functions, fix the API or move into individual plugins + isOverAxis: function( x, reference, size ) { + //Determines when x coordinate is over "b" element axis + return ( x > reference ) && ( x < ( reference + size ) ); + }, + isOver: function( y, x, top, left, height, width ) { + //Determines when x, y coordinates is over "b" element + return $.ui.isOverAxis( y, top, height ) && $.ui.isOverAxis( x, left, width ); + } +}); + +})( jQuery ); +/*! + * jQuery UI Widget 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Widget + */ +(function( $, undefined ) { + +// jQuery 1.4+ +if ( $.cleanData ) { + var _cleanData = $.cleanData; + $.cleanData = function( elems ) { + for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) { + $( elem ).triggerHandler( "remove" ); + } + _cleanData( elems ); + }; +} else { + var _remove = $.fn.remove; + $.fn.remove = function( selector, keepData ) { + return this.each(function() { + if ( !keepData ) { + if ( !selector || $.filter( selector, [ this ] ).length ) { + $( "*", this ).add( [ this ] ).each(function() { + $( this ).triggerHandler( "remove" ); + }); + } + } + return _remove.call( $(this), selector, keepData ); + }); + }; +} + +$.widget = function( name, base, prototype ) { + var namespace = name.split( "." )[ 0 ], + fullName; + name = name.split( "." )[ 1 ]; + fullName = namespace + "-" + name; + + if ( !prototype ) { + prototype = base; + base = $.Widget; + } + + // create selector for plugin + $.expr[ ":" ][ fullName ] = function( elem ) { + return !!$.data( elem, name ); + }; + + $[ namespace ] = $[ namespace ] || {}; + $[ namespace ][ name ] = function( options, element ) { + // allow instantiation without initializing for simple inheritance + if ( arguments.length ) { + this._createWidget( options, element ); + } + }; + + var basePrototype = new base(); + // we need to make the options hash a property directly on the new instance + // otherwise we'll modify the options hash on the prototype that we're + // inheriting from +// $.each( basePrototype, function( key, val ) { +// if ( $.isPlainObject(val) ) { +// basePrototype[ key ] = $.extend( {}, val ); +// } +// }); + basePrototype.options = $.extend( true, {}, basePrototype.options ); + $[ namespace ][ name ].prototype = $.extend( true, basePrototype, { + namespace: namespace, + widgetName: name, + widgetEventPrefix: $[ namespace ][ name ].prototype.widgetEventPrefix || name, + widgetBaseClass: fullName + }, prototype ); + + $.widget.bridge( name, $[ namespace ][ name ] ); +}; + +$.widget.bridge = function( name, object ) { + $.fn[ name ] = function( options ) { + var isMethodCall = typeof options === "string", + args = Array.prototype.slice.call( arguments, 1 ), + returnValue = this; + + // allow multiple hashes to be passed on init + options = !isMethodCall && args.length ? + $.extend.apply( null, [ true, options ].concat(args) ) : + options; + + // prevent calls to internal methods + if ( isMethodCall && options.charAt( 0 ) === "_" ) { + return returnValue; + } + + if ( isMethodCall ) { + this.each(function() { + var instance = $.data( this, name ), + methodValue = instance && $.isFunction( instance[options] ) ? + instance[ options ].apply( instance, args ) : + instance; + // TODO: add this back in 1.9 and use $.error() (see #5972) +// if ( !instance ) { +// throw "cannot call methods on " + name + " prior to initialization; " + +// "attempted to call method '" + options + "'"; +// } +// if ( !$.isFunction( instance[options] ) ) { +// throw "no such method '" + options + "' for " + name + " widget instance"; +// } +// var methodValue = instance[ options ].apply( instance, args ); + if ( methodValue !== instance && methodValue !== undefined ) { + returnValue = methodValue; + return false; + } + }); + } else { + this.each(function() { + var instance = $.data( this, name ); + if ( instance ) { + instance.option( options || {} )._init(); + } else { + $.data( this, name, new object( options, this ) ); + } + }); + } + + return returnValue; + }; +}; + +$.Widget = function( options, element ) { + // allow instantiation without initializing for simple inheritance + if ( arguments.length ) { + this._createWidget( options, element ); + } +}; + +$.Widget.prototype = { + widgetName: "widget", + widgetEventPrefix: "", + options: { + disabled: false + }, + _createWidget: function( options, element ) { + // $.widget.bridge stores the plugin instance, but we do it anyway + // so that it's stored even before the _create function runs + $.data( element, this.widgetName, this ); + this.element = $( element ); + this.options = $.extend( true, {}, + this.options, + this._getCreateOptions(), + options ); + + var self = this; + this.element.bind( "remove." + this.widgetName, function() { + self.destroy(); + }); + + this._create(); + this._trigger( "create" ); + this._init(); + }, + _getCreateOptions: function() { + return $.metadata && $.metadata.get( this.element[0] )[ this.widgetName ]; + }, + _create: function() {}, + _init: function() {}, + + destroy: function() { + this.element + .unbind( "." + this.widgetName ) + .removeData( this.widgetName ); + this.widget() + .unbind( "." + this.widgetName ) + .removeAttr( "aria-disabled" ) + .removeClass( + this.widgetBaseClass + "-disabled " + + "ui-state-disabled" ); + }, + + widget: function() { + return this.element; + }, + + option: function( key, value ) { + var options = key; + + if ( arguments.length === 0 ) { + // don't return a reference to the internal hash + return $.extend( {}, this.options ); + } + + if (typeof key === "string" ) { + if ( value === undefined ) { + return this.options[ key ]; + } + options = {}; + options[ key ] = value; + } + + this._setOptions( options ); + + return this; + }, + _setOptions: function( options ) { + var self = this; + $.each( options, function( key, value ) { + self._setOption( key, value ); + }); + + return this; + }, + _setOption: function( key, value ) { + this.options[ key ] = value; + + if ( key === "disabled" ) { + this.widget() + [ value ? "addClass" : "removeClass"]( + this.widgetBaseClass + "-disabled" + " " + + "ui-state-disabled" ) + .attr( "aria-disabled", value ); + } + + return this; + }, + + enable: function() { + return this._setOption( "disabled", false ); + }, + disable: function() { + return this._setOption( "disabled", true ); + }, + + _trigger: function( type, event, data ) { + var callback = this.options[ type ]; + + event = $.Event( event ); + event.type = ( type === this.widgetEventPrefix ? + type : + this.widgetEventPrefix + type ).toLowerCase(); + data = data || {}; + + // copy original event properties over to the new event + // this would happen if we could call $.event.fix instead of $.Event + // but we don't have a way to force an event to be fixed multiple times + if ( event.originalEvent ) { + for ( var i = $.event.props.length, prop; i; ) { + prop = $.event.props[ --i ]; + event[ prop ] = event.originalEvent[ prop ]; + } + } + + this.element.trigger( event, data ); + + return !( $.isFunction(callback) && + callback.call( this.element[0], event, data ) === false || + event.isDefaultPrevented() ); + } +}; + +})( jQuery ); +/*! + * jQuery UI Mouse 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Mouse + * + * Depends: + * jquery.ui.widget.js + */ +(function( $, undefined ) { + +$.widget("ui.mouse", { + options: { + cancel: ':input,option', + distance: 1, + delay: 0 + }, + _mouseInit: function() { + var self = this; + + this.element + .bind('mousedown.'+this.widgetName, function(event) { + return self._mouseDown(event); + }) + .bind('click.'+this.widgetName, function(event) { + if (true === $.data(event.target, self.widgetName + '.preventClickEvent')) { + $.removeData(event.target, self.widgetName + '.preventClickEvent'); + event.stopImmediatePropagation(); + return false; + } + }); + + this.started = false; + }, + + // TODO: make sure destroying one instance of mouse doesn't mess with + // other instances of mouse + _mouseDestroy: function() { + this.element.unbind('.'+this.widgetName); + }, + + _mouseDown: function(event) { + // don't let more than one widget handle mouseStart + // TODO: figure out why we have to use originalEvent + event.originalEvent = event.originalEvent || {}; + if (event.originalEvent.mouseHandled) { return; } + + // we may have missed mouseup (out of window) + (this._mouseStarted && this._mouseUp(event)); + + this._mouseDownEvent = event; + + var self = this, + btnIsLeft = (event.which == 1), + elIsCancel = (typeof this.options.cancel == "string" ? $(event.target).parents().add(event.target).filter(this.options.cancel).length : false); + if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) { + return true; + } + + this.mouseDelayMet = !this.options.delay; + if (!this.mouseDelayMet) { + this._mouseDelayTimer = setTimeout(function() { + self.mouseDelayMet = true; + }, this.options.delay); + } + + if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { + this._mouseStarted = (this._mouseStart(event) !== false); + if (!this._mouseStarted) { + event.preventDefault(); + return true; + } + } + + // these delegates are required to keep context + this._mouseMoveDelegate = function(event) { + return self._mouseMove(event); + }; + this._mouseUpDelegate = function(event) { + return self._mouseUp(event); + }; + $(document) + .bind('mousemove.'+this.widgetName, this._mouseMoveDelegate) + .bind('mouseup.'+this.widgetName, this._mouseUpDelegate); + + event.preventDefault(); + event.originalEvent.mouseHandled = true; + return true; + }, + + _mouseMove: function(event) { + // IE mouseup check - mouseup happened when mouse was out of window + if ($.browser.msie && !(document.documentMode >= 9) && !event.button) { + return this._mouseUp(event); + } + + if (this._mouseStarted) { + this._mouseDrag(event); + return event.preventDefault(); + } + + if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { + this._mouseStarted = + (this._mouseStart(this._mouseDownEvent, event) !== false); + (this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event)); + } + + return !this._mouseStarted; + }, + + _mouseUp: function(event) { + $(document) + .unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate) + .unbind('mouseup.'+this.widgetName, this._mouseUpDelegate); + + if (this._mouseStarted) { + this._mouseStarted = false; + + if (event.target == this._mouseDownEvent.target) { + $.data(event.target, this.widgetName + '.preventClickEvent', true); + } + + this._mouseStop(event); + } + + return false; + }, + + _mouseDistanceMet: function(event) { + return (Math.max( + Math.abs(this._mouseDownEvent.pageX - event.pageX), + Math.abs(this._mouseDownEvent.pageY - event.pageY) + ) >= this.options.distance + ); + }, + + _mouseDelayMet: function(event) { + return this.mouseDelayMet; + }, + + // These are placeholder methods, to be overriden by extending plugin + _mouseStart: function(event) {}, + _mouseDrag: function(event) {}, + _mouseStop: function(event) {}, + _mouseCapture: function(event) { return true; } +}); + +})(jQuery); +/* + * jQuery UI Position 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Position + */ +(function( $, undefined ) { + +$.ui = $.ui || {}; + +var horizontalPositions = /left|center|right/, + verticalPositions = /top|center|bottom/, + center = "center", + _position = $.fn.position, + _offset = $.fn.offset; + +$.fn.position = function( options ) { + if ( !options || !options.of ) { + return _position.apply( this, arguments ); + } + + // make a copy, we don't want to modify arguments + options = $.extend( {}, options ); + + var target = $( options.of ), + targetElem = target[0], + collision = ( options.collision || "flip" ).split( " " ), + offset = options.offset ? options.offset.split( " " ) : [ 0, 0 ], + targetWidth, + targetHeight, + basePosition; + + if ( targetElem.nodeType === 9 ) { + targetWidth = target.width(); + targetHeight = target.height(); + basePosition = { top: 0, left: 0 }; + // TODO: use $.isWindow() in 1.9 + } else if ( targetElem.setTimeout ) { + targetWidth = target.width(); + targetHeight = target.height(); + basePosition = { top: target.scrollTop(), left: target.scrollLeft() }; + } else if ( targetElem.preventDefault ) { + // force left top to allow flipping + options.at = "left top"; + targetWidth = targetHeight = 0; + basePosition = { top: options.of.pageY, left: options.of.pageX }; + } else { + targetWidth = target.outerWidth(); + targetHeight = target.outerHeight(); + basePosition = target.offset(); + } + + // force my and at to have valid horizontal and veritcal positions + // if a value is missing or invalid, it will be converted to center + $.each( [ "my", "at" ], function() { + var pos = ( options[this] || "" ).split( " " ); + if ( pos.length === 1) { + pos = horizontalPositions.test( pos[0] ) ? + pos.concat( [center] ) : + verticalPositions.test( pos[0] ) ? + [ center ].concat( pos ) : + [ center, center ]; + } + pos[ 0 ] = horizontalPositions.test( pos[0] ) ? pos[ 0 ] : center; + pos[ 1 ] = verticalPositions.test( pos[1] ) ? pos[ 1 ] : center; + options[ this ] = pos; + }); + + // normalize collision option + if ( collision.length === 1 ) { + collision[ 1 ] = collision[ 0 ]; + } + + // normalize offset option + offset[ 0 ] = parseInt( offset[0], 10 ) || 0; + if ( offset.length === 1 ) { + offset[ 1 ] = offset[ 0 ]; + } + offset[ 1 ] = parseInt( offset[1], 10 ) || 0; + + if ( options.at[0] === "right" ) { + basePosition.left += targetWidth; + } else if ( options.at[0] === center ) { + basePosition.left += targetWidth / 2; + } + + if ( options.at[1] === "bottom" ) { + basePosition.top += targetHeight; + } else if ( options.at[1] === center ) { + basePosition.top += targetHeight / 2; + } + + basePosition.left += offset[ 0 ]; + basePosition.top += offset[ 1 ]; + + return this.each(function() { + var elem = $( this ), + elemWidth = elem.outerWidth(), + elemHeight = elem.outerHeight(), + marginLeft = parseInt( $.curCSS( this, "marginLeft", true ) ) || 0, + marginTop = parseInt( $.curCSS( this, "marginTop", true ) ) || 0, + collisionWidth = elemWidth + marginLeft + + ( parseInt( $.curCSS( this, "marginRight", true ) ) || 0 ), + collisionHeight = elemHeight + marginTop + + ( parseInt( $.curCSS( this, "marginBottom", true ) ) || 0 ), + position = $.extend( {}, basePosition ), + collisionPosition; + + if ( options.my[0] === "right" ) { + position.left -= elemWidth; + } else if ( options.my[0] === center ) { + position.left -= elemWidth / 2; + } + + if ( options.my[1] === "bottom" ) { + position.top -= elemHeight; + } else if ( options.my[1] === center ) { + position.top -= elemHeight / 2; + } + + // prevent fractions (see #5280) + position.left = Math.round( position.left ); + position.top = Math.round( position.top ); + + collisionPosition = { + left: position.left - marginLeft, + top: position.top - marginTop + }; + + $.each( [ "left", "top" ], function( i, dir ) { + if ( $.ui.position[ collision[i] ] ) { + $.ui.position[ collision[i] ][ dir ]( position, { + targetWidth: targetWidth, + targetHeight: targetHeight, + elemWidth: elemWidth, + elemHeight: elemHeight, + collisionPosition: collisionPosition, + collisionWidth: collisionWidth, + collisionHeight: collisionHeight, + offset: offset, + my: options.my, + at: options.at + }); + } + }); + + if ( $.fn.bgiframe ) { + elem.bgiframe(); + } + elem.offset( $.extend( position, { using: options.using } ) ); + }); +}; + +$.ui.position = { + fit: { + left: function( position, data ) { + var win = $( window ), + over = data.collisionPosition.left + data.collisionWidth - win.width() - win.scrollLeft(); + position.left = over > 0 ? position.left - over : Math.max( position.left - data.collisionPosition.left, position.left ); + }, + top: function( position, data ) { + var win = $( window ), + over = data.collisionPosition.top + data.collisionHeight - win.height() - win.scrollTop(); + position.top = over > 0 ? position.top - over : Math.max( position.top - data.collisionPosition.top, position.top ); + } + }, + + flip: { + left: function( position, data ) { + if ( data.at[0] === center ) { + return; + } + var win = $( window ), + over = data.collisionPosition.left + data.collisionWidth - win.width() - win.scrollLeft(), + myOffset = data.my[ 0 ] === "left" ? + -data.elemWidth : + data.my[ 0 ] === "right" ? + data.elemWidth : + 0, + atOffset = data.at[ 0 ] === "left" ? + data.targetWidth : + -data.targetWidth, + offset = -2 * data.offset[ 0 ]; + position.left += data.collisionPosition.left < 0 ? + myOffset + atOffset + offset : + over > 0 ? + myOffset + atOffset + offset : + 0; + }, + top: function( position, data ) { + if ( data.at[1] === center ) { + return; + } + var win = $( window ), + over = data.collisionPosition.top + data.collisionHeight - win.height() - win.scrollTop(), + myOffset = data.my[ 1 ] === "top" ? + -data.elemHeight : + data.my[ 1 ] === "bottom" ? + data.elemHeight : + 0, + atOffset = data.at[ 1 ] === "top" ? + data.targetHeight : + -data.targetHeight, + offset = -2 * data.offset[ 1 ]; + position.top += data.collisionPosition.top < 0 ? + myOffset + atOffset + offset : + over > 0 ? + myOffset + atOffset + offset : + 0; + } + } +}; + +// offset setter from jQuery 1.4 +if ( !$.offset.setOffset ) { + $.offset.setOffset = function( elem, options ) { + // set position first, in-case top/left are set even on static elem + if ( /static/.test( $.curCSS( elem, "position" ) ) ) { + elem.style.position = "relative"; + } + var curElem = $( elem ), + curOffset = curElem.offset(), + curTop = parseInt( $.curCSS( elem, "top", true ), 10 ) || 0, + curLeft = parseInt( $.curCSS( elem, "left", true ), 10) || 0, + props = { + top: (options.top - curOffset.top) + curTop, + left: (options.left - curOffset.left) + curLeft + }; + + if ( 'using' in options ) { + options.using.call( elem, props ); + } else { + curElem.css( props ); + } + }; + + $.fn.offset = function( options ) { + var elem = this[ 0 ]; + if ( !elem || !elem.ownerDocument ) { return null; } + if ( options ) { + return this.each(function() { + $.offset.setOffset( this, options ); + }); + } + return _offset.call( this ); + }; +} + +}( jQuery )); +/* + * jQuery UI Draggable 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Draggables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function( $, undefined ) { + +$.widget("ui.draggable", $.ui.mouse, { + widgetEventPrefix: "drag", + options: { + addClasses: true, + appendTo: "parent", + axis: false, + connectToSortable: false, + containment: false, + cursor: "auto", + cursorAt: false, + grid: false, + handle: false, + helper: "original", + iframeFix: false, + opacity: false, + refreshPositions: false, + revert: false, + revertDuration: 500, + scope: "default", + scroll: true, + scrollSensitivity: 20, + scrollSpeed: 20, + snap: false, + snapMode: "both", + snapTolerance: 20, + stack: false, + zIndex: false + }, + _create: function() { + + if (this.options.helper == 'original' && !(/^(?:r|a|f)/).test(this.element.css("position"))) + this.element[0].style.position = 'relative'; + + (this.options.addClasses && this.element.addClass("ui-draggable")); + (this.options.disabled && this.element.addClass("ui-draggable-disabled")); + + this._mouseInit(); + + }, + + destroy: function() { + if(!this.element.data('draggable')) return; + this.element + .removeData("draggable") + .unbind(".draggable") + .removeClass("ui-draggable" + + " ui-draggable-dragging" + + " ui-draggable-disabled"); + this._mouseDestroy(); + + return this; + }, + + _mouseCapture: function(event) { + + var o = this.options; + + // among others, prevent a drag on a resizable-handle + if (this.helper || o.disabled || $(event.target).is('.ui-resizable-handle')) + return false; + + //Quit if we're not on a valid handle + this.handle = this._getHandle(event); + if (!this.handle) + return false; + + return true; + + }, + + _mouseStart: function(event) { + + var o = this.options; + + //Create and append the visible helper + this.helper = this._createHelper(event); + + //Cache the helper size + this._cacheHelperProportions(); + + //If ddmanager is used for droppables, set the global draggable + if($.ui.ddmanager) + $.ui.ddmanager.current = this; + + /* + * - Position generation - + * This block generates everything position related - it's the core of draggables. + */ + + //Cache the margins of the original element + this._cacheMargins(); + + //Store the helper's css position + this.cssPosition = this.helper.css("position"); + this.scrollParent = this.helper.scrollParent(); + + //The element's absolute position on the page minus margins + this.offset = this.positionAbs = this.element.offset(); + this.offset = { + top: this.offset.top - this.margins.top, + left: this.offset.left - this.margins.left + }; + + $.extend(this.offset, { + click: { //Where the click happened, relative to the element + left: event.pageX - this.offset.left, + top: event.pageY - this.offset.top + }, + parent: this._getParentOffset(), + relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper + }); + + //Generate the original position + this.originalPosition = this.position = this._generatePosition(event); + this.originalPageX = event.pageX; + this.originalPageY = event.pageY; + + //Adjust the mouse offset relative to the helper if 'cursorAt' is supplied + (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt)); + + //Set a containment if given in the options + if(o.containment) + this._setContainment(); + + //Trigger event + callbacks + if(this._trigger("start", event) === false) { + this._clear(); + return false; + } + + //Recache the helper size + this._cacheHelperProportions(); + + //Prepare the droppable offsets + if ($.ui.ddmanager && !o.dropBehaviour) + $.ui.ddmanager.prepareOffsets(this, event); + + this.helper.addClass("ui-draggable-dragging"); + this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position + return true; + }, + + _mouseDrag: function(event, noPropagation) { + + //Compute the helpers position + this.position = this._generatePosition(event); + this.positionAbs = this._convertPositionTo("absolute"); + + //Call plugins and callbacks and use the resulting position if something is returned + if (!noPropagation) { + var ui = this._uiHash(); + if(this._trigger('drag', event, ui) === false) { + this._mouseUp({}); + return false; + } + this.position = ui.position; + } + + if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px'; + if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px'; + if($.ui.ddmanager) $.ui.ddmanager.drag(this, event); + + return false; + }, + + _mouseStop: function(event) { + + //If we are using droppables, inform the manager about the drop + var dropped = false; + if ($.ui.ddmanager && !this.options.dropBehaviour) + dropped = $.ui.ddmanager.drop(this, event); + + //if a drop comes from outside (a sortable) + if(this.dropped) { + dropped = this.dropped; + this.dropped = false; + } + + //if the original element is removed, don't bother to continue if helper is set to "original" + if((!this.element[0] || !this.element[0].parentNode) && this.options.helper == "original") + return false; + + if((this.options.revert == "invalid" && !dropped) || (this.options.revert == "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) { + var self = this; + $(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() { + if(self._trigger("stop", event) !== false) { + self._clear(); + } + }); + } else { + if(this._trigger("stop", event) !== false) { + this._clear(); + } + } + + return false; + }, + + cancel: function() { + + if(this.helper.is(".ui-draggable-dragging")) { + this._mouseUp({}); + } else { + this._clear(); + } + + return this; + + }, + + _getHandle: function(event) { + + var handle = !this.options.handle || !$(this.options.handle, this.element).length ? true : false; + $(this.options.handle, this.element) + .find("*") + .andSelf() + .each(function() { + if(this == event.target) handle = true; + }); + + return handle; + + }, + + _createHelper: function(event) { + + var o = this.options; + var helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper == 'clone' ? this.element.clone() : this.element); + + if(!helper.parents('body').length) + helper.appendTo((o.appendTo == 'parent' ? this.element[0].parentNode : o.appendTo)); + + if(helper[0] != this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) + helper.css("position", "absolute"); + + return helper; + + }, + + _adjustOffsetFromHelper: function(obj) { + if (typeof obj == 'string') { + obj = obj.split(' '); + } + if ($.isArray(obj)) { + obj = {left: +obj[0], top: +obj[1] || 0}; + } + if ('left' in obj) { + this.offset.click.left = obj.left + this.margins.left; + } + if ('right' in obj) { + this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left; + } + if ('top' in obj) { + this.offset.click.top = obj.top + this.margins.top; + } + if ('bottom' in obj) { + this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top; + } + }, + + _getParentOffset: function() { + + //Get the offsetParent and cache its position + this.offsetParent = this.helper.offsetParent(); + var po = this.offsetParent.offset(); + + // This is a special case where we need to modify a offset calculated on start, since the following happened: + // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent + // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that + // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag + if(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) { + po.left += this.scrollParent.scrollLeft(); + po.top += this.scrollParent.scrollTop(); + } + + if((this.offsetParent[0] == document.body) //This needs to be actually done for all browsers, since pageX/pageY includes this information + || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.browser.msie)) //Ugly IE fix + po = { top: 0, left: 0 }; + + return { + top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0), + left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0) + }; + + }, + + _getRelativeOffset: function() { + + if(this.cssPosition == "relative") { + var p = this.element.position(); + return { + top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(), + left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft() + }; + } else { + return { top: 0, left: 0 }; + } + + }, + + _cacheMargins: function() { + this.margins = { + left: (parseInt(this.element.css("marginLeft"),10) || 0), + top: (parseInt(this.element.css("marginTop"),10) || 0) + }; + }, + + _cacheHelperProportions: function() { + this.helperProportions = { + width: this.helper.outerWidth(), + height: this.helper.outerHeight() + }; + }, + + _setContainment: function() { + + var o = this.options; + if(o.containment == 'parent') o.containment = this.helper[0].parentNode; + if(o.containment == 'document' || o.containment == 'window') this.containment = [ + (o.containment == 'document' ? 0 : $(window).scrollLeft()) - this.offset.relative.left - this.offset.parent.left, + (o.containment == 'document' ? 0 : $(window).scrollTop()) - this.offset.relative.top - this.offset.parent.top, + (o.containment == 'document' ? 0 : $(window).scrollLeft()) + $(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left, + (o.containment == 'document' ? 0 : $(window).scrollTop()) + ($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top + ]; + + if(!(/^(document|window|parent)$/).test(o.containment) && o.containment.constructor != Array) { + var ce = $(o.containment)[0]; if(!ce) return; + var co = $(o.containment).offset(); + var over = ($(ce).css("overflow") != 'hidden'); + + this.containment = [ + co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left, + co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top, + co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left, + co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top + ]; + } else if(o.containment.constructor == Array) { + this.containment = o.containment; + } + + }, + + _convertPositionTo: function(d, pos) { + + if(!pos) pos = this.position; + var mod = d == "absolute" ? 1 : -1; + var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); + + return { + top: ( + pos.top // The absolute mouse position + + this.offset.relative.top * mod // Only for relative positioned nodes: Relative offset from element to offset parent + + this.offset.parent.top * mod // The offsetParent's offset without borders (offset + border) + - ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod) + ), + left: ( + pos.left // The absolute mouse position + + this.offset.relative.left * mod // Only for relative positioned nodes: Relative offset from element to offset parent + + this.offset.parent.left * mod // The offsetParent's offset without borders (offset + border) + - ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod) + ) + }; + + }, + + _generatePosition: function(event) { + + var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); + var pageX = event.pageX; + var pageY = event.pageY; + + /* + * - Position constraining - + * Constrain the position to a mix of grid, containment. + */ + + if(this.originalPosition) { //If we are not dragging yet, we won't check for options + + if(this.containment) { + if(event.pageX - this.offset.click.left < this.containment[0]) pageX = this.containment[0] + this.offset.click.left; + if(event.pageY - this.offset.click.top < this.containment[1]) pageY = this.containment[1] + this.offset.click.top; + if(event.pageX - this.offset.click.left > this.containment[2]) pageX = this.containment[2] + this.offset.click.left; + if(event.pageY - this.offset.click.top > this.containment[3]) pageY = this.containment[3] + this.offset.click.top; + } + + if(o.grid) { + var top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1]; + pageY = this.containment ? (!(top - this.offset.click.top < this.containment[1] || top - this.offset.click.top > this.containment[3]) ? top : (!(top - this.offset.click.top < this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top; + + var left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0]; + pageX = this.containment ? (!(left - this.offset.click.left < this.containment[0] || left - this.offset.click.left > this.containment[2]) ? left : (!(left - this.offset.click.left < this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left; + } + + } + + return { + top: ( + pageY // The absolute mouse position + - this.offset.click.top // Click offset (relative to the element) + - this.offset.relative.top // Only for relative positioned nodes: Relative offset from element to offset parent + - this.offset.parent.top // The offsetParent's offset without borders (offset + border) + + ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) )) + ), + left: ( + pageX // The absolute mouse position + - this.offset.click.left // Click offset (relative to the element) + - this.offset.relative.left // Only for relative positioned nodes: Relative offset from element to offset parent + - this.offset.parent.left // The offsetParent's offset without borders (offset + border) + + ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() )) + ) + }; + + }, + + _clear: function() { + this.helper.removeClass("ui-draggable-dragging"); + if(this.helper[0] != this.element[0] && !this.cancelHelperRemoval) this.helper.remove(); + //if($.ui.ddmanager) $.ui.ddmanager.current = null; + this.helper = null; + this.cancelHelperRemoval = false; + }, + + // From now on bulk stuff - mainly helpers + + _trigger: function(type, event, ui) { + ui = ui || this._uiHash(); + $.ui.plugin.call(this, type, [event, ui]); + if(type == "drag") this.positionAbs = this._convertPositionTo("absolute"); //The absolute position has to be recalculated after plugins + return $.Widget.prototype._trigger.call(this, type, event, ui); + }, + + plugins: {}, + + _uiHash: function(event) { + return { + helper: this.helper, + position: this.position, + originalPosition: this.originalPosition, + offset: this.positionAbs + }; + } + +}); + +$.extend($.ui.draggable, { + version: "1.8.10" +}); + +$.ui.plugin.add("draggable", "connectToSortable", { + start: function(event, ui) { + + var inst = $(this).data("draggable"), o = inst.options, + uiSortable = $.extend({}, ui, { item: inst.element }); + inst.sortables = []; + $(o.connectToSortable).each(function() { + var sortable = $.data(this, 'sortable'); + if (sortable && !sortable.options.disabled) { + inst.sortables.push({ + instance: sortable, + shouldRevert: sortable.options.revert + }); + sortable._refreshItems(); //Do a one-time refresh at start to refresh the containerCache + sortable._trigger("activate", event, uiSortable); + } + }); + + }, + stop: function(event, ui) { + + //If we are still over the sortable, we fake the stop event of the sortable, but also remove helper + var inst = $(this).data("draggable"), + uiSortable = $.extend({}, ui, { item: inst.element }); + + $.each(inst.sortables, function() { + if(this.instance.isOver) { + + this.instance.isOver = 0; + + inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance + this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work) + + //The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: 'valid/invalid' + if(this.shouldRevert) this.instance.options.revert = true; + + //Trigger the stop of the sortable + this.instance._mouseStop(event); + + this.instance.options.helper = this.instance.options._helper; + + //If the helper has been the original item, restore properties in the sortable + if(inst.options.helper == 'original') + this.instance.currentItem.css({ top: 'auto', left: 'auto' }); + + } else { + this.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance + this.instance._trigger("deactivate", event, uiSortable); + } + + }); + + }, + drag: function(event, ui) { + + var inst = $(this).data("draggable"), self = this; + + var checkPos = function(o) { + var dyClick = this.offset.click.top, dxClick = this.offset.click.left; + var helperTop = this.positionAbs.top, helperLeft = this.positionAbs.left; + var itemHeight = o.height, itemWidth = o.width; + var itemTop = o.top, itemLeft = o.left; + + return $.ui.isOver(helperTop + dyClick, helperLeft + dxClick, itemTop, itemLeft, itemHeight, itemWidth); + }; + + $.each(inst.sortables, function(i) { + + //Copy over some variables to allow calling the sortable's native _intersectsWith + this.instance.positionAbs = inst.positionAbs; + this.instance.helperProportions = inst.helperProportions; + this.instance.offset.click = inst.offset.click; + + if(this.instance._intersectsWith(this.instance.containerCache)) { + + //If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once + if(!this.instance.isOver) { + + this.instance.isOver = 1; + //Now we fake the start of dragging for the sortable instance, + //by cloning the list group item, appending it to the sortable and using it as inst.currentItem + //We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one) + this.instance.currentItem = $(self).clone().appendTo(this.instance.element).data("sortable-item", true); + this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it + this.instance.options.helper = function() { return ui.helper[0]; }; + + event.target = this.instance.currentItem[0]; + this.instance._mouseCapture(event, true); + this.instance._mouseStart(event, true, true); + + //Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes + this.instance.offset.click.top = inst.offset.click.top; + this.instance.offset.click.left = inst.offset.click.left; + this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left; + this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top; + + inst._trigger("toSortable", event); + inst.dropped = this.instance.element; //draggable revert needs that + //hack so receive/update callbacks work (mostly) + inst.currentItem = inst.element; + this.instance.fromOutside = inst; + + } + + //Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable + if(this.instance.currentItem) this.instance._mouseDrag(event); + + } else { + + //If it doesn't intersect with the sortable, and it intersected before, + //we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval + if(this.instance.isOver) { + + this.instance.isOver = 0; + this.instance.cancelHelperRemoval = true; + + //Prevent reverting on this forced stop + this.instance.options.revert = false; + + // The out event needs to be triggered independently + this.instance._trigger('out', event, this.instance._uiHash(this.instance)); + + this.instance._mouseStop(event, true); + this.instance.options.helper = this.instance.options._helper; + + //Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size + this.instance.currentItem.remove(); + if(this.instance.placeholder) this.instance.placeholder.remove(); + + inst._trigger("fromSortable", event); + inst.dropped = false; //draggable revert needs that + } + + }; + + }); + + } +}); + +$.ui.plugin.add("draggable", "cursor", { + start: function(event, ui) { + var t = $('body'), o = $(this).data('draggable').options; + if (t.css("cursor")) o._cursor = t.css("cursor"); + t.css("cursor", o.cursor); + }, + stop: function(event, ui) { + var o = $(this).data('draggable').options; + if (o._cursor) $('body').css("cursor", o._cursor); + } +}); + +$.ui.plugin.add("draggable", "iframeFix", { + start: function(event, ui) { + var o = $(this).data('draggable').options; + $(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() { + $('
    ') + .css({ + width: this.offsetWidth+"px", height: this.offsetHeight+"px", + position: "absolute", opacity: "0.001", zIndex: 1000 + }) + .css($(this).offset()) + .appendTo("body"); + }); + }, + stop: function(event, ui) { + $("div.ui-draggable-iframeFix").each(function() { this.parentNode.removeChild(this); }); //Remove frame helpers + } +}); + +$.ui.plugin.add("draggable", "opacity", { + start: function(event, ui) { + var t = $(ui.helper), o = $(this).data('draggable').options; + if(t.css("opacity")) o._opacity = t.css("opacity"); + t.css('opacity', o.opacity); + }, + stop: function(event, ui) { + var o = $(this).data('draggable').options; + if(o._opacity) $(ui.helper).css('opacity', o._opacity); + } +}); + +$.ui.plugin.add("draggable", "scroll", { + start: function(event, ui) { + var i = $(this).data("draggable"); + if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') i.overflowOffset = i.scrollParent.offset(); + }, + drag: function(event, ui) { + + var i = $(this).data("draggable"), o = i.options, scrolled = false; + + if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') { + + if(!o.axis || o.axis != 'x') { + if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) + i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed; + else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity) + i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed; + } + + if(!o.axis || o.axis != 'y') { + if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) + i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed; + else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity) + i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed; + } + + } else { + + if(!o.axis || o.axis != 'x') { + if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) + scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed); + else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) + scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed); + } + + if(!o.axis || o.axis != 'y') { + if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) + scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed); + else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) + scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed); + } + + } + + if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) + $.ui.ddmanager.prepareOffsets(i, event); + + } +}); + +$.ui.plugin.add("draggable", "snap", { + start: function(event, ui) { + + var i = $(this).data("draggable"), o = i.options; + i.snapElements = []; + + $(o.snap.constructor != String ? ( o.snap.items || ':data(draggable)' ) : o.snap).each(function() { + var $t = $(this); var $o = $t.offset(); + if(this != i.element[0]) i.snapElements.push({ + item: this, + width: $t.outerWidth(), height: $t.outerHeight(), + top: $o.top, left: $o.left + }); + }); + + }, + drag: function(event, ui) { + + var inst = $(this).data("draggable"), o = inst.options; + var d = o.snapTolerance; + + var x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width, + y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height; + + for (var i = inst.snapElements.length - 1; i >= 0; i--){ + + var l = inst.snapElements[i].left, r = l + inst.snapElements[i].width, + t = inst.snapElements[i].top, b = t + inst.snapElements[i].height; + + //Yes, I know, this is insane ;) + if(!((l-d < x1 && x1 < r+d && t-d < y1 && y1 < b+d) || (l-d < x1 && x1 < r+d && t-d < y2 && y2 < b+d) || (l-d < x2 && x2 < r+d && t-d < y1 && y1 < b+d) || (l-d < x2 && x2 < r+d && t-d < y2 && y2 < b+d))) { + if(inst.snapElements[i].snapping) (inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item }))); + inst.snapElements[i].snapping = false; + continue; + } + + if(o.snapMode != 'inner') { + var ts = Math.abs(t - y2) <= d; + var bs = Math.abs(b - y1) <= d; + var ls = Math.abs(l - x2) <= d; + var rs = Math.abs(r - x1) <= d; + if(ts) ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top; + if(bs) ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top; + if(ls) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left; + if(rs) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left; + } + + var first = (ts || bs || ls || rs); + + if(o.snapMode != 'outer') { + var ts = Math.abs(t - y1) <= d; + var bs = Math.abs(b - y2) <= d; + var ls = Math.abs(l - x1) <= d; + var rs = Math.abs(r - x2) <= d; + if(ts) ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top; + if(bs) ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top; + if(ls) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left; + if(rs) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left; + } + + if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) + (inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item }))); + inst.snapElements[i].snapping = (ts || bs || ls || rs || first); + + }; + + } +}); + +$.ui.plugin.add("draggable", "stack", { + start: function(event, ui) { + + var o = $(this).data("draggable").options; + + var group = $.makeArray($(o.stack)).sort(function(a,b) { + return (parseInt($(a).css("zIndex"),10) || 0) - (parseInt($(b).css("zIndex"),10) || 0); + }); + if (!group.length) { return; } + + var min = parseInt(group[0].style.zIndex) || 0; + $(group).each(function(i) { + this.style.zIndex = min + i; + }); + + this[0].style.zIndex = min + group.length; + + } +}); + +$.ui.plugin.add("draggable", "zIndex", { + start: function(event, ui) { + var t = $(ui.helper), o = $(this).data("draggable").options; + if(t.css("zIndex")) o._zIndex = t.css("zIndex"); + t.css('zIndex', o.zIndex); + }, + stop: function(event, ui) { + var o = $(this).data("draggable").options; + if(o._zIndex) $(ui.helper).css('zIndex', o._zIndex); + } +}); + +})(jQuery); +/* + * jQuery UI Droppable 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Droppables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + * jquery.ui.mouse.js + * jquery.ui.draggable.js + */ +(function( $, undefined ) { + +$.widget("ui.droppable", { + widgetEventPrefix: "drop", + options: { + accept: '*', + activeClass: false, + addClasses: true, + greedy: false, + hoverClass: false, + scope: 'default', + tolerance: 'intersect' + }, + _create: function() { + + var o = this.options, accept = o.accept; + this.isover = 0; this.isout = 1; + + this.accept = $.isFunction(accept) ? accept : function(d) { + return d.is(accept); + }; + + //Store the droppable's proportions + this.proportions = { width: this.element[0].offsetWidth, height: this.element[0].offsetHeight }; + + // Add the reference and positions to the manager + $.ui.ddmanager.droppables[o.scope] = $.ui.ddmanager.droppables[o.scope] || []; + $.ui.ddmanager.droppables[o.scope].push(this); + + (o.addClasses && this.element.addClass("ui-droppable")); + + }, + + destroy: function() { + var drop = $.ui.ddmanager.droppables[this.options.scope]; + for ( var i = 0; i < drop.length; i++ ) + if ( drop[i] == this ) + drop.splice(i, 1); + + this.element + .removeClass("ui-droppable ui-droppable-disabled") + .removeData("droppable") + .unbind(".droppable"); + + return this; + }, + + _setOption: function(key, value) { + + if(key == 'accept') { + this.accept = $.isFunction(value) ? value : function(d) { + return d.is(value); + }; + } + $.Widget.prototype._setOption.apply(this, arguments); + }, + + _activate: function(event) { + var draggable = $.ui.ddmanager.current; + if(this.options.activeClass) this.element.addClass(this.options.activeClass); + (draggable && this._trigger('activate', event, this.ui(draggable))); + }, + + _deactivate: function(event) { + var draggable = $.ui.ddmanager.current; + if(this.options.activeClass) this.element.removeClass(this.options.activeClass); + (draggable && this._trigger('deactivate', event, this.ui(draggable))); + }, + + _over: function(event) { + + var draggable = $.ui.ddmanager.current; + if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return; // Bail if draggable and droppable are same element + + if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) { + if(this.options.hoverClass) this.element.addClass(this.options.hoverClass); + this._trigger('over', event, this.ui(draggable)); + } + + }, + + _out: function(event) { + + var draggable = $.ui.ddmanager.current; + if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return; // Bail if draggable and droppable are same element + + if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) { + if(this.options.hoverClass) this.element.removeClass(this.options.hoverClass); + this._trigger('out', event, this.ui(draggable)); + } + + }, + + _drop: function(event,custom) { + + var draggable = custom || $.ui.ddmanager.current; + if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return false; // Bail if draggable and droppable are same element + + var childrenIntersection = false; + this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function() { + var inst = $.data(this, 'droppable'); + if( + inst.options.greedy + && !inst.options.disabled + && inst.options.scope == draggable.options.scope + && inst.accept.call(inst.element[0], (draggable.currentItem || draggable.element)) + && $.ui.intersect(draggable, $.extend(inst, { offset: inst.element.offset() }), inst.options.tolerance) + ) { childrenIntersection = true; return false; } + }); + if(childrenIntersection) return false; + + if(this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) { + if(this.options.activeClass) this.element.removeClass(this.options.activeClass); + if(this.options.hoverClass) this.element.removeClass(this.options.hoverClass); + this._trigger('drop', event, this.ui(draggable)); + return this.element; + } + + return false; + + }, + + ui: function(c) { + return { + draggable: (c.currentItem || c.element), + helper: c.helper, + position: c.position, + offset: c.positionAbs + }; + } + +}); + +$.extend($.ui.droppable, { + version: "1.8.10" +}); + +$.ui.intersect = function(draggable, droppable, toleranceMode) { + + if (!droppable.offset) return false; + + var x1 = (draggable.positionAbs || draggable.position.absolute).left, x2 = x1 + draggable.helperProportions.width, + y1 = (draggable.positionAbs || draggable.position.absolute).top, y2 = y1 + draggable.helperProportions.height; + var l = droppable.offset.left, r = l + droppable.proportions.width, + t = droppable.offset.top, b = t + droppable.proportions.height; + + switch (toleranceMode) { + case 'fit': + return (l <= x1 && x2 <= r + && t <= y1 && y2 <= b); + break; + case 'intersect': + return (l < x1 + (draggable.helperProportions.width / 2) // Right Half + && x2 - (draggable.helperProportions.width / 2) < r // Left Half + && t < y1 + (draggable.helperProportions.height / 2) // Bottom Half + && y2 - (draggable.helperProportions.height / 2) < b ); // Top Half + break; + case 'pointer': + var draggableLeft = ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left), + draggableTop = ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top), + isOver = $.ui.isOver(draggableTop, draggableLeft, t, l, droppable.proportions.height, droppable.proportions.width); + return isOver; + break; + case 'touch': + return ( + (y1 >= t && y1 <= b) || // Top edge touching + (y2 >= t && y2 <= b) || // Bottom edge touching + (y1 < t && y2 > b) // Surrounded vertically + ) && ( + (x1 >= l && x1 <= r) || // Left edge touching + (x2 >= l && x2 <= r) || // Right edge touching + (x1 < l && x2 > r) // Surrounded horizontally + ); + break; + default: + return false; + break; + } + +}; + +/* + This manager tracks offsets of draggables and droppables +*/ +$.ui.ddmanager = { + current: null, + droppables: { 'default': [] }, + prepareOffsets: function(t, event) { + + var m = $.ui.ddmanager.droppables[t.options.scope] || []; + var type = event ? event.type : null; // workaround for #2317 + var list = (t.currentItem || t.element).find(":data(droppable)").andSelf(); + + droppablesLoop: for (var i = 0; i < m.length; i++) { + + if(m[i].options.disabled || (t && !m[i].accept.call(m[i].element[0],(t.currentItem || t.element)))) continue; //No disabled and non-accepted + for (var j=0; j < list.length; j++) { if(list[j] == m[i].element[0]) { m[i].proportions.height = 0; continue droppablesLoop; } }; //Filter out elements in the current dragged item + m[i].visible = m[i].element.css("display") != "none"; if(!m[i].visible) continue; //If the element is not visible, continue + + m[i].offset = m[i].element.offset(); + m[i].proportions = { width: m[i].element[0].offsetWidth, height: m[i].element[0].offsetHeight }; + + if(type == "mousedown") m[i]._activate.call(m[i], event); //Activate the droppable if used directly from draggables + + } + + }, + drop: function(draggable, event) { + + var dropped = false; + $.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() { + + if(!this.options) return; + if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance)) + dropped = dropped || this._drop.call(this, event); + + if (!this.options.disabled && this.visible && this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) { + this.isout = 1; this.isover = 0; + this._deactivate.call(this, event); + } + + }); + return dropped; + + }, + drag: function(draggable, event) { + + //If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse. + if(draggable.options.refreshPositions) $.ui.ddmanager.prepareOffsets(draggable, event); + + //Run through all droppables and check their positions based on specific tolerance options + $.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() { + + if(this.options.disabled || this.greedyChild || !this.visible) return; + var intersects = $.ui.intersect(draggable, this, this.options.tolerance); + + var c = !intersects && this.isover == 1 ? 'isout' : (intersects && this.isover == 0 ? 'isover' : null); + if(!c) return; + + var parentInstance; + if (this.options.greedy) { + var parent = this.element.parents(':data(droppable):eq(0)'); + if (parent.length) { + parentInstance = $.data(parent[0], 'droppable'); + parentInstance.greedyChild = (c == 'isover' ? 1 : 0); + } + } + + // we just moved into a greedy child + if (parentInstance && c == 'isover') { + parentInstance['isover'] = 0; + parentInstance['isout'] = 1; + parentInstance._out.call(parentInstance, event); + } + + this[c] = 1; this[c == 'isout' ? 'isover' : 'isout'] = 0; + this[c == "isover" ? "_over" : "_out"].call(this, event); + + // we just moved out of a greedy child + if (parentInstance && c == 'isout') { + parentInstance['isout'] = 0; + parentInstance['isover'] = 1; + parentInstance._over.call(parentInstance, event); + } + }); + + } +}; + +})(jQuery); +/* + * jQuery UI Resizable 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Resizables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function( $, undefined ) { + +$.widget("ui.resizable", $.ui.mouse, { + widgetEventPrefix: "resize", + options: { + alsoResize: false, + animate: false, + animateDuration: "slow", + animateEasing: "swing", + aspectRatio: false, + autoHide: false, + containment: false, + ghost: false, + grid: false, + handles: "e,s,se", + helper: false, + maxHeight: null, + maxWidth: null, + minHeight: 10, + minWidth: 10, + zIndex: 1000 + }, + _create: function() { + + var self = this, o = this.options; + this.element.addClass("ui-resizable"); + + $.extend(this, { + _aspectRatio: !!(o.aspectRatio), + aspectRatio: o.aspectRatio, + originalElement: this.element, + _proportionallyResizeElements: [], + _helper: o.helper || o.ghost || o.animate ? o.helper || 'ui-resizable-helper' : null + }); + + //Wrap the element if it cannot hold child nodes + if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)) { + + //Opera fix for relative positioning + if (/relative/.test(this.element.css('position')) && $.browser.opera) + this.element.css({ position: 'relative', top: 'auto', left: 'auto' }); + + //Create a wrapper element and set the wrapper to the new current internal element + this.element.wrap( + $('
    ').css({ + position: this.element.css('position'), + width: this.element.outerWidth(), + height: this.element.outerHeight(), + top: this.element.css('top'), + left: this.element.css('left') + }) + ); + + //Overwrite the original this.element + this.element = this.element.parent().data( + "resizable", this.element.data('resizable') + ); + + this.elementIsWrapper = true; + + //Move margins to the wrapper + this.element.css({ marginLeft: this.originalElement.css("marginLeft"), marginTop: this.originalElement.css("marginTop"), marginRight: this.originalElement.css("marginRight"), marginBottom: this.originalElement.css("marginBottom") }); + this.originalElement.css({ marginLeft: 0, marginTop: 0, marginRight: 0, marginBottom: 0}); + + //Prevent Safari textarea resize + this.originalResizeStyle = this.originalElement.css('resize'); + this.originalElement.css('resize', 'none'); + + //Push the actual element to our proportionallyResize internal array + this._proportionallyResizeElements.push(this.originalElement.css({ position: 'static', zoom: 1, display: 'block' })); + + // avoid IE jump (hard set the margin) + this.originalElement.css({ margin: this.originalElement.css('margin') }); + + // fix handlers offset + this._proportionallyResize(); + + } + + this.handles = o.handles || (!$('.ui-resizable-handle', this.element).length ? "e,s,se" : { n: '.ui-resizable-n', e: '.ui-resizable-e', s: '.ui-resizable-s', w: '.ui-resizable-w', se: '.ui-resizable-se', sw: '.ui-resizable-sw', ne: '.ui-resizable-ne', nw: '.ui-resizable-nw' }); + if(this.handles.constructor == String) { + + if(this.handles == 'all') this.handles = 'n,e,s,w,se,sw,ne,nw'; + var n = this.handles.split(","); this.handles = {}; + + for(var i = 0; i < n.length; i++) { + + var handle = $.trim(n[i]), hname = 'ui-resizable-'+handle; + var axis = $('
    '); + + // increase zIndex of sw, se, ne, nw axis + //TODO : this modifies original option + if(/sw|se|ne|nw/.test(handle)) axis.css({ zIndex: ++o.zIndex }); + + //TODO : What's going on here? + if ('se' == handle) { + axis.addClass('ui-icon ui-icon-gripsmall-diagonal-se'); + }; + + //Insert into internal handles object and append to element + this.handles[handle] = '.ui-resizable-'+handle; + this.element.append(axis); + } + + } + + this._renderAxis = function(target) { + + target = target || this.element; + + for(var i in this.handles) { + + if(this.handles[i].constructor == String) + this.handles[i] = $(this.handles[i], this.element).show(); + + //Apply pad to wrapper element, needed to fix axis position (textarea, inputs, scrolls) + if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) { + + var axis = $(this.handles[i], this.element), padWrapper = 0; + + //Checking the correct pad and border + padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth(); + + //The padding type i have to apply... + var padPos = [ 'padding', + /ne|nw|n/.test(i) ? 'Top' : + /se|sw|s/.test(i) ? 'Bottom' : + /^e$/.test(i) ? 'Right' : 'Left' ].join(""); + + target.css(padPos, padWrapper); + + this._proportionallyResize(); + + } + + //TODO: What's that good for? There's not anything to be executed left + if(!$(this.handles[i]).length) + continue; + + } + }; + + //TODO: make renderAxis a prototype function + this._renderAxis(this.element); + + this._handles = $('.ui-resizable-handle', this.element) + .disableSelection(); + + //Matching axis name + this._handles.mouseover(function() { + if (!self.resizing) { + if (this.className) + var axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i); + //Axis, default = se + self.axis = axis && axis[1] ? axis[1] : 'se'; + } + }); + + //If we want to auto hide the elements + if (o.autoHide) { + this._handles.hide(); + $(this.element) + .addClass("ui-resizable-autohide") + .hover(function() { + $(this).removeClass("ui-resizable-autohide"); + self._handles.show(); + }, + function(){ + if (!self.resizing) { + $(this).addClass("ui-resizable-autohide"); + self._handles.hide(); + } + }); + } + + //Initialize the mouse interaction + this._mouseInit(); + + }, + + destroy: function() { + + this._mouseDestroy(); + + var _destroy = function(exp) { + $(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing") + .removeData("resizable").unbind(".resizable").find('.ui-resizable-handle').remove(); + }; + + //TODO: Unwrap at same DOM position + if (this.elementIsWrapper) { + _destroy(this.element); + var wrapper = this.element; + wrapper.after( + this.originalElement.css({ + position: wrapper.css('position'), + width: wrapper.outerWidth(), + height: wrapper.outerHeight(), + top: wrapper.css('top'), + left: wrapper.css('left') + }) + ).remove(); + } + + this.originalElement.css('resize', this.originalResizeStyle); + _destroy(this.originalElement); + + return this; + }, + + _mouseCapture: function(event) { + var handle = false; + for (var i in this.handles) { + if ($(this.handles[i])[0] == event.target) { + handle = true; + } + } + + return !this.options.disabled && handle; + }, + + _mouseStart: function(event) { + + var o = this.options, iniPos = this.element.position(), el = this.element; + + this.resizing = true; + this.documentScroll = { top: $(document).scrollTop(), left: $(document).scrollLeft() }; + + // bugfix for http://dev.jquery.com/ticket/1749 + if (el.is('.ui-draggable') || (/absolute/).test(el.css('position'))) { + el.css({ position: 'absolute', top: iniPos.top, left: iniPos.left }); + } + + //Opera fixing relative position + if ($.browser.opera && (/relative/).test(el.css('position'))) + el.css({ position: 'relative', top: 'auto', left: 'auto' }); + + this._renderProxy(); + + var curleft = num(this.helper.css('left')), curtop = num(this.helper.css('top')); + + if (o.containment) { + curleft += $(o.containment).scrollLeft() || 0; + curtop += $(o.containment).scrollTop() || 0; + } + + //Store needed variables + this.offset = this.helper.offset(); + this.position = { left: curleft, top: curtop }; + this.size = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() }; + this.originalSize = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() }; + this.originalPosition = { left: curleft, top: curtop }; + this.sizeDiff = { width: el.outerWidth() - el.width(), height: el.outerHeight() - el.height() }; + this.originalMousePosition = { left: event.pageX, top: event.pageY }; + + //Aspect Ratio + this.aspectRatio = (typeof o.aspectRatio == 'number') ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1); + + var cursor = $('.ui-resizable-' + this.axis).css('cursor'); + $('body').css('cursor', cursor == 'auto' ? this.axis + '-resize' : cursor); + + el.addClass("ui-resizable-resizing"); + this._propagate("start", event); + return true; + }, + + _mouseDrag: function(event) { + + //Increase performance, avoid regex + var el = this.helper, o = this.options, props = {}, + self = this, smp = this.originalMousePosition, a = this.axis; + + var dx = (event.pageX-smp.left)||0, dy = (event.pageY-smp.top)||0; + var trigger = this._change[a]; + if (!trigger) return false; + + // Calculate the attrs that will be change + var data = trigger.apply(this, [event, dx, dy]), ie6 = $.browser.msie && $.browser.version < 7, csdif = this.sizeDiff; + + if (this._aspectRatio || event.shiftKey) + data = this._updateRatio(data, event); + + data = this._respectSize(data, event); + + // plugins callbacks need to be called first + this._propagate("resize", event); + + el.css({ + top: this.position.top + "px", left: this.position.left + "px", + width: this.size.width + "px", height: this.size.height + "px" + }); + + if (!this._helper && this._proportionallyResizeElements.length) + this._proportionallyResize(); + + this._updateCache(data); + + // calling the user callback at the end + this._trigger('resize', event, this.ui()); + + return false; + }, + + _mouseStop: function(event) { + + this.resizing = false; + var o = this.options, self = this; + + if(this._helper) { + var pr = this._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName), + soffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height, + soffsetw = ista ? 0 : self.sizeDiff.width; + + var s = { width: (self.helper.width() - soffsetw), height: (self.helper.height() - soffseth) }, + left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null, + top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null; + + if (!o.animate) + this.element.css($.extend(s, { top: top, left: left })); + + self.helper.height(self.size.height); + self.helper.width(self.size.width); + + if (this._helper && !o.animate) this._proportionallyResize(); + } + + $('body').css('cursor', 'auto'); + + this.element.removeClass("ui-resizable-resizing"); + + this._propagate("stop", event); + + if (this._helper) this.helper.remove(); + return false; + + }, + + _updateCache: function(data) { + var o = this.options; + this.offset = this.helper.offset(); + if (isNumber(data.left)) this.position.left = data.left; + if (isNumber(data.top)) this.position.top = data.top; + if (isNumber(data.height)) this.size.height = data.height; + if (isNumber(data.width)) this.size.width = data.width; + }, + + _updateRatio: function(data, event) { + + var o = this.options, cpos = this.position, csize = this.size, a = this.axis; + + if (data.height) data.width = (csize.height * this.aspectRatio); + else if (data.width) data.height = (csize.width / this.aspectRatio); + + if (a == 'sw') { + data.left = cpos.left + (csize.width - data.width); + data.top = null; + } + if (a == 'nw') { + data.top = cpos.top + (csize.height - data.height); + data.left = cpos.left + (csize.width - data.width); + } + + return data; + }, + + _respectSize: function(data, event) { + + var el = this.helper, o = this.options, pRatio = this._aspectRatio || event.shiftKey, a = this.axis, + ismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height), + isminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height); + + if (isminw) data.width = o.minWidth; + if (isminh) data.height = o.minHeight; + if (ismaxw) data.width = o.maxWidth; + if (ismaxh) data.height = o.maxHeight; + + var dw = this.originalPosition.left + this.originalSize.width, dh = this.position.top + this.size.height; + var cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a); + + if (isminw && cw) data.left = dw - o.minWidth; + if (ismaxw && cw) data.left = dw - o.maxWidth; + if (isminh && ch) data.top = dh - o.minHeight; + if (ismaxh && ch) data.top = dh - o.maxHeight; + + // fixing jump error on top/left - bug #2330 + var isNotwh = !data.width && !data.height; + if (isNotwh && !data.left && data.top) data.top = null; + else if (isNotwh && !data.top && data.left) data.left = null; + + return data; + }, + + _proportionallyResize: function() { + + var o = this.options; + if (!this._proportionallyResizeElements.length) return; + var element = this.helper || this.element; + + for (var i=0; i < this._proportionallyResizeElements.length; i++) { + + var prel = this._proportionallyResizeElements[i]; + + if (!this.borderDif) { + var b = [prel.css('borderTopWidth'), prel.css('borderRightWidth'), prel.css('borderBottomWidth'), prel.css('borderLeftWidth')], + p = [prel.css('paddingTop'), prel.css('paddingRight'), prel.css('paddingBottom'), prel.css('paddingLeft')]; + + this.borderDif = $.map(b, function(v, i) { + var border = parseInt(v,10)||0, padding = parseInt(p[i],10)||0; + return border + padding; + }); + } + + if ($.browser.msie && !(!($(element).is(':hidden') || $(element).parents(':hidden').length))) + continue; + + prel.css({ + height: (element.height() - this.borderDif[0] - this.borderDif[2]) || 0, + width: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0 + }); + + }; + + }, + + _renderProxy: function() { + + var el = this.element, o = this.options; + this.elementOffset = el.offset(); + + if(this._helper) { + + this.helper = this.helper || $('
    '); + + // fix ie6 offset TODO: This seems broken + var ie6 = $.browser.msie && $.browser.version < 7, ie6offset = (ie6 ? 1 : 0), + pxyoffset = ( ie6 ? 2 : -1 ); + + this.helper.addClass(this._helper).css({ + width: this.element.outerWidth() + pxyoffset, + height: this.element.outerHeight() + pxyoffset, + position: 'absolute', + left: this.elementOffset.left - ie6offset +'px', + top: this.elementOffset.top - ie6offset +'px', + zIndex: ++o.zIndex //TODO: Don't modify option + }); + + this.helper + .appendTo("body") + .disableSelection(); + + } else { + this.helper = this.element; + } + + }, + + _change: { + e: function(event, dx, dy) { + return { width: this.originalSize.width + dx }; + }, + w: function(event, dx, dy) { + var o = this.options, cs = this.originalSize, sp = this.originalPosition; + return { left: sp.left + dx, width: cs.width - dx }; + }, + n: function(event, dx, dy) { + var o = this.options, cs = this.originalSize, sp = this.originalPosition; + return { top: sp.top + dy, height: cs.height - dy }; + }, + s: function(event, dx, dy) { + return { height: this.originalSize.height + dy }; + }, + se: function(event, dx, dy) { + return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [event, dx, dy])); + }, + sw: function(event, dx, dy) { + return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [event, dx, dy])); + }, + ne: function(event, dx, dy) { + return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [event, dx, dy])); + }, + nw: function(event, dx, dy) { + return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [event, dx, dy])); + } + }, + + _propagate: function(n, event) { + $.ui.plugin.call(this, n, [event, this.ui()]); + (n != "resize" && this._trigger(n, event, this.ui())); + }, + + plugins: {}, + + ui: function() { + return { + originalElement: this.originalElement, + element: this.element, + helper: this.helper, + position: this.position, + size: this.size, + originalSize: this.originalSize, + originalPosition: this.originalPosition + }; + } + +}); + +$.extend($.ui.resizable, { + version: "1.8.10" +}); + +/* + * Resizable Extensions + */ + +$.ui.plugin.add("resizable", "alsoResize", { + + start: function (event, ui) { + var self = $(this).data("resizable"), o = self.options; + + var _store = function (exp) { + $(exp).each(function() { + var el = $(this); + el.data("resizable-alsoresize", { + width: parseInt(el.width(), 10), height: parseInt(el.height(), 10), + left: parseInt(el.css('left'), 10), top: parseInt(el.css('top'), 10), + position: el.css('position') // to reset Opera on stop() + }); + }); + }; + + if (typeof(o.alsoResize) == 'object' && !o.alsoResize.parentNode) { + if (o.alsoResize.length) { o.alsoResize = o.alsoResize[0]; _store(o.alsoResize); } + else { $.each(o.alsoResize, function (exp) { _store(exp); }); } + }else{ + _store(o.alsoResize); + } + }, + + resize: function (event, ui) { + var self = $(this).data("resizable"), o = self.options, os = self.originalSize, op = self.originalPosition; + + var delta = { + height: (self.size.height - os.height) || 0, width: (self.size.width - os.width) || 0, + top: (self.position.top - op.top) || 0, left: (self.position.left - op.left) || 0 + }, + + _alsoResize = function (exp, c) { + $(exp).each(function() { + var el = $(this), start = $(this).data("resizable-alsoresize"), style = {}, + css = c && c.length ? c : el.parents(ui.originalElement[0]).length ? ['width', 'height'] : ['width', 'height', 'top', 'left']; + + $.each(css, function (i, prop) { + var sum = (start[prop]||0) + (delta[prop]||0); + if (sum && sum >= 0) + style[prop] = sum || null; + }); + + // Opera fixing relative position + if ($.browser.opera && /relative/.test(el.css('position'))) { + self._revertToRelativePosition = true; + el.css({ position: 'absolute', top: 'auto', left: 'auto' }); + } + + el.css(style); + }); + }; + + if (typeof(o.alsoResize) == 'object' && !o.alsoResize.nodeType) { + $.each(o.alsoResize, function (exp, c) { _alsoResize(exp, c); }); + }else{ + _alsoResize(o.alsoResize); + } + }, + + stop: function (event, ui) { + var self = $(this).data("resizable"), o = self.options; + + var _reset = function (exp) { + $(exp).each(function() { + var el = $(this); + // reset position for Opera - no need to verify it was changed + el.css({ position: el.data("resizable-alsoresize").position }); + }); + }; + + if (self._revertToRelativePosition) { + self._revertToRelativePosition = false; + if (typeof(o.alsoResize) == 'object' && !o.alsoResize.nodeType) { + $.each(o.alsoResize, function (exp) { _reset(exp); }); + }else{ + _reset(o.alsoResize); + } + } + + $(this).removeData("resizable-alsoresize"); + } +}); + +$.ui.plugin.add("resizable", "animate", { + + stop: function(event, ui) { + var self = $(this).data("resizable"), o = self.options; + + var pr = self._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName), + soffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height, + soffsetw = ista ? 0 : self.sizeDiff.width; + + var style = { width: (self.size.width - soffsetw), height: (self.size.height - soffseth) }, + left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null, + top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null; + + self.element.animate( + $.extend(style, top && left ? { top: top, left: left } : {}), { + duration: o.animateDuration, + easing: o.animateEasing, + step: function() { + + var data = { + width: parseInt(self.element.css('width'), 10), + height: parseInt(self.element.css('height'), 10), + top: parseInt(self.element.css('top'), 10), + left: parseInt(self.element.css('left'), 10) + }; + + if (pr && pr.length) $(pr[0]).css({ width: data.width, height: data.height }); + + // propagating resize, and updating values for each animation step + self._updateCache(data); + self._propagate("resize", event); + + } + } + ); + } + +}); + +$.ui.plugin.add("resizable", "containment", { + + start: function(event, ui) { + var self = $(this).data("resizable"), o = self.options, el = self.element; + var oc = o.containment, ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc; + if (!ce) return; + + self.containerElement = $(ce); + + if (/document/.test(oc) || oc == document) { + self.containerOffset = { left: 0, top: 0 }; + self.containerPosition = { left: 0, top: 0 }; + + self.parentData = { + element: $(document), left: 0, top: 0, + width: $(document).width(), height: $(document).height() || document.body.parentNode.scrollHeight + }; + } + + // i'm a node, so compute top, left, right, bottom + else { + var element = $(ce), p = []; + $([ "Top", "Right", "Left", "Bottom" ]).each(function(i, name) { p[i] = num(element.css("padding" + name)); }); + + self.containerOffset = element.offset(); + self.containerPosition = element.position(); + self.containerSize = { height: (element.innerHeight() - p[3]), width: (element.innerWidth() - p[1]) }; + + var co = self.containerOffset, ch = self.containerSize.height, cw = self.containerSize.width, + width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw ), height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch); + + self.parentData = { + element: ce, left: co.left, top: co.top, width: width, height: height + }; + } + }, + + resize: function(event, ui) { + var self = $(this).data("resizable"), o = self.options, + ps = self.containerSize, co = self.containerOffset, cs = self.size, cp = self.position, + pRatio = self._aspectRatio || event.shiftKey, cop = { top:0, left:0 }, ce = self.containerElement; + + if (ce[0] != document && (/static/).test(ce.css('position'))) cop = co; + + if (cp.left < (self._helper ? co.left : 0)) { + self.size.width = self.size.width + (self._helper ? (self.position.left - co.left) : (self.position.left - cop.left)); + if (pRatio) self.size.height = self.size.width / o.aspectRatio; + self.position.left = o.helper ? co.left : 0; + } + + if (cp.top < (self._helper ? co.top : 0)) { + self.size.height = self.size.height + (self._helper ? (self.position.top - co.top) : self.position.top); + if (pRatio) self.size.width = self.size.height * o.aspectRatio; + self.position.top = self._helper ? co.top : 0; + } + + self.offset.left = self.parentData.left+self.position.left; + self.offset.top = self.parentData.top+self.position.top; + + var woset = Math.abs( (self._helper ? self.offset.left - cop.left : (self.offset.left - cop.left)) + self.sizeDiff.width ), + hoset = Math.abs( (self._helper ? self.offset.top - cop.top : (self.offset.top - co.top)) + self.sizeDiff.height ); + + var isParent = self.containerElement.get(0) == self.element.parent().get(0), + isOffsetRelative = /relative|absolute/.test(self.containerElement.css('position')); + + if(isParent && isOffsetRelative) woset -= self.parentData.left; + + if (woset + self.size.width >= self.parentData.width) { + self.size.width = self.parentData.width - woset; + if (pRatio) self.size.height = self.size.width / self.aspectRatio; + } + + if (hoset + self.size.height >= self.parentData.height) { + self.size.height = self.parentData.height - hoset; + if (pRatio) self.size.width = self.size.height * self.aspectRatio; + } + }, + + stop: function(event, ui){ + var self = $(this).data("resizable"), o = self.options, cp = self.position, + co = self.containerOffset, cop = self.containerPosition, ce = self.containerElement; + + var helper = $(self.helper), ho = helper.offset(), w = helper.outerWidth() - self.sizeDiff.width, h = helper.outerHeight() - self.sizeDiff.height; + + if (self._helper && !o.animate && (/relative/).test(ce.css('position'))) + $(this).css({ left: ho.left - cop.left - co.left, width: w, height: h }); + + if (self._helper && !o.animate && (/static/).test(ce.css('position'))) + $(this).css({ left: ho.left - cop.left - co.left, width: w, height: h }); + + } +}); + +$.ui.plugin.add("resizable", "ghost", { + + start: function(event, ui) { + + var self = $(this).data("resizable"), o = self.options, cs = self.size; + + self.ghost = self.originalElement.clone(); + self.ghost + .css({ opacity: .25, display: 'block', position: 'relative', height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 }) + .addClass('ui-resizable-ghost') + .addClass(typeof o.ghost == 'string' ? o.ghost : ''); + + self.ghost.appendTo(self.helper); + + }, + + resize: function(event, ui){ + var self = $(this).data("resizable"), o = self.options; + if (self.ghost) self.ghost.css({ position: 'relative', height: self.size.height, width: self.size.width }); + }, + + stop: function(event, ui){ + var self = $(this).data("resizable"), o = self.options; + if (self.ghost && self.helper) self.helper.get(0).removeChild(self.ghost.get(0)); + } + +}); + +$.ui.plugin.add("resizable", "grid", { + + resize: function(event, ui) { + var self = $(this).data("resizable"), o = self.options, cs = self.size, os = self.originalSize, op = self.originalPosition, a = self.axis, ratio = o._aspectRatio || event.shiftKey; + o.grid = typeof o.grid == "number" ? [o.grid, o.grid] : o.grid; + var ox = Math.round((cs.width - os.width) / (o.grid[0]||1)) * (o.grid[0]||1), oy = Math.round((cs.height - os.height) / (o.grid[1]||1)) * (o.grid[1]||1); + + if (/^(se|s|e)$/.test(a)) { + self.size.width = os.width + ox; + self.size.height = os.height + oy; + } + else if (/^(ne)$/.test(a)) { + self.size.width = os.width + ox; + self.size.height = os.height + oy; + self.position.top = op.top - oy; + } + else if (/^(sw)$/.test(a)) { + self.size.width = os.width + ox; + self.size.height = os.height + oy; + self.position.left = op.left - ox; + } + else { + self.size.width = os.width + ox; + self.size.height = os.height + oy; + self.position.top = op.top - oy; + self.position.left = op.left - ox; + } + } + +}); + +var num = function(v) { + return parseInt(v, 10) || 0; +}; + +var isNumber = function(value) { + return !isNaN(parseInt(value, 10)); +}; + +})(jQuery); +/* + * jQuery UI Selectable 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Selectables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function( $, undefined ) { + +$.widget("ui.selectable", $.ui.mouse, { + options: { + appendTo: 'body', + autoRefresh: true, + distance: 0, + filter: '*', + tolerance: 'touch' + }, + _create: function() { + var self = this; + + this.element.addClass("ui-selectable"); + + this.dragged = false; + + // cache selectee children based on filter + var selectees; + this.refresh = function() { + selectees = $(self.options.filter, self.element[0]); + selectees.each(function() { + var $this = $(this); + var pos = $this.offset(); + $.data(this, "selectable-item", { + element: this, + $element: $this, + left: pos.left, + top: pos.top, + right: pos.left + $this.outerWidth(), + bottom: pos.top + $this.outerHeight(), + startselected: false, + selected: $this.hasClass('ui-selected'), + selecting: $this.hasClass('ui-selecting'), + unselecting: $this.hasClass('ui-unselecting') + }); + }); + }; + this.refresh(); + + this.selectees = selectees.addClass("ui-selectee"); + + this._mouseInit(); + + this.helper = $("
    "); + }, + + destroy: function() { + this.selectees + .removeClass("ui-selectee") + .removeData("selectable-item"); + this.element + .removeClass("ui-selectable ui-selectable-disabled") + .removeData("selectable") + .unbind(".selectable"); + this._mouseDestroy(); + + return this; + }, + + _mouseStart: function(event) { + var self = this; + + this.opos = [event.pageX, event.pageY]; + + if (this.options.disabled) + return; + + var options = this.options; + + this.selectees = $(options.filter, this.element[0]); + + this._trigger("start", event); + + $(options.appendTo).append(this.helper); + // position helper (lasso) + this.helper.css({ + "left": event.clientX, + "top": event.clientY, + "width": 0, + "height": 0 + }); + + if (options.autoRefresh) { + this.refresh(); + } + + this.selectees.filter('.ui-selected').each(function() { + var selectee = $.data(this, "selectable-item"); + selectee.startselected = true; + if (!event.metaKey) { + selectee.$element.removeClass('ui-selected'); + selectee.selected = false; + selectee.$element.addClass('ui-unselecting'); + selectee.unselecting = true; + // selectable UNSELECTING callback + self._trigger("unselecting", event, { + unselecting: selectee.element + }); + } + }); + + $(event.target).parents().andSelf().each(function() { + var selectee = $.data(this, "selectable-item"); + if (selectee) { + var doSelect = !event.metaKey || !selectee.$element.hasClass('ui-selected'); + selectee.$element + .removeClass(doSelect ? "ui-unselecting" : "ui-selected") + .addClass(doSelect ? "ui-selecting" : "ui-unselecting"); + selectee.unselecting = !doSelect; + selectee.selecting = doSelect; + selectee.selected = doSelect; + // selectable (UN)SELECTING callback + if (doSelect) { + self._trigger("selecting", event, { + selecting: selectee.element + }); + } else { + self._trigger("unselecting", event, { + unselecting: selectee.element + }); + } + return false; + } + }); + + }, + + _mouseDrag: function(event) { + var self = this; + this.dragged = true; + + if (this.options.disabled) + return; + + var options = this.options; + + var x1 = this.opos[0], y1 = this.opos[1], x2 = event.pageX, y2 = event.pageY; + if (x1 > x2) { var tmp = x2; x2 = x1; x1 = tmp; } + if (y1 > y2) { var tmp = y2; y2 = y1; y1 = tmp; } + this.helper.css({left: x1, top: y1, width: x2-x1, height: y2-y1}); + + this.selectees.each(function() { + var selectee = $.data(this, "selectable-item"); + //prevent helper from being selected if appendTo: selectable + if (!selectee || selectee.element == self.element[0]) + return; + var hit = false; + if (options.tolerance == 'touch') { + hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) ); + } else if (options.tolerance == 'fit') { + hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2); + } + + if (hit) { + // SELECT + if (selectee.selected) { + selectee.$element.removeClass('ui-selected'); + selectee.selected = false; + } + if (selectee.unselecting) { + selectee.$element.removeClass('ui-unselecting'); + selectee.unselecting = false; + } + if (!selectee.selecting) { + selectee.$element.addClass('ui-selecting'); + selectee.selecting = true; + // selectable SELECTING callback + self._trigger("selecting", event, { + selecting: selectee.element + }); + } + } else { + // UNSELECT + if (selectee.selecting) { + if (event.metaKey && selectee.startselected) { + selectee.$element.removeClass('ui-selecting'); + selectee.selecting = false; + selectee.$element.addClass('ui-selected'); + selectee.selected = true; + } else { + selectee.$element.removeClass('ui-selecting'); + selectee.selecting = false; + if (selectee.startselected) { + selectee.$element.addClass('ui-unselecting'); + selectee.unselecting = true; + } + // selectable UNSELECTING callback + self._trigger("unselecting", event, { + unselecting: selectee.element + }); + } + } + if (selectee.selected) { + if (!event.metaKey && !selectee.startselected) { + selectee.$element.removeClass('ui-selected'); + selectee.selected = false; + + selectee.$element.addClass('ui-unselecting'); + selectee.unselecting = true; + // selectable UNSELECTING callback + self._trigger("unselecting", event, { + unselecting: selectee.element + }); + } + } + } + }); + + return false; + }, + + _mouseStop: function(event) { + var self = this; + + this.dragged = false; + + var options = this.options; + + $('.ui-unselecting', this.element[0]).each(function() { + var selectee = $.data(this, "selectable-item"); + selectee.$element.removeClass('ui-unselecting'); + selectee.unselecting = false; + selectee.startselected = false; + self._trigger("unselected", event, { + unselected: selectee.element + }); + }); + $('.ui-selecting', this.element[0]).each(function() { + var selectee = $.data(this, "selectable-item"); + selectee.$element.removeClass('ui-selecting').addClass('ui-selected'); + selectee.selecting = false; + selectee.selected = true; + selectee.startselected = true; + self._trigger("selected", event, { + selected: selectee.element + }); + }); + this._trigger("stop", event); + + this.helper.remove(); + + return false; + } + +}); + +$.extend($.ui.selectable, { + version: "1.8.10" +}); + +})(jQuery); +/* + * jQuery UI Sortable 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Sortables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function( $, undefined ) { + +$.widget("ui.sortable", $.ui.mouse, { + widgetEventPrefix: "sort", + options: { + appendTo: "parent", + axis: false, + connectWith: false, + containment: false, + cursor: 'auto', + cursorAt: false, + dropOnEmpty: true, + forcePlaceholderSize: false, + forceHelperSize: false, + grid: false, + handle: false, + helper: "original", + items: '> *', + opacity: false, + placeholder: false, + revert: false, + scroll: true, + scrollSensitivity: 20, + scrollSpeed: 20, + scope: "default", + tolerance: "intersect", + zIndex: 1000 + }, + _create: function() { + + var o = this.options; + this.containerCache = {}; + this.element.addClass("ui-sortable"); + + //Get the items + this.refresh(); + + //Let's determine if the items are floating + this.floating = this.items.length ? (/left|right/).test(this.items[0].item.css('float')) : false; + + //Let's determine the parent's offset + this.offset = this.element.offset(); + + //Initialize mouse events for interaction + this._mouseInit(); + + }, + + destroy: function() { + this.element + .removeClass("ui-sortable ui-sortable-disabled") + .removeData("sortable") + .unbind(".sortable"); + this._mouseDestroy(); + + for ( var i = this.items.length - 1; i >= 0; i-- ) + this.items[i].item.removeData("sortable-item"); + + return this; + }, + + _setOption: function(key, value){ + if ( key === "disabled" ) { + this.options[ key ] = value; + + this.widget() + [ value ? "addClass" : "removeClass"]( "ui-sortable-disabled" ); + } else { + // Don't call widget base _setOption for disable as it adds ui-state-disabled class + $.Widget.prototype._setOption.apply(this, arguments); + } + }, + + _mouseCapture: function(event, overrideHandle) { + + if (this.reverting) { + return false; + } + + if(this.options.disabled || this.options.type == 'static') return false; + + //We have to refresh the items data once first + this._refreshItems(event); + + //Find out if the clicked node (or one of its parents) is a actual item in this.items + var currentItem = null, self = this, nodes = $(event.target).parents().each(function() { + if($.data(this, 'sortable-item') == self) { + currentItem = $(this); + return false; + } + }); + if($.data(event.target, 'sortable-item') == self) currentItem = $(event.target); + + if(!currentItem) return false; + if(this.options.handle && !overrideHandle) { + var validHandle = false; + + $(this.options.handle, currentItem).find("*").andSelf().each(function() { if(this == event.target) validHandle = true; }); + if(!validHandle) return false; + } + + this.currentItem = currentItem; + this._removeCurrentsFromItems(); + return true; + + }, + + _mouseStart: function(event, overrideHandle, noActivation) { + + var o = this.options, self = this; + this.currentContainer = this; + + //We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture + this.refreshPositions(); + + //Create and append the visible helper + this.helper = this._createHelper(event); + + //Cache the helper size + this._cacheHelperProportions(); + + /* + * - Position generation - + * This block generates everything position related - it's the core of draggables. + */ + + //Cache the margins of the original element + this._cacheMargins(); + + //Get the next scrolling parent + this.scrollParent = this.helper.scrollParent(); + + //The element's absolute position on the page minus margins + this.offset = this.currentItem.offset(); + this.offset = { + top: this.offset.top - this.margins.top, + left: this.offset.left - this.margins.left + }; + + // Only after we got the offset, we can change the helper's position to absolute + // TODO: Still need to figure out a way to make relative sorting possible + this.helper.css("position", "absolute"); + this.cssPosition = this.helper.css("position"); + + $.extend(this.offset, { + click: { //Where the click happened, relative to the element + left: event.pageX - this.offset.left, + top: event.pageY - this.offset.top + }, + parent: this._getParentOffset(), + relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper + }); + + //Generate the original position + this.originalPosition = this._generatePosition(event); + this.originalPageX = event.pageX; + this.originalPageY = event.pageY; + + //Adjust the mouse offset relative to the helper if 'cursorAt' is supplied + (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt)); + + //Cache the former DOM position + this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] }; + + //If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way + if(this.helper[0] != this.currentItem[0]) { + this.currentItem.hide(); + } + + //Create the placeholder + this._createPlaceholder(); + + //Set a containment if given in the options + if(o.containment) + this._setContainment(); + + if(o.cursor) { // cursor option + if ($('body').css("cursor")) this._storedCursor = $('body').css("cursor"); + $('body').css("cursor", o.cursor); + } + + if(o.opacity) { // opacity option + if (this.helper.css("opacity")) this._storedOpacity = this.helper.css("opacity"); + this.helper.css("opacity", o.opacity); + } + + if(o.zIndex) { // zIndex option + if (this.helper.css("zIndex")) this._storedZIndex = this.helper.css("zIndex"); + this.helper.css("zIndex", o.zIndex); + } + + //Prepare scrolling + if(this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML') + this.overflowOffset = this.scrollParent.offset(); + + //Call callbacks + this._trigger("start", event, this._uiHash()); + + //Recache the helper size + if(!this._preserveHelperProportions) + this._cacheHelperProportions(); + + + //Post 'activate' events to possible containers + if(!noActivation) { + for (var i = this.containers.length - 1; i >= 0; i--) { this.containers[i]._trigger("activate", event, self._uiHash(this)); } + } + + //Prepare possible droppables + if($.ui.ddmanager) + $.ui.ddmanager.current = this; + + if ($.ui.ddmanager && !o.dropBehaviour) + $.ui.ddmanager.prepareOffsets(this, event); + + this.dragging = true; + + this.helper.addClass("ui-sortable-helper"); + this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position + return true; + + }, + + _mouseDrag: function(event) { + + //Compute the helpers position + this.position = this._generatePosition(event); + this.positionAbs = this._convertPositionTo("absolute"); + + if (!this.lastPositionAbs) { + this.lastPositionAbs = this.positionAbs; + } + + //Do scrolling + if(this.options.scroll) { + var o = this.options, scrolled = false; + if(this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML') { + + if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) + this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed; + else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity) + this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed; + + if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) + this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed; + else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity) + this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed; + + } else { + + if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) + scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed); + else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) + scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed); + + if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) + scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed); + else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) + scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed); + + } + + if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) + $.ui.ddmanager.prepareOffsets(this, event); + } + + //Regenerate the absolute position used for position checks + this.positionAbs = this._convertPositionTo("absolute"); + + //Set the helper position + if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px'; + if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px'; + + //Rearrange + for (var i = this.items.length - 1; i >= 0; i--) { + + //Cache variables and intersection, continue if no intersection + var item = this.items[i], itemElement = item.item[0], intersection = this._intersectsWithPointer(item); + if (!intersection) continue; + + if(itemElement != this.currentItem[0] //cannot intersect with itself + && this.placeholder[intersection == 1 ? "next" : "prev"]()[0] != itemElement //no useless actions that have been done before + && !$.ui.contains(this.placeholder[0], itemElement) //no action if the item moved is the parent of the item checked + && (this.options.type == 'semi-dynamic' ? !$.ui.contains(this.element[0], itemElement) : true) + //&& itemElement.parentNode == this.placeholder[0].parentNode // only rearrange items within the same container + ) { + + this.direction = intersection == 1 ? "down" : "up"; + + if (this.options.tolerance == "pointer" || this._intersectsWithSides(item)) { + this._rearrange(event, item); + } else { + break; + } + + this._trigger("change", event, this._uiHash()); + break; + } + } + + //Post events to containers + this._contactContainers(event); + + //Interconnect with droppables + if($.ui.ddmanager) $.ui.ddmanager.drag(this, event); + + //Call callbacks + this._trigger('sort', event, this._uiHash()); + + this.lastPositionAbs = this.positionAbs; + return false; + + }, + + _mouseStop: function(event, noPropagation) { + + if(!event) return; + + //If we are using droppables, inform the manager about the drop + if ($.ui.ddmanager && !this.options.dropBehaviour) + $.ui.ddmanager.drop(this, event); + + if(this.options.revert) { + var self = this; + var cur = self.placeholder.offset(); + + self.reverting = true; + + $(this.helper).animate({ + left: cur.left - this.offset.parent.left - self.margins.left + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollLeft), + top: cur.top - this.offset.parent.top - self.margins.top + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollTop) + }, parseInt(this.options.revert, 10) || 500, function() { + self._clear(event); + }); + } else { + this._clear(event, noPropagation); + } + + return false; + + }, + + cancel: function() { + + var self = this; + + if(this.dragging) { + + this._mouseUp({ target: null }); + + if(this.options.helper == "original") + this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"); + else + this.currentItem.show(); + + //Post deactivating events to containers + for (var i = this.containers.length - 1; i >= 0; i--){ + this.containers[i]._trigger("deactivate", null, self._uiHash(this)); + if(this.containers[i].containerCache.over) { + this.containers[i]._trigger("out", null, self._uiHash(this)); + this.containers[i].containerCache.over = 0; + } + } + + } + + if (this.placeholder) { + //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node! + if(this.placeholder[0].parentNode) this.placeholder[0].parentNode.removeChild(this.placeholder[0]); + if(this.options.helper != "original" && this.helper && this.helper[0].parentNode) this.helper.remove(); + + $.extend(this, { + helper: null, + dragging: false, + reverting: false, + _noFinalSort: null + }); + + if(this.domPosition.prev) { + $(this.domPosition.prev).after(this.currentItem); + } else { + $(this.domPosition.parent).prepend(this.currentItem); + } + } + + return this; + + }, + + serialize: function(o) { + + var items = this._getItemsAsjQuery(o && o.connected); + var str = []; o = o || {}; + + $(items).each(function() { + var res = ($(o.item || this).attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/)); + if(res) str.push((o.key || res[1]+'[]')+'='+(o.key && o.expression ? res[1] : res[2])); + }); + + if(!str.length && o.key) { + str.push(o.key + '='); + } + + return str.join('&'); + + }, + + toArray: function(o) { + + var items = this._getItemsAsjQuery(o && o.connected); + var ret = []; o = o || {}; + + items.each(function() { ret.push($(o.item || this).attr(o.attribute || 'id') || ''); }); + return ret; + + }, + + /* Be careful with the following core functions */ + _intersectsWith: function(item) { + + var x1 = this.positionAbs.left, + x2 = x1 + this.helperProportions.width, + y1 = this.positionAbs.top, + y2 = y1 + this.helperProportions.height; + + var l = item.left, + r = l + item.width, + t = item.top, + b = t + item.height; + + var dyClick = this.offset.click.top, + dxClick = this.offset.click.left; + + var isOverElement = (y1 + dyClick) > t && (y1 + dyClick) < b && (x1 + dxClick) > l && (x1 + dxClick) < r; + + if( this.options.tolerance == "pointer" + || this.options.forcePointerForContainers + || (this.options.tolerance != "pointer" && this.helperProportions[this.floating ? 'width' : 'height'] > item[this.floating ? 'width' : 'height']) + ) { + return isOverElement; + } else { + + return (l < x1 + (this.helperProportions.width / 2) // Right Half + && x2 - (this.helperProportions.width / 2) < r // Left Half + && t < y1 + (this.helperProportions.height / 2) // Bottom Half + && y2 - (this.helperProportions.height / 2) < b ); // Top Half + + } + }, + + _intersectsWithPointer: function(item) { + + var isOverElementHeight = $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height), + isOverElementWidth = $.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width), + isOverElement = isOverElementHeight && isOverElementWidth, + verticalDirection = this._getDragVerticalDirection(), + horizontalDirection = this._getDragHorizontalDirection(); + + if (!isOverElement) + return false; + + return this.floating ? + ( ((horizontalDirection && horizontalDirection == "right") || verticalDirection == "down") ? 2 : 1 ) + : ( verticalDirection && (verticalDirection == "down" ? 2 : 1) ); + + }, + + _intersectsWithSides: function(item) { + + var isOverBottomHalf = $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height), + isOverRightHalf = $.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width), + verticalDirection = this._getDragVerticalDirection(), + horizontalDirection = this._getDragHorizontalDirection(); + + if (this.floating && horizontalDirection) { + return ((horizontalDirection == "right" && isOverRightHalf) || (horizontalDirection == "left" && !isOverRightHalf)); + } else { + return verticalDirection && ((verticalDirection == "down" && isOverBottomHalf) || (verticalDirection == "up" && !isOverBottomHalf)); + } + + }, + + _getDragVerticalDirection: function() { + var delta = this.positionAbs.top - this.lastPositionAbs.top; + return delta != 0 && (delta > 0 ? "down" : "up"); + }, + + _getDragHorizontalDirection: function() { + var delta = this.positionAbs.left - this.lastPositionAbs.left; + return delta != 0 && (delta > 0 ? "right" : "left"); + }, + + refresh: function(event) { + this._refreshItems(event); + this.refreshPositions(); + return this; + }, + + _connectWith: function() { + var options = this.options; + return options.connectWith.constructor == String + ? [options.connectWith] + : options.connectWith; + }, + + _getItemsAsjQuery: function(connected) { + + var self = this; + var items = []; + var queries = []; + var connectWith = this._connectWith(); + + if(connectWith && connected) { + for (var i = connectWith.length - 1; i >= 0; i--){ + var cur = $(connectWith[i]); + for (var j = cur.length - 1; j >= 0; j--){ + var inst = $.data(cur[j], 'sortable'); + if(inst && inst != this && !inst.options.disabled) { + queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not('.ui-sortable-placeholder'), inst]); + } + }; + }; + } + + queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not('.ui-sortable-placeholder'), this]); + + for (var i = queries.length - 1; i >= 0; i--){ + queries[i][0].each(function() { + items.push(this); + }); + }; + + return $(items); + + }, + + _removeCurrentsFromItems: function() { + + var list = this.currentItem.find(":data(sortable-item)"); + + for (var i=0; i < this.items.length; i++) { + + for (var j=0; j < list.length; j++) { + if(list[j] == this.items[i].item[0]) + this.items.splice(i,1); + }; + + }; + + }, + + _refreshItems: function(event) { + + this.items = []; + this.containers = [this]; + var items = this.items; + var self = this; + var queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]]; + var connectWith = this._connectWith(); + + if(connectWith) { + for (var i = connectWith.length - 1; i >= 0; i--){ + var cur = $(connectWith[i]); + for (var j = cur.length - 1; j >= 0; j--){ + var inst = $.data(cur[j], 'sortable'); + if(inst && inst != this && !inst.options.disabled) { + queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]); + this.containers.push(inst); + } + }; + }; + } + + for (var i = queries.length - 1; i >= 0; i--) { + var targetData = queries[i][1]; + var _queries = queries[i][0]; + + for (var j=0, queriesLength = _queries.length; j < queriesLength; j++) { + var item = $(_queries[j]); + + item.data('sortable-item', targetData); // Data for target checking (mouse manager) + + items.push({ + item: item, + instance: targetData, + width: 0, height: 0, + left: 0, top: 0 + }); + }; + }; + + }, + + refreshPositions: function(fast) { + + //This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change + if(this.offsetParent && this.helper) { + this.offset.parent = this._getParentOffset(); + } + + for (var i = this.items.length - 1; i >= 0; i--){ + var item = this.items[i]; + + var t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item; + + if (!fast) { + item.width = t.outerWidth(); + item.height = t.outerHeight(); + } + + var p = t.offset(); + item.left = p.left; + item.top = p.top; + }; + + if(this.options.custom && this.options.custom.refreshContainers) { + this.options.custom.refreshContainers.call(this); + } else { + for (var i = this.containers.length - 1; i >= 0; i--){ + var p = this.containers[i].element.offset(); + this.containers[i].containerCache.left = p.left; + this.containers[i].containerCache.top = p.top; + this.containers[i].containerCache.width = this.containers[i].element.outerWidth(); + this.containers[i].containerCache.height = this.containers[i].element.outerHeight(); + }; + } + + return this; + }, + + _createPlaceholder: function(that) { + + var self = that || this, o = self.options; + + if(!o.placeholder || o.placeholder.constructor == String) { + var className = o.placeholder; + o.placeholder = { + element: function() { + + var el = $(document.createElement(self.currentItem[0].nodeName)) + .addClass(className || self.currentItem[0].className+" ui-sortable-placeholder") + .removeClass("ui-sortable-helper")[0]; + + if(!className) + el.style.visibility = "hidden"; + + return el; + }, + update: function(container, p) { + + // 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that + // 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified + if(className && !o.forcePlaceholderSize) return; + + //If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item + if(!p.height()) { p.height(self.currentItem.innerHeight() - parseInt(self.currentItem.css('paddingTop')||0, 10) - parseInt(self.currentItem.css('paddingBottom')||0, 10)); }; + if(!p.width()) { p.width(self.currentItem.innerWidth() - parseInt(self.currentItem.css('paddingLeft')||0, 10) - parseInt(self.currentItem.css('paddingRight')||0, 10)); }; + } + }; + } + + //Create the placeholder + self.placeholder = $(o.placeholder.element.call(self.element, self.currentItem)); + + //Append it after the actual current item + self.currentItem.after(self.placeholder); + + //Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317) + o.placeholder.update(self, self.placeholder); + + }, + + _contactContainers: function(event) { + + // get innermost container that intersects with item + var innermostContainer = null, innermostIndex = null; + + + for (var i = this.containers.length - 1; i >= 0; i--){ + + // never consider a container that's located within the item itself + if($.ui.contains(this.currentItem[0], this.containers[i].element[0])) + continue; + + if(this._intersectsWith(this.containers[i].containerCache)) { + + // if we've already found a container and it's more "inner" than this, then continue + if(innermostContainer && $.ui.contains(this.containers[i].element[0], innermostContainer.element[0])) + continue; + + innermostContainer = this.containers[i]; + innermostIndex = i; + + } else { + // container doesn't intersect. trigger "out" event if necessary + if(this.containers[i].containerCache.over) { + this.containers[i]._trigger("out", event, this._uiHash(this)); + this.containers[i].containerCache.over = 0; + } + } + + } + + // if no intersecting containers found, return + if(!innermostContainer) return; + + // move the item into the container if it's not there already + if(this.containers.length === 1) { + this.containers[innermostIndex]._trigger("over", event, this._uiHash(this)); + this.containers[innermostIndex].containerCache.over = 1; + } else if(this.currentContainer != this.containers[innermostIndex]) { + + //When entering a new container, we will find the item with the least distance and append our item near it + var dist = 10000; var itemWithLeastDistance = null; var base = this.positionAbs[this.containers[innermostIndex].floating ? 'left' : 'top']; + for (var j = this.items.length - 1; j >= 0; j--) { + if(!$.ui.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) continue; + var cur = this.items[j][this.containers[innermostIndex].floating ? 'left' : 'top']; + if(Math.abs(cur - base) < dist) { + dist = Math.abs(cur - base); itemWithLeastDistance = this.items[j]; + } + } + + if(!itemWithLeastDistance && !this.options.dropOnEmpty) //Check if dropOnEmpty is enabled + return; + + this.currentContainer = this.containers[innermostIndex]; + itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true); + this._trigger("change", event, this._uiHash()); + this.containers[innermostIndex]._trigger("change", event, this._uiHash(this)); + + //Update the placeholder + this.options.placeholder.update(this.currentContainer, this.placeholder); + + this.containers[innermostIndex]._trigger("over", event, this._uiHash(this)); + this.containers[innermostIndex].containerCache.over = 1; + } + + + }, + + _createHelper: function(event) { + + var o = this.options; + var helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper == 'clone' ? this.currentItem.clone() : this.currentItem); + + if(!helper.parents('body').length) //Add the helper to the DOM if that didn't happen already + $(o.appendTo != 'parent' ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]); + + if(helper[0] == this.currentItem[0]) + this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") }; + + if(helper[0].style.width == '' || o.forceHelperSize) helper.width(this.currentItem.width()); + if(helper[0].style.height == '' || o.forceHelperSize) helper.height(this.currentItem.height()); + + return helper; + + }, + + _adjustOffsetFromHelper: function(obj) { + if (typeof obj == 'string') { + obj = obj.split(' '); + } + if ($.isArray(obj)) { + obj = {left: +obj[0], top: +obj[1] || 0}; + } + if ('left' in obj) { + this.offset.click.left = obj.left + this.margins.left; + } + if ('right' in obj) { + this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left; + } + if ('top' in obj) { + this.offset.click.top = obj.top + this.margins.top; + } + if ('bottom' in obj) { + this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top; + } + }, + + _getParentOffset: function() { + + + //Get the offsetParent and cache its position + this.offsetParent = this.helper.offsetParent(); + var po = this.offsetParent.offset(); + + // This is a special case where we need to modify a offset calculated on start, since the following happened: + // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent + // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that + // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag + if(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) { + po.left += this.scrollParent.scrollLeft(); + po.top += this.scrollParent.scrollTop(); + } + + if((this.offsetParent[0] == document.body) //This needs to be actually done for all browsers, since pageX/pageY includes this information + || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.browser.msie)) //Ugly IE fix + po = { top: 0, left: 0 }; + + return { + top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0), + left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0) + }; + + }, + + _getRelativeOffset: function() { + + if(this.cssPosition == "relative") { + var p = this.currentItem.position(); + return { + top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(), + left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft() + }; + } else { + return { top: 0, left: 0 }; + } + + }, + + _cacheMargins: function() { + this.margins = { + left: (parseInt(this.currentItem.css("marginLeft"),10) || 0), + top: (parseInt(this.currentItem.css("marginTop"),10) || 0) + }; + }, + + _cacheHelperProportions: function() { + this.helperProportions = { + width: this.helper.outerWidth(), + height: this.helper.outerHeight() + }; + }, + + _setContainment: function() { + + var o = this.options; + if(o.containment == 'parent') o.containment = this.helper[0].parentNode; + if(o.containment == 'document' || o.containment == 'window') this.containment = [ + 0 - this.offset.relative.left - this.offset.parent.left, + 0 - this.offset.relative.top - this.offset.parent.top, + $(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left, + ($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top + ]; + + if(!(/^(document|window|parent)$/).test(o.containment)) { + var ce = $(o.containment)[0]; + var co = $(o.containment).offset(); + var over = ($(ce).css("overflow") != 'hidden'); + + this.containment = [ + co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left, + co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top, + co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left, + co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top + ]; + } + + }, + + _convertPositionTo: function(d, pos) { + + if(!pos) pos = this.position; + var mod = d == "absolute" ? 1 : -1; + var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); + + return { + top: ( + pos.top // The absolute mouse position + + this.offset.relative.top * mod // Only for relative positioned nodes: Relative offset from element to offset parent + + this.offset.parent.top * mod // The offsetParent's offset without borders (offset + border) + - ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod) + ), + left: ( + pos.left // The absolute mouse position + + this.offset.relative.left * mod // Only for relative positioned nodes: Relative offset from element to offset parent + + this.offset.parent.left * mod // The offsetParent's offset without borders (offset + border) + - ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod) + ) + }; + + }, + + _generatePosition: function(event) { + + var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); + + // This is another very weird special case that only happens for relative elements: + // 1. If the css position is relative + // 2. and the scroll parent is the document or similar to the offset parent + // we have to refresh the relative offset during the scroll so there are no jumps + if(this.cssPosition == 'relative' && !(this.scrollParent[0] != document && this.scrollParent[0] != this.offsetParent[0])) { + this.offset.relative = this._getRelativeOffset(); + } + + var pageX = event.pageX; + var pageY = event.pageY; + + /* + * - Position constraining - + * Constrain the position to a mix of grid, containment. + */ + + if(this.originalPosition) { //If we are not dragging yet, we won't check for options + + if(this.containment) { + if(event.pageX - this.offset.click.left < this.containment[0]) pageX = this.containment[0] + this.offset.click.left; + if(event.pageY - this.offset.click.top < this.containment[1]) pageY = this.containment[1] + this.offset.click.top; + if(event.pageX - this.offset.click.left > this.containment[2]) pageX = this.containment[2] + this.offset.click.left; + if(event.pageY - this.offset.click.top > this.containment[3]) pageY = this.containment[3] + this.offset.click.top; + } + + if(o.grid) { + var top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1]; + pageY = this.containment ? (!(top - this.offset.click.top < this.containment[1] || top - this.offset.click.top > this.containment[3]) ? top : (!(top - this.offset.click.top < this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top; + + var left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0]; + pageX = this.containment ? (!(left - this.offset.click.left < this.containment[0] || left - this.offset.click.left > this.containment[2]) ? left : (!(left - this.offset.click.left < this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left; + } + + } + + return { + top: ( + pageY // The absolute mouse position + - this.offset.click.top // Click offset (relative to the element) + - this.offset.relative.top // Only for relative positioned nodes: Relative offset from element to offset parent + - this.offset.parent.top // The offsetParent's offset without borders (offset + border) + + ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) )) + ), + left: ( + pageX // The absolute mouse position + - this.offset.click.left // Click offset (relative to the element) + - this.offset.relative.left // Only for relative positioned nodes: Relative offset from element to offset parent + - this.offset.parent.left // The offsetParent's offset without borders (offset + border) + + ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() )) + ) + }; + + }, + + _rearrange: function(event, i, a, hardRefresh) { + + a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction == 'down' ? i.item[0] : i.item[0].nextSibling)); + + //Various things done here to improve the performance: + // 1. we create a setTimeout, that calls refreshPositions + // 2. on the instance, we have a counter variable, that get's higher after every append + // 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same + // 4. this lets only the last addition to the timeout stack through + this.counter = this.counter ? ++this.counter : 1; + var self = this, counter = this.counter; + + window.setTimeout(function() { + if(counter == self.counter) self.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove + },0); + + }, + + _clear: function(event, noPropagation) { + + this.reverting = false; + // We delay all events that have to be triggered to after the point where the placeholder has been removed and + // everything else normalized again + var delayedTriggers = [], self = this; + + // We first have to update the dom position of the actual currentItem + // Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088) + if(!this._noFinalSort && this.currentItem[0].parentNode) this.placeholder.before(this.currentItem); + this._noFinalSort = null; + + if(this.helper[0] == this.currentItem[0]) { + for(var i in this._storedCSS) { + if(this._storedCSS[i] == 'auto' || this._storedCSS[i] == 'static') this._storedCSS[i] = ''; + } + this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"); + } else { + this.currentItem.show(); + } + + if(this.fromOutside && !noPropagation) delayedTriggers.push(function(event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); }); + if((this.fromOutside || this.domPosition.prev != this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent != this.currentItem.parent()[0]) && !noPropagation) delayedTriggers.push(function(event) { this._trigger("update", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed + if(!$.ui.contains(this.element[0], this.currentItem[0])) { //Node was moved out of the current element + if(!noPropagation) delayedTriggers.push(function(event) { this._trigger("remove", event, this._uiHash()); }); + for (var i = this.containers.length - 1; i >= 0; i--){ + if($.ui.contains(this.containers[i].element[0], this.currentItem[0]) && !noPropagation) { + delayedTriggers.push((function(c) { return function(event) { c._trigger("receive", event, this._uiHash(this)); }; }).call(this, this.containers[i])); + delayedTriggers.push((function(c) { return function(event) { c._trigger("update", event, this._uiHash(this)); }; }).call(this, this.containers[i])); + } + }; + }; + + //Post events to containers + for (var i = this.containers.length - 1; i >= 0; i--){ + if(!noPropagation) delayedTriggers.push((function(c) { return function(event) { c._trigger("deactivate", event, this._uiHash(this)); }; }).call(this, this.containers[i])); + if(this.containers[i].containerCache.over) { + delayedTriggers.push((function(c) { return function(event) { c._trigger("out", event, this._uiHash(this)); }; }).call(this, this.containers[i])); + this.containers[i].containerCache.over = 0; + } + } + + //Do what was originally in plugins + if(this._storedCursor) $('body').css("cursor", this._storedCursor); //Reset cursor + if(this._storedOpacity) this.helper.css("opacity", this._storedOpacity); //Reset opacity + if(this._storedZIndex) this.helper.css("zIndex", this._storedZIndex == 'auto' ? '' : this._storedZIndex); //Reset z-index + + this.dragging = false; + if(this.cancelHelperRemoval) { + if(!noPropagation) { + this._trigger("beforeStop", event, this._uiHash()); + for (var i=0; i < delayedTriggers.length; i++) { delayedTriggers[i].call(this, event); }; //Trigger all delayed events + this._trigger("stop", event, this._uiHash()); + } + return false; + } + + if(!noPropagation) this._trigger("beforeStop", event, this._uiHash()); + + //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node! + this.placeholder[0].parentNode.removeChild(this.placeholder[0]); + + if(this.helper[0] != this.currentItem[0]) this.helper.remove(); this.helper = null; + + if(!noPropagation) { + for (var i=0; i < delayedTriggers.length; i++) { delayedTriggers[i].call(this, event); }; //Trigger all delayed events + this._trigger("stop", event, this._uiHash()); + } + + this.fromOutside = false; + return true; + + }, + + _trigger: function() { + if ($.Widget.prototype._trigger.apply(this, arguments) === false) { + this.cancel(); + } + }, + + _uiHash: function(inst) { + var self = inst || this; + return { + helper: self.helper, + placeholder: self.placeholder || $([]), + position: self.position, + originalPosition: self.originalPosition, + offset: self.positionAbs, + item: self.currentItem, + sender: inst ? inst.element : null + }; + } + +}); + +$.extend($.ui.sortable, { + version: "1.8.10" +}); + +})(jQuery); +/* + * jQuery UI Accordion 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Accordion + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function( $, undefined ) { + +$.widget( "ui.accordion", { + options: { + active: 0, + animated: "slide", + autoHeight: true, + clearStyle: false, + collapsible: false, + event: "click", + fillSpace: false, + header: "> li > :first-child,> :not(li):even", + icons: { + header: "ui-icon-triangle-1-e", + headerSelected: "ui-icon-triangle-1-s" + }, + navigation: false, + navigationFilter: function() { + return this.href.toLowerCase() === location.href.toLowerCase(); + } + }, + + _create: function() { + var self = this, + options = self.options; + + self.running = 0; + + self.element + .addClass( "ui-accordion ui-widget ui-helper-reset" ) + // in lack of child-selectors in CSS + // we need to mark top-LIs in a UL-accordion for some IE-fix + .children( "li" ) + .addClass( "ui-accordion-li-fix" ); + + self.headers = self.element.find( options.header ) + .addClass( "ui-accordion-header ui-helper-reset ui-state-default ui-corner-all" ) + .bind( "mouseenter.accordion", function() { + if ( options.disabled ) { + return; + } + $( this ).addClass( "ui-state-hover" ); + }) + .bind( "mouseleave.accordion", function() { + if ( options.disabled ) { + return; + } + $( this ).removeClass( "ui-state-hover" ); + }) + .bind( "focus.accordion", function() { + if ( options.disabled ) { + return; + } + $( this ).addClass( "ui-state-focus" ); + }) + .bind( "blur.accordion", function() { + if ( options.disabled ) { + return; + } + $( this ).removeClass( "ui-state-focus" ); + }); + + self.headers.next() + .addClass( "ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom" ); + + if ( options.navigation ) { + var current = self.element.find( "a" ).filter( options.navigationFilter ).eq( 0 ); + if ( current.length ) { + var header = current.closest( ".ui-accordion-header" ); + if ( header.length ) { + // anchor within header + self.active = header; + } else { + // anchor within content + self.active = current.closest( ".ui-accordion-content" ).prev(); + } + } + } + + self.active = self._findActive( self.active || options.active ) + .addClass( "ui-state-default ui-state-active" ) + .toggleClass( "ui-corner-all" ) + .toggleClass( "ui-corner-top" ); + self.active.next().addClass( "ui-accordion-content-active" ); + + self._createIcons(); + self.resize(); + + // ARIA + self.element.attr( "role", "tablist" ); + + self.headers + .attr( "role", "tab" ) + .bind( "keydown.accordion", function( event ) { + return self._keydown( event ); + }) + .next() + .attr( "role", "tabpanel" ); + + self.headers + .not( self.active || "" ) + .attr({ + "aria-expanded": "false", + tabIndex: -1 + }) + .next() + .hide(); + + // make sure at least one header is in the tab order + if ( !self.active.length ) { + self.headers.eq( 0 ).attr( "tabIndex", 0 ); + } else { + self.active + .attr({ + "aria-expanded": "true", + tabIndex: 0 + }); + } + + // only need links in tab order for Safari + if ( !$.browser.safari ) { + self.headers.find( "a" ).attr( "tabIndex", -1 ); + } + + if ( options.event ) { + self.headers.bind( options.event.split(" ").join(".accordion ") + ".accordion", function(event) { + self._clickHandler.call( self, event, this ); + event.preventDefault(); + }); + } + }, + + _createIcons: function() { + var options = this.options; + if ( options.icons ) { + $( "" ) + .addClass( "ui-icon " + options.icons.header ) + .prependTo( this.headers ); + this.active.children( ".ui-icon" ) + .toggleClass(options.icons.header) + .toggleClass(options.icons.headerSelected); + this.element.addClass( "ui-accordion-icons" ); + } + }, + + _destroyIcons: function() { + this.headers.children( ".ui-icon" ).remove(); + this.element.removeClass( "ui-accordion-icons" ); + }, + + destroy: function() { + var options = this.options; + + this.element + .removeClass( "ui-accordion ui-widget ui-helper-reset" ) + .removeAttr( "role" ); + + this.headers + .unbind( ".accordion" ) + .removeClass( "ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top" ) + .removeAttr( "role" ) + .removeAttr( "aria-expanded" ) + .removeAttr( "tabIndex" ); + + this.headers.find( "a" ).removeAttr( "tabIndex" ); + this._destroyIcons(); + var contents = this.headers.next() + .css( "display", "" ) + .removeAttr( "role" ) + .removeClass( "ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled" ); + if ( options.autoHeight || options.fillHeight ) { + contents.css( "height", "" ); + } + + return $.Widget.prototype.destroy.call( this ); + }, + + _setOption: function( key, value ) { + $.Widget.prototype._setOption.apply( this, arguments ); + + if ( key == "active" ) { + this.activate( value ); + } + if ( key == "icons" ) { + this._destroyIcons(); + if ( value ) { + this._createIcons(); + } + } + // #5332 - opacity doesn't cascade to positioned elements in IE + // so we need to add the disabled class to the headers and panels + if ( key == "disabled" ) { + this.headers.add(this.headers.next()) + [ value ? "addClass" : "removeClass" ]( + "ui-accordion-disabled ui-state-disabled" ); + } + }, + + _keydown: function( event ) { + if ( this.options.disabled || event.altKey || event.ctrlKey ) { + return; + } + + var keyCode = $.ui.keyCode, + length = this.headers.length, + currentIndex = this.headers.index( event.target ), + toFocus = false; + + switch ( event.keyCode ) { + case keyCode.RIGHT: + case keyCode.DOWN: + toFocus = this.headers[ ( currentIndex + 1 ) % length ]; + break; + case keyCode.LEFT: + case keyCode.UP: + toFocus = this.headers[ ( currentIndex - 1 + length ) % length ]; + break; + case keyCode.SPACE: + case keyCode.ENTER: + this._clickHandler( { target: event.target }, event.target ); + event.preventDefault(); + } + + if ( toFocus ) { + $( event.target ).attr( "tabIndex", -1 ); + $( toFocus ).attr( "tabIndex", 0 ); + toFocus.focus(); + return false; + } + + return true; + }, + + resize: function() { + var options = this.options, + maxHeight; + + if ( options.fillSpace ) { + if ( $.browser.msie ) { + var defOverflow = this.element.parent().css( "overflow" ); + this.element.parent().css( "overflow", "hidden"); + } + maxHeight = this.element.parent().height(); + if ($.browser.msie) { + this.element.parent().css( "overflow", defOverflow ); + } + + this.headers.each(function() { + maxHeight -= $( this ).outerHeight( true ); + }); + + this.headers.next() + .each(function() { + $( this ).height( Math.max( 0, maxHeight - + $( this ).innerHeight() + $( this ).height() ) ); + }) + .css( "overflow", "auto" ); + } else if ( options.autoHeight ) { + maxHeight = 0; + this.headers.next() + .each(function() { + maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() ); + }) + .height( maxHeight ); + } + + return this; + }, + + activate: function( index ) { + // TODO this gets called on init, changing the option without an explicit call for that + this.options.active = index; + // call clickHandler with custom event + var active = this._findActive( index )[ 0 ]; + this._clickHandler( { target: active }, active ); + + return this; + }, + + _findActive: function( selector ) { + return selector + ? typeof selector === "number" + ? this.headers.filter( ":eq(" + selector + ")" ) + : this.headers.not( this.headers.not( selector ) ) + : selector === false + ? $( [] ) + : this.headers.filter( ":eq(0)" ); + }, + + // TODO isn't event.target enough? why the separate target argument? + _clickHandler: function( event, target ) { + var options = this.options; + if ( options.disabled ) { + return; + } + + // called only when using activate(false) to close all parts programmatically + if ( !event.target ) { + if ( !options.collapsible ) { + return; + } + this.active + .removeClass( "ui-state-active ui-corner-top" ) + .addClass( "ui-state-default ui-corner-all" ) + .children( ".ui-icon" ) + .removeClass( options.icons.headerSelected ) + .addClass( options.icons.header ); + this.active.next().addClass( "ui-accordion-content-active" ); + var toHide = this.active.next(), + data = { + options: options, + newHeader: $( [] ), + oldHeader: options.active, + newContent: $( [] ), + oldContent: toHide + }, + toShow = ( this.active = $( [] ) ); + this._toggle( toShow, toHide, data ); + return; + } + + // get the click target + var clicked = $( event.currentTarget || target ), + clickedIsActive = clicked[0] === this.active[0]; + + // TODO the option is changed, is that correct? + // TODO if it is correct, shouldn't that happen after determining that the click is valid? + options.active = options.collapsible && clickedIsActive ? + false : + this.headers.index( clicked ); + + // if animations are still active, or the active header is the target, ignore click + if ( this.running || ( !options.collapsible && clickedIsActive ) ) { + return; + } + + // find elements to show and hide + var active = this.active, + toShow = clicked.next(), + toHide = this.active.next(), + data = { + options: options, + newHeader: clickedIsActive && options.collapsible ? $([]) : clicked, + oldHeader: this.active, + newContent: clickedIsActive && options.collapsible ? $([]) : toShow, + oldContent: toHide + }, + down = this.headers.index( this.active[0] ) > this.headers.index( clicked[0] ); + + // when the call to ._toggle() comes after the class changes + // it causes a very odd bug in IE 8 (see #6720) + this.active = clickedIsActive ? $([]) : clicked; + this._toggle( toShow, toHide, data, clickedIsActive, down ); + + // switch classes + active + .removeClass( "ui-state-active ui-corner-top" ) + .addClass( "ui-state-default ui-corner-all" ) + .children( ".ui-icon" ) + .removeClass( options.icons.headerSelected ) + .addClass( options.icons.header ); + if ( !clickedIsActive ) { + clicked + .removeClass( "ui-state-default ui-corner-all" ) + .addClass( "ui-state-active ui-corner-top" ) + .children( ".ui-icon" ) + .removeClass( options.icons.header ) + .addClass( options.icons.headerSelected ); + clicked + .next() + .addClass( "ui-accordion-content-active" ); + } + + return; + }, + + _toggle: function( toShow, toHide, data, clickedIsActive, down ) { + var self = this, + options = self.options; + + self.toShow = toShow; + self.toHide = toHide; + self.data = data; + + var complete = function() { + if ( !self ) { + return; + } + return self._completed.apply( self, arguments ); + }; + + // trigger changestart event + self._trigger( "changestart", null, self.data ); + + // count elements to animate + self.running = toHide.size() === 0 ? toShow.size() : toHide.size(); + + if ( options.animated ) { + var animOptions = {}; + + if ( options.collapsible && clickedIsActive ) { + animOptions = { + toShow: $( [] ), + toHide: toHide, + complete: complete, + down: down, + autoHeight: options.autoHeight || options.fillSpace + }; + } else { + animOptions = { + toShow: toShow, + toHide: toHide, + complete: complete, + down: down, + autoHeight: options.autoHeight || options.fillSpace + }; + } + + if ( !options.proxied ) { + options.proxied = options.animated; + } + + if ( !options.proxiedDuration ) { + options.proxiedDuration = options.duration; + } + + options.animated = $.isFunction( options.proxied ) ? + options.proxied( animOptions ) : + options.proxied; + + options.duration = $.isFunction( options.proxiedDuration ) ? + options.proxiedDuration( animOptions ) : + options.proxiedDuration; + + var animations = $.ui.accordion.animations, + duration = options.duration, + easing = options.animated; + + if ( easing && !animations[ easing ] && !$.easing[ easing ] ) { + easing = "slide"; + } + if ( !animations[ easing ] ) { + animations[ easing ] = function( options ) { + this.slide( options, { + easing: easing, + duration: duration || 700 + }); + }; + } + + animations[ easing ]( animOptions ); + } else { + if ( options.collapsible && clickedIsActive ) { + toShow.toggle(); + } else { + toHide.hide(); + toShow.show(); + } + + complete( true ); + } + + // TODO assert that the blur and focus triggers are really necessary, remove otherwise + toHide.prev() + .attr({ + "aria-expanded": "false", + tabIndex: -1 + }) + .blur(); + toShow.prev() + .attr({ + "aria-expanded": "true", + tabIndex: 0 + }) + .focus(); + }, + + _completed: function( cancel ) { + this.running = cancel ? 0 : --this.running; + if ( this.running ) { + return; + } + + if ( this.options.clearStyle ) { + this.toShow.add( this.toHide ).css({ + height: "", + overflow: "" + }); + } + + // other classes are removed before the animation; this one needs to stay until completed + this.toHide.removeClass( "ui-accordion-content-active" ); + // Work around for rendering bug in IE (#5421) + if ( this.toHide.length ) { + this.toHide.parent()[0].className = this.toHide.parent()[0].className; + } + + this._trigger( "change", null, this.data ); + } +}); + +$.extend( $.ui.accordion, { + version: "1.8.10", + animations: { + slide: function( options, additions ) { + options = $.extend({ + easing: "swing", + duration: 300 + }, options, additions ); + if ( !options.toHide.size() ) { + options.toShow.animate({ + height: "show", + paddingTop: "show", + paddingBottom: "show" + }, options ); + return; + } + if ( !options.toShow.size() ) { + options.toHide.animate({ + height: "hide", + paddingTop: "hide", + paddingBottom: "hide" + }, options ); + return; + } + var overflow = options.toShow.css( "overflow" ), + percentDone = 0, + showProps = {}, + hideProps = {}, + fxAttrs = [ "height", "paddingTop", "paddingBottom" ], + originalWidth; + // fix width before calculating height of hidden element + var s = options.toShow; + originalWidth = s[0].style.width; + s.width( parseInt( s.parent().width(), 10 ) + - parseInt( s.css( "paddingLeft" ), 10 ) + - parseInt( s.css( "paddingRight" ), 10 ) + - ( parseInt( s.css( "borderLeftWidth" ), 10 ) || 0 ) + - ( parseInt( s.css( "borderRightWidth" ), 10) || 0 ) ); + + $.each( fxAttrs, function( i, prop ) { + hideProps[ prop ] = "hide"; + + var parts = ( "" + $.css( options.toShow[0], prop ) ).match( /^([\d+-.]+)(.*)$/ ); + showProps[ prop ] = { + value: parts[ 1 ], + unit: parts[ 2 ] || "px" + }; + }); + options.toShow.css({ height: 0, overflow: "hidden" }).show(); + options.toHide + .filter( ":hidden" ) + .each( options.complete ) + .end() + .filter( ":visible" ) + .animate( hideProps, { + step: function( now, settings ) { + // only calculate the percent when animating height + // IE gets very inconsistent results when animating elements + // with small values, which is common for padding + if ( settings.prop == "height" ) { + percentDone = ( settings.end - settings.start === 0 ) ? 0 : + ( settings.now - settings.start ) / ( settings.end - settings.start ); + } + + options.toShow[ 0 ].style[ settings.prop ] = + ( percentDone * showProps[ settings.prop ].value ) + + showProps[ settings.prop ].unit; + }, + duration: options.duration, + easing: options.easing, + complete: function() { + if ( !options.autoHeight ) { + options.toShow.css( "height", "" ); + } + options.toShow.css({ + width: originalWidth, + overflow: overflow + }); + options.complete(); + } + }); + }, + bounceslide: function( options ) { + this.slide( options, { + easing: options.down ? "easeOutBounce" : "swing", + duration: options.down ? 1000 : 200 + }); + } + } +}); + +})( jQuery ); +/* + * jQuery UI Autocomplete 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Autocomplete + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + * jquery.ui.position.js + */ +(function( $, undefined ) { + +// used to prevent race conditions with remote data sources +var requestIndex = 0; + +$.widget( "ui.autocomplete", { + options: { + appendTo: "body", + delay: 300, + minLength: 1, + position: { + my: "left top", + at: "left bottom", + collision: "none" + }, + source: null + }, + + pending: 0, + + _create: function() { + var self = this, + doc = this.element[ 0 ].ownerDocument, + suppressKeyPress; + + this.element + .addClass( "ui-autocomplete-input" ) + .attr( "autocomplete", "off" ) + // TODO verify these actually work as intended + .attr({ + role: "textbox", + "aria-autocomplete": "list", + "aria-haspopup": "true" + }) + .bind( "keydown.autocomplete", function( event ) { + if ( self.options.disabled || self.element.attr( "readonly" ) ) { + return; + } + + suppressKeyPress = false; + var keyCode = $.ui.keyCode; + switch( event.keyCode ) { + case keyCode.PAGE_UP: + self._move( "previousPage", event ); + break; + case keyCode.PAGE_DOWN: + self._move( "nextPage", event ); + break; + case keyCode.UP: + self._move( "previous", event ); + // prevent moving cursor to beginning of text field in some browsers + event.preventDefault(); + break; + case keyCode.DOWN: + self._move( "next", event ); + // prevent moving cursor to end of text field in some browsers + event.preventDefault(); + break; + case keyCode.ENTER: + case keyCode.NUMPAD_ENTER: + // when menu is open and has focus + if ( self.menu.active ) { + // #6055 - Opera still allows the keypress to occur + // which causes forms to submit + suppressKeyPress = true; + event.preventDefault(); + } + //passthrough - ENTER and TAB both select the current element + case keyCode.TAB: + if ( !self.menu.active ) { + return; + } + self.menu.select( event ); + break; + case keyCode.ESCAPE: + self.element.val( self.term ); + self.close( event ); + break; + default: + // keypress is triggered before the input value is changed + clearTimeout( self.searching ); + self.searching = setTimeout(function() { + // only search if the value has changed + if ( self.term != self.element.val() ) { + self.selectedItem = null; + self.search( null, event ); + } + }, self.options.delay ); + break; + } + }) + .bind( "keypress.autocomplete", function( event ) { + if ( suppressKeyPress ) { + suppressKeyPress = false; + event.preventDefault(); + } + }) + .bind( "focus.autocomplete", function() { + if ( self.options.disabled ) { + return; + } + + self.selectedItem = null; + self.previous = self.element.val(); + }) + .bind( "blur.autocomplete", function( event ) { + if ( self.options.disabled ) { + return; + } + + clearTimeout( self.searching ); + // clicks on the menu (or a button to trigger a search) will cause a blur event + self.closing = setTimeout(function() { + self.close( event ); + self._change( event ); + }, 150 ); + }); + this._initSource(); + this.response = function() { + return self._response.apply( self, arguments ); + }; + this.menu = $( "
      " ) + .addClass( "ui-autocomplete" ) + .appendTo( $( this.options.appendTo || "body", doc )[0] ) + // prevent the close-on-blur in case of a "slow" click on the menu (long mousedown) + .mousedown(function( event ) { + // clicking on the scrollbar causes focus to shift to the body + // but we can't detect a mouseup or a click immediately afterward + // so we have to track the next mousedown and close the menu if + // the user clicks somewhere outside of the autocomplete + var menuElement = self.menu.element[ 0 ]; + if ( !$( event.target ).closest( ".ui-menu-item" ).length ) { + setTimeout(function() { + $( document ).one( 'mousedown', function( event ) { + if ( event.target !== self.element[ 0 ] && + event.target !== menuElement && + !$.ui.contains( menuElement, event.target ) ) { + self.close(); + } + }); + }, 1 ); + } + + // use another timeout to make sure the blur-event-handler on the input was already triggered + setTimeout(function() { + clearTimeout( self.closing ); + }, 13); + }) + .menu({ + focus: function( event, ui ) { + var item = ui.item.data( "item.autocomplete" ); + if ( false !== self._trigger( "focus", event, { item: item } ) ) { + // use value to match what will end up in the input, if it was a key event + if ( /^key/.test(event.originalEvent.type) ) { + self.element.val( item.value ); + } + } + }, + selected: function( event, ui ) { + var item = ui.item.data( "item.autocomplete" ), + previous = self.previous; + + // only trigger when focus was lost (click on menu) + if ( self.element[0] !== doc.activeElement ) { + self.element.focus(); + self.previous = previous; + // #6109 - IE triggers two focus events and the second + // is asynchronous, so we need to reset the previous + // term synchronously and asynchronously :-( + setTimeout(function() { + self.previous = previous; + self.selectedItem = item; + }, 1); + } + + if ( false !== self._trigger( "select", event, { item: item } ) ) { + self.element.val( item.value ); + } + // reset the term after the select event + // this allows custom select handling to work properly + self.term = self.element.val(); + + self.close( event ); + self.selectedItem = item; + }, + blur: function( event, ui ) { + // don't set the value of the text field if it's already correct + // this prevents moving the cursor unnecessarily + if ( self.menu.element.is(":visible") && + ( self.element.val() !== self.term ) ) { + self.element.val( self.term ); + } + } + }) + .zIndex( this.element.zIndex() + 1 ) + // workaround for jQuery bug #5781 http://dev.jquery.com/ticket/5781 + .css({ top: 0, left: 0 }) + .hide() + .data( "menu" ); + if ( $.fn.bgiframe ) { + this.menu.element.bgiframe(); + } + }, + + destroy: function() { + this.element + .removeClass( "ui-autocomplete-input" ) + .removeAttr( "autocomplete" ) + .removeAttr( "role" ) + .removeAttr( "aria-autocomplete" ) + .removeAttr( "aria-haspopup" ); + this.menu.element.remove(); + $.Widget.prototype.destroy.call( this ); + }, + + _setOption: function( key, value ) { + $.Widget.prototype._setOption.apply( this, arguments ); + if ( key === "source" ) { + this._initSource(); + } + if ( key === "appendTo" ) { + this.menu.element.appendTo( $( value || "body", this.element[0].ownerDocument )[0] ) + } + if ( key === "disabled" && value && this.xhr ) { + this.xhr.abort(); + } + }, + + _initSource: function() { + var self = this, + array, + url; + if ( $.isArray(this.options.source) ) { + array = this.options.source; + this.source = function( request, response ) { + response( $.ui.autocomplete.filter(array, request.term) ); + }; + } else if ( typeof this.options.source === "string" ) { + url = this.options.source; + this.source = function( request, response ) { + if ( self.xhr ) { + self.xhr.abort(); + } + self.xhr = $.ajax({ + url: url, + data: request, + dataType: "json", + autocompleteRequest: ++requestIndex, + success: function( data, status ) { + if ( this.autocompleteRequest === requestIndex ) { + response( data ); + } + }, + error: function() { + if ( this.autocompleteRequest === requestIndex ) { + response( [] ); + } + } + }); + }; + } else { + this.source = this.options.source; + } + }, + + search: function( value, event ) { + value = value != null ? value : this.element.val(); + + // always save the actual value, not the one passed as an argument + this.term = this.element.val(); + + if ( value.length < this.options.minLength ) { + return this.close( event ); + } + + clearTimeout( this.closing ); + if ( this._trigger( "search", event ) === false ) { + return; + } + + return this._search( value ); + }, + + _search: function( value ) { + this.pending++; + this.element.addClass( "ui-autocomplete-loading" ); + + this.source( { term: value }, this.response ); + }, + + _response: function( content ) { + if ( !this.options.disabled && content && content.length ) { + content = this._normalize( content ); + this._suggest( content ); + this._trigger( "open" ); + } else { + this.close(); + } + this.pending--; + if ( !this.pending ) { + this.element.removeClass( "ui-autocomplete-loading" ); + } + }, + + close: function( event ) { + clearTimeout( this.closing ); + if ( this.menu.element.is(":visible") ) { + this.menu.element.hide(); + this.menu.deactivate(); + this._trigger( "close", event ); + } + }, + + _change: function( event ) { + if ( this.previous !== this.element.val() ) { + this._trigger( "change", event, { item: this.selectedItem } ); + } + }, + + _normalize: function( items ) { + // assume all items have the right format when the first item is complete + if ( items.length && items[0].label && items[0].value ) { + return items; + } + return $.map( items, function(item) { + if ( typeof item === "string" ) { + return { + label: item, + value: item + }; + } + return $.extend({ + label: item.label || item.value, + value: item.value || item.label + }, item ); + }); + }, + + _suggest: function( items ) { + var ul = this.menu.element + .empty() + .zIndex( this.element.zIndex() + 1 ); + this._renderMenu( ul, items ); + // TODO refresh should check if the active item is still in the dom, removing the need for a manual deactivate + this.menu.deactivate(); + this.menu.refresh(); + + // size and position menu + ul.show(); + this._resizeMenu(); + ul.position( $.extend({ + of: this.element + }, this.options.position )); + }, + + _resizeMenu: function() { + var ul = this.menu.element; + ul.outerWidth( Math.max( + ul.width( "" ).outerWidth(), + this.element.outerWidth() + ) ); + }, + + _renderMenu: function( ul, items ) { + var self = this; + $.each( items, function( index, item ) { + self._renderItem( ul, item ); + }); + }, + + _renderItem: function( ul, item) { + return $( "
    • " ) + .data( "item.autocomplete", item ) + .append( $( "" ).text( item.label ) ) + .appendTo( ul ); + }, + + _move: function( direction, event ) { + if ( !this.menu.element.is(":visible") ) { + this.search( null, event ); + return; + } + if ( this.menu.first() && /^previous/.test(direction) || + this.menu.last() && /^next/.test(direction) ) { + this.element.val( this.term ); + this.menu.deactivate(); + return; + } + this.menu[ direction ]( event ); + }, + + widget: function() { + return this.menu.element; + } +}); + +$.extend( $.ui.autocomplete, { + escapeRegex: function( value ) { + return value.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); + }, + filter: function(array, term) { + var matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), "i" ); + return $.grep( array, function(value) { + return matcher.test( value.label || value.value || value ); + }); + } +}); + +}( jQuery )); + +/* + * jQuery UI Menu (not officially released) + * + * This widget isn't yet finished and the API is subject to change. We plan to finish + * it for the next release. You're welcome to give it a try anyway and give us feedback, + * as long as you're okay with migrating your code later on. We can help with that, too. + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Menu + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function($) { + +$.widget("ui.menu", { + _create: function() { + var self = this; + this.element + .addClass("ui-menu ui-widget ui-widget-content ui-corner-all") + .attr({ + role: "listbox", + "aria-activedescendant": "ui-active-menuitem" + }) + .click(function( event ) { + if ( !$( event.target ).closest( ".ui-menu-item a" ).length ) { + return; + } + // temporary + event.preventDefault(); + self.select( event ); + }); + this.refresh(); + }, + + refresh: function() { + var self = this; + + // don't refresh list items that are already adapted + var items = this.element.children("li:not(.ui-menu-item):has(a)") + .addClass("ui-menu-item") + .attr("role", "menuitem"); + + items.children("a") + .addClass("ui-corner-all") + .attr("tabindex", -1) + // mouseenter doesn't work with event delegation + .mouseenter(function( event ) { + self.activate( event, $(this).parent() ); + }) + .mouseleave(function() { + self.deactivate(); + }); + }, + + activate: function( event, item ) { + this.deactivate(); + if (this.hasScroll()) { + var offset = item.offset().top - this.element.offset().top, + scroll = this.element.attr("scrollTop"), + elementHeight = this.element.height(); + if (offset < 0) { + this.element.attr("scrollTop", scroll + offset); + } else if (offset >= elementHeight) { + this.element.attr("scrollTop", scroll + offset - elementHeight + item.height()); + } + } + this.active = item.eq(0) + .children("a") + .addClass("ui-state-hover") + .attr("id", "ui-active-menuitem") + .end(); + this._trigger("focus", event, { item: item }); + }, + + deactivate: function() { + if (!this.active) { return; } + + this.active.children("a") + .removeClass("ui-state-hover") + .removeAttr("id"); + this._trigger("blur"); + this.active = null; + }, + + next: function(event) { + this.move("next", ".ui-menu-item:first", event); + }, + + previous: function(event) { + this.move("prev", ".ui-menu-item:last", event); + }, + + first: function() { + return this.active && !this.active.prevAll(".ui-menu-item").length; + }, + + last: function() { + return this.active && !this.active.nextAll(".ui-menu-item").length; + }, + + move: function(direction, edge, event) { + if (!this.active) { + this.activate(event, this.element.children(edge)); + return; + } + var next = this.active[direction + "All"](".ui-menu-item").eq(0); + if (next.length) { + this.activate(event, next); + } else { + this.activate(event, this.element.children(edge)); + } + }, + + // TODO merge with previousPage + nextPage: function(event) { + if (this.hasScroll()) { + // TODO merge with no-scroll-else + if (!this.active || this.last()) { + this.activate(event, this.element.children(".ui-menu-item:first")); + return; + } + var base = this.active.offset().top, + height = this.element.height(), + result = this.element.children(".ui-menu-item").filter(function() { + var close = $(this).offset().top - base - height + $(this).height(); + // TODO improve approximation + return close < 10 && close > -10; + }); + + // TODO try to catch this earlier when scrollTop indicates the last page anyway + if (!result.length) { + result = this.element.children(".ui-menu-item:last"); + } + this.activate(event, result); + } else { + this.activate(event, this.element.children(".ui-menu-item") + .filter(!this.active || this.last() ? ":first" : ":last")); + } + }, + + // TODO merge with nextPage + previousPage: function(event) { + if (this.hasScroll()) { + // TODO merge with no-scroll-else + if (!this.active || this.first()) { + this.activate(event, this.element.children(".ui-menu-item:last")); + return; + } + + var base = this.active.offset().top, + height = this.element.height(); + result = this.element.children(".ui-menu-item").filter(function() { + var close = $(this).offset().top - base + height - $(this).height(); + // TODO improve approximation + return close < 10 && close > -10; + }); + + // TODO try to catch this earlier when scrollTop indicates the last page anyway + if (!result.length) { + result = this.element.children(".ui-menu-item:first"); + } + this.activate(event, result); + } else { + this.activate(event, this.element.children(".ui-menu-item") + .filter(!this.active || this.first() ? ":last" : ":first")); + } + }, + + hasScroll: function() { + return this.element.height() < this.element.attr("scrollHeight"); + }, + + select: function( event ) { + this._trigger("selected", event, { item: this.active }); + } +}); + +}(jQuery)); +/* + * jQuery UI Button 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Button + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function( $, undefined ) { + +var lastActive, + baseClasses = "ui-button ui-widget ui-state-default ui-corner-all", + stateClasses = "ui-state-hover ui-state-active ", + typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only", + formResetHandler = function( event ) { + $( ":ui-button", event.target.form ).each(function() { + var inst = $( this ).data( "button" ); + setTimeout(function() { + inst.refresh(); + }, 1 ); + }); + }, + radioGroup = function( radio ) { + var name = radio.name, + form = radio.form, + radios = $( [] ); + if ( name ) { + if ( form ) { + radios = $( form ).find( "[name='" + name + "']" ); + } else { + radios = $( "[name='" + name + "']", radio.ownerDocument ) + .filter(function() { + return !this.form; + }); + } + } + return radios; + }; + +$.widget( "ui.button", { + options: { + disabled: null, + text: true, + label: null, + icons: { + primary: null, + secondary: null + } + }, + _create: function() { + this.element.closest( "form" ) + .unbind( "reset.button" ) + .bind( "reset.button", formResetHandler ); + + if ( typeof this.options.disabled !== "boolean" ) { + this.options.disabled = this.element.attr( "disabled" ); + } + + this._determineButtonType(); + this.hasTitle = !!this.buttonElement.attr( "title" ); + + var self = this, + options = this.options, + toggleButton = this.type === "checkbox" || this.type === "radio", + hoverClass = "ui-state-hover" + ( !toggleButton ? " ui-state-active" : "" ), + focusClass = "ui-state-focus"; + + if ( options.label === null ) { + options.label = this.buttonElement.html(); + } + + if ( this.element.is( ":disabled" ) ) { + options.disabled = true; + } + + this.buttonElement + .addClass( baseClasses ) + .attr( "role", "button" ) + .bind( "mouseenter.button", function() { + if ( options.disabled ) { + return; + } + $( this ).addClass( "ui-state-hover" ); + if ( this === lastActive ) { + $( this ).addClass( "ui-state-active" ); + } + }) + .bind( "mouseleave.button", function() { + if ( options.disabled ) { + return; + } + $( this ).removeClass( hoverClass ); + }) + .bind( "focus.button", function() { + // no need to check disabled, focus won't be triggered anyway + $( this ).addClass( focusClass ); + }) + .bind( "blur.button", function() { + $( this ).removeClass( focusClass ); + }); + + if ( toggleButton ) { + this.element.bind( "change.button", function() { + self.refresh(); + }); + } + + if ( this.type === "checkbox" ) { + this.buttonElement.bind( "click.button", function() { + if ( options.disabled ) { + return false; + } + $( this ).toggleClass( "ui-state-active" ); + self.buttonElement.attr( "aria-pressed", self.element[0].checked ); + }); + } else if ( this.type === "radio" ) { + this.buttonElement.bind( "click.button", function() { + if ( options.disabled ) { + return false; + } + $( this ).addClass( "ui-state-active" ); + self.buttonElement.attr( "aria-pressed", true ); + + var radio = self.element[ 0 ]; + radioGroup( radio ) + .not( radio ) + .map(function() { + return $( this ).button( "widget" )[ 0 ]; + }) + .removeClass( "ui-state-active" ) + .attr( "aria-pressed", false ); + }); + } else { + this.buttonElement + .bind( "mousedown.button", function() { + if ( options.disabled ) { + return false; + } + $( this ).addClass( "ui-state-active" ); + lastActive = this; + $( document ).one( "mouseup", function() { + lastActive = null; + }); + }) + .bind( "mouseup.button", function() { + if ( options.disabled ) { + return false; + } + $( this ).removeClass( "ui-state-active" ); + }) + .bind( "keydown.button", function(event) { + if ( options.disabled ) { + return false; + } + if ( event.keyCode == $.ui.keyCode.SPACE || event.keyCode == $.ui.keyCode.ENTER ) { + $( this ).addClass( "ui-state-active" ); + } + }) + .bind( "keyup.button", function() { + $( this ).removeClass( "ui-state-active" ); + }); + + if ( this.buttonElement.is("a") ) { + this.buttonElement.keyup(function(event) { + if ( event.keyCode === $.ui.keyCode.SPACE ) { + // TODO pass through original event correctly (just as 2nd argument doesn't work) + $( this ).click(); + } + }); + } + } + + // TODO: pull out $.Widget's handling for the disabled option into + // $.Widget.prototype._setOptionDisabled so it's easy to proxy and can + // be overridden by individual plugins + this._setOption( "disabled", options.disabled ); + }, + + _determineButtonType: function() { + + if ( this.element.is(":checkbox") ) { + this.type = "checkbox"; + } else { + if ( this.element.is(":radio") ) { + this.type = "radio"; + } else { + if ( this.element.is("input") ) { + this.type = "input"; + } else { + this.type = "button"; + } + } + } + + if ( this.type === "checkbox" || this.type === "radio" ) { + // we don't search against the document in case the element + // is disconnected from the DOM + this.buttonElement = this.element.parents().last() + .find( "label[for=" + this.element.attr("id") + "]" ); + this.element.addClass( "ui-helper-hidden-accessible" ); + + var checked = this.element.is( ":checked" ); + if ( checked ) { + this.buttonElement.addClass( "ui-state-active" ); + } + this.buttonElement.attr( "aria-pressed", checked ); + } else { + this.buttonElement = this.element; + } + }, + + widget: function() { + return this.buttonElement; + }, + + destroy: function() { + this.element + .removeClass( "ui-helper-hidden-accessible" ); + this.buttonElement + .removeClass( baseClasses + " " + stateClasses + " " + typeClasses ) + .removeAttr( "role" ) + .removeAttr( "aria-pressed" ) + .html( this.buttonElement.find(".ui-button-text").html() ); + + if ( !this.hasTitle ) { + this.buttonElement.removeAttr( "title" ); + } + + $.Widget.prototype.destroy.call( this ); + }, + + _setOption: function( key, value ) { + $.Widget.prototype._setOption.apply( this, arguments ); + if ( key === "disabled" ) { + if ( value ) { + this.element.attr( "disabled", true ); + } else { + this.element.removeAttr( "disabled" ); + } + } + this._resetButton(); + }, + + refresh: function() { + var isDisabled = this.element.is( ":disabled" ); + if ( isDisabled !== this.options.disabled ) { + this._setOption( "disabled", isDisabled ); + } + if ( this.type === "radio" ) { + radioGroup( this.element[0] ).each(function() { + if ( $( this ).is( ":checked" ) ) { + $( this ).button( "widget" ) + .addClass( "ui-state-active" ) + .attr( "aria-pressed", true ); + } else { + $( this ).button( "widget" ) + .removeClass( "ui-state-active" ) + .attr( "aria-pressed", false ); + } + }); + } else if ( this.type === "checkbox" ) { + if ( this.element.is( ":checked" ) ) { + this.buttonElement + .addClass( "ui-state-active" ) + .attr( "aria-pressed", true ); + } else { + this.buttonElement + .removeClass( "ui-state-active" ) + .attr( "aria-pressed", false ); + } + } + }, + + _resetButton: function() { + if ( this.type === "input" ) { + if ( this.options.label ) { + this.element.val( this.options.label ); + } + return; + } + var buttonElement = this.buttonElement.removeClass( typeClasses ), + buttonText = $( "" ) + .addClass( "ui-button-text" ) + .html( this.options.label ) + .appendTo( buttonElement.empty() ) + .text(), + icons = this.options.icons, + multipleIcons = icons.primary && icons.secondary, + buttonClasses = []; + + if ( icons.primary || icons.secondary ) { + buttonClasses.push( "ui-button-text-icon" + ( multipleIcons ? "s" : ( icons.primary ? "-primary" : "-secondary" ) ) ); + + if ( icons.primary ) { + buttonElement.prepend( "" ); + } + + if ( icons.secondary ) { + buttonElement.append( "" ); + } + + if ( !this.options.text ) { + buttonClasses.push( multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only" ); + buttonElement.removeClass( "ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary" ); + + if ( !this.hasTitle ) { + buttonElement.attr( "title", buttonText ); + } + } + } else { + buttonClasses.push( "ui-button-text-only" ); + } + buttonElement.addClass( buttonClasses.join( " " ) ); + } +}); + +$.widget( "ui.buttonset", { + options: { + items: ":button, :submit, :reset, :checkbox, :radio, a, :data(button)" + }, + + _create: function() { + this.element.addClass( "ui-buttonset" ); + }, + + _init: function() { + this.refresh(); + }, + + _setOption: function( key, value ) { + if ( key === "disabled" ) { + this.buttons.button( "option", key, value ); + } + + $.Widget.prototype._setOption.apply( this, arguments ); + }, + + refresh: function() { + this.buttons = this.element.find( this.options.items ) + .filter( ":ui-button" ) + .button( "refresh" ) + .end() + .not( ":ui-button" ) + .button() + .end() + .map(function() { + return $( this ).button( "widget" )[ 0 ]; + }) + .removeClass( "ui-corner-all ui-corner-left ui-corner-right" ) + .filter( ":first" ) + .addClass( "ui-corner-left" ) + .end() + .filter( ":last" ) + .addClass( "ui-corner-right" ) + .end() + .end(); + }, + + destroy: function() { + this.element.removeClass( "ui-buttonset" ); + this.buttons + .map(function() { + return $( this ).button( "widget" )[ 0 ]; + }) + .removeClass( "ui-corner-left ui-corner-right" ) + .end() + .button( "destroy" ); + + $.Widget.prototype.destroy.call( this ); + } +}); + +}( jQuery ) ); +/* + * jQuery UI Dialog 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Dialog + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + * jquery.ui.button.js + * jquery.ui.draggable.js + * jquery.ui.mouse.js + * jquery.ui.position.js + * jquery.ui.resizable.js + */ +(function( $, undefined ) { + +var uiDialogClasses = + 'ui-dialog ' + + 'ui-widget ' + + 'ui-widget-content ' + + 'ui-corner-all ', + sizeRelatedOptions = { + buttons: true, + height: true, + maxHeight: true, + maxWidth: true, + minHeight: true, + minWidth: true, + width: true + }, + resizableRelatedOptions = { + maxHeight: true, + maxWidth: true, + minHeight: true, + minWidth: true + }; + +$.widget("ui.dialog", { + options: { + autoOpen: true, + buttons: {}, + closeOnEscape: true, + closeText: 'close', + dialogClass: '', + draggable: true, + hide: null, + height: 'auto', + maxHeight: false, + maxWidth: false, + minHeight: 150, + minWidth: 150, + modal: false, + position: { + my: 'center', + at: 'center', + collision: 'fit', + // ensure that the titlebar is never outside the document + using: function(pos) { + var topOffset = $(this).css(pos).offset().top; + if (topOffset < 0) { + $(this).css('top', pos.top - topOffset); + } + } + }, + resizable: true, + show: null, + stack: true, + title: '', + width: 300, + zIndex: 1000 + }, + + _create: function() { + this.originalTitle = this.element.attr('title'); + // #5742 - .attr() might return a DOMElement + if ( typeof this.originalTitle !== "string" ) { + this.originalTitle = ""; + } + + this.options.title = this.options.title || this.originalTitle; + var self = this, + options = self.options, + + title = options.title || ' ', + titleId = $.ui.dialog.getTitleId(self.element), + + uiDialog = (self.uiDialog = $('
      ')) + .appendTo(document.body) + .hide() + .addClass(uiDialogClasses + options.dialogClass) + .css({ + zIndex: options.zIndex + }) + // setting tabIndex makes the div focusable + // setting outline to 0 prevents a border on focus in Mozilla + .attr('tabIndex', -1).css('outline', 0).keydown(function(event) { + if (options.closeOnEscape && event.keyCode && + event.keyCode === $.ui.keyCode.ESCAPE) { + + self.close(event); + event.preventDefault(); + } + }) + .attr({ + role: 'dialog', + 'aria-labelledby': titleId + }) + .mousedown(function(event) { + self.moveToTop(false, event); + }), + + uiDialogContent = self.element + .show() + .removeAttr('title') + .addClass( + 'ui-dialog-content ' + + 'ui-widget-content') + .appendTo(uiDialog), + + uiDialogTitlebar = (self.uiDialogTitlebar = $('
      ')) + .addClass( + 'ui-dialog-titlebar ' + + 'ui-widget-header ' + + 'ui-corner-all ' + + 'ui-helper-clearfix' + ) + .prependTo(uiDialog), + + uiDialogTitlebarClose = $('') + .addClass( + 'ui-dialog-titlebar-close ' + + 'ui-corner-all' + ) + .attr('role', 'button') + .hover( + function() { + uiDialogTitlebarClose.addClass('ui-state-hover'); + }, + function() { + uiDialogTitlebarClose.removeClass('ui-state-hover'); + } + ) + .focus(function() { + uiDialogTitlebarClose.addClass('ui-state-focus'); + }) + .blur(function() { + uiDialogTitlebarClose.removeClass('ui-state-focus'); + }) + .click(function(event) { + self.close(event); + return false; + }) + .appendTo(uiDialogTitlebar), + + uiDialogTitlebarCloseText = (self.uiDialogTitlebarCloseText = $('')) + .addClass( + 'ui-icon ' + + 'ui-icon-closethick' + ) + .text(options.closeText) + .appendTo(uiDialogTitlebarClose), + + uiDialogTitle = $('') + .addClass('ui-dialog-title') + .attr('id', titleId) + .html(title) + .prependTo(uiDialogTitlebar); + + //handling of deprecated beforeclose (vs beforeClose) option + //Ticket #4669 http://dev.jqueryui.com/ticket/4669 + //TODO: remove in 1.9pre + if ($.isFunction(options.beforeclose) && !$.isFunction(options.beforeClose)) { + options.beforeClose = options.beforeclose; + } + + uiDialogTitlebar.find("*").add(uiDialogTitlebar).disableSelection(); + + if (options.draggable && $.fn.draggable) { + self._makeDraggable(); + } + if (options.resizable && $.fn.resizable) { + self._makeResizable(); + } + + self._createButtons(options.buttons); + self._isOpen = false; + + if ($.fn.bgiframe) { + uiDialog.bgiframe(); + } + }, + + _init: function() { + if ( this.options.autoOpen ) { + this.open(); + } + }, + + destroy: function() { + var self = this; + + if (self.overlay) { + self.overlay.destroy(); + } + self.uiDialog.hide(); + self.element + .unbind('.dialog') + .removeData('dialog') + .removeClass('ui-dialog-content ui-widget-content') + .hide().appendTo('body'); + self.uiDialog.remove(); + + if (self.originalTitle) { + self.element.attr('title', self.originalTitle); + } + + return self; + }, + + widget: function() { + return this.uiDialog; + }, + + close: function(event) { + var self = this, + maxZ, thisZ; + + if (false === self._trigger('beforeClose', event)) { + return; + } + + if (self.overlay) { + self.overlay.destroy(); + } + self.uiDialog.unbind('keypress.ui-dialog'); + + self._isOpen = false; + + if (self.options.hide) { + self.uiDialog.hide(self.options.hide, function() { + self._trigger('close', event); + }); + } else { + self.uiDialog.hide(); + self._trigger('close', event); + } + + $.ui.dialog.overlay.resize(); + + // adjust the maxZ to allow other modal dialogs to continue to work (see #4309) + if (self.options.modal) { + maxZ = 0; + $('.ui-dialog').each(function() { + if (this !== self.uiDialog[0]) { + thisZ = $(this).css('z-index'); + if(!isNaN(thisZ)) { + maxZ = Math.max(maxZ, thisZ); + } + } + }); + $.ui.dialog.maxZ = maxZ; + } + + return self; + }, + + isOpen: function() { + return this._isOpen; + }, + + // the force parameter allows us to move modal dialogs to their correct + // position on open + moveToTop: function(force, event) { + var self = this, + options = self.options, + saveScroll; + + if ((options.modal && !force) || + (!options.stack && !options.modal)) { + return self._trigger('focus', event); + } + + if (options.zIndex > $.ui.dialog.maxZ) { + $.ui.dialog.maxZ = options.zIndex; + } + if (self.overlay) { + $.ui.dialog.maxZ += 1; + self.overlay.$el.css('z-index', $.ui.dialog.overlay.maxZ = $.ui.dialog.maxZ); + } + + //Save and then restore scroll since Opera 9.5+ resets when parent z-Index is changed. + // http://ui.jquery.com/bugs/ticket/3193 + saveScroll = { scrollTop: self.element.attr('scrollTop'), scrollLeft: self.element.attr('scrollLeft') }; + $.ui.dialog.maxZ += 1; + self.uiDialog.css('z-index', $.ui.dialog.maxZ); + self.element.attr(saveScroll); + self._trigger('focus', event); + + return self; + }, + + open: function() { + if (this._isOpen) { return; } + + var self = this, + options = self.options, + uiDialog = self.uiDialog; + + self.overlay = options.modal ? new $.ui.dialog.overlay(self) : null; + self._size(); + self._position(options.position); + uiDialog.show(options.show); + self.moveToTop(true); + + // prevent tabbing out of modal dialogs + if (options.modal) { + uiDialog.bind('keypress.ui-dialog', function(event) { + if (event.keyCode !== $.ui.keyCode.TAB) { + return; + } + + var tabbables = $(':tabbable', this), + first = tabbables.filter(':first'), + last = tabbables.filter(':last'); + + if (event.target === last[0] && !event.shiftKey) { + first.focus(1); + return false; + } else if (event.target === first[0] && event.shiftKey) { + last.focus(1); + return false; + } + }); + } + + // set focus to the first tabbable element in the content area or the first button + // if there are no tabbable elements, set focus on the dialog itself + $(self.element.find(':tabbable').get().concat( + uiDialog.find('.ui-dialog-buttonpane :tabbable').get().concat( + uiDialog.get()))).eq(0).focus(); + + self._isOpen = true; + self._trigger('open'); + + return self; + }, + + _createButtons: function(buttons) { + var self = this, + hasButtons = false, + uiDialogButtonPane = $('
      ') + .addClass( + 'ui-dialog-buttonpane ' + + 'ui-widget-content ' + + 'ui-helper-clearfix' + ), + uiButtonSet = $( "
      " ) + .addClass( "ui-dialog-buttonset" ) + .appendTo( uiDialogButtonPane ); + + // if we already have a button pane, remove it + self.uiDialog.find('.ui-dialog-buttonpane').remove(); + + if (typeof buttons === 'object' && buttons !== null) { + $.each(buttons, function() { + return !(hasButtons = true); + }); + } + if (hasButtons) { + $.each(buttons, function(name, props) { + props = $.isFunction( props ) ? + { click: props, text: name } : + props; + var button = $('') + .attr( props, true ) + .unbind('click') + .click(function() { + props.click.apply(self.element[0], arguments); + }) + .appendTo(uiButtonSet); + if ($.fn.button) { + button.button(); + } + }); + uiDialogButtonPane.appendTo(self.uiDialog); + } + }, + + _makeDraggable: function() { + var self = this, + options = self.options, + doc = $(document), + heightBeforeDrag; + + function filteredUi(ui) { + return { + position: ui.position, + offset: ui.offset + }; + } + + self.uiDialog.draggable({ + cancel: '.ui-dialog-content, .ui-dialog-titlebar-close', + handle: '.ui-dialog-titlebar', + containment: 'document', + start: function(event, ui) { + heightBeforeDrag = options.height === "auto" ? "auto" : $(this).height(); + $(this).height($(this).height()).addClass("ui-dialog-dragging"); + self._trigger('dragStart', event, filteredUi(ui)); + }, + drag: function(event, ui) { + self._trigger('drag', event, filteredUi(ui)); + }, + stop: function(event, ui) { + options.position = [ui.position.left - doc.scrollLeft(), + ui.position.top - doc.scrollTop()]; + $(this).removeClass("ui-dialog-dragging").height(heightBeforeDrag); + self._trigger('dragStop', event, filteredUi(ui)); + $.ui.dialog.overlay.resize(); + } + }); + }, + + _makeResizable: function(handles) { + handles = (handles === undefined ? this.options.resizable : handles); + var self = this, + options = self.options, + // .ui-resizable has position: relative defined in the stylesheet + // but dialogs have to use absolute or fixed positioning + position = self.uiDialog.css('position'), + resizeHandles = (typeof handles === 'string' ? + handles : + 'n,e,s,w,se,sw,ne,nw' + ); + + function filteredUi(ui) { + return { + originalPosition: ui.originalPosition, + originalSize: ui.originalSize, + position: ui.position, + size: ui.size + }; + } + + self.uiDialog.resizable({ + cancel: '.ui-dialog-content', + containment: 'document', + alsoResize: self.element, + maxWidth: options.maxWidth, + maxHeight: options.maxHeight, + minWidth: options.minWidth, + minHeight: self._minHeight(), + handles: resizeHandles, + start: function(event, ui) { + $(this).addClass("ui-dialog-resizing"); + self._trigger('resizeStart', event, filteredUi(ui)); + }, + resize: function(event, ui) { + self._trigger('resize', event, filteredUi(ui)); + }, + stop: function(event, ui) { + $(this).removeClass("ui-dialog-resizing"); + options.height = $(this).height(); + options.width = $(this).width(); + self._trigger('resizeStop', event, filteredUi(ui)); + $.ui.dialog.overlay.resize(); + } + }) + .css('position', position) + .find('.ui-resizable-se').addClass('ui-icon ui-icon-grip-diagonal-se'); + }, + + _minHeight: function() { + var options = this.options; + + if (options.height === 'auto') { + return options.minHeight; + } else { + return Math.min(options.minHeight, options.height); + } + }, + + _position: function(position) { + var myAt = [], + offset = [0, 0], + isVisible; + + if (position) { + // deep extending converts arrays to objects in jQuery <= 1.3.2 :-( + // if (typeof position == 'string' || $.isArray(position)) { + // myAt = $.isArray(position) ? position : position.split(' '); + + if (typeof position === 'string' || (typeof position === 'object' && '0' in position)) { + myAt = position.split ? position.split(' ') : [position[0], position[1]]; + if (myAt.length === 1) { + myAt[1] = myAt[0]; + } + + $.each(['left', 'top'], function(i, offsetPosition) { + if (+myAt[i] === myAt[i]) { + offset[i] = myAt[i]; + myAt[i] = offsetPosition; + } + }); + + position = { + my: myAt.join(" "), + at: myAt.join(" "), + offset: offset.join(" ") + }; + } + + position = $.extend({}, $.ui.dialog.prototype.options.position, position); + } else { + position = $.ui.dialog.prototype.options.position; + } + + // need to show the dialog to get the actual offset in the position plugin + isVisible = this.uiDialog.is(':visible'); + if (!isVisible) { + this.uiDialog.show(); + } + this.uiDialog + // workaround for jQuery bug #5781 http://dev.jquery.com/ticket/5781 + .css({ top: 0, left: 0 }) + .position($.extend({ of: window }, position)); + if (!isVisible) { + this.uiDialog.hide(); + } + }, + + _setOptions: function( options ) { + var self = this, + resizableOptions = {}, + resize = false; + + $.each( options, function( key, value ) { + self._setOption( key, value ); + + if ( key in sizeRelatedOptions ) { + resize = true; + } + if ( key in resizableRelatedOptions ) { + resizableOptions[ key ] = value; + } + }); + + if ( resize ) { + this._size(); + } + if ( this.uiDialog.is( ":data(resizable)" ) ) { + this.uiDialog.resizable( "option", resizableOptions ); + } + }, + + _setOption: function(key, value){ + var self = this, + uiDialog = self.uiDialog; + + switch (key) { + //handling of deprecated beforeclose (vs beforeClose) option + //Ticket #4669 http://dev.jqueryui.com/ticket/4669 + //TODO: remove in 1.9pre + case "beforeclose": + key = "beforeClose"; + break; + case "buttons": + self._createButtons(value); + break; + case "closeText": + // ensure that we always pass a string + self.uiDialogTitlebarCloseText.text("" + value); + break; + case "dialogClass": + uiDialog + .removeClass(self.options.dialogClass) + .addClass(uiDialogClasses + value); + break; + case "disabled": + if (value) { + uiDialog.addClass('ui-dialog-disabled'); + } else { + uiDialog.removeClass('ui-dialog-disabled'); + } + break; + case "draggable": + var isDraggable = uiDialog.is( ":data(draggable)" ); + if ( isDraggable && !value ) { + uiDialog.draggable( "destroy" ); + } + + if ( !isDraggable && value ) { + self._makeDraggable(); + } + break; + case "position": + self._position(value); + break; + case "resizable": + // currently resizable, becoming non-resizable + var isResizable = uiDialog.is( ":data(resizable)" ); + if (isResizable && !value) { + uiDialog.resizable('destroy'); + } + + // currently resizable, changing handles + if (isResizable && typeof value === 'string') { + uiDialog.resizable('option', 'handles', value); + } + + // currently non-resizable, becoming resizable + if (!isResizable && value !== false) { + self._makeResizable(value); + } + break; + case "title": + // convert whatever was passed in o a string, for html() to not throw up + $(".ui-dialog-title", self.uiDialogTitlebar).html("" + (value || ' ')); + break; + } + + $.Widget.prototype._setOption.apply(self, arguments); + }, + + _size: function() { + /* If the user has resized the dialog, the .ui-dialog and .ui-dialog-content + * divs will both have width and height set, so we need to reset them + */ + var options = this.options, + nonContentHeight, + minContentHeight, + isVisible = this.uiDialog.is( ":visible" ); + + // reset content sizing + this.element.show().css({ + width: 'auto', + minHeight: 0, + height: 0 + }); + + if (options.minWidth > options.width) { + options.width = options.minWidth; + } + + // reset wrapper sizing + // determine the height of all the non-content elements + nonContentHeight = this.uiDialog.css({ + height: 'auto', + width: options.width + }) + .height(); + minContentHeight = Math.max( 0, options.minHeight - nonContentHeight ); + + if ( options.height === "auto" ) { + // only needed for IE6 support + if ( $.support.minHeight ) { + this.element.css({ + minHeight: minContentHeight, + height: "auto" + }); + } else { + this.uiDialog.show(); + var autoHeight = this.element.css( "height", "auto" ).height(); + if ( !isVisible ) { + this.uiDialog.hide(); + } + this.element.height( Math.max( autoHeight, minContentHeight ) ); + } + } else { + this.element.height( Math.max( options.height - nonContentHeight, 0 ) ); + } + + if (this.uiDialog.is(':data(resizable)')) { + this.uiDialog.resizable('option', 'minHeight', this._minHeight()); + } + } +}); + +$.extend($.ui.dialog, { + version: "1.8.10", + + uuid: 0, + maxZ: 0, + + getTitleId: function($el) { + var id = $el.attr('id'); + if (!id) { + this.uuid += 1; + id = this.uuid; + } + return 'ui-dialog-title-' + id; + }, + + overlay: function(dialog) { + this.$el = $.ui.dialog.overlay.create(dialog); + } +}); + +$.extend($.ui.dialog.overlay, { + instances: [], + // reuse old instances due to IE memory leak with alpha transparency (see #5185) + oldInstances: [], + maxZ: 0, + events: $.map('focus,mousedown,mouseup,keydown,keypress,click'.split(','), + function(event) { return event + '.dialog-overlay'; }).join(' '), + create: function(dialog) { + if (this.instances.length === 0) { + // prevent use of anchors and inputs + // we use a setTimeout in case the overlay is created from an + // event that we're going to be cancelling (see #2804) + setTimeout(function() { + // handle $(el).dialog().dialog('close') (see #4065) + if ($.ui.dialog.overlay.instances.length) { + $(document).bind($.ui.dialog.overlay.events, function(event) { + // stop events if the z-index of the target is < the z-index of the overlay + // we cannot return true when we don't want to cancel the event (#3523) + if ($(event.target).zIndex() < $.ui.dialog.overlay.maxZ) { + return false; + } + }); + } + }, 1); + + // allow closing by pressing the escape key + $(document).bind('keydown.dialog-overlay', function(event) { + if (dialog.options.closeOnEscape && event.keyCode && + event.keyCode === $.ui.keyCode.ESCAPE) { + + dialog.close(event); + event.preventDefault(); + } + }); + + // handle window resize + $(window).bind('resize.dialog-overlay', $.ui.dialog.overlay.resize); + } + + var $el = (this.oldInstances.pop() || $('
      ').addClass('ui-widget-overlay')) + .appendTo(document.body) + .css({ + width: this.width(), + height: this.height() + }); + + if ($.fn.bgiframe) { + $el.bgiframe(); + } + + this.instances.push($el); + return $el; + }, + + destroy: function($el) { + var indexOf = $.inArray($el, this.instances); + if (indexOf != -1){ + this.oldInstances.push(this.instances.splice(indexOf, 1)[0]); + } + + if (this.instances.length === 0) { + $([document, window]).unbind('.dialog-overlay'); + } + + $el.remove(); + + // adjust the maxZ to allow other modal dialogs to continue to work (see #4309) + var maxZ = 0; + $.each(this.instances, function() { + maxZ = Math.max(maxZ, this.css('z-index')); + }); + this.maxZ = maxZ; + }, + + height: function() { + var scrollHeight, + offsetHeight; + // handle IE 6 + if ($.browser.msie && $.browser.version < 7) { + scrollHeight = Math.max( + document.documentElement.scrollHeight, + document.body.scrollHeight + ); + offsetHeight = Math.max( + document.documentElement.offsetHeight, + document.body.offsetHeight + ); + + if (scrollHeight < offsetHeight) { + return $(window).height() + 'px'; + } else { + return scrollHeight + 'px'; + } + // handle "good" browsers + } else { + return $(document).height() + 'px'; + } + }, + + width: function() { + var scrollWidth, + offsetWidth; + // handle IE 6 + if ($.browser.msie && $.browser.version < 7) { + scrollWidth = Math.max( + document.documentElement.scrollWidth, + document.body.scrollWidth + ); + offsetWidth = Math.max( + document.documentElement.offsetWidth, + document.body.offsetWidth + ); + + if (scrollWidth < offsetWidth) { + return $(window).width() + 'px'; + } else { + return scrollWidth + 'px'; + } + // handle "good" browsers + } else { + return $(document).width() + 'px'; + } + }, + + resize: function() { + /* If the dialog is draggable and the user drags it past the + * right edge of the window, the document becomes wider so we + * need to stretch the overlay. If the user then drags the + * dialog back to the left, the document will become narrower, + * so we need to shrink the overlay to the appropriate size. + * This is handled by shrinking the overlay before setting it + * to the full document size. + */ + var $overlays = $([]); + $.each($.ui.dialog.overlay.instances, function() { + $overlays = $overlays.add(this); + }); + + $overlays.css({ + width: 0, + height: 0 + }).css({ + width: $.ui.dialog.overlay.width(), + height: $.ui.dialog.overlay.height() + }); + } +}); + +$.extend($.ui.dialog.overlay.prototype, { + destroy: function() { + $.ui.dialog.overlay.destroy(this.$el); + } +}); + +}(jQuery)); +/* + * jQuery UI Slider 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Slider + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function( $, undefined ) { + +// number of pages in a slider +// (how many times can you page up/down to go through the whole range) +var numPages = 5; + +$.widget( "ui.slider", $.ui.mouse, { + + widgetEventPrefix: "slide", + + options: { + animate: false, + distance: 0, + max: 100, + min: 0, + orientation: "horizontal", + range: false, + step: 1, + value: 0, + values: null + }, + + _create: function() { + var self = this, + o = this.options; + + this._keySliding = false; + this._mouseSliding = false; + this._animateOff = true; + this._handleIndex = null; + this._detectOrientation(); + this._mouseInit(); + + this.element + .addClass( "ui-slider" + + " ui-slider-" + this.orientation + + " ui-widget" + + " ui-widget-content" + + " ui-corner-all" ); + + if ( o.disabled ) { + this.element.addClass( "ui-slider-disabled ui-disabled" ); + } + + this.range = $([]); + + if ( o.range ) { + if ( o.range === true ) { + this.range = $( "
      " ); + if ( !o.values ) { + o.values = [ this._valueMin(), this._valueMin() ]; + } + if ( o.values.length && o.values.length !== 2 ) { + o.values = [ o.values[0], o.values[0] ]; + } + } else { + this.range = $( "
      " ); + } + + this.range + .appendTo( this.element ) + .addClass( "ui-slider-range" ); + + if ( o.range === "min" || o.range === "max" ) { + this.range.addClass( "ui-slider-range-" + o.range ); + } + + // note: this isn't the most fittingly semantic framework class for this element, + // but worked best visually with a variety of themes + this.range.addClass( "ui-widget-header" ); + } + + if ( $( ".ui-slider-handle", this.element ).length === 0 ) { + $( "" ) + .appendTo( this.element ) + .addClass( "ui-slider-handle" ); + } + + if ( o.values && o.values.length ) { + while ( $(".ui-slider-handle", this.element).length < o.values.length ) { + $( "" ) + .appendTo( this.element ) + .addClass( "ui-slider-handle" ); + } + } + + this.handles = $( ".ui-slider-handle", this.element ) + .addClass( "ui-state-default" + + " ui-corner-all" ); + + this.handle = this.handles.eq( 0 ); + + this.handles.add( this.range ).filter( "a" ) + .click(function( event ) { + event.preventDefault(); + }) + .hover(function() { + if ( !o.disabled ) { + $( this ).addClass( "ui-state-hover" ); + } + }, function() { + $( this ).removeClass( "ui-state-hover" ); + }) + .focus(function() { + if ( !o.disabled ) { + $( ".ui-slider .ui-state-focus" ).removeClass( "ui-state-focus" ); + $( this ).addClass( "ui-state-focus" ); + } else { + $( this ).blur(); + } + }) + .blur(function() { + $( this ).removeClass( "ui-state-focus" ); + }); + + this.handles.each(function( i ) { + $( this ).data( "index.ui-slider-handle", i ); + }); + + this.handles + .keydown(function( event ) { + var ret = true, + index = $( this ).data( "index.ui-slider-handle" ), + allowed, + curVal, + newVal, + step; + + if ( self.options.disabled ) { + return; + } + + switch ( event.keyCode ) { + case $.ui.keyCode.HOME: + case $.ui.keyCode.END: + case $.ui.keyCode.PAGE_UP: + case $.ui.keyCode.PAGE_DOWN: + case $.ui.keyCode.UP: + case $.ui.keyCode.RIGHT: + case $.ui.keyCode.DOWN: + case $.ui.keyCode.LEFT: + ret = false; + if ( !self._keySliding ) { + self._keySliding = true; + $( this ).addClass( "ui-state-active" ); + allowed = self._start( event, index ); + if ( allowed === false ) { + return; + } + } + break; + } + + step = self.options.step; + if ( self.options.values && self.options.values.length ) { + curVal = newVal = self.values( index ); + } else { + curVal = newVal = self.value(); + } + + switch ( event.keyCode ) { + case $.ui.keyCode.HOME: + newVal = self._valueMin(); + break; + case $.ui.keyCode.END: + newVal = self._valueMax(); + break; + case $.ui.keyCode.PAGE_UP: + newVal = self._trimAlignValue( curVal + ( (self._valueMax() - self._valueMin()) / numPages ) ); + break; + case $.ui.keyCode.PAGE_DOWN: + newVal = self._trimAlignValue( curVal - ( (self._valueMax() - self._valueMin()) / numPages ) ); + break; + case $.ui.keyCode.UP: + case $.ui.keyCode.RIGHT: + if ( curVal === self._valueMax() ) { + return; + } + newVal = self._trimAlignValue( curVal + step ); + break; + case $.ui.keyCode.DOWN: + case $.ui.keyCode.LEFT: + if ( curVal === self._valueMin() ) { + return; + } + newVal = self._trimAlignValue( curVal - step ); + break; + } + + self._slide( event, index, newVal ); + + return ret; + + }) + .keyup(function( event ) { + var index = $( this ).data( "index.ui-slider-handle" ); + + if ( self._keySliding ) { + self._keySliding = false; + self._stop( event, index ); + self._change( event, index ); + $( this ).removeClass( "ui-state-active" ); + } + + }); + + this._refreshValue(); + + this._animateOff = false; + }, + + destroy: function() { + this.handles.remove(); + this.range.remove(); + + this.element + .removeClass( "ui-slider" + + " ui-slider-horizontal" + + " ui-slider-vertical" + + " ui-slider-disabled" + + " ui-widget" + + " ui-widget-content" + + " ui-corner-all" ) + .removeData( "slider" ) + .unbind( ".slider" ); + + this._mouseDestroy(); + + return this; + }, + + _mouseCapture: function( event ) { + var o = this.options, + position, + normValue, + distance, + closestHandle, + self, + index, + allowed, + offset, + mouseOverHandle; + + if ( o.disabled ) { + return false; + } + + this.elementSize = { + width: this.element.outerWidth(), + height: this.element.outerHeight() + }; + this.elementOffset = this.element.offset(); + + position = { x: event.pageX, y: event.pageY }; + normValue = this._normValueFromMouse( position ); + distance = this._valueMax() - this._valueMin() + 1; + self = this; + this.handles.each(function( i ) { + var thisDistance = Math.abs( normValue - self.values(i) ); + if ( distance > thisDistance ) { + distance = thisDistance; + closestHandle = $( this ); + index = i; + } + }); + + // workaround for bug #3736 (if both handles of a range are at 0, + // the first is always used as the one with least distance, + // and moving it is obviously prevented by preventing negative ranges) + if( o.range === true && this.values(1) === o.min ) { + index += 1; + closestHandle = $( this.handles[index] ); + } + + allowed = this._start( event, index ); + if ( allowed === false ) { + return false; + } + this._mouseSliding = true; + + self._handleIndex = index; + + closestHandle + .addClass( "ui-state-active" ) + .focus(); + + offset = closestHandle.offset(); + mouseOverHandle = !$( event.target ).parents().andSelf().is( ".ui-slider-handle" ); + this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : { + left: event.pageX - offset.left - ( closestHandle.width() / 2 ), + top: event.pageY - offset.top - + ( closestHandle.height() / 2 ) - + ( parseInt( closestHandle.css("borderTopWidth"), 10 ) || 0 ) - + ( parseInt( closestHandle.css("borderBottomWidth"), 10 ) || 0) + + ( parseInt( closestHandle.css("marginTop"), 10 ) || 0) + }; + + if ( !this.handles.hasClass( "ui-state-hover" ) ) { + this._slide( event, index, normValue ); + } + this._animateOff = true; + return true; + }, + + _mouseStart: function( event ) { + return true; + }, + + _mouseDrag: function( event ) { + var position = { x: event.pageX, y: event.pageY }, + normValue = this._normValueFromMouse( position ); + + this._slide( event, this._handleIndex, normValue ); + + return false; + }, + + _mouseStop: function( event ) { + this.handles.removeClass( "ui-state-active" ); + this._mouseSliding = false; + + this._stop( event, this._handleIndex ); + this._change( event, this._handleIndex ); + + this._handleIndex = null; + this._clickOffset = null; + this._animateOff = false; + + return false; + }, + + _detectOrientation: function() { + this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal"; + }, + + _normValueFromMouse: function( position ) { + var pixelTotal, + pixelMouse, + percentMouse, + valueTotal, + valueMouse; + + if ( this.orientation === "horizontal" ) { + pixelTotal = this.elementSize.width; + pixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 ); + } else { + pixelTotal = this.elementSize.height; + pixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 ); + } + + percentMouse = ( pixelMouse / pixelTotal ); + if ( percentMouse > 1 ) { + percentMouse = 1; + } + if ( percentMouse < 0 ) { + percentMouse = 0; + } + if ( this.orientation === "vertical" ) { + percentMouse = 1 - percentMouse; + } + + valueTotal = this._valueMax() - this._valueMin(); + valueMouse = this._valueMin() + percentMouse * valueTotal; + + return this._trimAlignValue( valueMouse ); + }, + + _start: function( event, index ) { + var uiHash = { + handle: this.handles[ index ], + value: this.value() + }; + if ( this.options.values && this.options.values.length ) { + uiHash.value = this.values( index ); + uiHash.values = this.values(); + } + return this._trigger( "start", event, uiHash ); + }, + + _slide: function( event, index, newVal ) { + var otherVal, + newValues, + allowed; + + if ( this.options.values && this.options.values.length ) { + otherVal = this.values( index ? 0 : 1 ); + + if ( ( this.options.values.length === 2 && this.options.range === true ) && + ( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) ) + ) { + newVal = otherVal; + } + + if ( newVal !== this.values( index ) ) { + newValues = this.values(); + newValues[ index ] = newVal; + // A slide can be canceled by returning false from the slide callback + allowed = this._trigger( "slide", event, { + handle: this.handles[ index ], + value: newVal, + values: newValues + } ); + otherVal = this.values( index ? 0 : 1 ); + if ( allowed !== false ) { + this.values( index, newVal, true ); + } + } + } else { + if ( newVal !== this.value() ) { + // A slide can be canceled by returning false from the slide callback + allowed = this._trigger( "slide", event, { + handle: this.handles[ index ], + value: newVal + } ); + if ( allowed !== false ) { + this.value( newVal ); + } + } + } + }, + + _stop: function( event, index ) { + var uiHash = { + handle: this.handles[ index ], + value: this.value() + }; + if ( this.options.values && this.options.values.length ) { + uiHash.value = this.values( index ); + uiHash.values = this.values(); + } + + this._trigger( "stop", event, uiHash ); + }, + + _change: function( event, index ) { + if ( !this._keySliding && !this._mouseSliding ) { + var uiHash = { + handle: this.handles[ index ], + value: this.value() + }; + if ( this.options.values && this.options.values.length ) { + uiHash.value = this.values( index ); + uiHash.values = this.values(); + } + + this._trigger( "change", event, uiHash ); + } + }, + + value: function( newValue ) { + if ( arguments.length ) { + this.options.value = this._trimAlignValue( newValue ); + this._refreshValue(); + this._change( null, 0 ); + } + + return this._value(); + }, + + values: function( index, newValue ) { + var vals, + newValues, + i; + + if ( arguments.length > 1 ) { + this.options.values[ index ] = this._trimAlignValue( newValue ); + this._refreshValue(); + this._change( null, index ); + } + + if ( arguments.length ) { + if ( $.isArray( arguments[ 0 ] ) ) { + vals = this.options.values; + newValues = arguments[ 0 ]; + for ( i = 0; i < vals.length; i += 1 ) { + vals[ i ] = this._trimAlignValue( newValues[ i ] ); + this._change( null, i ); + } + this._refreshValue(); + } else { + if ( this.options.values && this.options.values.length ) { + return this._values( index ); + } else { + return this.value(); + } + } + } else { + return this._values(); + } + }, + + _setOption: function( key, value ) { + var i, + valsLength = 0; + + if ( $.isArray( this.options.values ) ) { + valsLength = this.options.values.length; + } + + $.Widget.prototype._setOption.apply( this, arguments ); + + switch ( key ) { + case "disabled": + if ( value ) { + this.handles.filter( ".ui-state-focus" ).blur(); + this.handles.removeClass( "ui-state-hover" ); + this.handles.attr( "disabled", "disabled" ); + this.element.addClass( "ui-disabled" ); + } else { + this.handles.removeAttr( "disabled" ); + this.element.removeClass( "ui-disabled" ); + } + break; + case "orientation": + this._detectOrientation(); + this.element + .removeClass( "ui-slider-horizontal ui-slider-vertical" ) + .addClass( "ui-slider-" + this.orientation ); + this._refreshValue(); + break; + case "value": + this._animateOff = true; + this._refreshValue(); + this._change( null, 0 ); + this._animateOff = false; + break; + case "values": + this._animateOff = true; + this._refreshValue(); + for ( i = 0; i < valsLength; i += 1 ) { + this._change( null, i ); + } + this._animateOff = false; + break; + } + }, + + //internal value getter + // _value() returns value trimmed by min and max, aligned by step + _value: function() { + var val = this.options.value; + val = this._trimAlignValue( val ); + + return val; + }, + + //internal values getter + // _values() returns array of values trimmed by min and max, aligned by step + // _values( index ) returns single value trimmed by min and max, aligned by step + _values: function( index ) { + var val, + vals, + i; + + if ( arguments.length ) { + val = this.options.values[ index ]; + val = this._trimAlignValue( val ); + + return val; + } else { + // .slice() creates a copy of the array + // this copy gets trimmed by min and max and then returned + vals = this.options.values.slice(); + for ( i = 0; i < vals.length; i+= 1) { + vals[ i ] = this._trimAlignValue( vals[ i ] ); + } + + return vals; + } + }, + + // returns the step-aligned value that val is closest to, between (inclusive) min and max + _trimAlignValue: function( val ) { + if ( val <= this._valueMin() ) { + return this._valueMin(); + } + if ( val >= this._valueMax() ) { + return this._valueMax(); + } + var step = ( this.options.step > 0 ) ? this.options.step : 1, + valModStep = (val - this._valueMin()) % step; + alignValue = val - valModStep; + + if ( Math.abs(valModStep) * 2 >= step ) { + alignValue += ( valModStep > 0 ) ? step : ( -step ); + } + + // Since JavaScript has problems with large floats, round + // the final value to 5 digits after the decimal point (see #4124) + return parseFloat( alignValue.toFixed(5) ); + }, + + _valueMin: function() { + return this.options.min; + }, + + _valueMax: function() { + return this.options.max; + }, + + _refreshValue: function() { + var oRange = this.options.range, + o = this.options, + self = this, + animate = ( !this._animateOff ) ? o.animate : false, + valPercent, + _set = {}, + lastValPercent, + value, + valueMin, + valueMax; + + if ( this.options.values && this.options.values.length ) { + this.handles.each(function( i, j ) { + valPercent = ( self.values(i) - self._valueMin() ) / ( self._valueMax() - self._valueMin() ) * 100; + _set[ self.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%"; + $( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate ); + if ( self.options.range === true ) { + if ( self.orientation === "horizontal" ) { + if ( i === 0 ) { + self.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { left: valPercent + "%" }, o.animate ); + } + if ( i === 1 ) { + self.range[ animate ? "animate" : "css" ]( { width: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } ); + } + } else { + if ( i === 0 ) { + self.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { bottom: ( valPercent ) + "%" }, o.animate ); + } + if ( i === 1 ) { + self.range[ animate ? "animate" : "css" ]( { height: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } ); + } + } + } + lastValPercent = valPercent; + }); + } else { + value = this.value(); + valueMin = this._valueMin(); + valueMax = this._valueMax(); + valPercent = ( valueMax !== valueMin ) ? + ( value - valueMin ) / ( valueMax - valueMin ) * 100 : + 0; + _set[ self.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%"; + this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate ); + + if ( oRange === "min" && this.orientation === "horizontal" ) { + this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { width: valPercent + "%" }, o.animate ); + } + if ( oRange === "max" && this.orientation === "horizontal" ) { + this.range[ animate ? "animate" : "css" ]( { width: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } ); + } + if ( oRange === "min" && this.orientation === "vertical" ) { + this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { height: valPercent + "%" }, o.animate ); + } + if ( oRange === "max" && this.orientation === "vertical" ) { + this.range[ animate ? "animate" : "css" ]( { height: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } ); + } + } + } + +}); + +$.extend( $.ui.slider, { + version: "1.8.10" +}); + +}(jQuery)); +/* + * jQuery UI Tabs 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Tabs + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function( $, undefined ) { + +var tabId = 0, + listId = 0; + +function getNextTabId() { + return ++tabId; +} + +function getNextListId() { + return ++listId; +} + +$.widget( "ui.tabs", { + options: { + add: null, + ajaxOptions: null, + cache: false, + cookie: null, // e.g. { expires: 7, path: '/', domain: 'jquery.com', secure: true } + collapsible: false, + disable: null, + disabled: [], + enable: null, + event: "click", + fx: null, // e.g. { height: 'toggle', opacity: 'toggle', duration: 200 } + idPrefix: "ui-tabs-", + load: null, + panelTemplate: "
      ", + remove: null, + select: null, + show: null, + spinner: "Loading…", + tabTemplate: "
    • #{label}
    • " + }, + + _create: function() { + this._tabify( true ); + }, + + _setOption: function( key, value ) { + if ( key == "selected" ) { + if (this.options.collapsible && value == this.options.selected ) { + return; + } + this.select( value ); + } else { + this.options[ key ] = value; + this._tabify(); + } + }, + + _tabId: function( a ) { + return a.title && a.title.replace( /\s/g, "_" ).replace( /[^\w\u00c0-\uFFFF-]/g, "" ) || + this.options.idPrefix + getNextTabId(); + }, + + _sanitizeSelector: function( hash ) { + // we need this because an id may contain a ":" + return hash.replace( /:/g, "\\:" ); + }, + + _cookie: function() { + var cookie = this.cookie || + ( this.cookie = this.options.cookie.name || "ui-tabs-" + getNextListId() ); + return $.cookie.apply( null, [ cookie ].concat( $.makeArray( arguments ) ) ); + }, + + _ui: function( tab, panel ) { + return { + tab: tab, + panel: panel, + index: this.anchors.index( tab ) + }; + }, + + _cleanup: function() { + // restore all former loading tabs labels + this.lis.filter( ".ui-state-processing" ) + .removeClass( "ui-state-processing" ) + .find( "span:data(label.tabs)" ) + .each(function() { + var el = $( this ); + el.html( el.data( "label.tabs" ) ).removeData( "label.tabs" ); + }); + }, + + _tabify: function( init ) { + var self = this, + o = this.options, + fragmentId = /^#.+/; // Safari 2 reports '#' for an empty hash + + this.list = this.element.find( "ol,ul" ).eq( 0 ); + this.lis = $( " > li:has(a[href])", this.list ); + this.anchors = this.lis.map(function() { + return $( "a", this )[ 0 ]; + }); + this.panels = $( [] ); + + this.anchors.each(function( i, a ) { + var href = $( a ).attr( "href" ); + // For dynamically created HTML that contains a hash as href IE < 8 expands + // such href to the full page url with hash and then misinterprets tab as ajax. + // Same consideration applies for an added tab with a fragment identifier + // since a[href=#fragment-identifier] does unexpectedly not match. + // Thus normalize href attribute... + var hrefBase = href.split( "#" )[ 0 ], + baseEl; + if ( hrefBase && ( hrefBase === location.toString().split( "#" )[ 0 ] || + ( baseEl = $( "base" )[ 0 ]) && hrefBase === baseEl.href ) ) { + href = a.hash; + a.href = href; + } + + // inline tab + if ( fragmentId.test( href ) ) { + self.panels = self.panels.add( self.element.find( self._sanitizeSelector( href ) ) ); + // remote tab + // prevent loading the page itself if href is just "#" + } else if ( href && href !== "#" ) { + // required for restore on destroy + $.data( a, "href.tabs", href ); + + // TODO until #3808 is fixed strip fragment identifier from url + // (IE fails to load from such url) + $.data( a, "load.tabs", href.replace( /#.*$/, "" ) ); + + var id = self._tabId( a ); + a.href = "#" + id; + var $panel = self.element.find( "#" + id ); + if ( !$panel.length ) { + $panel = $( o.panelTemplate ) + .attr( "id", id ) + .addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" ) + .insertAfter( self.panels[ i - 1 ] || self.list ); + $panel.data( "destroy.tabs", true ); + } + self.panels = self.panels.add( $panel ); + // invalid tab href + } else { + o.disabled.push( i ); + } + }); + + // initialization from scratch + if ( init ) { + // attach necessary classes for styling + this.element.addClass( "ui-tabs ui-widget ui-widget-content ui-corner-all" ); + this.list.addClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" ); + this.lis.addClass( "ui-state-default ui-corner-top" ); + this.panels.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" ); + + // Selected tab + // use "selected" option or try to retrieve: + // 1. from fragment identifier in url + // 2. from cookie + // 3. from selected class attribute on
    • + if ( o.selected === undefined ) { + if ( location.hash ) { + this.anchors.each(function( i, a ) { + if ( a.hash == location.hash ) { + o.selected = i; + return false; + } + }); + } + if ( typeof o.selected !== "number" && o.cookie ) { + o.selected = parseInt( self._cookie(), 10 ); + } + if ( typeof o.selected !== "number" && this.lis.filter( ".ui-tabs-selected" ).length ) { + o.selected = this.lis.index( this.lis.filter( ".ui-tabs-selected" ) ); + } + o.selected = o.selected || ( this.lis.length ? 0 : -1 ); + } else if ( o.selected === null ) { // usage of null is deprecated, TODO remove in next release + o.selected = -1; + } + + // sanity check - default to first tab... + o.selected = ( ( o.selected >= 0 && this.anchors[ o.selected ] ) || o.selected < 0 ) + ? o.selected + : 0; + + // Take disabling tabs via class attribute from HTML + // into account and update option properly. + // A selected tab cannot become disabled. + o.disabled = $.unique( o.disabled.concat( + $.map( this.lis.filter( ".ui-state-disabled" ), function( n, i ) { + return self.lis.index( n ); + }) + ) ).sort(); + + if ( $.inArray( o.selected, o.disabled ) != -1 ) { + o.disabled.splice( $.inArray( o.selected, o.disabled ), 1 ); + } + + // highlight selected tab + this.panels.addClass( "ui-tabs-hide" ); + this.lis.removeClass( "ui-tabs-selected ui-state-active" ); + // check for length avoids error when initializing empty list + if ( o.selected >= 0 && this.anchors.length ) { + self.element.find( self._sanitizeSelector( self.anchors[ o.selected ].hash ) ).removeClass( "ui-tabs-hide" ); + this.lis.eq( o.selected ).addClass( "ui-tabs-selected ui-state-active" ); + + // seems to be expected behavior that the show callback is fired + self.element.queue( "tabs", function() { + self._trigger( "show", null, + self._ui( self.anchors[ o.selected ], self.element.find( self._sanitizeSelector( self.anchors[ o.selected ].hash ) )[ 0 ] ) ); + }); + + this.load( o.selected ); + } + + // clean up to avoid memory leaks in certain versions of IE 6 + // TODO: namespace this event + $( window ).bind( "unload", function() { + self.lis.add( self.anchors ).unbind( ".tabs" ); + self.lis = self.anchors = self.panels = null; + }); + // update selected after add/remove + } else { + o.selected = this.lis.index( this.lis.filter( ".ui-tabs-selected" ) ); + } + + // update collapsible + // TODO: use .toggleClass() + this.element[ o.collapsible ? "addClass" : "removeClass" ]( "ui-tabs-collapsible" ); + + // set or update cookie after init and add/remove respectively + if ( o.cookie ) { + this._cookie( o.selected, o.cookie ); + } + + // disable tabs + for ( var i = 0, li; ( li = this.lis[ i ] ); i++ ) { + $( li )[ $.inArray( i, o.disabled ) != -1 && + // TODO: use .toggleClass() + !$( li ).hasClass( "ui-tabs-selected" ) ? "addClass" : "removeClass" ]( "ui-state-disabled" ); + } + + // reset cache if switching from cached to not cached + if ( o.cache === false ) { + this.anchors.removeData( "cache.tabs" ); + } + + // remove all handlers before, tabify may run on existing tabs after add or option change + this.lis.add( this.anchors ).unbind( ".tabs" ); + + if ( o.event !== "mouseover" ) { + var addState = function( state, el ) { + if ( el.is( ":not(.ui-state-disabled)" ) ) { + el.addClass( "ui-state-" + state ); + } + }; + var removeState = function( state, el ) { + el.removeClass( "ui-state-" + state ); + }; + this.lis.bind( "mouseover.tabs" , function() { + addState( "hover", $( this ) ); + }); + this.lis.bind( "mouseout.tabs", function() { + removeState( "hover", $( this ) ); + }); + this.anchors.bind( "focus.tabs", function() { + addState( "focus", $( this ).closest( "li" ) ); + }); + this.anchors.bind( "blur.tabs", function() { + removeState( "focus", $( this ).closest( "li" ) ); + }); + } + + // set up animations + var hideFx, showFx; + if ( o.fx ) { + if ( $.isArray( o.fx ) ) { + hideFx = o.fx[ 0 ]; + showFx = o.fx[ 1 ]; + } else { + hideFx = showFx = o.fx; + } + } + + // Reset certain styles left over from animation + // and prevent IE's ClearType bug... + function resetStyle( $el, fx ) { + $el.css( "display", "" ); + if ( !$.support.opacity && fx.opacity ) { + $el[ 0 ].style.removeAttribute( "filter" ); + } + } + + // Show a tab... + var showTab = showFx + ? function( clicked, $show ) { + $( clicked ).closest( "li" ).addClass( "ui-tabs-selected ui-state-active" ); + $show.hide().removeClass( "ui-tabs-hide" ) // avoid flicker that way + .animate( showFx, showFx.duration || "normal", function() { + resetStyle( $show, showFx ); + self._trigger( "show", null, self._ui( clicked, $show[ 0 ] ) ); + }); + } + : function( clicked, $show ) { + $( clicked ).closest( "li" ).addClass( "ui-tabs-selected ui-state-active" ); + $show.removeClass( "ui-tabs-hide" ); + self._trigger( "show", null, self._ui( clicked, $show[ 0 ] ) ); + }; + + // Hide a tab, $show is optional... + var hideTab = hideFx + ? function( clicked, $hide ) { + $hide.animate( hideFx, hideFx.duration || "normal", function() { + self.lis.removeClass( "ui-tabs-selected ui-state-active" ); + $hide.addClass( "ui-tabs-hide" ); + resetStyle( $hide, hideFx ); + self.element.dequeue( "tabs" ); + }); + } + : function( clicked, $hide, $show ) { + self.lis.removeClass( "ui-tabs-selected ui-state-active" ); + $hide.addClass( "ui-tabs-hide" ); + self.element.dequeue( "tabs" ); + }; + + // attach tab event handler, unbind to avoid duplicates from former tabifying... + this.anchors.bind( o.event + ".tabs", function() { + var el = this, + $li = $(el).closest( "li" ), + $hide = self.panels.filter( ":not(.ui-tabs-hide)" ), + $show = self.element.find( self._sanitizeSelector( el.hash ) ); + + // If tab is already selected and not collapsible or tab disabled or + // or is already loading or click callback returns false stop here. + // Check if click handler returns false last so that it is not executed + // for a disabled or loading tab! + if ( ( $li.hasClass( "ui-tabs-selected" ) && !o.collapsible) || + $li.hasClass( "ui-state-disabled" ) || + $li.hasClass( "ui-state-processing" ) || + self.panels.filter( ":animated" ).length || + self._trigger( "select", null, self._ui( this, $show[ 0 ] ) ) === false ) { + this.blur(); + return false; + } + + o.selected = self.anchors.index( this ); + + self.abort(); + + // if tab may be closed + if ( o.collapsible ) { + if ( $li.hasClass( "ui-tabs-selected" ) ) { + o.selected = -1; + + if ( o.cookie ) { + self._cookie( o.selected, o.cookie ); + } + + self.element.queue( "tabs", function() { + hideTab( el, $hide ); + }).dequeue( "tabs" ); + + this.blur(); + return false; + } else if ( !$hide.length ) { + if ( o.cookie ) { + self._cookie( o.selected, o.cookie ); + } + + self.element.queue( "tabs", function() { + showTab( el, $show ); + }); + + // TODO make passing in node possible, see also http://dev.jqueryui.com/ticket/3171 + self.load( self.anchors.index( this ) ); + + this.blur(); + return false; + } + } + + if ( o.cookie ) { + self._cookie( o.selected, o.cookie ); + } + + // show new tab + if ( $show.length ) { + if ( $hide.length ) { + self.element.queue( "tabs", function() { + hideTab( el, $hide ); + }); + } + self.element.queue( "tabs", function() { + showTab( el, $show ); + }); + + self.load( self.anchors.index( this ) ); + } else { + throw "jQuery UI Tabs: Mismatching fragment identifier."; + } + + // Prevent IE from keeping other link focussed when using the back button + // and remove dotted border from clicked link. This is controlled via CSS + // in modern browsers; blur() removes focus from address bar in Firefox + // which can become a usability and annoying problem with tabs('rotate'). + if ( $.browser.msie ) { + this.blur(); + } + }); + + // disable click in any case + this.anchors.bind( "click.tabs", function(){ + return false; + }); + }, + + _getIndex: function( index ) { + // meta-function to give users option to provide a href string instead of a numerical index. + // also sanitizes numerical indexes to valid values. + if ( typeof index == "string" ) { + index = this.anchors.index( this.anchors.filter( "[href$=" + index + "]" ) ); + } + + return index; + }, + + destroy: function() { + var o = this.options; + + this.abort(); + + this.element + .unbind( ".tabs" ) + .removeClass( "ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible" ) + .removeData( "tabs" ); + + this.list.removeClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" ); + + this.anchors.each(function() { + var href = $.data( this, "href.tabs" ); + if ( href ) { + this.href = href; + } + var $this = $( this ).unbind( ".tabs" ); + $.each( [ "href", "load", "cache" ], function( i, prefix ) { + $this.removeData( prefix + ".tabs" ); + }); + }); + + this.lis.unbind( ".tabs" ).add( this.panels ).each(function() { + if ( $.data( this, "destroy.tabs" ) ) { + $( this ).remove(); + } else { + $( this ).removeClass([ + "ui-state-default", + "ui-corner-top", + "ui-tabs-selected", + "ui-state-active", + "ui-state-hover", + "ui-state-focus", + "ui-state-disabled", + "ui-tabs-panel", + "ui-widget-content", + "ui-corner-bottom", + "ui-tabs-hide" + ].join( " " ) ); + } + }); + + if ( o.cookie ) { + this._cookie( null, o.cookie ); + } + + return this; + }, + + add: function( url, label, index ) { + if ( index === undefined ) { + index = this.anchors.length; + } + + var self = this, + o = this.options, + $li = $( o.tabTemplate.replace( /#\{href\}/g, url ).replace( /#\{label\}/g, label ) ), + id = !url.indexOf( "#" ) ? url.replace( "#", "" ) : this._tabId( $( "a", $li )[ 0 ] ); + + $li.addClass( "ui-state-default ui-corner-top" ).data( "destroy.tabs", true ); + + // try to find an existing element before creating a new one + var $panel = self.element.find( "#" + id ); + if ( !$panel.length ) { + $panel = $( o.panelTemplate ) + .attr( "id", id ) + .data( "destroy.tabs", true ); + } + $panel.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" ); + + if ( index >= this.lis.length ) { + $li.appendTo( this.list ); + $panel.appendTo( this.list[ 0 ].parentNode ); + } else { + $li.insertBefore( this.lis[ index ] ); + $panel.insertBefore( this.panels[ index ] ); + } + + o.disabled = $.map( o.disabled, function( n, i ) { + return n >= index ? ++n : n; + }); + + this._tabify(); + + if ( this.anchors.length == 1 ) { + o.selected = 0; + $li.addClass( "ui-tabs-selected ui-state-active" ); + $panel.removeClass( "ui-tabs-hide" ); + this.element.queue( "tabs", function() { + self._trigger( "show", null, self._ui( self.anchors[ 0 ], self.panels[ 0 ] ) ); + }); + + this.load( 0 ); + } + + this._trigger( "add", null, this._ui( this.anchors[ index ], this.panels[ index ] ) ); + return this; + }, + + remove: function( index ) { + index = this._getIndex( index ); + var o = this.options, + $li = this.lis.eq( index ).remove(), + $panel = this.panels.eq( index ).remove(); + + // If selected tab was removed focus tab to the right or + // in case the last tab was removed the tab to the left. + if ( $li.hasClass( "ui-tabs-selected" ) && this.anchors.length > 1) { + this.select( index + ( index + 1 < this.anchors.length ? 1 : -1 ) ); + } + + o.disabled = $.map( + $.grep( o.disabled, function(n, i) { + return n != index; + }), + function( n, i ) { + return n >= index ? --n : n; + }); + + this._tabify(); + + this._trigger( "remove", null, this._ui( $li.find( "a" )[ 0 ], $panel[ 0 ] ) ); + return this; + }, + + enable: function( index ) { + index = this._getIndex( index ); + var o = this.options; + if ( $.inArray( index, o.disabled ) == -1 ) { + return; + } + + this.lis.eq( index ).removeClass( "ui-state-disabled" ); + o.disabled = $.grep( o.disabled, function( n, i ) { + return n != index; + }); + + this._trigger( "enable", null, this._ui( this.anchors[ index ], this.panels[ index ] ) ); + return this; + }, + + disable: function( index ) { + index = this._getIndex( index ); + var self = this, o = this.options; + // cannot disable already selected tab + if ( index != o.selected ) { + this.lis.eq( index ).addClass( "ui-state-disabled" ); + + o.disabled.push( index ); + o.disabled.sort(); + + this._trigger( "disable", null, this._ui( this.anchors[ index ], this.panels[ index ] ) ); + } + + return this; + }, + + select: function( index ) { + index = this._getIndex( index ); + if ( index == -1 ) { + if ( this.options.collapsible && this.options.selected != -1 ) { + index = this.options.selected; + } else { + return this; + } + } + this.anchors.eq( index ).trigger( this.options.event + ".tabs" ); + return this; + }, + + load: function( index ) { + index = this._getIndex( index ); + var self = this, + o = this.options, + a = this.anchors.eq( index )[ 0 ], + url = $.data( a, "load.tabs" ); + + this.abort(); + + // not remote or from cache + if ( !url || this.element.queue( "tabs" ).length !== 0 && $.data( a, "cache.tabs" ) ) { + this.element.dequeue( "tabs" ); + return; + } + + // load remote from here on + this.lis.eq( index ).addClass( "ui-state-processing" ); + + if ( o.spinner ) { + var span = $( "span", a ); + span.data( "label.tabs", span.html() ).html( o.spinner ); + } + + this.xhr = $.ajax( $.extend( {}, o.ajaxOptions, { + url: url, + success: function( r, s ) { + self.element.find( self._sanitizeSelector( a.hash ) ).html( r ); + + // take care of tab labels + self._cleanup(); + + if ( o.cache ) { + $.data( a, "cache.tabs", true ); + } + + self._trigger( "load", null, self._ui( self.anchors[ index ], self.panels[ index ] ) ); + try { + o.ajaxOptions.success( r, s ); + } + catch ( e ) {} + }, + error: function( xhr, s, e ) { + // take care of tab labels + self._cleanup(); + + self._trigger( "load", null, self._ui( self.anchors[ index ], self.panels[ index ] ) ); + try { + // Passing index avoid a race condition when this method is + // called after the user has selected another tab. + // Pass the anchor that initiated this request allows + // loadError to manipulate the tab content panel via $(a.hash) + o.ajaxOptions.error( xhr, s, index, a ); + } + catch ( e ) {} + } + } ) ); + + // last, so that load event is fired before show... + self.element.dequeue( "tabs" ); + + return this; + }, + + abort: function() { + // stop possibly running animations + this.element.queue( [] ); + this.panels.stop( false, true ); + + // "tabs" queue must not contain more than two elements, + // which are the callbacks for the latest clicked tab... + this.element.queue( "tabs", this.element.queue( "tabs" ).splice( -2, 2 ) ); + + // terminate pending requests from other tabs + if ( this.xhr ) { + this.xhr.abort(); + delete this.xhr; + } + + // take care of tab labels + this._cleanup(); + return this; + }, + + url: function( index, url ) { + this.anchors.eq( index ).removeData( "cache.tabs" ).data( "load.tabs", url ); + return this; + }, + + length: function() { + return this.anchors.length; + } +}); + +$.extend( $.ui.tabs, { + version: "1.8.10" +}); + +/* + * Tabs Extensions + */ + +/* + * Rotate + */ +$.extend( $.ui.tabs.prototype, { + rotation: null, + rotate: function( ms, continuing ) { + var self = this, + o = this.options; + + var rotate = self._rotate || ( self._rotate = function( e ) { + clearTimeout( self.rotation ); + self.rotation = setTimeout(function() { + var t = o.selected; + self.select( ++t < self.anchors.length ? t : 0 ); + }, ms ); + + if ( e ) { + e.stopPropagation(); + } + }); + + var stop = self._unrotate || ( self._unrotate = !continuing + ? function(e) { + if (e.clientX) { // in case of a true click + self.rotate(null); + } + } + : function( e ) { + t = o.selected; + rotate(); + }); + + // start rotation + if ( ms ) { + this.element.bind( "tabsshow", rotate ); + this.anchors.bind( o.event + ".tabs", stop ); + rotate(); + // stop rotation + } else { + clearTimeout( self.rotation ); + this.element.unbind( "tabsshow", rotate ); + this.anchors.unbind( o.event + ".tabs", stop ); + delete this._rotate; + delete this._unrotate; + } + + return this; + } +}); + +})( jQuery ); +/* + * jQuery UI Datepicker 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Datepicker + * + * Depends: + * jquery.ui.core.js + */ +(function( $, undefined ) { + +$.extend($.ui, { datepicker: { version: "1.8.10" } }); + +var PROP_NAME = 'datepicker'; +var dpuuid = new Date().getTime(); + +/* Date picker manager. + Use the singleton instance of this class, $.datepicker, to interact with the date picker. + Settings for (groups of) date pickers are maintained in an instance object, + allowing multiple different settings on the same page. */ + +function Datepicker() { + this.debug = false; // Change this to true to start debugging + this._curInst = null; // The current instance in use + this._keyEvent = false; // If the last event was a key event + this._disabledInputs = []; // List of date picker inputs that have been disabled + this._datepickerShowing = false; // True if the popup picker is showing , false if not + this._inDialog = false; // True if showing within a "dialog", false if not + this._mainDivId = 'ui-datepicker-div'; // The ID of the main datepicker division + this._inlineClass = 'ui-datepicker-inline'; // The name of the inline marker class + this._appendClass = 'ui-datepicker-append'; // The name of the append marker class + this._triggerClass = 'ui-datepicker-trigger'; // The name of the trigger marker class + this._dialogClass = 'ui-datepicker-dialog'; // The name of the dialog marker class + this._disableClass = 'ui-datepicker-disabled'; // The name of the disabled covering marker class + this._unselectableClass = 'ui-datepicker-unselectable'; // The name of the unselectable cell marker class + this._currentClass = 'ui-datepicker-current-day'; // The name of the current day marker class + this._dayOverClass = 'ui-datepicker-days-cell-over'; // The name of the day hover marker class + this.regional = []; // Available regional settings, indexed by language code + this.regional[''] = { // Default regional settings + closeText: 'Done', // Display text for close link + prevText: 'Prev', // Display text for previous month link + nextText: 'Next', // Display text for next month link + currentText: 'Today', // Display text for current month link + monthNames: ['January','February','March','April','May','June', + 'July','August','September','October','November','December'], // Names of months for drop-down and formatting + monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], // For formatting + dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], // For formatting + dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], // For formatting + dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], // Column headings for days starting at Sunday + weekHeader: 'Wk', // Column header for week of the year + dateFormat: 'mm/dd/yy', // See format options on parseDate + firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ... + isRTL: false, // True if right-to-left language, false if left-to-right + showMonthAfterYear: false, // True if the year select precedes month, false for month then year + yearSuffix: '' // Additional text to append to the year in the month headers + }; + this._defaults = { // Global defaults for all the date picker instances + showOn: 'focus', // 'focus' for popup on focus, + // 'button' for trigger button, or 'both' for either + showAnim: 'fadeIn', // Name of jQuery animation for popup + showOptions: {}, // Options for enhanced animations + defaultDate: null, // Used when field is blank: actual date, + // +/-number for offset from today, null for today + appendText: '', // Display text following the input box, e.g. showing the format + buttonText: '...', // Text for trigger button + buttonImage: '', // URL for trigger button image + buttonImageOnly: false, // True if the image appears alone, false if it appears on a button + hideIfNoPrevNext: false, // True to hide next/previous month links + // if not applicable, false to just disable them + navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links + gotoCurrent: false, // True if today link goes back to current selection instead + changeMonth: false, // True if month can be selected directly, false if only prev/next + changeYear: false, // True if year can be selected directly, false if only prev/next + yearRange: 'c-10:c+10', // Range of years to display in drop-down, + // either relative to today's year (-nn:+nn), relative to currently displayed year + // (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n) + showOtherMonths: false, // True to show dates in other months, false to leave blank + selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable + showWeek: false, // True to show week of the year, false to not show it + calculateWeek: this.iso8601Week, // How to calculate the week of the year, + // takes a Date and returns the number of the week for it + shortYearCutoff: '+10', // Short year values < this are in the current century, + // > this are in the previous century, + // string value starting with '+' for current year + value + minDate: null, // The earliest selectable date, or null for no limit + maxDate: null, // The latest selectable date, or null for no limit + duration: 'fast', // Duration of display/closure + beforeShowDay: null, // Function that takes a date and returns an array with + // [0] = true if selectable, false if not, [1] = custom CSS class name(s) or '', + // [2] = cell title (optional), e.g. $.datepicker.noWeekends + beforeShow: null, // Function that takes an input field and + // returns a set of custom settings for the date picker + onSelect: null, // Define a callback function when a date is selected + onChangeMonthYear: null, // Define a callback function when the month or year is changed + onClose: null, // Define a callback function when the datepicker is closed + numberOfMonths: 1, // Number of months to show at a time + showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0) + stepMonths: 1, // Number of months to step back/forward + stepBigMonths: 12, // Number of months to step back/forward for the big links + altField: '', // Selector for an alternate field to store selected dates into + altFormat: '', // The date format to use for the alternate field + constrainInput: true, // The input is constrained by the current date format + showButtonPanel: false, // True to show button panel, false to not show it + autoSize: false // True to size the input for the date format, false to leave as is + }; + $.extend(this._defaults, this.regional['']); + this.dpDiv = $('
      '); +} + +$.extend(Datepicker.prototype, { + /* Class name added to elements to indicate already configured with a date picker. */ + markerClassName: 'hasDatepicker', + + /* Debug logging (if enabled). */ + log: function () { + if (this.debug) + console.log.apply('', arguments); + }, + + // TODO rename to "widget" when switching to widget factory + _widgetDatepicker: function() { + return this.dpDiv; + }, + + /* Override the default settings for all instances of the date picker. + @param settings object - the new settings to use as defaults (anonymous object) + @return the manager object */ + setDefaults: function(settings) { + extendRemove(this._defaults, settings || {}); + return this; + }, + + /* Attach the date picker to a jQuery selection. + @param target element - the target input field or division or span + @param settings object - the new settings to use for this date picker instance (anonymous) */ + _attachDatepicker: function(target, settings) { + // check for settings on the control itself - in namespace 'date:' + var inlineSettings = null; + for (var attrName in this._defaults) { + var attrValue = target.getAttribute('date:' + attrName); + if (attrValue) { + inlineSettings = inlineSettings || {}; + try { + inlineSettings[attrName] = eval(attrValue); + } catch (err) { + inlineSettings[attrName] = attrValue; + } + } + } + var nodeName = target.nodeName.toLowerCase(); + var inline = (nodeName == 'div' || nodeName == 'span'); + if (!target.id) { + this.uuid += 1; + target.id = 'dp' + this.uuid; + } + var inst = this._newInst($(target), inline); + inst.settings = $.extend({}, settings || {}, inlineSettings || {}); + if (nodeName == 'input') { + this._connectDatepicker(target, inst); + } else if (inline) { + this._inlineDatepicker(target, inst); + } + }, + + /* Create a new instance object. */ + _newInst: function(target, inline) { + var id = target[0].id.replace(/([^A-Za-z0-9_-])/g, '\\\\$1'); // escape jQuery meta chars + return {id: id, input: target, // associated target + selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection + drawMonth: 0, drawYear: 0, // month being drawn + inline: inline, // is datepicker inline or not + dpDiv: (!inline ? this.dpDiv : // presentation div + $('
      '))}; + }, + + /* Attach the date picker to an input field. */ + _connectDatepicker: function(target, inst) { + var input = $(target); + inst.append = $([]); + inst.trigger = $([]); + if (input.hasClass(this.markerClassName)) + return; + this._attachments(input, inst); + input.addClass(this.markerClassName).keydown(this._doKeyDown). + keypress(this._doKeyPress).keyup(this._doKeyUp). + bind("setData.datepicker", function(event, key, value) { + inst.settings[key] = value; + }).bind("getData.datepicker", function(event, key) { + return this._get(inst, key); + }); + this._autoSize(inst); + $.data(target, PROP_NAME, inst); + }, + + /* Make attachments based on settings. */ + _attachments: function(input, inst) { + var appendText = this._get(inst, 'appendText'); + var isRTL = this._get(inst, 'isRTL'); + if (inst.append) + inst.append.remove(); + if (appendText) { + inst.append = $('' + appendText + ''); + input[isRTL ? 'before' : 'after'](inst.append); + } + input.unbind('focus', this._showDatepicker); + if (inst.trigger) + inst.trigger.remove(); + var showOn = this._get(inst, 'showOn'); + if (showOn == 'focus' || showOn == 'both') // pop-up date picker when in the marked field + input.focus(this._showDatepicker); + if (showOn == 'button' || showOn == 'both') { // pop-up date picker when button clicked + var buttonText = this._get(inst, 'buttonText'); + var buttonImage = this._get(inst, 'buttonImage'); + inst.trigger = $(this._get(inst, 'buttonImageOnly') ? + $('').addClass(this._triggerClass). + attr({ src: buttonImage, alt: buttonText, title: buttonText }) : + $('').addClass(this._triggerClass). + html(buttonImage == '' ? buttonText : $('').attr( + { src:buttonImage, alt:buttonText, title:buttonText }))); + input[isRTL ? 'before' : 'after'](inst.trigger); + inst.trigger.click(function() { + if ($.datepicker._datepickerShowing && $.datepicker._lastInput == input[0]) + $.datepicker._hideDatepicker(); + else + $.datepicker._showDatepicker(input[0]); + return false; + }); + } + }, + + /* Apply the maximum length for the date format. */ + _autoSize: function(inst) { + if (this._get(inst, 'autoSize') && !inst.inline) { + var date = new Date(2009, 12 - 1, 20); // Ensure double digits + var dateFormat = this._get(inst, 'dateFormat'); + if (dateFormat.match(/[DM]/)) { + var findMax = function(names) { + var max = 0; + var maxI = 0; + for (var i = 0; i < names.length; i++) { + if (names[i].length > max) { + max = names[i].length; + maxI = i; + } + } + return maxI; + }; + date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ? + 'monthNames' : 'monthNamesShort')))); + date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ? + 'dayNames' : 'dayNamesShort'))) + 20 - date.getDay()); + } + inst.input.attr('size', this._formatDate(inst, date).length); + } + }, + + /* Attach an inline date picker to a div. */ + _inlineDatepicker: function(target, inst) { + var divSpan = $(target); + if (divSpan.hasClass(this.markerClassName)) + return; + divSpan.addClass(this.markerClassName).append(inst.dpDiv). + bind("setData.datepicker", function(event, key, value){ + inst.settings[key] = value; + }).bind("getData.datepicker", function(event, key){ + return this._get(inst, key); + }); + $.data(target, PROP_NAME, inst); + this._setDate(inst, this._getDefaultDate(inst), true); + this._updateDatepicker(inst); + this._updateAlternate(inst); + inst.dpDiv.show(); + }, + + /* Pop-up the date picker in a "dialog" box. + @param input element - ignored + @param date string or Date - the initial date to display + @param onSelect function - the function to call when a date is selected + @param settings object - update the dialog date picker instance's settings (anonymous object) + @param pos int[2] - coordinates for the dialog's position within the screen or + event - with x/y coordinates or + leave empty for default (screen centre) + @return the manager object */ + _dialogDatepicker: function(input, date, onSelect, settings, pos) { + var inst = this._dialogInst; // internal instance + if (!inst) { + this.uuid += 1; + var id = 'dp' + this.uuid; + this._dialogInput = $(''); + this._dialogInput.keydown(this._doKeyDown); + $('body').append(this._dialogInput); + inst = this._dialogInst = this._newInst(this._dialogInput, false); + inst.settings = {}; + $.data(this._dialogInput[0], PROP_NAME, inst); + } + extendRemove(inst.settings, settings || {}); + date = (date && date.constructor == Date ? this._formatDate(inst, date) : date); + this._dialogInput.val(date); + + this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null); + if (!this._pos) { + var browserWidth = document.documentElement.clientWidth; + var browserHeight = document.documentElement.clientHeight; + var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft; + var scrollY = document.documentElement.scrollTop || document.body.scrollTop; + this._pos = // should use actual width/height below + [(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY]; + } + + // move input on screen for focus, but hidden behind dialog + this._dialogInput.css('left', (this._pos[0] + 20) + 'px').css('top', this._pos[1] + 'px'); + inst.settings.onSelect = onSelect; + this._inDialog = true; + this.dpDiv.addClass(this._dialogClass); + this._showDatepicker(this._dialogInput[0]); + if ($.blockUI) + $.blockUI(this.dpDiv); + $.data(this._dialogInput[0], PROP_NAME, inst); + return this; + }, + + /* Detach a datepicker from its control. + @param target element - the target input field or division or span */ + _destroyDatepicker: function(target) { + var $target = $(target); + var inst = $.data(target, PROP_NAME); + if (!$target.hasClass(this.markerClassName)) { + return; + } + var nodeName = target.nodeName.toLowerCase(); + $.removeData(target, PROP_NAME); + if (nodeName == 'input') { + inst.append.remove(); + inst.trigger.remove(); + $target.removeClass(this.markerClassName). + unbind('focus', this._showDatepicker). + unbind('keydown', this._doKeyDown). + unbind('keypress', this._doKeyPress). + unbind('keyup', this._doKeyUp); + } else if (nodeName == 'div' || nodeName == 'span') + $target.removeClass(this.markerClassName).empty(); + }, + + /* Enable the date picker to a jQuery selection. + @param target element - the target input field or division or span */ + _enableDatepicker: function(target) { + var $target = $(target); + var inst = $.data(target, PROP_NAME); + if (!$target.hasClass(this.markerClassName)) { + return; + } + var nodeName = target.nodeName.toLowerCase(); + if (nodeName == 'input') { + target.disabled = false; + inst.trigger.filter('button'). + each(function() { this.disabled = false; }).end(). + filter('img').css({opacity: '1.0', cursor: ''}); + } + else if (nodeName == 'div' || nodeName == 'span') { + var inline = $target.children('.' + this._inlineClass); + inline.children().removeClass('ui-state-disabled'); + } + this._disabledInputs = $.map(this._disabledInputs, + function(value) { return (value == target ? null : value); }); // delete entry + }, + + /* Disable the date picker to a jQuery selection. + @param target element - the target input field or division or span */ + _disableDatepicker: function(target) { + var $target = $(target); + var inst = $.data(target, PROP_NAME); + if (!$target.hasClass(this.markerClassName)) { + return; + } + var nodeName = target.nodeName.toLowerCase(); + if (nodeName == 'input') { + target.disabled = true; + inst.trigger.filter('button'). + each(function() { this.disabled = true; }).end(). + filter('img').css({opacity: '0.5', cursor: 'default'}); + } + else if (nodeName == 'div' || nodeName == 'span') { + var inline = $target.children('.' + this._inlineClass); + inline.children().addClass('ui-state-disabled'); + } + this._disabledInputs = $.map(this._disabledInputs, + function(value) { return (value == target ? null : value); }); // delete entry + this._disabledInputs[this._disabledInputs.length] = target; + }, + + /* Is the first field in a jQuery collection disabled as a datepicker? + @param target element - the target input field or division or span + @return boolean - true if disabled, false if enabled */ + _isDisabledDatepicker: function(target) { + if (!target) { + return false; + } + for (var i = 0; i < this._disabledInputs.length; i++) { + if (this._disabledInputs[i] == target) + return true; + } + return false; + }, + + /* Retrieve the instance data for the target control. + @param target element - the target input field or division or span + @return object - the associated instance data + @throws error if a jQuery problem getting data */ + _getInst: function(target) { + try { + return $.data(target, PROP_NAME); + } + catch (err) { + throw 'Missing instance data for this datepicker'; + } + }, + + /* Update or retrieve the settings for a date picker attached to an input field or division. + @param target element - the target input field or division or span + @param name object - the new settings to update or + string - the name of the setting to change or retrieve, + when retrieving also 'all' for all instance settings or + 'defaults' for all global defaults + @param value any - the new value for the setting + (omit if above is an object or to retrieve a value) */ + _optionDatepicker: function(target, name, value) { + var inst = this._getInst(target); + if (arguments.length == 2 && typeof name == 'string') { + return (name == 'defaults' ? $.extend({}, $.datepicker._defaults) : + (inst ? (name == 'all' ? $.extend({}, inst.settings) : + this._get(inst, name)) : null)); + } + var settings = name || {}; + if (typeof name == 'string') { + settings = {}; + settings[name] = value; + } + if (inst) { + if (this._curInst == inst) { + this._hideDatepicker(); + } + var date = this._getDateDatepicker(target, true); + extendRemove(inst.settings, settings); + this._attachments($(target), inst); + this._autoSize(inst); + this._setDateDatepicker(target, date); + this._updateDatepicker(inst); + } + }, + + // change method deprecated + _changeDatepicker: function(target, name, value) { + this._optionDatepicker(target, name, value); + }, + + /* Redraw the date picker attached to an input field or division. + @param target element - the target input field or division or span */ + _refreshDatepicker: function(target) { + var inst = this._getInst(target); + if (inst) { + this._updateDatepicker(inst); + } + }, + + /* Set the dates for a jQuery selection. + @param target element - the target input field or division or span + @param date Date - the new date */ + _setDateDatepicker: function(target, date) { + var inst = this._getInst(target); + if (inst) { + this._setDate(inst, date); + this._updateDatepicker(inst); + this._updateAlternate(inst); + } + }, + + /* Get the date(s) for the first entry in a jQuery selection. + @param target element - the target input field or division or span + @param noDefault boolean - true if no default date is to be used + @return Date - the current date */ + _getDateDatepicker: function(target, noDefault) { + var inst = this._getInst(target); + if (inst && !inst.inline) + this._setDateFromField(inst, noDefault); + return (inst ? this._getDate(inst) : null); + }, + + /* Handle keystrokes. */ + _doKeyDown: function(event) { + var inst = $.datepicker._getInst(event.target); + var handled = true; + var isRTL = inst.dpDiv.is('.ui-datepicker-rtl'); + inst._keyEvent = true; + if ($.datepicker._datepickerShowing) + switch (event.keyCode) { + case 9: $.datepicker._hideDatepicker(); + handled = false; + break; // hide on tab out + case 13: var sel = $('td.' + $.datepicker._dayOverClass + ':not(.' + + $.datepicker._currentClass + ')', inst.dpDiv); + if (sel[0]) + $.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]); + else + $.datepicker._hideDatepicker(); + return false; // don't submit the form + break; // select the value on enter + case 27: $.datepicker._hideDatepicker(); + break; // hide on escape + case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ? + -$.datepicker._get(inst, 'stepBigMonths') : + -$.datepicker._get(inst, 'stepMonths')), 'M'); + break; // previous month/year on page up/+ ctrl + case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ? + +$.datepicker._get(inst, 'stepBigMonths') : + +$.datepicker._get(inst, 'stepMonths')), 'M'); + break; // next month/year on page down/+ ctrl + case 35: if (event.ctrlKey || event.metaKey) $.datepicker._clearDate(event.target); + handled = event.ctrlKey || event.metaKey; + break; // clear on ctrl or command +end + case 36: if (event.ctrlKey || event.metaKey) $.datepicker._gotoToday(event.target); + handled = event.ctrlKey || event.metaKey; + break; // current on ctrl or command +home + case 37: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), 'D'); + handled = event.ctrlKey || event.metaKey; + // -1 day on ctrl or command +left + if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ? + -$.datepicker._get(inst, 'stepBigMonths') : + -$.datepicker._get(inst, 'stepMonths')), 'M'); + // next month/year on alt +left on Mac + break; + case 38: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, -7, 'D'); + handled = event.ctrlKey || event.metaKey; + break; // -1 week on ctrl or command +up + case 39: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), 'D'); + handled = event.ctrlKey || event.metaKey; + // +1 day on ctrl or command +right + if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ? + +$.datepicker._get(inst, 'stepBigMonths') : + +$.datepicker._get(inst, 'stepMonths')), 'M'); + // next month/year on alt +right + break; + case 40: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, +7, 'D'); + handled = event.ctrlKey || event.metaKey; + break; // +1 week on ctrl or command +down + default: handled = false; + } + else if (event.keyCode == 36 && event.ctrlKey) // display the date picker on ctrl+home + $.datepicker._showDatepicker(this); + else { + handled = false; + } + if (handled) { + event.preventDefault(); + event.stopPropagation(); + } + }, + + /* Filter entered characters - based on date format. */ + _doKeyPress: function(event) { + var inst = $.datepicker._getInst(event.target); + if ($.datepicker._get(inst, 'constrainInput')) { + var chars = $.datepicker._possibleChars($.datepicker._get(inst, 'dateFormat')); + var chr = String.fromCharCode(event.charCode == undefined ? event.keyCode : event.charCode); + return event.ctrlKey || event.metaKey || (chr < ' ' || !chars || chars.indexOf(chr) > -1); + } + }, + + /* Synchronise manual entry and field/alternate field. */ + _doKeyUp: function(event) { + var inst = $.datepicker._getInst(event.target); + if (inst.input.val() != inst.lastVal) { + try { + var date = $.datepicker.parseDate($.datepicker._get(inst, 'dateFormat'), + (inst.input ? inst.input.val() : null), + $.datepicker._getFormatConfig(inst)); + if (date) { // only if valid + $.datepicker._setDateFromField(inst); + $.datepicker._updateAlternate(inst); + $.datepicker._updateDatepicker(inst); + } + } + catch (event) { + $.datepicker.log(event); + } + } + return true; + }, + + /* Pop-up the date picker for a given input field. + @param input element - the input field attached to the date picker or + event - if triggered by focus */ + _showDatepicker: function(input) { + input = input.target || input; + if (input.nodeName.toLowerCase() != 'input') // find from button/image trigger + input = $('input', input.parentNode)[0]; + if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput == input) // already here + return; + var inst = $.datepicker._getInst(input); + if ($.datepicker._curInst && $.datepicker._curInst != inst) { + $.datepicker._curInst.dpDiv.stop(true, true); + } + var beforeShow = $.datepicker._get(inst, 'beforeShow'); + extendRemove(inst.settings, (beforeShow ? beforeShow.apply(input, [input, inst]) : {})); + inst.lastVal = null; + $.datepicker._lastInput = input; + $.datepicker._setDateFromField(inst); + if ($.datepicker._inDialog) // hide cursor + input.value = ''; + if (!$.datepicker._pos) { // position below input + $.datepicker._pos = $.datepicker._findPos(input); + $.datepicker._pos[1] += input.offsetHeight; // add the height + } + var isFixed = false; + $(input).parents().each(function() { + isFixed |= $(this).css('position') == 'fixed'; + return !isFixed; + }); + if (isFixed && $.browser.opera) { // correction for Opera when fixed and scrolled + $.datepicker._pos[0] -= document.documentElement.scrollLeft; + $.datepicker._pos[1] -= document.documentElement.scrollTop; + } + var offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]}; + $.datepicker._pos = null; + //to avoid flashes on Firefox + inst.dpDiv.empty(); + // determine sizing offscreen + inst.dpDiv.css({position: 'absolute', display: 'block', top: '-1000px'}); + $.datepicker._updateDatepicker(inst); + // fix width for dynamic number of date pickers + // and adjust position before showing + offset = $.datepicker._checkOffset(inst, offset, isFixed); + inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ? + 'static' : (isFixed ? 'fixed' : 'absolute')), display: 'none', + left: offset.left + 'px', top: offset.top + 'px'}); + if (!inst.inline) { + var showAnim = $.datepicker._get(inst, 'showAnim'); + var duration = $.datepicker._get(inst, 'duration'); + var postProcess = function() { + $.datepicker._datepickerShowing = true; + var cover = inst.dpDiv.find('iframe.ui-datepicker-cover'); // IE6- only + if( !! cover.length ){ + var borders = $.datepicker._getBorders(inst.dpDiv); + cover.css({left: -borders[0], top: -borders[1], + width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight()}); + } + }; + inst.dpDiv.zIndex($(input).zIndex()+1); + if ($.effects && $.effects[showAnim]) + inst.dpDiv.show(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess); + else + inst.dpDiv[showAnim || 'show']((showAnim ? duration : null), postProcess); + if (!showAnim || !duration) + postProcess(); + if (inst.input.is(':visible') && !inst.input.is(':disabled')) + inst.input.focus(); + $.datepicker._curInst = inst; + } + }, + + /* Generate the date picker content. */ + _updateDatepicker: function(inst) { + var self = this; + var borders = $.datepicker._getBorders(inst.dpDiv); + inst.dpDiv.empty().append(this._generateHTML(inst)); + var cover = inst.dpDiv.find('iframe.ui-datepicker-cover'); // IE6- only + if( !!cover.length ){ //avoid call to outerXXXX() when not in IE6 + cover.css({left: -borders[0], top: -borders[1], width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight()}) + } + inst.dpDiv.find('button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a') + .bind('mouseout', function(){ + $(this).removeClass('ui-state-hover'); + if(this.className.indexOf('ui-datepicker-prev') != -1) $(this).removeClass('ui-datepicker-prev-hover'); + if(this.className.indexOf('ui-datepicker-next') != -1) $(this).removeClass('ui-datepicker-next-hover'); + }) + .bind('mouseover', function(){ + if (!self._isDisabledDatepicker( inst.inline ? inst.dpDiv.parent()[0] : inst.input[0])) { + $(this).parents('.ui-datepicker-calendar').find('a').removeClass('ui-state-hover'); + $(this).addClass('ui-state-hover'); + if(this.className.indexOf('ui-datepicker-prev') != -1) $(this).addClass('ui-datepicker-prev-hover'); + if(this.className.indexOf('ui-datepicker-next') != -1) $(this).addClass('ui-datepicker-next-hover'); + } + }) + .end() + .find('.' + this._dayOverClass + ' a') + .trigger('mouseover') + .end(); + var numMonths = this._getNumberOfMonths(inst); + var cols = numMonths[1]; + var width = 17; + if (cols > 1) + inst.dpDiv.addClass('ui-datepicker-multi-' + cols).css('width', (width * cols) + 'em'); + else + inst.dpDiv.removeClass('ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4').width(''); + inst.dpDiv[(numMonths[0] != 1 || numMonths[1] != 1 ? 'add' : 'remove') + + 'Class']('ui-datepicker-multi'); + inst.dpDiv[(this._get(inst, 'isRTL') ? 'add' : 'remove') + + 'Class']('ui-datepicker-rtl'); + if (inst == $.datepicker._curInst && $.datepicker._datepickerShowing && inst.input && + // #6694 - don't focus the input if it's already focused + // this breaks the change event in IE + inst.input.is(':visible') && !inst.input.is(':disabled') && inst.input[0] != document.activeElement) + inst.input.focus(); + // deffered render of the years select (to avoid flashes on Firefox) + if( inst.yearshtml ){ + var origyearshtml = inst.yearshtml; + setTimeout(function(){ + //assure that inst.yearshtml didn't change. + if( origyearshtml === inst.yearshtml ){ + inst.dpDiv.find('select.ui-datepicker-year:first').replaceWith(inst.yearshtml); + } + origyearshtml = inst.yearshtml = null; + }, 0); + } + }, + + /* Retrieve the size of left and top borders for an element. + @param elem (jQuery object) the element of interest + @return (number[2]) the left and top borders */ + _getBorders: function(elem) { + var convert = function(value) { + return {thin: 1, medium: 2, thick: 3}[value] || value; + }; + return [parseFloat(convert(elem.css('border-left-width'))), + parseFloat(convert(elem.css('border-top-width')))]; + }, + + /* Check positioning to remain on screen. */ + _checkOffset: function(inst, offset, isFixed) { + var dpWidth = inst.dpDiv.outerWidth(); + var dpHeight = inst.dpDiv.outerHeight(); + var inputWidth = inst.input ? inst.input.outerWidth() : 0; + var inputHeight = inst.input ? inst.input.outerHeight() : 0; + var viewWidth = document.documentElement.clientWidth + $(document).scrollLeft(); + var viewHeight = document.documentElement.clientHeight + $(document).scrollTop(); + + offset.left -= (this._get(inst, 'isRTL') ? (dpWidth - inputWidth) : 0); + offset.left -= (isFixed && offset.left == inst.input.offset().left) ? $(document).scrollLeft() : 0; + offset.top -= (isFixed && offset.top == (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0; + + // now check if datepicker is showing outside window viewport - move to a better place if so. + offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ? + Math.abs(offset.left + dpWidth - viewWidth) : 0); + offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ? + Math.abs(dpHeight + inputHeight) : 0); + + return offset; + }, + + /* Find an object's position on the screen. */ + _findPos: function(obj) { + var inst = this._getInst(obj); + var isRTL = this._get(inst, 'isRTL'); + while (obj && (obj.type == 'hidden' || obj.nodeType != 1 || $.expr.filters.hidden(obj))) { + obj = obj[isRTL ? 'previousSibling' : 'nextSibling']; + } + var position = $(obj).offset(); + return [position.left, position.top]; + }, + + /* Hide the date picker from view. + @param input element - the input field attached to the date picker */ + _hideDatepicker: function(input) { + var inst = this._curInst; + if (!inst || (input && inst != $.data(input, PROP_NAME))) + return; + if (this._datepickerShowing) { + var showAnim = this._get(inst, 'showAnim'); + var duration = this._get(inst, 'duration'); + var postProcess = function() { + $.datepicker._tidyDialog(inst); + this._curInst = null; + }; + if ($.effects && $.effects[showAnim]) + inst.dpDiv.hide(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess); + else + inst.dpDiv[(showAnim == 'slideDown' ? 'slideUp' : + (showAnim == 'fadeIn' ? 'fadeOut' : 'hide'))]((showAnim ? duration : null), postProcess); + if (!showAnim) + postProcess(); + var onClose = this._get(inst, 'onClose'); + if (onClose) + onClose.apply((inst.input ? inst.input[0] : null), + [(inst.input ? inst.input.val() : ''), inst]); // trigger custom callback + this._datepickerShowing = false; + this._lastInput = null; + if (this._inDialog) { + this._dialogInput.css({ position: 'absolute', left: '0', top: '-100px' }); + if ($.blockUI) { + $.unblockUI(); + $('body').append(this.dpDiv); + } + } + this._inDialog = false; + } + }, + + /* Tidy up after a dialog display. */ + _tidyDialog: function(inst) { + inst.dpDiv.removeClass(this._dialogClass).unbind('.ui-datepicker-calendar'); + }, + + /* Close date picker if clicked elsewhere. */ + _checkExternalClick: function(event) { + if (!$.datepicker._curInst) + return; + var $target = $(event.target); + if ($target[0].id != $.datepicker._mainDivId && + $target.parents('#' + $.datepicker._mainDivId).length == 0 && + !$target.hasClass($.datepicker.markerClassName) && + !$target.hasClass($.datepicker._triggerClass) && + $.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI)) + $.datepicker._hideDatepicker(); + }, + + /* Adjust one of the date sub-fields. */ + _adjustDate: function(id, offset, period) { + var target = $(id); + var inst = this._getInst(target[0]); + if (this._isDisabledDatepicker(target[0])) { + return; + } + this._adjustInstDate(inst, offset + + (period == 'M' ? this._get(inst, 'showCurrentAtPos') : 0), // undo positioning + period); + this._updateDatepicker(inst); + }, + + /* Action for current link. */ + _gotoToday: function(id) { + var target = $(id); + var inst = this._getInst(target[0]); + if (this._get(inst, 'gotoCurrent') && inst.currentDay) { + inst.selectedDay = inst.currentDay; + inst.drawMonth = inst.selectedMonth = inst.currentMonth; + inst.drawYear = inst.selectedYear = inst.currentYear; + } + else { + var date = new Date(); + inst.selectedDay = date.getDate(); + inst.drawMonth = inst.selectedMonth = date.getMonth(); + inst.drawYear = inst.selectedYear = date.getFullYear(); + } + this._notifyChange(inst); + this._adjustDate(target); + }, + + /* Action for selecting a new month/year. */ + _selectMonthYear: function(id, select, period) { + var target = $(id); + var inst = this._getInst(target[0]); + inst._selectingMonthYear = false; + inst['selected' + (period == 'M' ? 'Month' : 'Year')] = + inst['draw' + (period == 'M' ? 'Month' : 'Year')] = + parseInt(select.options[select.selectedIndex].value,10); + this._notifyChange(inst); + this._adjustDate(target); + }, + + /* Restore input focus after not changing month/year. */ + _clickMonthYear: function(id) { + var target = $(id); + var inst = this._getInst(target[0]); + if (inst.input && inst._selectingMonthYear) { + setTimeout(function() { + inst.input.focus(); + }, 0); + } + inst._selectingMonthYear = !inst._selectingMonthYear; + }, + + /* Action for selecting a day. */ + _selectDay: function(id, month, year, td) { + var target = $(id); + if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) { + return; + } + var inst = this._getInst(target[0]); + inst.selectedDay = inst.currentDay = $('a', td).html(); + inst.selectedMonth = inst.currentMonth = month; + inst.selectedYear = inst.currentYear = year; + this._selectDate(id, this._formatDate(inst, + inst.currentDay, inst.currentMonth, inst.currentYear)); + }, + + /* Erase the input field and hide the date picker. */ + _clearDate: function(id) { + var target = $(id); + var inst = this._getInst(target[0]); + this._selectDate(target, ''); + }, + + /* Update the input field with the selected date. */ + _selectDate: function(id, dateStr) { + var target = $(id); + var inst = this._getInst(target[0]); + dateStr = (dateStr != null ? dateStr : this._formatDate(inst)); + if (inst.input) + inst.input.val(dateStr); + this._updateAlternate(inst); + var onSelect = this._get(inst, 'onSelect'); + if (onSelect) + onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]); // trigger custom callback + else if (inst.input) + inst.input.trigger('change'); // fire the change event + if (inst.inline) + this._updateDatepicker(inst); + else { + this._hideDatepicker(); + this._lastInput = inst.input[0]; + if (typeof(inst.input[0]) != 'object') + inst.input.focus(); // restore focus + this._lastInput = null; + } + }, + + /* Update any alternate field to synchronise with the main field. */ + _updateAlternate: function(inst) { + var altField = this._get(inst, 'altField'); + if (altField) { // update alternate field too + var altFormat = this._get(inst, 'altFormat') || this._get(inst, 'dateFormat'); + var date = this._getDate(inst); + var dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst)); + $(altField).each(function() { $(this).val(dateStr); }); + } + }, + + /* Set as beforeShowDay function to prevent selection of weekends. + @param date Date - the date to customise + @return [boolean, string] - is this date selectable?, what is its CSS class? */ + noWeekends: function(date) { + var day = date.getDay(); + return [(day > 0 && day < 6), '']; + }, + + /* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition. + @param date Date - the date to get the week for + @return number - the number of the week within the year that contains this date */ + iso8601Week: function(date) { + var checkDate = new Date(date.getTime()); + // Find Thursday of this week starting on Monday + checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)); + var time = checkDate.getTime(); + checkDate.setMonth(0); // Compare with Jan 1 + checkDate.setDate(1); + return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1; + }, + + /* Parse a string value into a date object. + See formatDate below for the possible formats. + + @param format string - the expected format of the date + @param value string - the date in the above format + @param settings Object - attributes include: + shortYearCutoff number - the cutoff year for determining the century (optional) + dayNamesShort string[7] - abbreviated names of the days from Sunday (optional) + dayNames string[7] - names of the days from Sunday (optional) + monthNamesShort string[12] - abbreviated names of the months (optional) + monthNames string[12] - names of the months (optional) + @return Date - the extracted date value or null if value is blank */ + parseDate: function (format, value, settings) { + if (format == null || value == null) + throw 'Invalid arguments'; + value = (typeof value == 'object' ? value.toString() : value + ''); + if (value == '') + return null; + var shortYearCutoff = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff; + shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff : + new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10)); + var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort; + var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames; + var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort; + var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames; + var year = -1; + var month = -1; + var day = -1; + var doy = -1; + var literal = false; + // Check whether a format character is doubled + var lookAhead = function(match) { + var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); + if (matches) + iFormat++; + return matches; + }; + // Extract a number from the string value + var getNumber = function(match) { + var isDoubled = lookAhead(match); + var size = (match == '@' ? 14 : (match == '!' ? 20 : + (match == 'y' && isDoubled ? 4 : (match == 'o' ? 3 : 2)))); + var digits = new RegExp('^\\d{1,' + size + '}'); + var num = value.substring(iValue).match(digits); + if (!num) + throw 'Missing number at position ' + iValue; + iValue += num[0].length; + return parseInt(num[0], 10); + }; + // Extract a name from the string value and convert to an index + var getName = function(match, shortNames, longNames) { + var names = (lookAhead(match) ? longNames : shortNames); + for (var i = 0; i < names.length; i++) { + if (value.substr(iValue, names[i].length).toLowerCase() == names[i].toLowerCase()) { + iValue += names[i].length; + return i + 1; + } + } + throw 'Unknown name at position ' + iValue; + }; + // Confirm that a literal character matches the string value + var checkLiteral = function() { + if (value.charAt(iValue) != format.charAt(iFormat)) + throw 'Unexpected literal at position ' + iValue; + iValue++; + }; + var iValue = 0; + for (var iFormat = 0; iFormat < format.length; iFormat++) { + if (literal) + if (format.charAt(iFormat) == "'" && !lookAhead("'")) + literal = false; + else + checkLiteral(); + else + switch (format.charAt(iFormat)) { + case 'd': + day = getNumber('d'); + break; + case 'D': + getName('D', dayNamesShort, dayNames); + break; + case 'o': + doy = getNumber('o'); + break; + case 'm': + month = getNumber('m'); + break; + case 'M': + month = getName('M', monthNamesShort, monthNames); + break; + case 'y': + year = getNumber('y'); + break; + case '@': + var date = new Date(getNumber('@')); + year = date.getFullYear(); + month = date.getMonth() + 1; + day = date.getDate(); + break; + case '!': + var date = new Date((getNumber('!') - this._ticksTo1970) / 10000); + year = date.getFullYear(); + month = date.getMonth() + 1; + day = date.getDate(); + break; + case "'": + if (lookAhead("'")) + checkLiteral(); + else + literal = true; + break; + default: + checkLiteral(); + } + } + if (year == -1) + year = new Date().getFullYear(); + else if (year < 100) + year += new Date().getFullYear() - new Date().getFullYear() % 100 + + (year <= shortYearCutoff ? 0 : -100); + if (doy > -1) { + month = 1; + day = doy; + do { + var dim = this._getDaysInMonth(year, month - 1); + if (day <= dim) + break; + month++; + day -= dim; + } while (true); + } + var date = this._daylightSavingAdjust(new Date(year, month - 1, day)); + if (date.getFullYear() != year || date.getMonth() + 1 != month || date.getDate() != day) + throw 'Invalid date'; // E.g. 31/02/* + return date; + }, + + /* Standard date formats. */ + ATOM: 'yy-mm-dd', // RFC 3339 (ISO 8601) + COOKIE: 'D, dd M yy', + ISO_8601: 'yy-mm-dd', + RFC_822: 'D, d M y', + RFC_850: 'DD, dd-M-y', + RFC_1036: 'D, d M y', + RFC_1123: 'D, d M yy', + RFC_2822: 'D, d M yy', + RSS: 'D, d M y', // RFC 822 + TICKS: '!', + TIMESTAMP: '@', + W3C: 'yy-mm-dd', // ISO 8601 + + _ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) + + Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000), + + /* Format a date object into a string value. + The format can be combinations of the following: + d - day of month (no leading zero) + dd - day of month (two digit) + o - day of year (no leading zeros) + oo - day of year (three digit) + D - day name short + DD - day name long + m - month of year (no leading zero) + mm - month of year (two digit) + M - month name short + MM - month name long + y - year (two digit) + yy - year (four digit) + @ - Unix timestamp (ms since 01/01/1970) + ! - Windows ticks (100ns since 01/01/0001) + '...' - literal text + '' - single quote + + @param format string - the desired format of the date + @param date Date - the date value to format + @param settings Object - attributes include: + dayNamesShort string[7] - abbreviated names of the days from Sunday (optional) + dayNames string[7] - names of the days from Sunday (optional) + monthNamesShort string[12] - abbreviated names of the months (optional) + monthNames string[12] - names of the months (optional) + @return string - the date in the above format */ + formatDate: function (format, date, settings) { + if (!date) + return ''; + var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort; + var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames; + var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort; + var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames; + // Check whether a format character is doubled + var lookAhead = function(match) { + var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); + if (matches) + iFormat++; + return matches; + }; + // Format a number, with leading zero if necessary + var formatNumber = function(match, value, len) { + var num = '' + value; + if (lookAhead(match)) + while (num.length < len) + num = '0' + num; + return num; + }; + // Format a name, short or long as requested + var formatName = function(match, value, shortNames, longNames) { + return (lookAhead(match) ? longNames[value] : shortNames[value]); + }; + var output = ''; + var literal = false; + if (date) + for (var iFormat = 0; iFormat < format.length; iFormat++) { + if (literal) + if (format.charAt(iFormat) == "'" && !lookAhead("'")) + literal = false; + else + output += format.charAt(iFormat); + else + switch (format.charAt(iFormat)) { + case 'd': + output += formatNumber('d', date.getDate(), 2); + break; + case 'D': + output += formatName('D', date.getDay(), dayNamesShort, dayNames); + break; + case 'o': + output += formatNumber('o', + (date.getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000, 3); + break; + case 'm': + output += formatNumber('m', date.getMonth() + 1, 2); + break; + case 'M': + output += formatName('M', date.getMonth(), monthNamesShort, monthNames); + break; + case 'y': + output += (lookAhead('y') ? date.getFullYear() : + (date.getYear() % 100 < 10 ? '0' : '') + date.getYear() % 100); + break; + case '@': + output += date.getTime(); + break; + case '!': + output += date.getTime() * 10000 + this._ticksTo1970; + break; + case "'": + if (lookAhead("'")) + output += "'"; + else + literal = true; + break; + default: + output += format.charAt(iFormat); + } + } + return output; + }, + + /* Extract all possible characters from the date format. */ + _possibleChars: function (format) { + var chars = ''; + var literal = false; + // Check whether a format character is doubled + var lookAhead = function(match) { + var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); + if (matches) + iFormat++; + return matches; + }; + for (var iFormat = 0; iFormat < format.length; iFormat++) + if (literal) + if (format.charAt(iFormat) == "'" && !lookAhead("'")) + literal = false; + else + chars += format.charAt(iFormat); + else + switch (format.charAt(iFormat)) { + case 'd': case 'm': case 'y': case '@': + chars += '0123456789'; + break; + case 'D': case 'M': + return null; // Accept anything + case "'": + if (lookAhead("'")) + chars += "'"; + else + literal = true; + break; + default: + chars += format.charAt(iFormat); + } + return chars; + }, + + /* Get a setting value, defaulting if necessary. */ + _get: function(inst, name) { + return inst.settings[name] !== undefined ? + inst.settings[name] : this._defaults[name]; + }, + + /* Parse existing date and initialise date picker. */ + _setDateFromField: function(inst, noDefault) { + if (inst.input.val() == inst.lastVal) { + return; + } + var dateFormat = this._get(inst, 'dateFormat'); + var dates = inst.lastVal = inst.input ? inst.input.val() : null; + var date, defaultDate; + date = defaultDate = this._getDefaultDate(inst); + var settings = this._getFormatConfig(inst); + try { + date = this.parseDate(dateFormat, dates, settings) || defaultDate; + } catch (event) { + this.log(event); + dates = (noDefault ? '' : dates); + } + inst.selectedDay = date.getDate(); + inst.drawMonth = inst.selectedMonth = date.getMonth(); + inst.drawYear = inst.selectedYear = date.getFullYear(); + inst.currentDay = (dates ? date.getDate() : 0); + inst.currentMonth = (dates ? date.getMonth() : 0); + inst.currentYear = (dates ? date.getFullYear() : 0); + this._adjustInstDate(inst); + }, + + /* Retrieve the default date shown on opening. */ + _getDefaultDate: function(inst) { + return this._restrictMinMax(inst, + this._determineDate(inst, this._get(inst, 'defaultDate'), new Date())); + }, + + /* A date may be specified as an exact value or a relative one. */ + _determineDate: function(inst, date, defaultDate) { + var offsetNumeric = function(offset) { + var date = new Date(); + date.setDate(date.getDate() + offset); + return date; + }; + var offsetString = function(offset) { + try { + return $.datepicker.parseDate($.datepicker._get(inst, 'dateFormat'), + offset, $.datepicker._getFormatConfig(inst)); + } + catch (e) { + // Ignore + } + var date = (offset.toLowerCase().match(/^c/) ? + $.datepicker._getDate(inst) : null) || new Date(); + var year = date.getFullYear(); + var month = date.getMonth(); + var day = date.getDate(); + var pattern = /([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g; + var matches = pattern.exec(offset); + while (matches) { + switch (matches[2] || 'd') { + case 'd' : case 'D' : + day += parseInt(matches[1],10); break; + case 'w' : case 'W' : + day += parseInt(matches[1],10) * 7; break; + case 'm' : case 'M' : + month += parseInt(matches[1],10); + day = Math.min(day, $.datepicker._getDaysInMonth(year, month)); + break; + case 'y': case 'Y' : + year += parseInt(matches[1],10); + day = Math.min(day, $.datepicker._getDaysInMonth(year, month)); + break; + } + matches = pattern.exec(offset); + } + return new Date(year, month, day); + }; + var newDate = (date == null || date === '' ? defaultDate : (typeof date == 'string' ? offsetString(date) : + (typeof date == 'number' ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime())))); + newDate = (newDate && newDate.toString() == 'Invalid Date' ? defaultDate : newDate); + if (newDate) { + newDate.setHours(0); + newDate.setMinutes(0); + newDate.setSeconds(0); + newDate.setMilliseconds(0); + } + return this._daylightSavingAdjust(newDate); + }, + + /* Handle switch to/from daylight saving. + Hours may be non-zero on daylight saving cut-over: + > 12 when midnight changeover, but then cannot generate + midnight datetime, so jump to 1AM, otherwise reset. + @param date (Date) the date to check + @return (Date) the corrected date */ + _daylightSavingAdjust: function(date) { + if (!date) return null; + date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0); + return date; + }, + + /* Set the date(s) directly. */ + _setDate: function(inst, date, noChange) { + var clear = !date; + var origMonth = inst.selectedMonth; + var origYear = inst.selectedYear; + var newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date())); + inst.selectedDay = inst.currentDay = newDate.getDate(); + inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth(); + inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear(); + if ((origMonth != inst.selectedMonth || origYear != inst.selectedYear) && !noChange) + this._notifyChange(inst); + this._adjustInstDate(inst); + if (inst.input) { + inst.input.val(clear ? '' : this._formatDate(inst)); + } + }, + + /* Retrieve the date(s) directly. */ + _getDate: function(inst) { + var startDate = (!inst.currentYear || (inst.input && inst.input.val() == '') ? null : + this._daylightSavingAdjust(new Date( + inst.currentYear, inst.currentMonth, inst.currentDay))); + return startDate; + }, + + /* Generate the HTML for the current state of the date picker. */ + _generateHTML: function(inst) { + var today = new Date(); + today = this._daylightSavingAdjust( + new Date(today.getFullYear(), today.getMonth(), today.getDate())); // clear time + var isRTL = this._get(inst, 'isRTL'); + var showButtonPanel = this._get(inst, 'showButtonPanel'); + var hideIfNoPrevNext = this._get(inst, 'hideIfNoPrevNext'); + var navigationAsDateFormat = this._get(inst, 'navigationAsDateFormat'); + var numMonths = this._getNumberOfMonths(inst); + var showCurrentAtPos = this._get(inst, 'showCurrentAtPos'); + var stepMonths = this._get(inst, 'stepMonths'); + var isMultiMonth = (numMonths[0] != 1 || numMonths[1] != 1); + var currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) : + new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); + var minDate = this._getMinMaxDate(inst, 'min'); + var maxDate = this._getMinMaxDate(inst, 'max'); + var drawMonth = inst.drawMonth - showCurrentAtPos; + var drawYear = inst.drawYear; + if (drawMonth < 0) { + drawMonth += 12; + drawYear--; + } + if (maxDate) { + var maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(), + maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate())); + maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw); + while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) { + drawMonth--; + if (drawMonth < 0) { + drawMonth = 11; + drawYear--; + } + } + } + inst.drawMonth = drawMonth; + inst.drawYear = drawYear; + var prevText = this._get(inst, 'prevText'); + prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText, + this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)), + this._getFormatConfig(inst))); + var prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ? + '' + prevText + '' : + (hideIfNoPrevNext ? '' : '' + prevText + '')); + var nextText = this._get(inst, 'nextText'); + nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText, + this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)), + this._getFormatConfig(inst))); + var next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ? + '' + nextText + '' : + (hideIfNoPrevNext ? '' : '' + nextText + '')); + var currentText = this._get(inst, 'currentText'); + var gotoDate = (this._get(inst, 'gotoCurrent') && inst.currentDay ? currentDate : today); + currentText = (!navigationAsDateFormat ? currentText : + this.formatDate(currentText, gotoDate, this._getFormatConfig(inst))); + var controls = (!inst.inline ? '' : ''); + var buttonPanel = (showButtonPanel) ? '
      ' + (isRTL ? controls : '') + + (this._isInRange(inst, gotoDate) ? '' : '') + (isRTL ? '' : controls) + '
      ' : ''; + var firstDay = parseInt(this._get(inst, 'firstDay'),10); + firstDay = (isNaN(firstDay) ? 0 : firstDay); + var showWeek = this._get(inst, 'showWeek'); + var dayNames = this._get(inst, 'dayNames'); + var dayNamesShort = this._get(inst, 'dayNamesShort'); + var dayNamesMin = this._get(inst, 'dayNamesMin'); + var monthNames = this._get(inst, 'monthNames'); + var monthNamesShort = this._get(inst, 'monthNamesShort'); + var beforeShowDay = this._get(inst, 'beforeShowDay'); + var showOtherMonths = this._get(inst, 'showOtherMonths'); + var selectOtherMonths = this._get(inst, 'selectOtherMonths'); + var calculateWeek = this._get(inst, 'calculateWeek') || this.iso8601Week; + var defaultDate = this._getDefaultDate(inst); + var html = ''; + for (var row = 0; row < numMonths[0]; row++) { + var group = ''; + for (var col = 0; col < numMonths[1]; col++) { + var selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay)); + var cornerClass = ' ui-corner-all'; + var calender = ''; + if (isMultiMonth) { + calender += '
      '; + } + calender += '
      ' + + (/all|left/.test(cornerClass) && row == 0 ? (isRTL ? next : prev) : '') + + (/all|right/.test(cornerClass) && row == 0 ? (isRTL ? prev : next) : '') + + this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate, + row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers + '
      ' + + ''; + var thead = (showWeek ? '' : ''); + for (var dow = 0; dow < 7; dow++) { // days of the week + var day = (dow + firstDay) % 7; + thead += '= 5 ? ' class="ui-datepicker-week-end"' : '') + '>' + + '' + dayNamesMin[day] + ''; + } + calender += thead + ''; + var daysInMonth = this._getDaysInMonth(drawYear, drawMonth); + if (drawYear == inst.selectedYear && drawMonth == inst.selectedMonth) + inst.selectedDay = Math.min(inst.selectedDay, daysInMonth); + var leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7; + var numRows = (isMultiMonth ? 6 : Math.ceil((leadDays + daysInMonth) / 7)); // calculate the number of rows to generate + var printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays)); + for (var dRow = 0; dRow < numRows; dRow++) { // create date picker rows + calender += ''; + var tbody = (!showWeek ? '' : ''); + for (var dow = 0; dow < 7; dow++) { // create date picker days + var daySettings = (beforeShowDay ? + beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, '']); + var otherMonth = (printDate.getMonth() != drawMonth); + var unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] || + (minDate && printDate < minDate) || (maxDate && printDate > maxDate); + tbody += ''; // display selectable date + printDate.setDate(printDate.getDate() + 1); + printDate = this._daylightSavingAdjust(printDate); + } + calender += tbody + ''; + } + drawMonth++; + if (drawMonth > 11) { + drawMonth = 0; + drawYear++; + } + calender += '
      ' + this._get(inst, 'weekHeader') + '
      ' + + this._get(inst, 'calculateWeek')(printDate) + '' + // actions + (otherMonth && !showOtherMonths ? ' ' : // display for other months + (unselectable ? '' + printDate.getDate() + '' : '' + printDate.getDate() + '')) + '
      ' + (isMultiMonth ? '
      ' + + ((numMonths[0] > 0 && col == numMonths[1]-1) ? '
      ' : '') : ''); + group += calender; + } + html += group; + } + html += buttonPanel + ($.browser.msie && parseInt($.browser.version,10) < 7 && !inst.inline ? + '' : ''); + inst._keyEvent = false; + return html; + }, + + /* Generate the month and year header. */ + _generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate, + secondary, monthNames, monthNamesShort) { + var changeMonth = this._get(inst, 'changeMonth'); + var changeYear = this._get(inst, 'changeYear'); + var showMonthAfterYear = this._get(inst, 'showMonthAfterYear'); + var html = '
      '; + var monthHtml = ''; + // month selection + if (secondary || !changeMonth) + monthHtml += '' + monthNames[drawMonth] + ''; + else { + var inMinYear = (minDate && minDate.getFullYear() == drawYear); + var inMaxYear = (maxDate && maxDate.getFullYear() == drawYear); + monthHtml += ''; + } + if (!showMonthAfterYear) + html += monthHtml + (secondary || !(changeMonth && changeYear) ? ' ' : ''); + // year selection + inst.yearshtml = ''; + if (secondary || !changeYear) + html += '' + drawYear + ''; + else { + // determine range of years to display + var years = this._get(inst, 'yearRange').split(':'); + var thisYear = new Date().getFullYear(); + var determineYear = function(value) { + var year = (value.match(/c[+-].*/) ? drawYear + parseInt(value.substring(1), 10) : + (value.match(/[+-].*/) ? thisYear + parseInt(value, 10) : + parseInt(value, 10))); + return (isNaN(year) ? thisYear : year); + }; + var year = determineYear(years[0]); + var endYear = Math.max(year, determineYear(years[1] || '')); + year = (minDate ? Math.max(year, minDate.getFullYear()) : year); + endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear); + inst.yearshtml += ''; + //when showing there is no need for later update + if( ! $.browser.mozilla ){ + html += inst.yearshtml; + inst.yearshtml = null; + } else { + // will be replaced later with inst.yearshtml + html += ''; + } + } + html += this._get(inst, 'yearSuffix'); + if (showMonthAfterYear) + html += (secondary || !(changeMonth && changeYear) ? ' ' : '') + monthHtml; + html += '
      '; // Close datepicker_header + return html; + }, + + /* Adjust one of the date sub-fields. */ + _adjustInstDate: function(inst, offset, period) { + var year = inst.drawYear + (period == 'Y' ? offset : 0); + var month = inst.drawMonth + (period == 'M' ? offset : 0); + var day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + + (period == 'D' ? offset : 0); + var date = this._restrictMinMax(inst, + this._daylightSavingAdjust(new Date(year, month, day))); + inst.selectedDay = date.getDate(); + inst.drawMonth = inst.selectedMonth = date.getMonth(); + inst.drawYear = inst.selectedYear = date.getFullYear(); + if (period == 'M' || period == 'Y') + this._notifyChange(inst); + }, + + /* Ensure a date is within any min/max bounds. */ + _restrictMinMax: function(inst, date) { + var minDate = this._getMinMaxDate(inst, 'min'); + var maxDate = this._getMinMaxDate(inst, 'max'); + var newDate = (minDate && date < minDate ? minDate : date); + newDate = (maxDate && newDate > maxDate ? maxDate : newDate); + return newDate; + }, + + /* Notify change of month/year. */ + _notifyChange: function(inst) { + var onChange = this._get(inst, 'onChangeMonthYear'); + if (onChange) + onChange.apply((inst.input ? inst.input[0] : null), + [inst.selectedYear, inst.selectedMonth + 1, inst]); + }, + + /* Determine the number of months to show. */ + _getNumberOfMonths: function(inst) { + var numMonths = this._get(inst, 'numberOfMonths'); + return (numMonths == null ? [1, 1] : (typeof numMonths == 'number' ? [1, numMonths] : numMonths)); + }, + + /* Determine the current maximum date - ensure no time components are set. */ + _getMinMaxDate: function(inst, minMax) { + return this._determineDate(inst, this._get(inst, minMax + 'Date'), null); + }, + + /* Find the number of days in a given month. */ + _getDaysInMonth: function(year, month) { + return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate(); + }, + + /* Find the day of the week of the first of a month. */ + _getFirstDayOfMonth: function(year, month) { + return new Date(year, month, 1).getDay(); + }, + + /* Determines if we should allow a "next/prev" month display change. */ + _canAdjustMonth: function(inst, offset, curYear, curMonth) { + var numMonths = this._getNumberOfMonths(inst); + var date = this._daylightSavingAdjust(new Date(curYear, + curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1)); + if (offset < 0) + date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth())); + return this._isInRange(inst, date); + }, + + /* Is the given date in the accepted range? */ + _isInRange: function(inst, date) { + var minDate = this._getMinMaxDate(inst, 'min'); + var maxDate = this._getMinMaxDate(inst, 'max'); + return ((!minDate || date.getTime() >= minDate.getTime()) && + (!maxDate || date.getTime() <= maxDate.getTime())); + }, + + /* Provide the configuration settings for formatting/parsing. */ + _getFormatConfig: function(inst) { + var shortYearCutoff = this._get(inst, 'shortYearCutoff'); + shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff : + new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10)); + return {shortYearCutoff: shortYearCutoff, + dayNamesShort: this._get(inst, 'dayNamesShort'), dayNames: this._get(inst, 'dayNames'), + monthNamesShort: this._get(inst, 'monthNamesShort'), monthNames: this._get(inst, 'monthNames')}; + }, + + /* Format the given date for display. */ + _formatDate: function(inst, day, month, year) { + if (!day) { + inst.currentDay = inst.selectedDay; + inst.currentMonth = inst.selectedMonth; + inst.currentYear = inst.selectedYear; + } + var date = (day ? (typeof day == 'object' ? day : + this._daylightSavingAdjust(new Date(year, month, day))) : + this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); + return this.formatDate(this._get(inst, 'dateFormat'), date, this._getFormatConfig(inst)); + } +}); + +/* jQuery extend now ignores nulls! */ +function extendRemove(target, props) { + $.extend(target, props); + for (var name in props) + if (props[name] == null || props[name] == undefined) + target[name] = props[name]; + return target; +}; + +/* Determine whether an object is an array. */ +function isArray(a) { + return (a && (($.browser.safari && typeof a == 'object' && a.length) || + (a.constructor && a.constructor.toString().match(/\Array\(\)/)))); +}; + +/* Invoke the datepicker functionality. + @param options string - a command, optionally followed by additional parameters or + Object - settings for attaching new datepicker functionality + @return jQuery object */ +$.fn.datepicker = function(options){ + + /* Verify an empty collection wasn't passed - Fixes #6976 */ + if ( !this.length ) { + return this; + } + + /* Initialise the date picker. */ + if (!$.datepicker.initialized) { + $(document).mousedown($.datepicker._checkExternalClick). + find('body').append($.datepicker.dpDiv); + $.datepicker.initialized = true; + } + + var otherArgs = Array.prototype.slice.call(arguments, 1); + if (typeof options == 'string' && (options == 'isDisabled' || options == 'getDate' || options == 'widget')) + return $.datepicker['_' + options + 'Datepicker']. + apply($.datepicker, [this[0]].concat(otherArgs)); + if (options == 'option' && arguments.length == 2 && typeof arguments[1] == 'string') + return $.datepicker['_' + options + 'Datepicker']. + apply($.datepicker, [this[0]].concat(otherArgs)); + return this.each(function() { + typeof options == 'string' ? + $.datepicker['_' + options + 'Datepicker']. + apply($.datepicker, [this].concat(otherArgs)) : + $.datepicker._attachDatepicker(this, options); + }); +}; + +$.datepicker = new Datepicker(); // singleton instance +$.datepicker.initialized = false; +$.datepicker.uuid = new Date().getTime(); +$.datepicker.version = "1.8.10"; + +// Workaround for #4055 +// Add another global to avoid noConflict issues with inline event handlers +window['DP_jQuery_' + dpuuid] = $; + +})(jQuery); +/* + * jQuery UI Progressbar 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Progressbar + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function( $, undefined ) { + +$.widget( "ui.progressbar", { + options: { + value: 0, + max: 100 + }, + + min: 0, + + _create: function() { + this.element + .addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" ) + .attr({ + role: "progressbar", + "aria-valuemin": this.min, + "aria-valuemax": this.options.max, + "aria-valuenow": this._value() + }); + + this.valueDiv = $( "
      " ) + .appendTo( this.element ); + + this.oldValue = this._value(); + this._refreshValue(); + }, + + destroy: function() { + this.element + .removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" ) + .removeAttr( "role" ) + .removeAttr( "aria-valuemin" ) + .removeAttr( "aria-valuemax" ) + .removeAttr( "aria-valuenow" ); + + this.valueDiv.remove(); + + $.Widget.prototype.destroy.apply( this, arguments ); + }, + + value: function( newValue ) { + if ( newValue === undefined ) { + return this._value(); + } + + this._setOption( "value", newValue ); + return this; + }, + + _setOption: function( key, value ) { + if ( key === "value" ) { + this.options.value = value; + this._refreshValue(); + if ( this._value() === this.options.max ) { + this._trigger( "complete" ); + } + } + + $.Widget.prototype._setOption.apply( this, arguments ); + }, + + _value: function() { + var val = this.options.value; + // normalize invalid value + if ( typeof val !== "number" ) { + val = 0; + } + return Math.min( this.options.max, Math.max( this.min, val ) ); + }, + + _percentage: function() { + return 100 * this._value() / this.options.max; + }, + + _refreshValue: function() { + var value = this.value(); + var percentage = this._percentage(); + + if ( this.oldValue !== value ) { + this.oldValue = value; + this._trigger( "change" ); + } + + this.valueDiv + .toggleClass( "ui-corner-right", value === this.options.max ) + .width( percentage.toFixed(0) + "%" ); + this.element.attr( "aria-valuenow", value ); + } +}); + +$.extend( $.ui.progressbar, { + version: "1.8.10" +}); + +})( jQuery ); +/* + * jQuery UI Effects 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/ + */ +;jQuery.effects || (function($, undefined) { + +$.effects = {}; + + + +/******************************************************************************/ +/****************************** COLOR ANIMATIONS ******************************/ +/******************************************************************************/ + +// override the animation for color styles +$.each(['backgroundColor', 'borderBottomColor', 'borderLeftColor', + 'borderRightColor', 'borderTopColor', 'borderColor', 'color', 'outlineColor'], +function(i, attr) { + $.fx.step[attr] = function(fx) { + if (!fx.colorInit) { + fx.start = getColor(fx.elem, attr); + fx.end = getRGB(fx.end); + fx.colorInit = true; + } + + fx.elem.style[attr] = 'rgb(' + + Math.max(Math.min(parseInt((fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0], 10), 255), 0) + ',' + + Math.max(Math.min(parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1], 10), 255), 0) + ',' + + Math.max(Math.min(parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2], 10), 255), 0) + ')'; + }; +}); + +// Color Conversion functions from highlightFade +// By Blair Mitchelmore +// http://jquery.offput.ca/highlightFade/ + +// Parse strings looking for color tuples [255,255,255] +function getRGB(color) { + var result; + + // Check if we're already dealing with an array of colors + if ( color && color.constructor == Array && color.length == 3 ) + return color; + + // Look for rgb(num,num,num) + if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color)) + return [parseInt(result[1],10), parseInt(result[2],10), parseInt(result[3],10)]; + + // Look for rgb(num%,num%,num%) + if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color)) + return [parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55]; + + // Look for #a0b1c2 + if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color)) + return [parseInt(result[1],16), parseInt(result[2],16), parseInt(result[3],16)]; + + // Look for #fff + if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color)) + return [parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16)]; + + // Look for rgba(0, 0, 0, 0) == transparent in Safari 3 + if (result = /rgba\(0, 0, 0, 0\)/.exec(color)) + return colors['transparent']; + + // Otherwise, we're most likely dealing with a named color + return colors[$.trim(color).toLowerCase()]; +} + +function getColor(elem, attr) { + var color; + + do { + color = $.curCSS(elem, attr); + + // Keep going until we find an element that has color, or we hit the body + if ( color != '' && color != 'transparent' || $.nodeName(elem, "body") ) + break; + + attr = "backgroundColor"; + } while ( elem = elem.parentNode ); + + return getRGB(color); +}; + +// Some named colors to work with +// From Interface by Stefan Petre +// http://interface.eyecon.ro/ + +var colors = { + aqua:[0,255,255], + azure:[240,255,255], + beige:[245,245,220], + black:[0,0,0], + blue:[0,0,255], + brown:[165,42,42], + cyan:[0,255,255], + darkblue:[0,0,139], + darkcyan:[0,139,139], + darkgrey:[169,169,169], + darkgreen:[0,100,0], + darkkhaki:[189,183,107], + darkmagenta:[139,0,139], + darkolivegreen:[85,107,47], + darkorange:[255,140,0], + darkorchid:[153,50,204], + darkred:[139,0,0], + darksalmon:[233,150,122], + darkviolet:[148,0,211], + fuchsia:[255,0,255], + gold:[255,215,0], + green:[0,128,0], + indigo:[75,0,130], + khaki:[240,230,140], + lightblue:[173,216,230], + lightcyan:[224,255,255], + lightgreen:[144,238,144], + lightgrey:[211,211,211], + lightpink:[255,182,193], + lightyellow:[255,255,224], + lime:[0,255,0], + magenta:[255,0,255], + maroon:[128,0,0], + navy:[0,0,128], + olive:[128,128,0], + orange:[255,165,0], + pink:[255,192,203], + purple:[128,0,128], + violet:[128,0,128], + red:[255,0,0], + silver:[192,192,192], + white:[255,255,255], + yellow:[255,255,0], + transparent: [255,255,255] +}; + + + +/******************************************************************************/ +/****************************** CLASS ANIMATIONS ******************************/ +/******************************************************************************/ + +var classAnimationActions = ['add', 'remove', 'toggle'], + shorthandStyles = { + border: 1, + borderBottom: 1, + borderColor: 1, + borderLeft: 1, + borderRight: 1, + borderTop: 1, + borderWidth: 1, + margin: 1, + padding: 1 + }; + +function getElementStyles() { + var style = document.defaultView + ? document.defaultView.getComputedStyle(this, null) + : this.currentStyle, + newStyle = {}, + key, + camelCase; + + // webkit enumerates style porperties + if (style && style.length && style[0] && style[style[0]]) { + var len = style.length; + while (len--) { + key = style[len]; + if (typeof style[key] == 'string') { + camelCase = key.replace(/\-(\w)/g, function(all, letter){ + return letter.toUpperCase(); + }); + newStyle[camelCase] = style[key]; + } + } + } else { + for (key in style) { + if (typeof style[key] === 'string') { + newStyle[key] = style[key]; + } + } + } + + return newStyle; +} + +function filterStyles(styles) { + var name, value; + for (name in styles) { + value = styles[name]; + if ( + // ignore null and undefined values + value == null || + // ignore functions (when does this occur?) + $.isFunction(value) || + // shorthand styles that need to be expanded + name in shorthandStyles || + // ignore scrollbars (break in IE) + (/scrollbar/).test(name) || + + // only colors or values that can be converted to numbers + (!(/color/i).test(name) && isNaN(parseFloat(value))) + ) { + delete styles[name]; + } + } + + return styles; +} + +function styleDifference(oldStyle, newStyle) { + var diff = { _: 0 }, // http://dev.jquery.com/ticket/5459 + name; + + for (name in newStyle) { + if (oldStyle[name] != newStyle[name]) { + diff[name] = newStyle[name]; + } + } + + return diff; +} + +$.effects.animateClass = function(value, duration, easing, callback) { + if ($.isFunction(easing)) { + callback = easing; + easing = null; + } + + return this.queue('fx', function() { + var that = $(this), + originalStyleAttr = that.attr('style') || ' ', + originalStyle = filterStyles(getElementStyles.call(this)), + newStyle, + className = that.attr('className'); + + $.each(classAnimationActions, function(i, action) { + if (value[action]) { + that[action + 'Class'](value[action]); + } + }); + newStyle = filterStyles(getElementStyles.call(this)); + that.attr('className', className); + + that.animate(styleDifference(originalStyle, newStyle), duration, easing, function() { + $.each(classAnimationActions, function(i, action) { + if (value[action]) { that[action + 'Class'](value[action]); } + }); + // work around bug in IE by clearing the cssText before setting it + if (typeof that.attr('style') == 'object') { + that.attr('style').cssText = ''; + that.attr('style').cssText = originalStyleAttr; + } else { + that.attr('style', originalStyleAttr); + } + if (callback) { callback.apply(this, arguments); } + }); + + // $.animate adds a function to the end of the queue + // but we want it at the front + var queue = $.queue(this), + anim = queue.splice(queue.length - 1, 1)[0]; + queue.splice(1, 0, anim); + $.dequeue(this); + }); +}; + +$.fn.extend({ + _addClass: $.fn.addClass, + addClass: function(classNames, speed, easing, callback) { + return speed ? $.effects.animateClass.apply(this, [{ add: classNames },speed,easing,callback]) : this._addClass(classNames); + }, + + _removeClass: $.fn.removeClass, + removeClass: function(classNames,speed,easing,callback) { + return speed ? $.effects.animateClass.apply(this, [{ remove: classNames },speed,easing,callback]) : this._removeClass(classNames); + }, + + _toggleClass: $.fn.toggleClass, + toggleClass: function(classNames, force, speed, easing, callback) { + if ( typeof force == "boolean" || force === undefined ) { + if ( !speed ) { + // without speed parameter; + return this._toggleClass(classNames, force); + } else { + return $.effects.animateClass.apply(this, [(force?{add:classNames}:{remove:classNames}),speed,easing,callback]); + } + } else { + // without switch parameter; + return $.effects.animateClass.apply(this, [{ toggle: classNames },force,speed,easing]); + } + }, + + switchClass: function(remove,add,speed,easing,callback) { + return $.effects.animateClass.apply(this, [{ add: add, remove: remove },speed,easing,callback]); + } +}); + + + +/******************************************************************************/ +/*********************************** EFFECTS **********************************/ +/******************************************************************************/ + +$.extend($.effects, { + version: "1.8.10", + + // Saves a set of properties in a data storage + save: function(element, set) { + for(var i=0; i < set.length; i++) { + if(set[i] !== null) element.data("ec.storage."+set[i], element[0].style[set[i]]); + } + }, + + // Restores a set of previously saved properties from a data storage + restore: function(element, set) { + for(var i=0; i < set.length; i++) { + if(set[i] !== null) element.css(set[i], element.data("ec.storage."+set[i])); + } + }, + + setMode: function(el, mode) { + if (mode == 'toggle') mode = el.is(':hidden') ? 'show' : 'hide'; // Set for toggle + return mode; + }, + + getBaseline: function(origin, original) { // Translates a [top,left] array into a baseline value + // this should be a little more flexible in the future to handle a string & hash + var y, x; + switch (origin[0]) { + case 'top': y = 0; break; + case 'middle': y = 0.5; break; + case 'bottom': y = 1; break; + default: y = origin[0] / original.height; + }; + switch (origin[1]) { + case 'left': x = 0; break; + case 'center': x = 0.5; break; + case 'right': x = 1; break; + default: x = origin[1] / original.width; + }; + return {x: x, y: y}; + }, + + // Wraps the element around a wrapper that copies position properties + createWrapper: function(element) { + + // if the element is already wrapped, return it + if (element.parent().is('.ui-effects-wrapper')) { + return element.parent(); + } + + // wrap the element + var props = { + width: element.outerWidth(true), + height: element.outerHeight(true), + 'float': element.css('float') + }, + wrapper = $('
      ') + .addClass('ui-effects-wrapper') + .css({ + fontSize: '100%', + background: 'transparent', + border: 'none', + margin: 0, + padding: 0 + }); + + element.wrap(wrapper); + wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually loose the reference to the wrapped element + + // transfer positioning properties to the wrapper + if (element.css('position') == 'static') { + wrapper.css({ position: 'relative' }); + element.css({ position: 'relative' }); + } else { + $.extend(props, { + position: element.css('position'), + zIndex: element.css('z-index') + }); + $.each(['top', 'left', 'bottom', 'right'], function(i, pos) { + props[pos] = element.css(pos); + if (isNaN(parseInt(props[pos], 10))) { + props[pos] = 'auto'; + } + }); + element.css({position: 'relative', top: 0, left: 0, right: 'auto', bottom: 'auto' }); + } + + return wrapper.css(props).show(); + }, + + removeWrapper: function(element) { + if (element.parent().is('.ui-effects-wrapper')) + return element.parent().replaceWith(element); + return element; + }, + + setTransition: function(element, list, factor, value) { + value = value || {}; + $.each(list, function(i, x){ + unit = element.cssUnit(x); + if (unit[0] > 0) value[x] = unit[0] * factor + unit[1]; + }); + return value; + } +}); + + +function _normalizeArguments(effect, options, speed, callback) { + // shift params for method overloading + if (typeof effect == 'object') { + callback = options; + speed = null; + options = effect; + effect = options.effect; + } + if ($.isFunction(options)) { + callback = options; + speed = null; + options = {}; + } + if (typeof options == 'number' || $.fx.speeds[options]) { + callback = speed; + speed = options; + options = {}; + } + if ($.isFunction(speed)) { + callback = speed; + speed = null; + } + + options = options || {}; + + speed = speed || options.duration; + speed = $.fx.off ? 0 : typeof speed == 'number' + ? speed : speed in $.fx.speeds ? $.fx.speeds[speed] : $.fx.speeds._default; + + callback = callback || options.complete; + + return [effect, options, speed, callback]; +} + +function standardSpeed( speed ) { + // valid standard speeds + if ( !speed || typeof speed === "number" || $.fx.speeds[ speed ] ) { + return true; + } + + // invalid strings - treat as "normal" speed + if ( typeof speed === "string" && !$.effects[ speed ] ) { + return true; + } + + return false; +} + +$.fn.extend({ + effect: function(effect, options, speed, callback) { + var args = _normalizeArguments.apply(this, arguments), + // TODO: make effects take actual parameters instead of a hash + args2 = { + options: args[1], + duration: args[2], + callback: args[3] + }, + mode = args2.options.mode, + effectMethod = $.effects[effect]; + + if ( $.fx.off || !effectMethod ) { + // delegate to the original method (e.g., .show()) if possible + if ( mode ) { + return this[ mode ]( args2.duration, args2.callback ); + } else { + return this.each(function() { + if ( args2.callback ) { + args2.callback.call( this ); + } + }); + } + } + + return effectMethod.call(this, args2); + }, + + _show: $.fn.show, + show: function(speed) { + if ( standardSpeed( speed ) ) { + return this._show.apply(this, arguments); + } else { + var args = _normalizeArguments.apply(this, arguments); + args[1].mode = 'show'; + return this.effect.apply(this, args); + } + }, + + _hide: $.fn.hide, + hide: function(speed) { + if ( standardSpeed( speed ) ) { + return this._hide.apply(this, arguments); + } else { + var args = _normalizeArguments.apply(this, arguments); + args[1].mode = 'hide'; + return this.effect.apply(this, args); + } + }, + + // jQuery core overloads toggle and creates _toggle + __toggle: $.fn.toggle, + toggle: function(speed) { + if ( standardSpeed( speed ) || typeof speed === "boolean" || $.isFunction( speed ) ) { + return this.__toggle.apply(this, arguments); + } else { + var args = _normalizeArguments.apply(this, arguments); + args[1].mode = 'toggle'; + return this.effect.apply(this, args); + } + }, + + // helper functions + cssUnit: function(key) { + var style = this.css(key), val = []; + $.each( ['em','px','%','pt'], function(i, unit){ + if(style.indexOf(unit) > 0) + val = [parseFloat(style), unit]; + }); + return val; + } +}); + + + +/******************************************************************************/ +/*********************************** EASING ***********************************/ +/******************************************************************************/ + +/* + * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/ + * + * Uses the built in easing capabilities added In jQuery 1.1 + * to offer multiple easing options + * + * TERMS OF USE - jQuery Easing + * + * Open source under the BSD License. + * + * Copyright 2008 George McGinley Smith + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * Neither the name of the author nor the names of contributors may be used to endorse + * or promote products derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + +// t: current time, b: begInnIng value, c: change In value, d: duration +$.easing.jswing = $.easing.swing; + +$.extend($.easing, +{ + def: 'easeOutQuad', + swing: function (x, t, b, c, d) { + //alert($.easing.default); + return $.easing[$.easing.def](x, t, b, c, d); + }, + easeInQuad: function (x, t, b, c, d) { + return c*(t/=d)*t + b; + }, + easeOutQuad: function (x, t, b, c, d) { + return -c *(t/=d)*(t-2) + b; + }, + easeInOutQuad: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return c/2*t*t + b; + return -c/2 * ((--t)*(t-2) - 1) + b; + }, + easeInCubic: function (x, t, b, c, d) { + return c*(t/=d)*t*t + b; + }, + easeOutCubic: function (x, t, b, c, d) { + return c*((t=t/d-1)*t*t + 1) + b; + }, + easeInOutCubic: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return c/2*t*t*t + b; + return c/2*((t-=2)*t*t + 2) + b; + }, + easeInQuart: function (x, t, b, c, d) { + return c*(t/=d)*t*t*t + b; + }, + easeOutQuart: function (x, t, b, c, d) { + return -c * ((t=t/d-1)*t*t*t - 1) + b; + }, + easeInOutQuart: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return c/2*t*t*t*t + b; + return -c/2 * ((t-=2)*t*t*t - 2) + b; + }, + easeInQuint: function (x, t, b, c, d) { + return c*(t/=d)*t*t*t*t + b; + }, + easeOutQuint: function (x, t, b, c, d) { + return c*((t=t/d-1)*t*t*t*t + 1) + b; + }, + easeInOutQuint: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b; + return c/2*((t-=2)*t*t*t*t + 2) + b; + }, + easeInSine: function (x, t, b, c, d) { + return -c * Math.cos(t/d * (Math.PI/2)) + c + b; + }, + easeOutSine: function (x, t, b, c, d) { + return c * Math.sin(t/d * (Math.PI/2)) + b; + }, + easeInOutSine: function (x, t, b, c, d) { + return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b; + }, + easeInExpo: function (x, t, b, c, d) { + return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b; + }, + easeOutExpo: function (x, t, b, c, d) { + return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b; + }, + easeInOutExpo: function (x, t, b, c, d) { + if (t==0) return b; + if (t==d) return b+c; + if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b; + return c/2 * (-Math.pow(2, -10 * --t) + 2) + b; + }, + easeInCirc: function (x, t, b, c, d) { + return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b; + }, + easeOutCirc: function (x, t, b, c, d) { + return c * Math.sqrt(1 - (t=t/d-1)*t) + b; + }, + easeInOutCirc: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b; + return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b; + }, + easeInElastic: function (x, t, b, c, d) { + var s=1.70158;var p=0;var a=c; + if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; + if (a < Math.abs(c)) { a=c; var s=p/4; } + else var s = p/(2*Math.PI) * Math.asin (c/a); + return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; + }, + easeOutElastic: function (x, t, b, c, d) { + var s=1.70158;var p=0;var a=c; + if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; + if (a < Math.abs(c)) { a=c; var s=p/4; } + else var s = p/(2*Math.PI) * Math.asin (c/a); + return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b; + }, + easeInOutElastic: function (x, t, b, c, d) { + var s=1.70158;var p=0;var a=c; + if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5); + if (a < Math.abs(c)) { a=c; var s=p/4; } + else var s = p/(2*Math.PI) * Math.asin (c/a); + if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; + return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b; + }, + easeInBack: function (x, t, b, c, d, s) { + if (s == undefined) s = 1.70158; + return c*(t/=d)*t*((s+1)*t - s) + b; + }, + easeOutBack: function (x, t, b, c, d, s) { + if (s == undefined) s = 1.70158; + return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b; + }, + easeInOutBack: function (x, t, b, c, d, s) { + if (s == undefined) s = 1.70158; + if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b; + return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b; + }, + easeInBounce: function (x, t, b, c, d) { + return c - $.easing.easeOutBounce (x, d-t, 0, c, d) + b; + }, + easeOutBounce: function (x, t, b, c, d) { + if ((t/=d) < (1/2.75)) { + return c*(7.5625*t*t) + b; + } else if (t < (2/2.75)) { + return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b; + } else if (t < (2.5/2.75)) { + return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b; + } else { + return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b; + } + }, + easeInOutBounce: function (x, t, b, c, d) { + if (t < d/2) return $.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b; + return $.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b; + } +}); + +/* + * + * TERMS OF USE - EASING EQUATIONS + * + * Open source under the BSD License. + * + * Copyright 2001 Robert Penner + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * Neither the name of the author nor the names of contributors may be used to endorse + * or promote products derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +})(jQuery); +/* + * jQuery UI Effects Blind 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Blind + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.blind = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this), props = ['position','top','bottom','left','right']; + + // Set options + var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode + var direction = o.options.direction || 'vertical'; // Default direction + + // Adjust + $.effects.save(el, props); el.show(); // Save & Show + var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper + var ref = (direction == 'vertical') ? 'height' : 'width'; + var distance = (direction == 'vertical') ? wrapper.height() : wrapper.width(); + if(mode == 'show') wrapper.css(ref, 0); // Shift + + // Animation + var animation = {}; + animation[ref] = mode == 'show' ? distance : 0; + + // Animate + wrapper.animate(animation, o.duration, o.options.easing, function() { + if(mode == 'hide') el.hide(); // Hide + $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(el[0], arguments); // Callback + el.dequeue(); + }); + + }); + +}; + +})(jQuery); +/* + * jQuery UI Effects Bounce 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Bounce + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.bounce = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this), props = ['position','top','bottom','left','right']; + + // Set options + var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode + var direction = o.options.direction || 'up'; // Default direction + var distance = o.options.distance || 20; // Default distance + var times = o.options.times || 5; // Default # of times + var speed = o.duration || 250; // Default speed per bounce + if (/show|hide/.test(mode)) props.push('opacity'); // Avoid touching opacity to prevent clearType and PNG issues in IE + + // Adjust + $.effects.save(el, props); el.show(); // Save & Show + $.effects.createWrapper(el); // Create Wrapper + var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left'; + var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg'; + var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) / 3 : el.outerWidth({margin:true}) / 3); + if (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos' ? -distance : distance); // Shift + if (mode == 'hide') distance = distance / (times * 2); + if (mode != 'hide') times--; + + // Animate + if (mode == 'show') { // Show Bounce + var animation = {opacity: 1}; + animation[ref] = (motion == 'pos' ? '+=' : '-=') + distance; + el.animate(animation, speed / 2, o.options.easing); + distance = distance / 2; + times--; + }; + for (var i = 0; i < times; i++) { // Bounces + var animation1 = {}, animation2 = {}; + animation1[ref] = (motion == 'pos' ? '-=' : '+=') + distance; + animation2[ref] = (motion == 'pos' ? '+=' : '-=') + distance; + el.animate(animation1, speed / 2, o.options.easing).animate(animation2, speed / 2, o.options.easing); + distance = (mode == 'hide') ? distance * 2 : distance / 2; + }; + if (mode == 'hide') { // Last Bounce + var animation = {opacity: 0}; + animation[ref] = (motion == 'pos' ? '-=' : '+=') + distance; + el.animate(animation, speed / 2, o.options.easing, function(){ + el.hide(); // Hide + $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(this, arguments); // Callback + }); + } else { + var animation1 = {}, animation2 = {}; + animation1[ref] = (motion == 'pos' ? '-=' : '+=') + distance; + animation2[ref] = (motion == 'pos' ? '+=' : '-=') + distance; + el.animate(animation1, speed / 2, o.options.easing).animate(animation2, speed / 2, o.options.easing, function(){ + $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(this, arguments); // Callback + }); + }; + el.queue('fx', function() { el.dequeue(); }); + el.dequeue(); + }); + +}; + +})(jQuery); +/* + * jQuery UI Effects Clip 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Clip + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.clip = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this), props = ['position','top','bottom','left','right','height','width']; + + // Set options + var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode + var direction = o.options.direction || 'vertical'; // Default direction + + // Adjust + $.effects.save(el, props); el.show(); // Save & Show + var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper + var animate = el[0].tagName == 'IMG' ? wrapper : el; + var ref = { + size: (direction == 'vertical') ? 'height' : 'width', + position: (direction == 'vertical') ? 'top' : 'left' + }; + var distance = (direction == 'vertical') ? animate.height() : animate.width(); + if(mode == 'show') { animate.css(ref.size, 0); animate.css(ref.position, distance / 2); } // Shift + + // Animation + var animation = {}; + animation[ref.size] = mode == 'show' ? distance : 0; + animation[ref.position] = mode == 'show' ? 0 : distance / 2; + + // Animate + animate.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() { + if(mode == 'hide') el.hide(); // Hide + $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(el[0], arguments); // Callback + el.dequeue(); + }}); + + }); + +}; + +})(jQuery); +/* + * jQuery UI Effects Drop 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Drop + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.drop = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this), props = ['position','top','bottom','left','right','opacity']; + + // Set options + var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode + var direction = o.options.direction || 'left'; // Default Direction + + // Adjust + $.effects.save(el, props); el.show(); // Save & Show + $.effects.createWrapper(el); // Create Wrapper + var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left'; + var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg'; + var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) / 2 : el.outerWidth({margin:true}) / 2); + if (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos' ? -distance : distance); // Shift + + // Animation + var animation = {opacity: mode == 'show' ? 1 : 0}; + animation[ref] = (mode == 'show' ? (motion == 'pos' ? '+=' : '-=') : (motion == 'pos' ? '-=' : '+=')) + distance; + + // Animate + el.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() { + if(mode == 'hide') el.hide(); // Hide + $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(this, arguments); // Callback + el.dequeue(); + }}); + + }); + +}; + +})(jQuery); +/* + * jQuery UI Effects Explode 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Explode + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.explode = function(o) { + + return this.queue(function() { + + var rows = o.options.pieces ? Math.round(Math.sqrt(o.options.pieces)) : 3; + var cells = o.options.pieces ? Math.round(Math.sqrt(o.options.pieces)) : 3; + + o.options.mode = o.options.mode == 'toggle' ? ($(this).is(':visible') ? 'hide' : 'show') : o.options.mode; + var el = $(this).show().css('visibility', 'hidden'); + var offset = el.offset(); + + //Substract the margins - not fixing the problem yet. + offset.top -= parseInt(el.css("marginTop"),10) || 0; + offset.left -= parseInt(el.css("marginLeft"),10) || 0; + + var width = el.outerWidth(true); + var height = el.outerHeight(true); + + for(var i=0;i') + .css({ + position: 'absolute', + visibility: 'visible', + left: -j*(width/cells), + top: -i*(height/rows) + }) + .parent() + .addClass('ui-effects-explode') + .css({ + position: 'absolute', + overflow: 'hidden', + width: width/cells, + height: height/rows, + left: offset.left + j*(width/cells) + (o.options.mode == 'show' ? (j-Math.floor(cells/2))*(width/cells) : 0), + top: offset.top + i*(height/rows) + (o.options.mode == 'show' ? (i-Math.floor(rows/2))*(height/rows) : 0), + opacity: o.options.mode == 'show' ? 0 : 1 + }).animate({ + left: offset.left + j*(width/cells) + (o.options.mode == 'show' ? 0 : (j-Math.floor(cells/2))*(width/cells)), + top: offset.top + i*(height/rows) + (o.options.mode == 'show' ? 0 : (i-Math.floor(rows/2))*(height/rows)), + opacity: o.options.mode == 'show' ? 1 : 0 + }, o.duration || 500); + } + } + + // Set a timeout, to call the callback approx. when the other animations have finished + setTimeout(function() { + + o.options.mode == 'show' ? el.css({ visibility: 'visible' }) : el.css({ visibility: 'visible' }).hide(); + if(o.callback) o.callback.apply(el[0]); // Callback + el.dequeue(); + + $('div.ui-effects-explode').remove(); + + }, o.duration || 500); + + + }); + +}; + +})(jQuery); +/* + * jQuery UI Effects Fade 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Fade + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.fade = function(o) { + return this.queue(function() { + var elem = $(this), + mode = $.effects.setMode(elem, o.options.mode || 'hide'); + + elem.animate({ opacity: mode }, { + queue: false, + duration: o.duration, + easing: o.options.easing, + complete: function() { + (o.callback && o.callback.apply(this, arguments)); + elem.dequeue(); + } + }); + }); +}; + +})(jQuery); +/* + * jQuery UI Effects Fold 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Fold + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.fold = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this), props = ['position','top','bottom','left','right']; + + // Set options + var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode + var size = o.options.size || 15; // Default fold size + var horizFirst = !(!o.options.horizFirst); // Ensure a boolean value + var duration = o.duration ? o.duration / 2 : $.fx.speeds._default / 2; + + // Adjust + $.effects.save(el, props); el.show(); // Save & Show + var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper + var widthFirst = ((mode == 'show') != horizFirst); + var ref = widthFirst ? ['width', 'height'] : ['height', 'width']; + var distance = widthFirst ? [wrapper.width(), wrapper.height()] : [wrapper.height(), wrapper.width()]; + var percent = /([0-9]+)%/.exec(size); + if(percent) size = parseInt(percent[1],10) / 100 * distance[mode == 'hide' ? 0 : 1]; + if(mode == 'show') wrapper.css(horizFirst ? {height: 0, width: size} : {height: size, width: 0}); // Shift + + // Animation + var animation1 = {}, animation2 = {}; + animation1[ref[0]] = mode == 'show' ? distance[0] : size; + animation2[ref[1]] = mode == 'show' ? distance[1] : 0; + + // Animate + wrapper.animate(animation1, duration, o.options.easing) + .animate(animation2, duration, o.options.easing, function() { + if(mode == 'hide') el.hide(); // Hide + $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(el[0], arguments); // Callback + el.dequeue(); + }); + + }); + +}; + +})(jQuery); +/* + * jQuery UI Effects Highlight 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Highlight + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.highlight = function(o) { + return this.queue(function() { + var elem = $(this), + props = ['backgroundImage', 'backgroundColor', 'opacity'], + mode = $.effects.setMode(elem, o.options.mode || 'show'), + animation = { + backgroundColor: elem.css('backgroundColor') + }; + + if (mode == 'hide') { + animation.opacity = 0; + } + + $.effects.save(elem, props); + elem + .show() + .css({ + backgroundImage: 'none', + backgroundColor: o.options.color || '#ffff99' + }) + .animate(animation, { + queue: false, + duration: o.duration, + easing: o.options.easing, + complete: function() { + (mode == 'hide' && elem.hide()); + $.effects.restore(elem, props); + (mode == 'show' && !$.support.opacity && this.style.removeAttribute('filter')); + (o.callback && o.callback.apply(this, arguments)); + elem.dequeue(); + } + }); + }); +}; + +})(jQuery); +/* + * jQuery UI Effects Pulsate 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Pulsate + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.pulsate = function(o) { + return this.queue(function() { + var elem = $(this), + mode = $.effects.setMode(elem, o.options.mode || 'show'); + times = ((o.options.times || 5) * 2) - 1; + duration = o.duration ? o.duration / 2 : $.fx.speeds._default / 2, + isVisible = elem.is(':visible'), + animateTo = 0; + + if (!isVisible) { + elem.css('opacity', 0).show(); + animateTo = 1; + } + + if ((mode == 'hide' && isVisible) || (mode == 'show' && !isVisible)) { + times--; + } + + for (var i = 0; i < times; i++) { + elem.animate({ opacity: animateTo }, duration, o.options.easing); + animateTo = (animateTo + 1) % 2; + } + + elem.animate({ opacity: animateTo }, duration, o.options.easing, function() { + if (animateTo == 0) { + elem.hide(); + } + (o.callback && o.callback.apply(this, arguments)); + }); + + elem + .queue('fx', function() { elem.dequeue(); }) + .dequeue(); + }); +}; + +})(jQuery); +/* + * jQuery UI Effects Scale 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Scale + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.puff = function(o) { + return this.queue(function() { + var elem = $(this), + mode = $.effects.setMode(elem, o.options.mode || 'hide'), + percent = parseInt(o.options.percent, 10) || 150, + factor = percent / 100, + original = { height: elem.height(), width: elem.width() }; + + $.extend(o.options, { + fade: true, + mode: mode, + percent: mode == 'hide' ? percent : 100, + from: mode == 'hide' + ? original + : { + height: original.height * factor, + width: original.width * factor + } + }); + + elem.effect('scale', o.options, o.duration, o.callback); + elem.dequeue(); + }); +}; + +$.effects.scale = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this); + + // Set options + var options = $.extend(true, {}, o.options); + var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode + var percent = parseInt(o.options.percent,10) || (parseInt(o.options.percent,10) == 0 ? 0 : (mode == 'hide' ? 0 : 100)); // Set default scaling percent + var direction = o.options.direction || 'both'; // Set default axis + var origin = o.options.origin; // The origin of the scaling + if (mode != 'effect') { // Set default origin and restore for show/hide + options.origin = origin || ['middle','center']; + options.restore = true; + } + var original = {height: el.height(), width: el.width()}; // Save original + el.from = o.options.from || (mode == 'show' ? {height: 0, width: 0} : original); // Default from state + + // Adjust + var factor = { // Set scaling factor + y: direction != 'horizontal' ? (percent / 100) : 1, + x: direction != 'vertical' ? (percent / 100) : 1 + }; + el.to = {height: original.height * factor.y, width: original.width * factor.x}; // Set to state + + if (o.options.fade) { // Fade option to support puff + if (mode == 'show') {el.from.opacity = 0; el.to.opacity = 1;}; + if (mode == 'hide') {el.from.opacity = 1; el.to.opacity = 0;}; + }; + + // Animation + options.from = el.from; options.to = el.to; options.mode = mode; + + // Animate + el.effect('size', options, o.duration, o.callback); + el.dequeue(); + }); + +}; + +$.effects.size = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this), props = ['position','top','bottom','left','right','width','height','overflow','opacity']; + var props1 = ['position','top','bottom','left','right','overflow','opacity']; // Always restore + var props2 = ['width','height','overflow']; // Copy for children + var cProps = ['fontSize']; + var vProps = ['borderTopWidth', 'borderBottomWidth', 'paddingTop', 'paddingBottom']; + var hProps = ['borderLeftWidth', 'borderRightWidth', 'paddingLeft', 'paddingRight']; + + // Set options + var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode + var restore = o.options.restore || false; // Default restore + var scale = o.options.scale || 'both'; // Default scale mode + var origin = o.options.origin; // The origin of the sizing + var original = {height: el.height(), width: el.width()}; // Save original + el.from = o.options.from || original; // Default from state + el.to = o.options.to || original; // Default to state + // Adjust + if (origin) { // Calculate baseline shifts + var baseline = $.effects.getBaseline(origin, original); + el.from.top = (original.height - el.from.height) * baseline.y; + el.from.left = (original.width - el.from.width) * baseline.x; + el.to.top = (original.height - el.to.height) * baseline.y; + el.to.left = (original.width - el.to.width) * baseline.x; + }; + var factor = { // Set scaling factor + from: {y: el.from.height / original.height, x: el.from.width / original.width}, + to: {y: el.to.height / original.height, x: el.to.width / original.width} + }; + if (scale == 'box' || scale == 'both') { // Scale the css box + if (factor.from.y != factor.to.y) { // Vertical props scaling + props = props.concat(vProps); + el.from = $.effects.setTransition(el, vProps, factor.from.y, el.from); + el.to = $.effects.setTransition(el, vProps, factor.to.y, el.to); + }; + if (factor.from.x != factor.to.x) { // Horizontal props scaling + props = props.concat(hProps); + el.from = $.effects.setTransition(el, hProps, factor.from.x, el.from); + el.to = $.effects.setTransition(el, hProps, factor.to.x, el.to); + }; + }; + if (scale == 'content' || scale == 'both') { // Scale the content + if (factor.from.y != factor.to.y) { // Vertical props scaling + props = props.concat(cProps); + el.from = $.effects.setTransition(el, cProps, factor.from.y, el.from); + el.to = $.effects.setTransition(el, cProps, factor.to.y, el.to); + }; + }; + $.effects.save(el, restore ? props : props1); el.show(); // Save & Show + $.effects.createWrapper(el); // Create Wrapper + el.css('overflow','hidden').css(el.from); // Shift + + // Animate + if (scale == 'content' || scale == 'both') { // Scale the children + vProps = vProps.concat(['marginTop','marginBottom']).concat(cProps); // Add margins/font-size + hProps = hProps.concat(['marginLeft','marginRight']); // Add margins + props2 = props.concat(vProps).concat(hProps); // Concat + el.find("*[width]").each(function(){ + child = $(this); + if (restore) $.effects.save(child, props2); + var c_original = {height: child.height(), width: child.width()}; // Save original + child.from = {height: c_original.height * factor.from.y, width: c_original.width * factor.from.x}; + child.to = {height: c_original.height * factor.to.y, width: c_original.width * factor.to.x}; + if (factor.from.y != factor.to.y) { // Vertical props scaling + child.from = $.effects.setTransition(child, vProps, factor.from.y, child.from); + child.to = $.effects.setTransition(child, vProps, factor.to.y, child.to); + }; + if (factor.from.x != factor.to.x) { // Horizontal props scaling + child.from = $.effects.setTransition(child, hProps, factor.from.x, child.from); + child.to = $.effects.setTransition(child, hProps, factor.to.x, child.to); + }; + child.css(child.from); // Shift children + child.animate(child.to, o.duration, o.options.easing, function(){ + if (restore) $.effects.restore(child, props2); // Restore children + }); // Animate children + }); + }; + + // Animate + el.animate(el.to, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() { + if (el.to.opacity === 0) { + el.css('opacity', el.from.opacity); + } + if(mode == 'hide') el.hide(); // Hide + $.effects.restore(el, restore ? props : props1); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(this, arguments); // Callback + el.dequeue(); + }}); + + }); + +}; + +})(jQuery); +/* + * jQuery UI Effects Shake 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Shake + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.shake = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this), props = ['position','top','bottom','left','right']; + + // Set options + var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode + var direction = o.options.direction || 'left'; // Default direction + var distance = o.options.distance || 20; // Default distance + var times = o.options.times || 3; // Default # of times + var speed = o.duration || o.options.duration || 140; // Default speed per shake + + // Adjust + $.effects.save(el, props); el.show(); // Save & Show + $.effects.createWrapper(el); // Create Wrapper + var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left'; + var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg'; + + // Animation + var animation = {}, animation1 = {}, animation2 = {}; + animation[ref] = (motion == 'pos' ? '-=' : '+=') + distance; + animation1[ref] = (motion == 'pos' ? '+=' : '-=') + distance * 2; + animation2[ref] = (motion == 'pos' ? '-=' : '+=') + distance * 2; + + // Animate + el.animate(animation, speed, o.options.easing); + for (var i = 1; i < times; i++) { // Shakes + el.animate(animation1, speed, o.options.easing).animate(animation2, speed, o.options.easing); + }; + el.animate(animation1, speed, o.options.easing). + animate(animation, speed / 2, o.options.easing, function(){ // Last shake + $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(this, arguments); // Callback + }); + el.queue('fx', function() { el.dequeue(); }); + el.dequeue(); + }); + +}; + +})(jQuery); +/* + * jQuery UI Effects Slide 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Slide + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.slide = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this), props = ['position','top','bottom','left','right']; + + // Set options + var mode = $.effects.setMode(el, o.options.mode || 'show'); // Set Mode + var direction = o.options.direction || 'left'; // Default Direction + + // Adjust + $.effects.save(el, props); el.show(); // Save & Show + $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper + var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left'; + var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg'; + var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) : el.outerWidth({margin:true})); + if (mode == 'show') el.css(ref, motion == 'pos' ? (isNaN(distance) ? "-" + distance : -distance) : distance); // Shift + + // Animation + var animation = {}; + animation[ref] = (mode == 'show' ? (motion == 'pos' ? '+=' : '-=') : (motion == 'pos' ? '-=' : '+=')) + distance; + + // Animate + el.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() { + if(mode == 'hide') el.hide(); // Hide + $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(this, arguments); // Callback + el.dequeue(); + }}); + + }); + +}; + +})(jQuery); +/* + * jQuery UI Effects Transfer 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Transfer + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.transfer = function(o) { + return this.queue(function() { + var elem = $(this), + target = $(o.options.to), + endPosition = target.offset(), + animation = { + top: endPosition.top, + left: endPosition.left, + height: target.innerHeight(), + width: target.innerWidth() + }, + startPosition = elem.offset(), + transfer = $('
      ') + .appendTo(document.body) + .addClass(o.options.className) + .css({ + top: startPosition.top, + left: startPosition.left, + height: elem.innerHeight(), + width: elem.innerWidth(), + position: 'absolute' + }) + .animate(animation, o.duration, o.options.easing, function() { + transfer.remove(); + (o.callback && o.callback.apply(elem[0], arguments)); + elem.dequeue(); + }); + }); +}; + +})(jQuery); diff --git a/js/ui/jquery.effects.blind.js b/js/ui/jquery.effects.blind.js new file mode 100644 index 0000000000..6c40f7241c --- /dev/null +++ b/js/ui/jquery.effects.blind.js @@ -0,0 +1,49 @@ +/* + * jQuery UI Effects Blind 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Blind + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.blind = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this), props = ['position','top','bottom','left','right']; + + // Set options + var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode + var direction = o.options.direction || 'vertical'; // Default direction + + // Adjust + $.effects.save(el, props); el.show(); // Save & Show + var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper + var ref = (direction == 'vertical') ? 'height' : 'width'; + var distance = (direction == 'vertical') ? wrapper.height() : wrapper.width(); + if(mode == 'show') wrapper.css(ref, 0); // Shift + + // Animation + var animation = {}; + animation[ref] = mode == 'show' ? distance : 0; + + // Animate + wrapper.animate(animation, o.duration, o.options.easing, function() { + if(mode == 'hide') el.hide(); // Hide + $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(el[0], arguments); // Callback + el.dequeue(); + }); + + }); + +}; + +})(jQuery); diff --git a/js/ui/jquery.effects.bounce.js b/js/ui/jquery.effects.bounce.js new file mode 100644 index 0000000000..6994641bc8 --- /dev/null +++ b/js/ui/jquery.effects.bounce.js @@ -0,0 +1,78 @@ +/* + * jQuery UI Effects Bounce 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Bounce + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.bounce = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this), props = ['position','top','bottom','left','right']; + + // Set options + var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode + var direction = o.options.direction || 'up'; // Default direction + var distance = o.options.distance || 20; // Default distance + var times = o.options.times || 5; // Default # of times + var speed = o.duration || 250; // Default speed per bounce + if (/show|hide/.test(mode)) props.push('opacity'); // Avoid touching opacity to prevent clearType and PNG issues in IE + + // Adjust + $.effects.save(el, props); el.show(); // Save & Show + $.effects.createWrapper(el); // Create Wrapper + var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left'; + var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg'; + var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) / 3 : el.outerWidth({margin:true}) / 3); + if (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos' ? -distance : distance); // Shift + if (mode == 'hide') distance = distance / (times * 2); + if (mode != 'hide') times--; + + // Animate + if (mode == 'show') { // Show Bounce + var animation = {opacity: 1}; + animation[ref] = (motion == 'pos' ? '+=' : '-=') + distance; + el.animate(animation, speed / 2, o.options.easing); + distance = distance / 2; + times--; + }; + for (var i = 0; i < times; i++) { // Bounces + var animation1 = {}, animation2 = {}; + animation1[ref] = (motion == 'pos' ? '-=' : '+=') + distance; + animation2[ref] = (motion == 'pos' ? '+=' : '-=') + distance; + el.animate(animation1, speed / 2, o.options.easing).animate(animation2, speed / 2, o.options.easing); + distance = (mode == 'hide') ? distance * 2 : distance / 2; + }; + if (mode == 'hide') { // Last Bounce + var animation = {opacity: 0}; + animation[ref] = (motion == 'pos' ? '-=' : '+=') + distance; + el.animate(animation, speed / 2, o.options.easing, function(){ + el.hide(); // Hide + $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(this, arguments); // Callback + }); + } else { + var animation1 = {}, animation2 = {}; + animation1[ref] = (motion == 'pos' ? '-=' : '+=') + distance; + animation2[ref] = (motion == 'pos' ? '+=' : '-=') + distance; + el.animate(animation1, speed / 2, o.options.easing).animate(animation2, speed / 2, o.options.easing, function(){ + $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(this, arguments); // Callback + }); + }; + el.queue('fx', function() { el.dequeue(); }); + el.dequeue(); + }); + +}; + +})(jQuery); diff --git a/js/ui/jquery.effects.clip.js b/js/ui/jquery.effects.clip.js new file mode 100644 index 0000000000..41004e5428 --- /dev/null +++ b/js/ui/jquery.effects.clip.js @@ -0,0 +1,54 @@ +/* + * jQuery UI Effects Clip 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Clip + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.clip = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this), props = ['position','top','bottom','left','right','height','width']; + + // Set options + var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode + var direction = o.options.direction || 'vertical'; // Default direction + + // Adjust + $.effects.save(el, props); el.show(); // Save & Show + var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper + var animate = el[0].tagName == 'IMG' ? wrapper : el; + var ref = { + size: (direction == 'vertical') ? 'height' : 'width', + position: (direction == 'vertical') ? 'top' : 'left' + }; + var distance = (direction == 'vertical') ? animate.height() : animate.width(); + if(mode == 'show') { animate.css(ref.size, 0); animate.css(ref.position, distance / 2); } // Shift + + // Animation + var animation = {}; + animation[ref.size] = mode == 'show' ? distance : 0; + animation[ref.position] = mode == 'show' ? 0 : distance / 2; + + // Animate + animate.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() { + if(mode == 'hide') el.hide(); // Hide + $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(el[0], arguments); // Callback + el.dequeue(); + }}); + + }); + +}; + +})(jQuery); diff --git a/js/ui/jquery.effects.core.js b/js/ui/jquery.effects.core.js new file mode 100644 index 0000000000..9f0ba0533c --- /dev/null +++ b/js/ui/jquery.effects.core.js @@ -0,0 +1,747 @@ +/* + * jQuery UI Effects 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/ + */ +;jQuery.effects || (function($, undefined) { + +$.effects = {}; + + + +/******************************************************************************/ +/****************************** COLOR ANIMATIONS ******************************/ +/******************************************************************************/ + +// override the animation for color styles +$.each(['backgroundColor', 'borderBottomColor', 'borderLeftColor', + 'borderRightColor', 'borderTopColor', 'borderColor', 'color', 'outlineColor'], +function(i, attr) { + $.fx.step[attr] = function(fx) { + if (!fx.colorInit) { + fx.start = getColor(fx.elem, attr); + fx.end = getRGB(fx.end); + fx.colorInit = true; + } + + fx.elem.style[attr] = 'rgb(' + + Math.max(Math.min(parseInt((fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0], 10), 255), 0) + ',' + + Math.max(Math.min(parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1], 10), 255), 0) + ',' + + Math.max(Math.min(parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2], 10), 255), 0) + ')'; + }; +}); + +// Color Conversion functions from highlightFade +// By Blair Mitchelmore +// http://jquery.offput.ca/highlightFade/ + +// Parse strings looking for color tuples [255,255,255] +function getRGB(color) { + var result; + + // Check if we're already dealing with an array of colors + if ( color && color.constructor == Array && color.length == 3 ) + return color; + + // Look for rgb(num,num,num) + if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color)) + return [parseInt(result[1],10), parseInt(result[2],10), parseInt(result[3],10)]; + + // Look for rgb(num%,num%,num%) + if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color)) + return [parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55]; + + // Look for #a0b1c2 + if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color)) + return [parseInt(result[1],16), parseInt(result[2],16), parseInt(result[3],16)]; + + // Look for #fff + if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color)) + return [parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16)]; + + // Look for rgba(0, 0, 0, 0) == transparent in Safari 3 + if (result = /rgba\(0, 0, 0, 0\)/.exec(color)) + return colors['transparent']; + + // Otherwise, we're most likely dealing with a named color + return colors[$.trim(color).toLowerCase()]; +} + +function getColor(elem, attr) { + var color; + + do { + color = $.curCSS(elem, attr); + + // Keep going until we find an element that has color, or we hit the body + if ( color != '' && color != 'transparent' || $.nodeName(elem, "body") ) + break; + + attr = "backgroundColor"; + } while ( elem = elem.parentNode ); + + return getRGB(color); +}; + +// Some named colors to work with +// From Interface by Stefan Petre +// http://interface.eyecon.ro/ + +var colors = { + aqua:[0,255,255], + azure:[240,255,255], + beige:[245,245,220], + black:[0,0,0], + blue:[0,0,255], + brown:[165,42,42], + cyan:[0,255,255], + darkblue:[0,0,139], + darkcyan:[0,139,139], + darkgrey:[169,169,169], + darkgreen:[0,100,0], + darkkhaki:[189,183,107], + darkmagenta:[139,0,139], + darkolivegreen:[85,107,47], + darkorange:[255,140,0], + darkorchid:[153,50,204], + darkred:[139,0,0], + darksalmon:[233,150,122], + darkviolet:[148,0,211], + fuchsia:[255,0,255], + gold:[255,215,0], + green:[0,128,0], + indigo:[75,0,130], + khaki:[240,230,140], + lightblue:[173,216,230], + lightcyan:[224,255,255], + lightgreen:[144,238,144], + lightgrey:[211,211,211], + lightpink:[255,182,193], + lightyellow:[255,255,224], + lime:[0,255,0], + magenta:[255,0,255], + maroon:[128,0,0], + navy:[0,0,128], + olive:[128,128,0], + orange:[255,165,0], + pink:[255,192,203], + purple:[128,0,128], + violet:[128,0,128], + red:[255,0,0], + silver:[192,192,192], + white:[255,255,255], + yellow:[255,255,0], + transparent: [255,255,255] +}; + + + +/******************************************************************************/ +/****************************** CLASS ANIMATIONS ******************************/ +/******************************************************************************/ + +var classAnimationActions = ['add', 'remove', 'toggle'], + shorthandStyles = { + border: 1, + borderBottom: 1, + borderColor: 1, + borderLeft: 1, + borderRight: 1, + borderTop: 1, + borderWidth: 1, + margin: 1, + padding: 1 + }; + +function getElementStyles() { + var style = document.defaultView + ? document.defaultView.getComputedStyle(this, null) + : this.currentStyle, + newStyle = {}, + key, + camelCase; + + // webkit enumerates style porperties + if (style && style.length && style[0] && style[style[0]]) { + var len = style.length; + while (len--) { + key = style[len]; + if (typeof style[key] == 'string') { + camelCase = key.replace(/\-(\w)/g, function(all, letter){ + return letter.toUpperCase(); + }); + newStyle[camelCase] = style[key]; + } + } + } else { + for (key in style) { + if (typeof style[key] === 'string') { + newStyle[key] = style[key]; + } + } + } + + return newStyle; +} + +function filterStyles(styles) { + var name, value; + for (name in styles) { + value = styles[name]; + if ( + // ignore null and undefined values + value == null || + // ignore functions (when does this occur?) + $.isFunction(value) || + // shorthand styles that need to be expanded + name in shorthandStyles || + // ignore scrollbars (break in IE) + (/scrollbar/).test(name) || + + // only colors or values that can be converted to numbers + (!(/color/i).test(name) && isNaN(parseFloat(value))) + ) { + delete styles[name]; + } + } + + return styles; +} + +function styleDifference(oldStyle, newStyle) { + var diff = { _: 0 }, // http://dev.jquery.com/ticket/5459 + name; + + for (name in newStyle) { + if (oldStyle[name] != newStyle[name]) { + diff[name] = newStyle[name]; + } + } + + return diff; +} + +$.effects.animateClass = function(value, duration, easing, callback) { + if ($.isFunction(easing)) { + callback = easing; + easing = null; + } + + return this.queue('fx', function() { + var that = $(this), + originalStyleAttr = that.attr('style') || ' ', + originalStyle = filterStyles(getElementStyles.call(this)), + newStyle, + className = that.attr('className'); + + $.each(classAnimationActions, function(i, action) { + if (value[action]) { + that[action + 'Class'](value[action]); + } + }); + newStyle = filterStyles(getElementStyles.call(this)); + that.attr('className', className); + + that.animate(styleDifference(originalStyle, newStyle), duration, easing, function() { + $.each(classAnimationActions, function(i, action) { + if (value[action]) { that[action + 'Class'](value[action]); } + }); + // work around bug in IE by clearing the cssText before setting it + if (typeof that.attr('style') == 'object') { + that.attr('style').cssText = ''; + that.attr('style').cssText = originalStyleAttr; + } else { + that.attr('style', originalStyleAttr); + } + if (callback) { callback.apply(this, arguments); } + }); + + // $.animate adds a function to the end of the queue + // but we want it at the front + var queue = $.queue(this), + anim = queue.splice(queue.length - 1, 1)[0]; + queue.splice(1, 0, anim); + $.dequeue(this); + }); +}; + +$.fn.extend({ + _addClass: $.fn.addClass, + addClass: function(classNames, speed, easing, callback) { + return speed ? $.effects.animateClass.apply(this, [{ add: classNames },speed,easing,callback]) : this._addClass(classNames); + }, + + _removeClass: $.fn.removeClass, + removeClass: function(classNames,speed,easing,callback) { + return speed ? $.effects.animateClass.apply(this, [{ remove: classNames },speed,easing,callback]) : this._removeClass(classNames); + }, + + _toggleClass: $.fn.toggleClass, + toggleClass: function(classNames, force, speed, easing, callback) { + if ( typeof force == "boolean" || force === undefined ) { + if ( !speed ) { + // without speed parameter; + return this._toggleClass(classNames, force); + } else { + return $.effects.animateClass.apply(this, [(force?{add:classNames}:{remove:classNames}),speed,easing,callback]); + } + } else { + // without switch parameter; + return $.effects.animateClass.apply(this, [{ toggle: classNames },force,speed,easing]); + } + }, + + switchClass: function(remove,add,speed,easing,callback) { + return $.effects.animateClass.apply(this, [{ add: add, remove: remove },speed,easing,callback]); + } +}); + + + +/******************************************************************************/ +/*********************************** EFFECTS **********************************/ +/******************************************************************************/ + +$.extend($.effects, { + version: "1.8.10", + + // Saves a set of properties in a data storage + save: function(element, set) { + for(var i=0; i < set.length; i++) { + if(set[i] !== null) element.data("ec.storage."+set[i], element[0].style[set[i]]); + } + }, + + // Restores a set of previously saved properties from a data storage + restore: function(element, set) { + for(var i=0; i < set.length; i++) { + if(set[i] !== null) element.css(set[i], element.data("ec.storage."+set[i])); + } + }, + + setMode: function(el, mode) { + if (mode == 'toggle') mode = el.is(':hidden') ? 'show' : 'hide'; // Set for toggle + return mode; + }, + + getBaseline: function(origin, original) { // Translates a [top,left] array into a baseline value + // this should be a little more flexible in the future to handle a string & hash + var y, x; + switch (origin[0]) { + case 'top': y = 0; break; + case 'middle': y = 0.5; break; + case 'bottom': y = 1; break; + default: y = origin[0] / original.height; + }; + switch (origin[1]) { + case 'left': x = 0; break; + case 'center': x = 0.5; break; + case 'right': x = 1; break; + default: x = origin[1] / original.width; + }; + return {x: x, y: y}; + }, + + // Wraps the element around a wrapper that copies position properties + createWrapper: function(element) { + + // if the element is already wrapped, return it + if (element.parent().is('.ui-effects-wrapper')) { + return element.parent(); + } + + // wrap the element + var props = { + width: element.outerWidth(true), + height: element.outerHeight(true), + 'float': element.css('float') + }, + wrapper = $('
      ') + .addClass('ui-effects-wrapper') + .css({ + fontSize: '100%', + background: 'transparent', + border: 'none', + margin: 0, + padding: 0 + }); + + element.wrap(wrapper); + wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually loose the reference to the wrapped element + + // transfer positioning properties to the wrapper + if (element.css('position') == 'static') { + wrapper.css({ position: 'relative' }); + element.css({ position: 'relative' }); + } else { + $.extend(props, { + position: element.css('position'), + zIndex: element.css('z-index') + }); + $.each(['top', 'left', 'bottom', 'right'], function(i, pos) { + props[pos] = element.css(pos); + if (isNaN(parseInt(props[pos], 10))) { + props[pos] = 'auto'; + } + }); + element.css({position: 'relative', top: 0, left: 0, right: 'auto', bottom: 'auto' }); + } + + return wrapper.css(props).show(); + }, + + removeWrapper: function(element) { + if (element.parent().is('.ui-effects-wrapper')) + return element.parent().replaceWith(element); + return element; + }, + + setTransition: function(element, list, factor, value) { + value = value || {}; + $.each(list, function(i, x){ + unit = element.cssUnit(x); + if (unit[0] > 0) value[x] = unit[0] * factor + unit[1]; + }); + return value; + } +}); + + +function _normalizeArguments(effect, options, speed, callback) { + // shift params for method overloading + if (typeof effect == 'object') { + callback = options; + speed = null; + options = effect; + effect = options.effect; + } + if ($.isFunction(options)) { + callback = options; + speed = null; + options = {}; + } + if (typeof options == 'number' || $.fx.speeds[options]) { + callback = speed; + speed = options; + options = {}; + } + if ($.isFunction(speed)) { + callback = speed; + speed = null; + } + + options = options || {}; + + speed = speed || options.duration; + speed = $.fx.off ? 0 : typeof speed == 'number' + ? speed : speed in $.fx.speeds ? $.fx.speeds[speed] : $.fx.speeds._default; + + callback = callback || options.complete; + + return [effect, options, speed, callback]; +} + +function standardSpeed( speed ) { + // valid standard speeds + if ( !speed || typeof speed === "number" || $.fx.speeds[ speed ] ) { + return true; + } + + // invalid strings - treat as "normal" speed + if ( typeof speed === "string" && !$.effects[ speed ] ) { + return true; + } + + return false; +} + +$.fn.extend({ + effect: function(effect, options, speed, callback) { + var args = _normalizeArguments.apply(this, arguments), + // TODO: make effects take actual parameters instead of a hash + args2 = { + options: args[1], + duration: args[2], + callback: args[3] + }, + mode = args2.options.mode, + effectMethod = $.effects[effect]; + + if ( $.fx.off || !effectMethod ) { + // delegate to the original method (e.g., .show()) if possible + if ( mode ) { + return this[ mode ]( args2.duration, args2.callback ); + } else { + return this.each(function() { + if ( args2.callback ) { + args2.callback.call( this ); + } + }); + } + } + + return effectMethod.call(this, args2); + }, + + _show: $.fn.show, + show: function(speed) { + if ( standardSpeed( speed ) ) { + return this._show.apply(this, arguments); + } else { + var args = _normalizeArguments.apply(this, arguments); + args[1].mode = 'show'; + return this.effect.apply(this, args); + } + }, + + _hide: $.fn.hide, + hide: function(speed) { + if ( standardSpeed( speed ) ) { + return this._hide.apply(this, arguments); + } else { + var args = _normalizeArguments.apply(this, arguments); + args[1].mode = 'hide'; + return this.effect.apply(this, args); + } + }, + + // jQuery core overloads toggle and creates _toggle + __toggle: $.fn.toggle, + toggle: function(speed) { + if ( standardSpeed( speed ) || typeof speed === "boolean" || $.isFunction( speed ) ) { + return this.__toggle.apply(this, arguments); + } else { + var args = _normalizeArguments.apply(this, arguments); + args[1].mode = 'toggle'; + return this.effect.apply(this, args); + } + }, + + // helper functions + cssUnit: function(key) { + var style = this.css(key), val = []; + $.each( ['em','px','%','pt'], function(i, unit){ + if(style.indexOf(unit) > 0) + val = [parseFloat(style), unit]; + }); + return val; + } +}); + + + +/******************************************************************************/ +/*********************************** EASING ***********************************/ +/******************************************************************************/ + +/* + * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/ + * + * Uses the built in easing capabilities added In jQuery 1.1 + * to offer multiple easing options + * + * TERMS OF USE - jQuery Easing + * + * Open source under the BSD License. + * + * Copyright 2008 George McGinley Smith + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * Neither the name of the author nor the names of contributors may be used to endorse + * or promote products derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + +// t: current time, b: begInnIng value, c: change In value, d: duration +$.easing.jswing = $.easing.swing; + +$.extend($.easing, +{ + def: 'easeOutQuad', + swing: function (x, t, b, c, d) { + //alert($.easing.default); + return $.easing[$.easing.def](x, t, b, c, d); + }, + easeInQuad: function (x, t, b, c, d) { + return c*(t/=d)*t + b; + }, + easeOutQuad: function (x, t, b, c, d) { + return -c *(t/=d)*(t-2) + b; + }, + easeInOutQuad: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return c/2*t*t + b; + return -c/2 * ((--t)*(t-2) - 1) + b; + }, + easeInCubic: function (x, t, b, c, d) { + return c*(t/=d)*t*t + b; + }, + easeOutCubic: function (x, t, b, c, d) { + return c*((t=t/d-1)*t*t + 1) + b; + }, + easeInOutCubic: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return c/2*t*t*t + b; + return c/2*((t-=2)*t*t + 2) + b; + }, + easeInQuart: function (x, t, b, c, d) { + return c*(t/=d)*t*t*t + b; + }, + easeOutQuart: function (x, t, b, c, d) { + return -c * ((t=t/d-1)*t*t*t - 1) + b; + }, + easeInOutQuart: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return c/2*t*t*t*t + b; + return -c/2 * ((t-=2)*t*t*t - 2) + b; + }, + easeInQuint: function (x, t, b, c, d) { + return c*(t/=d)*t*t*t*t + b; + }, + easeOutQuint: function (x, t, b, c, d) { + return c*((t=t/d-1)*t*t*t*t + 1) + b; + }, + easeInOutQuint: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b; + return c/2*((t-=2)*t*t*t*t + 2) + b; + }, + easeInSine: function (x, t, b, c, d) { + return -c * Math.cos(t/d * (Math.PI/2)) + c + b; + }, + easeOutSine: function (x, t, b, c, d) { + return c * Math.sin(t/d * (Math.PI/2)) + b; + }, + easeInOutSine: function (x, t, b, c, d) { + return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b; + }, + easeInExpo: function (x, t, b, c, d) { + return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b; + }, + easeOutExpo: function (x, t, b, c, d) { + return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b; + }, + easeInOutExpo: function (x, t, b, c, d) { + if (t==0) return b; + if (t==d) return b+c; + if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b; + return c/2 * (-Math.pow(2, -10 * --t) + 2) + b; + }, + easeInCirc: function (x, t, b, c, d) { + return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b; + }, + easeOutCirc: function (x, t, b, c, d) { + return c * Math.sqrt(1 - (t=t/d-1)*t) + b; + }, + easeInOutCirc: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b; + return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b; + }, + easeInElastic: function (x, t, b, c, d) { + var s=1.70158;var p=0;var a=c; + if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; + if (a < Math.abs(c)) { a=c; var s=p/4; } + else var s = p/(2*Math.PI) * Math.asin (c/a); + return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; + }, + easeOutElastic: function (x, t, b, c, d) { + var s=1.70158;var p=0;var a=c; + if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; + if (a < Math.abs(c)) { a=c; var s=p/4; } + else var s = p/(2*Math.PI) * Math.asin (c/a); + return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b; + }, + easeInOutElastic: function (x, t, b, c, d) { + var s=1.70158;var p=0;var a=c; + if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5); + if (a < Math.abs(c)) { a=c; var s=p/4; } + else var s = p/(2*Math.PI) * Math.asin (c/a); + if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; + return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b; + }, + easeInBack: function (x, t, b, c, d, s) { + if (s == undefined) s = 1.70158; + return c*(t/=d)*t*((s+1)*t - s) + b; + }, + easeOutBack: function (x, t, b, c, d, s) { + if (s == undefined) s = 1.70158; + return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b; + }, + easeInOutBack: function (x, t, b, c, d, s) { + if (s == undefined) s = 1.70158; + if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b; + return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b; + }, + easeInBounce: function (x, t, b, c, d) { + return c - $.easing.easeOutBounce (x, d-t, 0, c, d) + b; + }, + easeOutBounce: function (x, t, b, c, d) { + if ((t/=d) < (1/2.75)) { + return c*(7.5625*t*t) + b; + } else if (t < (2/2.75)) { + return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b; + } else if (t < (2.5/2.75)) { + return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b; + } else { + return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b; + } + }, + easeInOutBounce: function (x, t, b, c, d) { + if (t < d/2) return $.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b; + return $.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b; + } +}); + +/* + * + * TERMS OF USE - EASING EQUATIONS + * + * Open source under the BSD License. + * + * Copyright 2001 Robert Penner + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * Neither the name of the author nor the names of contributors may be used to endorse + * or promote products derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +})(jQuery); diff --git a/js/ui/jquery.effects.drop.js b/js/ui/jquery.effects.drop.js new file mode 100644 index 0000000000..0ee2a9793f --- /dev/null +++ b/js/ui/jquery.effects.drop.js @@ -0,0 +1,50 @@ +/* + * jQuery UI Effects Drop 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Drop + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.drop = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this), props = ['position','top','bottom','left','right','opacity']; + + // Set options + var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode + var direction = o.options.direction || 'left'; // Default Direction + + // Adjust + $.effects.save(el, props); el.show(); // Save & Show + $.effects.createWrapper(el); // Create Wrapper + var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left'; + var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg'; + var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) / 2 : el.outerWidth({margin:true}) / 2); + if (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos' ? -distance : distance); // Shift + + // Animation + var animation = {opacity: mode == 'show' ? 1 : 0}; + animation[ref] = (mode == 'show' ? (motion == 'pos' ? '+=' : '-=') : (motion == 'pos' ? '-=' : '+=')) + distance; + + // Animate + el.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() { + if(mode == 'hide') el.hide(); // Hide + $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(this, arguments); // Callback + el.dequeue(); + }}); + + }); + +}; + +})(jQuery); diff --git a/js/ui/jquery.effects.explode.js b/js/ui/jquery.effects.explode.js new file mode 100644 index 0000000000..5b3f7b450f --- /dev/null +++ b/js/ui/jquery.effects.explode.js @@ -0,0 +1,79 @@ +/* + * jQuery UI Effects Explode 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Explode + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.explode = function(o) { + + return this.queue(function() { + + var rows = o.options.pieces ? Math.round(Math.sqrt(o.options.pieces)) : 3; + var cells = o.options.pieces ? Math.round(Math.sqrt(o.options.pieces)) : 3; + + o.options.mode = o.options.mode == 'toggle' ? ($(this).is(':visible') ? 'hide' : 'show') : o.options.mode; + var el = $(this).show().css('visibility', 'hidden'); + var offset = el.offset(); + + //Substract the margins - not fixing the problem yet. + offset.top -= parseInt(el.css("marginTop"),10) || 0; + offset.left -= parseInt(el.css("marginLeft"),10) || 0; + + var width = el.outerWidth(true); + var height = el.outerHeight(true); + + for(var i=0;i') + .css({ + position: 'absolute', + visibility: 'visible', + left: -j*(width/cells), + top: -i*(height/rows) + }) + .parent() + .addClass('ui-effects-explode') + .css({ + position: 'absolute', + overflow: 'hidden', + width: width/cells, + height: height/rows, + left: offset.left + j*(width/cells) + (o.options.mode == 'show' ? (j-Math.floor(cells/2))*(width/cells) : 0), + top: offset.top + i*(height/rows) + (o.options.mode == 'show' ? (i-Math.floor(rows/2))*(height/rows) : 0), + opacity: o.options.mode == 'show' ? 0 : 1 + }).animate({ + left: offset.left + j*(width/cells) + (o.options.mode == 'show' ? 0 : (j-Math.floor(cells/2))*(width/cells)), + top: offset.top + i*(height/rows) + (o.options.mode == 'show' ? 0 : (i-Math.floor(rows/2))*(height/rows)), + opacity: o.options.mode == 'show' ? 1 : 0 + }, o.duration || 500); + } + } + + // Set a timeout, to call the callback approx. when the other animations have finished + setTimeout(function() { + + o.options.mode == 'show' ? el.css({ visibility: 'visible' }) : el.css({ visibility: 'visible' }).hide(); + if(o.callback) o.callback.apply(el[0]); // Callback + el.dequeue(); + + $('div.ui-effects-explode').remove(); + + }, o.duration || 500); + + + }); + +}; + +})(jQuery); diff --git a/js/ui/jquery.effects.fade.js b/js/ui/jquery.effects.fade.js new file mode 100644 index 0000000000..325fb6d472 --- /dev/null +++ b/js/ui/jquery.effects.fade.js @@ -0,0 +1,32 @@ +/* + * jQuery UI Effects Fade 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Fade + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.fade = function(o) { + return this.queue(function() { + var elem = $(this), + mode = $.effects.setMode(elem, o.options.mode || 'hide'); + + elem.animate({ opacity: mode }, { + queue: false, + duration: o.duration, + easing: o.options.easing, + complete: function() { + (o.callback && o.callback.apply(this, arguments)); + elem.dequeue(); + } + }); + }); +}; + +})(jQuery); diff --git a/js/ui/jquery.effects.fold.js b/js/ui/jquery.effects.fold.js new file mode 100644 index 0000000000..e5f403c87e --- /dev/null +++ b/js/ui/jquery.effects.fold.js @@ -0,0 +1,56 @@ +/* + * jQuery UI Effects Fold 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Fold + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.fold = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this), props = ['position','top','bottom','left','right']; + + // Set options + var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode + var size = o.options.size || 15; // Default fold size + var horizFirst = !(!o.options.horizFirst); // Ensure a boolean value + var duration = o.duration ? o.duration / 2 : $.fx.speeds._default / 2; + + // Adjust + $.effects.save(el, props); el.show(); // Save & Show + var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper + var widthFirst = ((mode == 'show') != horizFirst); + var ref = widthFirst ? ['width', 'height'] : ['height', 'width']; + var distance = widthFirst ? [wrapper.width(), wrapper.height()] : [wrapper.height(), wrapper.width()]; + var percent = /([0-9]+)%/.exec(size); + if(percent) size = parseInt(percent[1],10) / 100 * distance[mode == 'hide' ? 0 : 1]; + if(mode == 'show') wrapper.css(horizFirst ? {height: 0, width: size} : {height: size, width: 0}); // Shift + + // Animation + var animation1 = {}, animation2 = {}; + animation1[ref[0]] = mode == 'show' ? distance[0] : size; + animation2[ref[1]] = mode == 'show' ? distance[1] : 0; + + // Animate + wrapper.animate(animation1, duration, o.options.easing) + .animate(animation2, duration, o.options.easing, function() { + if(mode == 'hide') el.hide(); // Hide + $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(el[0], arguments); // Callback + el.dequeue(); + }); + + }); + +}; + +})(jQuery); diff --git a/js/ui/jquery.effects.highlight.js b/js/ui/jquery.effects.highlight.js new file mode 100644 index 0000000000..9f0890ebb5 --- /dev/null +++ b/js/ui/jquery.effects.highlight.js @@ -0,0 +1,50 @@ +/* + * jQuery UI Effects Highlight 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Highlight + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.highlight = function(o) { + return this.queue(function() { + var elem = $(this), + props = ['backgroundImage', 'backgroundColor', 'opacity'], + mode = $.effects.setMode(elem, o.options.mode || 'show'), + animation = { + backgroundColor: elem.css('backgroundColor') + }; + + if (mode == 'hide') { + animation.opacity = 0; + } + + $.effects.save(elem, props); + elem + .show() + .css({ + backgroundImage: 'none', + backgroundColor: o.options.color || '#ffff99' + }) + .animate(animation, { + queue: false, + duration: o.duration, + easing: o.options.easing, + complete: function() { + (mode == 'hide' && elem.hide()); + $.effects.restore(elem, props); + (mode == 'show' && !$.support.opacity && this.style.removeAttribute('filter')); + (o.callback && o.callback.apply(this, arguments)); + elem.dequeue(); + } + }); + }); +}; + +})(jQuery); diff --git a/js/ui/jquery.effects.pulsate.js b/js/ui/jquery.effects.pulsate.js new file mode 100644 index 0000000000..922e018ec5 --- /dev/null +++ b/js/ui/jquery.effects.pulsate.js @@ -0,0 +1,51 @@ +/* + * jQuery UI Effects Pulsate 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Pulsate + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.pulsate = function(o) { + return this.queue(function() { + var elem = $(this), + mode = $.effects.setMode(elem, o.options.mode || 'show'); + times = ((o.options.times || 5) * 2) - 1; + duration = o.duration ? o.duration / 2 : $.fx.speeds._default / 2, + isVisible = elem.is(':visible'), + animateTo = 0; + + if (!isVisible) { + elem.css('opacity', 0).show(); + animateTo = 1; + } + + if ((mode == 'hide' && isVisible) || (mode == 'show' && !isVisible)) { + times--; + } + + for (var i = 0; i < times; i++) { + elem.animate({ opacity: animateTo }, duration, o.options.easing); + animateTo = (animateTo + 1) % 2; + } + + elem.animate({ opacity: animateTo }, duration, o.options.easing, function() { + if (animateTo == 0) { + elem.hide(); + } + (o.callback && o.callback.apply(this, arguments)); + }); + + elem + .queue('fx', function() { elem.dequeue(); }) + .dequeue(); + }); +}; + +})(jQuery); diff --git a/js/ui/jquery.effects.scale.js b/js/ui/jquery.effects.scale.js new file mode 100644 index 0000000000..8ad72bcbf1 --- /dev/null +++ b/js/ui/jquery.effects.scale.js @@ -0,0 +1,178 @@ +/* + * jQuery UI Effects Scale 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Scale + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.puff = function(o) { + return this.queue(function() { + var elem = $(this), + mode = $.effects.setMode(elem, o.options.mode || 'hide'), + percent = parseInt(o.options.percent, 10) || 150, + factor = percent / 100, + original = { height: elem.height(), width: elem.width() }; + + $.extend(o.options, { + fade: true, + mode: mode, + percent: mode == 'hide' ? percent : 100, + from: mode == 'hide' + ? original + : { + height: original.height * factor, + width: original.width * factor + } + }); + + elem.effect('scale', o.options, o.duration, o.callback); + elem.dequeue(); + }); +}; + +$.effects.scale = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this); + + // Set options + var options = $.extend(true, {}, o.options); + var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode + var percent = parseInt(o.options.percent,10) || (parseInt(o.options.percent,10) == 0 ? 0 : (mode == 'hide' ? 0 : 100)); // Set default scaling percent + var direction = o.options.direction || 'both'; // Set default axis + var origin = o.options.origin; // The origin of the scaling + if (mode != 'effect') { // Set default origin and restore for show/hide + options.origin = origin || ['middle','center']; + options.restore = true; + } + var original = {height: el.height(), width: el.width()}; // Save original + el.from = o.options.from || (mode == 'show' ? {height: 0, width: 0} : original); // Default from state + + // Adjust + var factor = { // Set scaling factor + y: direction != 'horizontal' ? (percent / 100) : 1, + x: direction != 'vertical' ? (percent / 100) : 1 + }; + el.to = {height: original.height * factor.y, width: original.width * factor.x}; // Set to state + + if (o.options.fade) { // Fade option to support puff + if (mode == 'show') {el.from.opacity = 0; el.to.opacity = 1;}; + if (mode == 'hide') {el.from.opacity = 1; el.to.opacity = 0;}; + }; + + // Animation + options.from = el.from; options.to = el.to; options.mode = mode; + + // Animate + el.effect('size', options, o.duration, o.callback); + el.dequeue(); + }); + +}; + +$.effects.size = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this), props = ['position','top','bottom','left','right','width','height','overflow','opacity']; + var props1 = ['position','top','bottom','left','right','overflow','opacity']; // Always restore + var props2 = ['width','height','overflow']; // Copy for children + var cProps = ['fontSize']; + var vProps = ['borderTopWidth', 'borderBottomWidth', 'paddingTop', 'paddingBottom']; + var hProps = ['borderLeftWidth', 'borderRightWidth', 'paddingLeft', 'paddingRight']; + + // Set options + var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode + var restore = o.options.restore || false; // Default restore + var scale = o.options.scale || 'both'; // Default scale mode + var origin = o.options.origin; // The origin of the sizing + var original = {height: el.height(), width: el.width()}; // Save original + el.from = o.options.from || original; // Default from state + el.to = o.options.to || original; // Default to state + // Adjust + if (origin) { // Calculate baseline shifts + var baseline = $.effects.getBaseline(origin, original); + el.from.top = (original.height - el.from.height) * baseline.y; + el.from.left = (original.width - el.from.width) * baseline.x; + el.to.top = (original.height - el.to.height) * baseline.y; + el.to.left = (original.width - el.to.width) * baseline.x; + }; + var factor = { // Set scaling factor + from: {y: el.from.height / original.height, x: el.from.width / original.width}, + to: {y: el.to.height / original.height, x: el.to.width / original.width} + }; + if (scale == 'box' || scale == 'both') { // Scale the css box + if (factor.from.y != factor.to.y) { // Vertical props scaling + props = props.concat(vProps); + el.from = $.effects.setTransition(el, vProps, factor.from.y, el.from); + el.to = $.effects.setTransition(el, vProps, factor.to.y, el.to); + }; + if (factor.from.x != factor.to.x) { // Horizontal props scaling + props = props.concat(hProps); + el.from = $.effects.setTransition(el, hProps, factor.from.x, el.from); + el.to = $.effects.setTransition(el, hProps, factor.to.x, el.to); + }; + }; + if (scale == 'content' || scale == 'both') { // Scale the content + if (factor.from.y != factor.to.y) { // Vertical props scaling + props = props.concat(cProps); + el.from = $.effects.setTransition(el, cProps, factor.from.y, el.from); + el.to = $.effects.setTransition(el, cProps, factor.to.y, el.to); + }; + }; + $.effects.save(el, restore ? props : props1); el.show(); // Save & Show + $.effects.createWrapper(el); // Create Wrapper + el.css('overflow','hidden').css(el.from); // Shift + + // Animate + if (scale == 'content' || scale == 'both') { // Scale the children + vProps = vProps.concat(['marginTop','marginBottom']).concat(cProps); // Add margins/font-size + hProps = hProps.concat(['marginLeft','marginRight']); // Add margins + props2 = props.concat(vProps).concat(hProps); // Concat + el.find("*[width]").each(function(){ + child = $(this); + if (restore) $.effects.save(child, props2); + var c_original = {height: child.height(), width: child.width()}; // Save original + child.from = {height: c_original.height * factor.from.y, width: c_original.width * factor.from.x}; + child.to = {height: c_original.height * factor.to.y, width: c_original.width * factor.to.x}; + if (factor.from.y != factor.to.y) { // Vertical props scaling + child.from = $.effects.setTransition(child, vProps, factor.from.y, child.from); + child.to = $.effects.setTransition(child, vProps, factor.to.y, child.to); + }; + if (factor.from.x != factor.to.x) { // Horizontal props scaling + child.from = $.effects.setTransition(child, hProps, factor.from.x, child.from); + child.to = $.effects.setTransition(child, hProps, factor.to.x, child.to); + }; + child.css(child.from); // Shift children + child.animate(child.to, o.duration, o.options.easing, function(){ + if (restore) $.effects.restore(child, props2); // Restore children + }); // Animate children + }); + }; + + // Animate + el.animate(el.to, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() { + if (el.to.opacity === 0) { + el.css('opacity', el.from.opacity); + } + if(mode == 'hide') el.hide(); // Hide + $.effects.restore(el, restore ? props : props1); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(this, arguments); // Callback + el.dequeue(); + }}); + + }); + +}; + +})(jQuery); diff --git a/js/ui/jquery.effects.shake.js b/js/ui/jquery.effects.shake.js new file mode 100644 index 0000000000..554286ff9a --- /dev/null +++ b/js/ui/jquery.effects.shake.js @@ -0,0 +1,57 @@ +/* + * jQuery UI Effects Shake 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Shake + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.shake = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this), props = ['position','top','bottom','left','right']; + + // Set options + var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode + var direction = o.options.direction || 'left'; // Default direction + var distance = o.options.distance || 20; // Default distance + var times = o.options.times || 3; // Default # of times + var speed = o.duration || o.options.duration || 140; // Default speed per shake + + // Adjust + $.effects.save(el, props); el.show(); // Save & Show + $.effects.createWrapper(el); // Create Wrapper + var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left'; + var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg'; + + // Animation + var animation = {}, animation1 = {}, animation2 = {}; + animation[ref] = (motion == 'pos' ? '-=' : '+=') + distance; + animation1[ref] = (motion == 'pos' ? '+=' : '-=') + distance * 2; + animation2[ref] = (motion == 'pos' ? '-=' : '+=') + distance * 2; + + // Animate + el.animate(animation, speed, o.options.easing); + for (var i = 1; i < times; i++) { // Shakes + el.animate(animation1, speed, o.options.easing).animate(animation2, speed, o.options.easing); + }; + el.animate(animation1, speed, o.options.easing). + animate(animation, speed / 2, o.options.easing, function(){ // Last shake + $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(this, arguments); // Callback + }); + el.queue('fx', function() { el.dequeue(); }); + el.dequeue(); + }); + +}; + +})(jQuery); diff --git a/js/ui/jquery.effects.slide.js b/js/ui/jquery.effects.slide.js new file mode 100644 index 0000000000..55d8adb7eb --- /dev/null +++ b/js/ui/jquery.effects.slide.js @@ -0,0 +1,50 @@ +/* + * jQuery UI Effects Slide 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Slide + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.slide = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this), props = ['position','top','bottom','left','right']; + + // Set options + var mode = $.effects.setMode(el, o.options.mode || 'show'); // Set Mode + var direction = o.options.direction || 'left'; // Default Direction + + // Adjust + $.effects.save(el, props); el.show(); // Save & Show + $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper + var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left'; + var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg'; + var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) : el.outerWidth({margin:true})); + if (mode == 'show') el.css(ref, motion == 'pos' ? (isNaN(distance) ? "-" + distance : -distance) : distance); // Shift + + // Animation + var animation = {}; + animation[ref] = (mode == 'show' ? (motion == 'pos' ? '+=' : '-=') : (motion == 'pos' ? '-=' : '+=')) + distance; + + // Animate + el.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() { + if(mode == 'hide') el.hide(); // Hide + $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(this, arguments); // Callback + el.dequeue(); + }}); + + }); + +}; + +})(jQuery); diff --git a/js/ui/jquery.effects.transfer.js b/js/ui/jquery.effects.transfer.js new file mode 100644 index 0000000000..b65146d1b0 --- /dev/null +++ b/js/ui/jquery.effects.transfer.js @@ -0,0 +1,45 @@ +/* + * jQuery UI Effects Transfer 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Transfer + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.transfer = function(o) { + return this.queue(function() { + var elem = $(this), + target = $(o.options.to), + endPosition = target.offset(), + animation = { + top: endPosition.top, + left: endPosition.left, + height: target.innerHeight(), + width: target.innerWidth() + }, + startPosition = elem.offset(), + transfer = $('
      ') + .appendTo(document.body) + .addClass(o.options.className) + .css({ + top: startPosition.top, + left: startPosition.left, + height: elem.innerHeight(), + width: elem.innerWidth(), + position: 'absolute' + }) + .animate(animation, o.duration, o.options.easing, function() { + transfer.remove(); + (o.callback && o.callback.apply(elem[0], arguments)); + elem.dequeue(); + }); + }); +}; + +})(jQuery); diff --git a/js/ui/jquery.ui.accordion.js b/js/ui/jquery.ui.accordion.js new file mode 100644 index 0000000000..db9d24bc6e --- /dev/null +++ b/js/ui/jquery.ui.accordion.js @@ -0,0 +1,606 @@ +/* + * jQuery UI Accordion 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Accordion + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function( $, undefined ) { + +$.widget( "ui.accordion", { + options: { + active: 0, + animated: "slide", + autoHeight: true, + clearStyle: false, + collapsible: false, + event: "click", + fillSpace: false, + header: "> li > :first-child,> :not(li):even", + icons: { + header: "ui-icon-triangle-1-e", + headerSelected: "ui-icon-triangle-1-s" + }, + navigation: false, + navigationFilter: function() { + return this.href.toLowerCase() === location.href.toLowerCase(); + } + }, + + _create: function() { + var self = this, + options = self.options; + + self.running = 0; + + self.element + .addClass( "ui-accordion ui-widget ui-helper-reset" ) + // in lack of child-selectors in CSS + // we need to mark top-LIs in a UL-accordion for some IE-fix + .children( "li" ) + .addClass( "ui-accordion-li-fix" ); + + self.headers = self.element.find( options.header ) + .addClass( "ui-accordion-header ui-helper-reset ui-state-default ui-corner-all" ) + .bind( "mouseenter.accordion", function() { + if ( options.disabled ) { + return; + } + $( this ).addClass( "ui-state-hover" ); + }) + .bind( "mouseleave.accordion", function() { + if ( options.disabled ) { + return; + } + $( this ).removeClass( "ui-state-hover" ); + }) + .bind( "focus.accordion", function() { + if ( options.disabled ) { + return; + } + $( this ).addClass( "ui-state-focus" ); + }) + .bind( "blur.accordion", function() { + if ( options.disabled ) { + return; + } + $( this ).removeClass( "ui-state-focus" ); + }); + + self.headers.next() + .addClass( "ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom" ); + + if ( options.navigation ) { + var current = self.element.find( "a" ).filter( options.navigationFilter ).eq( 0 ); + if ( current.length ) { + var header = current.closest( ".ui-accordion-header" ); + if ( header.length ) { + // anchor within header + self.active = header; + } else { + // anchor within content + self.active = current.closest( ".ui-accordion-content" ).prev(); + } + } + } + + self.active = self._findActive( self.active || options.active ) + .addClass( "ui-state-default ui-state-active" ) + .toggleClass( "ui-corner-all" ) + .toggleClass( "ui-corner-top" ); + self.active.next().addClass( "ui-accordion-content-active" ); + + self._createIcons(); + self.resize(); + + // ARIA + self.element.attr( "role", "tablist" ); + + self.headers + .attr( "role", "tab" ) + .bind( "keydown.accordion", function( event ) { + return self._keydown( event ); + }) + .next() + .attr( "role", "tabpanel" ); + + self.headers + .not( self.active || "" ) + .attr({ + "aria-expanded": "false", + tabIndex: -1 + }) + .next() + .hide(); + + // make sure at least one header is in the tab order + if ( !self.active.length ) { + self.headers.eq( 0 ).attr( "tabIndex", 0 ); + } else { + self.active + .attr({ + "aria-expanded": "true", + tabIndex: 0 + }); + } + + // only need links in tab order for Safari + if ( !$.browser.safari ) { + self.headers.find( "a" ).attr( "tabIndex", -1 ); + } + + if ( options.event ) { + self.headers.bind( options.event.split(" ").join(".accordion ") + ".accordion", function(event) { + self._clickHandler.call( self, event, this ); + event.preventDefault(); + }); + } + }, + + _createIcons: function() { + var options = this.options; + if ( options.icons ) { + $( "" ) + .addClass( "ui-icon " + options.icons.header ) + .prependTo( this.headers ); + this.active.children( ".ui-icon" ) + .toggleClass(options.icons.header) + .toggleClass(options.icons.headerSelected); + this.element.addClass( "ui-accordion-icons" ); + } + }, + + _destroyIcons: function() { + this.headers.children( ".ui-icon" ).remove(); + this.element.removeClass( "ui-accordion-icons" ); + }, + + destroy: function() { + var options = this.options; + + this.element + .removeClass( "ui-accordion ui-widget ui-helper-reset" ) + .removeAttr( "role" ); + + this.headers + .unbind( ".accordion" ) + .removeClass( "ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top" ) + .removeAttr( "role" ) + .removeAttr( "aria-expanded" ) + .removeAttr( "tabIndex" ); + + this.headers.find( "a" ).removeAttr( "tabIndex" ); + this._destroyIcons(); + var contents = this.headers.next() + .css( "display", "" ) + .removeAttr( "role" ) + .removeClass( "ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled" ); + if ( options.autoHeight || options.fillHeight ) { + contents.css( "height", "" ); + } + + return $.Widget.prototype.destroy.call( this ); + }, + + _setOption: function( key, value ) { + $.Widget.prototype._setOption.apply( this, arguments ); + + if ( key == "active" ) { + this.activate( value ); + } + if ( key == "icons" ) { + this._destroyIcons(); + if ( value ) { + this._createIcons(); + } + } + // #5332 - opacity doesn't cascade to positioned elements in IE + // so we need to add the disabled class to the headers and panels + if ( key == "disabled" ) { + this.headers.add(this.headers.next()) + [ value ? "addClass" : "removeClass" ]( + "ui-accordion-disabled ui-state-disabled" ); + } + }, + + _keydown: function( event ) { + if ( this.options.disabled || event.altKey || event.ctrlKey ) { + return; + } + + var keyCode = $.ui.keyCode, + length = this.headers.length, + currentIndex = this.headers.index( event.target ), + toFocus = false; + + switch ( event.keyCode ) { + case keyCode.RIGHT: + case keyCode.DOWN: + toFocus = this.headers[ ( currentIndex + 1 ) % length ]; + break; + case keyCode.LEFT: + case keyCode.UP: + toFocus = this.headers[ ( currentIndex - 1 + length ) % length ]; + break; + case keyCode.SPACE: + case keyCode.ENTER: + this._clickHandler( { target: event.target }, event.target ); + event.preventDefault(); + } + + if ( toFocus ) { + $( event.target ).attr( "tabIndex", -1 ); + $( toFocus ).attr( "tabIndex", 0 ); + toFocus.focus(); + return false; + } + + return true; + }, + + resize: function() { + var options = this.options, + maxHeight; + + if ( options.fillSpace ) { + if ( $.browser.msie ) { + var defOverflow = this.element.parent().css( "overflow" ); + this.element.parent().css( "overflow", "hidden"); + } + maxHeight = this.element.parent().height(); + if ($.browser.msie) { + this.element.parent().css( "overflow", defOverflow ); + } + + this.headers.each(function() { + maxHeight -= $( this ).outerHeight( true ); + }); + + this.headers.next() + .each(function() { + $( this ).height( Math.max( 0, maxHeight - + $( this ).innerHeight() + $( this ).height() ) ); + }) + .css( "overflow", "auto" ); + } else if ( options.autoHeight ) { + maxHeight = 0; + this.headers.next() + .each(function() { + maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() ); + }) + .height( maxHeight ); + } + + return this; + }, + + activate: function( index ) { + // TODO this gets called on init, changing the option without an explicit call for that + this.options.active = index; + // call clickHandler with custom event + var active = this._findActive( index )[ 0 ]; + this._clickHandler( { target: active }, active ); + + return this; + }, + + _findActive: function( selector ) { + return selector + ? typeof selector === "number" + ? this.headers.filter( ":eq(" + selector + ")" ) + : this.headers.not( this.headers.not( selector ) ) + : selector === false + ? $( [] ) + : this.headers.filter( ":eq(0)" ); + }, + + // TODO isn't event.target enough? why the separate target argument? + _clickHandler: function( event, target ) { + var options = this.options; + if ( options.disabled ) { + return; + } + + // called only when using activate(false) to close all parts programmatically + if ( !event.target ) { + if ( !options.collapsible ) { + return; + } + this.active + .removeClass( "ui-state-active ui-corner-top" ) + .addClass( "ui-state-default ui-corner-all" ) + .children( ".ui-icon" ) + .removeClass( options.icons.headerSelected ) + .addClass( options.icons.header ); + this.active.next().addClass( "ui-accordion-content-active" ); + var toHide = this.active.next(), + data = { + options: options, + newHeader: $( [] ), + oldHeader: options.active, + newContent: $( [] ), + oldContent: toHide + }, + toShow = ( this.active = $( [] ) ); + this._toggle( toShow, toHide, data ); + return; + } + + // get the click target + var clicked = $( event.currentTarget || target ), + clickedIsActive = clicked[0] === this.active[0]; + + // TODO the option is changed, is that correct? + // TODO if it is correct, shouldn't that happen after determining that the click is valid? + options.active = options.collapsible && clickedIsActive ? + false : + this.headers.index( clicked ); + + // if animations are still active, or the active header is the target, ignore click + if ( this.running || ( !options.collapsible && clickedIsActive ) ) { + return; + } + + // find elements to show and hide + var active = this.active, + toShow = clicked.next(), + toHide = this.active.next(), + data = { + options: options, + newHeader: clickedIsActive && options.collapsible ? $([]) : clicked, + oldHeader: this.active, + newContent: clickedIsActive && options.collapsible ? $([]) : toShow, + oldContent: toHide + }, + down = this.headers.index( this.active[0] ) > this.headers.index( clicked[0] ); + + // when the call to ._toggle() comes after the class changes + // it causes a very odd bug in IE 8 (see #6720) + this.active = clickedIsActive ? $([]) : clicked; + this._toggle( toShow, toHide, data, clickedIsActive, down ); + + // switch classes + active + .removeClass( "ui-state-active ui-corner-top" ) + .addClass( "ui-state-default ui-corner-all" ) + .children( ".ui-icon" ) + .removeClass( options.icons.headerSelected ) + .addClass( options.icons.header ); + if ( !clickedIsActive ) { + clicked + .removeClass( "ui-state-default ui-corner-all" ) + .addClass( "ui-state-active ui-corner-top" ) + .children( ".ui-icon" ) + .removeClass( options.icons.header ) + .addClass( options.icons.headerSelected ); + clicked + .next() + .addClass( "ui-accordion-content-active" ); + } + + return; + }, + + _toggle: function( toShow, toHide, data, clickedIsActive, down ) { + var self = this, + options = self.options; + + self.toShow = toShow; + self.toHide = toHide; + self.data = data; + + var complete = function() { + if ( !self ) { + return; + } + return self._completed.apply( self, arguments ); + }; + + // trigger changestart event + self._trigger( "changestart", null, self.data ); + + // count elements to animate + self.running = toHide.size() === 0 ? toShow.size() : toHide.size(); + + if ( options.animated ) { + var animOptions = {}; + + if ( options.collapsible && clickedIsActive ) { + animOptions = { + toShow: $( [] ), + toHide: toHide, + complete: complete, + down: down, + autoHeight: options.autoHeight || options.fillSpace + }; + } else { + animOptions = { + toShow: toShow, + toHide: toHide, + complete: complete, + down: down, + autoHeight: options.autoHeight || options.fillSpace + }; + } + + if ( !options.proxied ) { + options.proxied = options.animated; + } + + if ( !options.proxiedDuration ) { + options.proxiedDuration = options.duration; + } + + options.animated = $.isFunction( options.proxied ) ? + options.proxied( animOptions ) : + options.proxied; + + options.duration = $.isFunction( options.proxiedDuration ) ? + options.proxiedDuration( animOptions ) : + options.proxiedDuration; + + var animations = $.ui.accordion.animations, + duration = options.duration, + easing = options.animated; + + if ( easing && !animations[ easing ] && !$.easing[ easing ] ) { + easing = "slide"; + } + if ( !animations[ easing ] ) { + animations[ easing ] = function( options ) { + this.slide( options, { + easing: easing, + duration: duration || 700 + }); + }; + } + + animations[ easing ]( animOptions ); + } else { + if ( options.collapsible && clickedIsActive ) { + toShow.toggle(); + } else { + toHide.hide(); + toShow.show(); + } + + complete( true ); + } + + // TODO assert that the blur and focus triggers are really necessary, remove otherwise + toHide.prev() + .attr({ + "aria-expanded": "false", + tabIndex: -1 + }) + .blur(); + toShow.prev() + .attr({ + "aria-expanded": "true", + tabIndex: 0 + }) + .focus(); + }, + + _completed: function( cancel ) { + this.running = cancel ? 0 : --this.running; + if ( this.running ) { + return; + } + + if ( this.options.clearStyle ) { + this.toShow.add( this.toHide ).css({ + height: "", + overflow: "" + }); + } + + // other classes are removed before the animation; this one needs to stay until completed + this.toHide.removeClass( "ui-accordion-content-active" ); + // Work around for rendering bug in IE (#5421) + if ( this.toHide.length ) { + this.toHide.parent()[0].className = this.toHide.parent()[0].className; + } + + this._trigger( "change", null, this.data ); + } +}); + +$.extend( $.ui.accordion, { + version: "1.8.10", + animations: { + slide: function( options, additions ) { + options = $.extend({ + easing: "swing", + duration: 300 + }, options, additions ); + if ( !options.toHide.size() ) { + options.toShow.animate({ + height: "show", + paddingTop: "show", + paddingBottom: "show" + }, options ); + return; + } + if ( !options.toShow.size() ) { + options.toHide.animate({ + height: "hide", + paddingTop: "hide", + paddingBottom: "hide" + }, options ); + return; + } + var overflow = options.toShow.css( "overflow" ), + percentDone = 0, + showProps = {}, + hideProps = {}, + fxAttrs = [ "height", "paddingTop", "paddingBottom" ], + originalWidth; + // fix width before calculating height of hidden element + var s = options.toShow; + originalWidth = s[0].style.width; + s.width( parseInt( s.parent().width(), 10 ) + - parseInt( s.css( "paddingLeft" ), 10 ) + - parseInt( s.css( "paddingRight" ), 10 ) + - ( parseInt( s.css( "borderLeftWidth" ), 10 ) || 0 ) + - ( parseInt( s.css( "borderRightWidth" ), 10) || 0 ) ); + + $.each( fxAttrs, function( i, prop ) { + hideProps[ prop ] = "hide"; + + var parts = ( "" + $.css( options.toShow[0], prop ) ).match( /^([\d+-.]+)(.*)$/ ); + showProps[ prop ] = { + value: parts[ 1 ], + unit: parts[ 2 ] || "px" + }; + }); + options.toShow.css({ height: 0, overflow: "hidden" }).show(); + options.toHide + .filter( ":hidden" ) + .each( options.complete ) + .end() + .filter( ":visible" ) + .animate( hideProps, { + step: function( now, settings ) { + // only calculate the percent when animating height + // IE gets very inconsistent results when animating elements + // with small values, which is common for padding + if ( settings.prop == "height" ) { + percentDone = ( settings.end - settings.start === 0 ) ? 0 : + ( settings.now - settings.start ) / ( settings.end - settings.start ); + } + + options.toShow[ 0 ].style[ settings.prop ] = + ( percentDone * showProps[ settings.prop ].value ) + + showProps[ settings.prop ].unit; + }, + duration: options.duration, + easing: options.easing, + complete: function() { + if ( !options.autoHeight ) { + options.toShow.css( "height", "" ); + } + options.toShow.css({ + width: originalWidth, + overflow: overflow + }); + options.complete(); + } + }); + }, + bounceslide: function( options ) { + this.slide( options, { + easing: options.down ? "easeOutBounce" : "swing", + duration: options.down ? 1000 : 200 + }); + } + } +}); + +})( jQuery ); diff --git a/js/ui/jquery.ui.autocomplete.js b/js/ui/jquery.ui.autocomplete.js new file mode 100644 index 0000000000..718bfe5b98 --- /dev/null +++ b/js/ui/jquery.ui.autocomplete.js @@ -0,0 +1,607 @@ +/* + * jQuery UI Autocomplete 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Autocomplete + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + * jquery.ui.position.js + */ +(function( $, undefined ) { + +// used to prevent race conditions with remote data sources +var requestIndex = 0; + +$.widget( "ui.autocomplete", { + options: { + appendTo: "body", + delay: 300, + minLength: 1, + position: { + my: "left top", + at: "left bottom", + collision: "none" + }, + source: null + }, + + pending: 0, + + _create: function() { + var self = this, + doc = this.element[ 0 ].ownerDocument, + suppressKeyPress; + + this.element + .addClass( "ui-autocomplete-input" ) + .attr( "autocomplete", "off" ) + // TODO verify these actually work as intended + .attr({ + role: "textbox", + "aria-autocomplete": "list", + "aria-haspopup": "true" + }) + .bind( "keydown.autocomplete", function( event ) { + if ( self.options.disabled || self.element.attr( "readonly" ) ) { + return; + } + + suppressKeyPress = false; + var keyCode = $.ui.keyCode; + switch( event.keyCode ) { + case keyCode.PAGE_UP: + self._move( "previousPage", event ); + break; + case keyCode.PAGE_DOWN: + self._move( "nextPage", event ); + break; + case keyCode.UP: + self._move( "previous", event ); + // prevent moving cursor to beginning of text field in some browsers + event.preventDefault(); + break; + case keyCode.DOWN: + self._move( "next", event ); + // prevent moving cursor to end of text field in some browsers + event.preventDefault(); + break; + case keyCode.ENTER: + case keyCode.NUMPAD_ENTER: + // when menu is open and has focus + if ( self.menu.active ) { + // #6055 - Opera still allows the keypress to occur + // which causes forms to submit + suppressKeyPress = true; + event.preventDefault(); + } + //passthrough - ENTER and TAB both select the current element + case keyCode.TAB: + if ( !self.menu.active ) { + return; + } + self.menu.select( event ); + break; + case keyCode.ESCAPE: + self.element.val( self.term ); + self.close( event ); + break; + default: + // keypress is triggered before the input value is changed + clearTimeout( self.searching ); + self.searching = setTimeout(function() { + // only search if the value has changed + if ( self.term != self.element.val() ) { + self.selectedItem = null; + self.search( null, event ); + } + }, self.options.delay ); + break; + } + }) + .bind( "keypress.autocomplete", function( event ) { + if ( suppressKeyPress ) { + suppressKeyPress = false; + event.preventDefault(); + } + }) + .bind( "focus.autocomplete", function() { + if ( self.options.disabled ) { + return; + } + + self.selectedItem = null; + self.previous = self.element.val(); + }) + .bind( "blur.autocomplete", function( event ) { + if ( self.options.disabled ) { + return; + } + + clearTimeout( self.searching ); + // clicks on the menu (or a button to trigger a search) will cause a blur event + self.closing = setTimeout(function() { + self.close( event ); + self._change( event ); + }, 150 ); + }); + this._initSource(); + this.response = function() { + return self._response.apply( self, arguments ); + }; + this.menu = $( "
        " ) + .addClass( "ui-autocomplete" ) + .appendTo( $( this.options.appendTo || "body", doc )[0] ) + // prevent the close-on-blur in case of a "slow" click on the menu (long mousedown) + .mousedown(function( event ) { + // clicking on the scrollbar causes focus to shift to the body + // but we can't detect a mouseup or a click immediately afterward + // so we have to track the next mousedown and close the menu if + // the user clicks somewhere outside of the autocomplete + var menuElement = self.menu.element[ 0 ]; + if ( !$( event.target ).closest( ".ui-menu-item" ).length ) { + setTimeout(function() { + $( document ).one( 'mousedown', function( event ) { + if ( event.target !== self.element[ 0 ] && + event.target !== menuElement && + !$.ui.contains( menuElement, event.target ) ) { + self.close(); + } + }); + }, 1 ); + } + + // use another timeout to make sure the blur-event-handler on the input was already triggered + setTimeout(function() { + clearTimeout( self.closing ); + }, 13); + }) + .menu({ + focus: function( event, ui ) { + var item = ui.item.data( "item.autocomplete" ); + if ( false !== self._trigger( "focus", event, { item: item } ) ) { + // use value to match what will end up in the input, if it was a key event + if ( /^key/.test(event.originalEvent.type) ) { + self.element.val( item.value ); + } + } + }, + selected: function( event, ui ) { + var item = ui.item.data( "item.autocomplete" ), + previous = self.previous; + + // only trigger when focus was lost (click on menu) + if ( self.element[0] !== doc.activeElement ) { + self.element.focus(); + self.previous = previous; + // #6109 - IE triggers two focus events and the second + // is asynchronous, so we need to reset the previous + // term synchronously and asynchronously :-( + setTimeout(function() { + self.previous = previous; + self.selectedItem = item; + }, 1); + } + + if ( false !== self._trigger( "select", event, { item: item } ) ) { + self.element.val( item.value ); + } + // reset the term after the select event + // this allows custom select handling to work properly + self.term = self.element.val(); + + self.close( event ); + self.selectedItem = item; + }, + blur: function( event, ui ) { + // don't set the value of the text field if it's already correct + // this prevents moving the cursor unnecessarily + if ( self.menu.element.is(":visible") && + ( self.element.val() !== self.term ) ) { + self.element.val( self.term ); + } + } + }) + .zIndex( this.element.zIndex() + 1 ) + // workaround for jQuery bug #5781 http://dev.jquery.com/ticket/5781 + .css({ top: 0, left: 0 }) + .hide() + .data( "menu" ); + if ( $.fn.bgiframe ) { + this.menu.element.bgiframe(); + } + }, + + destroy: function() { + this.element + .removeClass( "ui-autocomplete-input" ) + .removeAttr( "autocomplete" ) + .removeAttr( "role" ) + .removeAttr( "aria-autocomplete" ) + .removeAttr( "aria-haspopup" ); + this.menu.element.remove(); + $.Widget.prototype.destroy.call( this ); + }, + + _setOption: function( key, value ) { + $.Widget.prototype._setOption.apply( this, arguments ); + if ( key === "source" ) { + this._initSource(); + } + if ( key === "appendTo" ) { + this.menu.element.appendTo( $( value || "body", this.element[0].ownerDocument )[0] ) + } + if ( key === "disabled" && value && this.xhr ) { + this.xhr.abort(); + } + }, + + _initSource: function() { + var self = this, + array, + url; + if ( $.isArray(this.options.source) ) { + array = this.options.source; + this.source = function( request, response ) { + response( $.ui.autocomplete.filter(array, request.term) ); + }; + } else if ( typeof this.options.source === "string" ) { + url = this.options.source; + this.source = function( request, response ) { + if ( self.xhr ) { + self.xhr.abort(); + } + self.xhr = $.ajax({ + url: url, + data: request, + dataType: "json", + autocompleteRequest: ++requestIndex, + success: function( data, status ) { + if ( this.autocompleteRequest === requestIndex ) { + response( data ); + } + }, + error: function() { + if ( this.autocompleteRequest === requestIndex ) { + response( [] ); + } + } + }); + }; + } else { + this.source = this.options.source; + } + }, + + search: function( value, event ) { + value = value != null ? value : this.element.val(); + + // always save the actual value, not the one passed as an argument + this.term = this.element.val(); + + if ( value.length < this.options.minLength ) { + return this.close( event ); + } + + clearTimeout( this.closing ); + if ( this._trigger( "search", event ) === false ) { + return; + } + + return this._search( value ); + }, + + _search: function( value ) { + this.pending++; + this.element.addClass( "ui-autocomplete-loading" ); + + this.source( { term: value }, this.response ); + }, + + _response: function( content ) { + if ( !this.options.disabled && content && content.length ) { + content = this._normalize( content ); + this._suggest( content ); + this._trigger( "open" ); + } else { + this.close(); + } + this.pending--; + if ( !this.pending ) { + this.element.removeClass( "ui-autocomplete-loading" ); + } + }, + + close: function( event ) { + clearTimeout( this.closing ); + if ( this.menu.element.is(":visible") ) { + this.menu.element.hide(); + this.menu.deactivate(); + this._trigger( "close", event ); + } + }, + + _change: function( event ) { + if ( this.previous !== this.element.val() ) { + this._trigger( "change", event, { item: this.selectedItem } ); + } + }, + + _normalize: function( items ) { + // assume all items have the right format when the first item is complete + if ( items.length && items[0].label && items[0].value ) { + return items; + } + return $.map( items, function(item) { + if ( typeof item === "string" ) { + return { + label: item, + value: item + }; + } + return $.extend({ + label: item.label || item.value, + value: item.value || item.label + }, item ); + }); + }, + + _suggest: function( items ) { + var ul = this.menu.element + .empty() + .zIndex( this.element.zIndex() + 1 ); + this._renderMenu( ul, items ); + // TODO refresh should check if the active item is still in the dom, removing the need for a manual deactivate + this.menu.deactivate(); + this.menu.refresh(); + + // size and position menu + ul.show(); + this._resizeMenu(); + ul.position( $.extend({ + of: this.element + }, this.options.position )); + }, + + _resizeMenu: function() { + var ul = this.menu.element; + ul.outerWidth( Math.max( + ul.width( "" ).outerWidth(), + this.element.outerWidth() + ) ); + }, + + _renderMenu: function( ul, items ) { + var self = this; + $.each( items, function( index, item ) { + self._renderItem( ul, item ); + }); + }, + + _renderItem: function( ul, item) { + return $( "
      • " ) + .data( "item.autocomplete", item ) + .append( $( "" ).text( item.label ) ) + .appendTo( ul ); + }, + + _move: function( direction, event ) { + if ( !this.menu.element.is(":visible") ) { + this.search( null, event ); + return; + } + if ( this.menu.first() && /^previous/.test(direction) || + this.menu.last() && /^next/.test(direction) ) { + this.element.val( this.term ); + this.menu.deactivate(); + return; + } + this.menu[ direction ]( event ); + }, + + widget: function() { + return this.menu.element; + } +}); + +$.extend( $.ui.autocomplete, { + escapeRegex: function( value ) { + return value.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); + }, + filter: function(array, term) { + var matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), "i" ); + return $.grep( array, function(value) { + return matcher.test( value.label || value.value || value ); + }); + } +}); + +}( jQuery )); + +/* + * jQuery UI Menu (not officially released) + * + * This widget isn't yet finished and the API is subject to change. We plan to finish + * it for the next release. You're welcome to give it a try anyway and give us feedback, + * as long as you're okay with migrating your code later on. We can help with that, too. + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Menu + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function($) { + +$.widget("ui.menu", { + _create: function() { + var self = this; + this.element + .addClass("ui-menu ui-widget ui-widget-content ui-corner-all") + .attr({ + role: "listbox", + "aria-activedescendant": "ui-active-menuitem" + }) + .click(function( event ) { + if ( !$( event.target ).closest( ".ui-menu-item a" ).length ) { + return; + } + // temporary + event.preventDefault(); + self.select( event ); + }); + this.refresh(); + }, + + refresh: function() { + var self = this; + + // don't refresh list items that are already adapted + var items = this.element.children("li:not(.ui-menu-item):has(a)") + .addClass("ui-menu-item") + .attr("role", "menuitem"); + + items.children("a") + .addClass("ui-corner-all") + .attr("tabindex", -1) + // mouseenter doesn't work with event delegation + .mouseenter(function( event ) { + self.activate( event, $(this).parent() ); + }) + .mouseleave(function() { + self.deactivate(); + }); + }, + + activate: function( event, item ) { + this.deactivate(); + if (this.hasScroll()) { + var offset = item.offset().top - this.element.offset().top, + scroll = this.element.attr("scrollTop"), + elementHeight = this.element.height(); + if (offset < 0) { + this.element.attr("scrollTop", scroll + offset); + } else if (offset >= elementHeight) { + this.element.attr("scrollTop", scroll + offset - elementHeight + item.height()); + } + } + this.active = item.eq(0) + .children("a") + .addClass("ui-state-hover") + .attr("id", "ui-active-menuitem") + .end(); + this._trigger("focus", event, { item: item }); + }, + + deactivate: function() { + if (!this.active) { return; } + + this.active.children("a") + .removeClass("ui-state-hover") + .removeAttr("id"); + this._trigger("blur"); + this.active = null; + }, + + next: function(event) { + this.move("next", ".ui-menu-item:first", event); + }, + + previous: function(event) { + this.move("prev", ".ui-menu-item:last", event); + }, + + first: function() { + return this.active && !this.active.prevAll(".ui-menu-item").length; + }, + + last: function() { + return this.active && !this.active.nextAll(".ui-menu-item").length; + }, + + move: function(direction, edge, event) { + if (!this.active) { + this.activate(event, this.element.children(edge)); + return; + } + var next = this.active[direction + "All"](".ui-menu-item").eq(0); + if (next.length) { + this.activate(event, next); + } else { + this.activate(event, this.element.children(edge)); + } + }, + + // TODO merge with previousPage + nextPage: function(event) { + if (this.hasScroll()) { + // TODO merge with no-scroll-else + if (!this.active || this.last()) { + this.activate(event, this.element.children(".ui-menu-item:first")); + return; + } + var base = this.active.offset().top, + height = this.element.height(), + result = this.element.children(".ui-menu-item").filter(function() { + var close = $(this).offset().top - base - height + $(this).height(); + // TODO improve approximation + return close < 10 && close > -10; + }); + + // TODO try to catch this earlier when scrollTop indicates the last page anyway + if (!result.length) { + result = this.element.children(".ui-menu-item:last"); + } + this.activate(event, result); + } else { + this.activate(event, this.element.children(".ui-menu-item") + .filter(!this.active || this.last() ? ":first" : ":last")); + } + }, + + // TODO merge with nextPage + previousPage: function(event) { + if (this.hasScroll()) { + // TODO merge with no-scroll-else + if (!this.active || this.first()) { + this.activate(event, this.element.children(".ui-menu-item:last")); + return; + } + + var base = this.active.offset().top, + height = this.element.height(); + result = this.element.children(".ui-menu-item").filter(function() { + var close = $(this).offset().top - base + height - $(this).height(); + // TODO improve approximation + return close < 10 && close > -10; + }); + + // TODO try to catch this earlier when scrollTop indicates the last page anyway + if (!result.length) { + result = this.element.children(".ui-menu-item:first"); + } + this.activate(event, result); + } else { + this.activate(event, this.element.children(".ui-menu-item") + .filter(!this.active || this.first() ? ":last" : ":first")); + } + }, + + hasScroll: function() { + return this.element.height() < this.element.attr("scrollHeight"); + }, + + select: function( event ) { + this._trigger("selected", event, { item: this.active }); + } +}); + +}(jQuery)); diff --git a/js/ui/jquery.ui.button.js b/js/ui/jquery.ui.button.js new file mode 100644 index 0000000000..f0a5deca3f --- /dev/null +++ b/js/ui/jquery.ui.button.js @@ -0,0 +1,378 @@ +/* + * jQuery UI Button 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Button + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function( $, undefined ) { + +var lastActive, + baseClasses = "ui-button ui-widget ui-state-default ui-corner-all", + stateClasses = "ui-state-hover ui-state-active ", + typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only", + formResetHandler = function( event ) { + $( ":ui-button", event.target.form ).each(function() { + var inst = $( this ).data( "button" ); + setTimeout(function() { + inst.refresh(); + }, 1 ); + }); + }, + radioGroup = function( radio ) { + var name = radio.name, + form = radio.form, + radios = $( [] ); + if ( name ) { + if ( form ) { + radios = $( form ).find( "[name='" + name + "']" ); + } else { + radios = $( "[name='" + name + "']", radio.ownerDocument ) + .filter(function() { + return !this.form; + }); + } + } + return radios; + }; + +$.widget( "ui.button", { + options: { + disabled: null, + text: true, + label: null, + icons: { + primary: null, + secondary: null + } + }, + _create: function() { + this.element.closest( "form" ) + .unbind( "reset.button" ) + .bind( "reset.button", formResetHandler ); + + if ( typeof this.options.disabled !== "boolean" ) { + this.options.disabled = this.element.attr( "disabled" ); + } + + this._determineButtonType(); + this.hasTitle = !!this.buttonElement.attr( "title" ); + + var self = this, + options = this.options, + toggleButton = this.type === "checkbox" || this.type === "radio", + hoverClass = "ui-state-hover" + ( !toggleButton ? " ui-state-active" : "" ), + focusClass = "ui-state-focus"; + + if ( options.label === null ) { + options.label = this.buttonElement.html(); + } + + if ( this.element.is( ":disabled" ) ) { + options.disabled = true; + } + + this.buttonElement + .addClass( baseClasses ) + .attr( "role", "button" ) + .bind( "mouseenter.button", function() { + if ( options.disabled ) { + return; + } + $( this ).addClass( "ui-state-hover" ); + if ( this === lastActive ) { + $( this ).addClass( "ui-state-active" ); + } + }) + .bind( "mouseleave.button", function() { + if ( options.disabled ) { + return; + } + $( this ).removeClass( hoverClass ); + }) + .bind( "focus.button", function() { + // no need to check disabled, focus won't be triggered anyway + $( this ).addClass( focusClass ); + }) + .bind( "blur.button", function() { + $( this ).removeClass( focusClass ); + }); + + if ( toggleButton ) { + this.element.bind( "change.button", function() { + self.refresh(); + }); + } + + if ( this.type === "checkbox" ) { + this.buttonElement.bind( "click.button", function() { + if ( options.disabled ) { + return false; + } + $( this ).toggleClass( "ui-state-active" ); + self.buttonElement.attr( "aria-pressed", self.element[0].checked ); + }); + } else if ( this.type === "radio" ) { + this.buttonElement.bind( "click.button", function() { + if ( options.disabled ) { + return false; + } + $( this ).addClass( "ui-state-active" ); + self.buttonElement.attr( "aria-pressed", true ); + + var radio = self.element[ 0 ]; + radioGroup( radio ) + .not( radio ) + .map(function() { + return $( this ).button( "widget" )[ 0 ]; + }) + .removeClass( "ui-state-active" ) + .attr( "aria-pressed", false ); + }); + } else { + this.buttonElement + .bind( "mousedown.button", function() { + if ( options.disabled ) { + return false; + } + $( this ).addClass( "ui-state-active" ); + lastActive = this; + $( document ).one( "mouseup", function() { + lastActive = null; + }); + }) + .bind( "mouseup.button", function() { + if ( options.disabled ) { + return false; + } + $( this ).removeClass( "ui-state-active" ); + }) + .bind( "keydown.button", function(event) { + if ( options.disabled ) { + return false; + } + if ( event.keyCode == $.ui.keyCode.SPACE || event.keyCode == $.ui.keyCode.ENTER ) { + $( this ).addClass( "ui-state-active" ); + } + }) + .bind( "keyup.button", function() { + $( this ).removeClass( "ui-state-active" ); + }); + + if ( this.buttonElement.is("a") ) { + this.buttonElement.keyup(function(event) { + if ( event.keyCode === $.ui.keyCode.SPACE ) { + // TODO pass through original event correctly (just as 2nd argument doesn't work) + $( this ).click(); + } + }); + } + } + + // TODO: pull out $.Widget's handling for the disabled option into + // $.Widget.prototype._setOptionDisabled so it's easy to proxy and can + // be overridden by individual plugins + this._setOption( "disabled", options.disabled ); + }, + + _determineButtonType: function() { + + if ( this.element.is(":checkbox") ) { + this.type = "checkbox"; + } else { + if ( this.element.is(":radio") ) { + this.type = "radio"; + } else { + if ( this.element.is("input") ) { + this.type = "input"; + } else { + this.type = "button"; + } + } + } + + if ( this.type === "checkbox" || this.type === "radio" ) { + // we don't search against the document in case the element + // is disconnected from the DOM + this.buttonElement = this.element.parents().last() + .find( "label[for=" + this.element.attr("id") + "]" ); + this.element.addClass( "ui-helper-hidden-accessible" ); + + var checked = this.element.is( ":checked" ); + if ( checked ) { + this.buttonElement.addClass( "ui-state-active" ); + } + this.buttonElement.attr( "aria-pressed", checked ); + } else { + this.buttonElement = this.element; + } + }, + + widget: function() { + return this.buttonElement; + }, + + destroy: function() { + this.element + .removeClass( "ui-helper-hidden-accessible" ); + this.buttonElement + .removeClass( baseClasses + " " + stateClasses + " " + typeClasses ) + .removeAttr( "role" ) + .removeAttr( "aria-pressed" ) + .html( this.buttonElement.find(".ui-button-text").html() ); + + if ( !this.hasTitle ) { + this.buttonElement.removeAttr( "title" ); + } + + $.Widget.prototype.destroy.call( this ); + }, + + _setOption: function( key, value ) { + $.Widget.prototype._setOption.apply( this, arguments ); + if ( key === "disabled" ) { + if ( value ) { + this.element.attr( "disabled", true ); + } else { + this.element.removeAttr( "disabled" ); + } + } + this._resetButton(); + }, + + refresh: function() { + var isDisabled = this.element.is( ":disabled" ); + if ( isDisabled !== this.options.disabled ) { + this._setOption( "disabled", isDisabled ); + } + if ( this.type === "radio" ) { + radioGroup( this.element[0] ).each(function() { + if ( $( this ).is( ":checked" ) ) { + $( this ).button( "widget" ) + .addClass( "ui-state-active" ) + .attr( "aria-pressed", true ); + } else { + $( this ).button( "widget" ) + .removeClass( "ui-state-active" ) + .attr( "aria-pressed", false ); + } + }); + } else if ( this.type === "checkbox" ) { + if ( this.element.is( ":checked" ) ) { + this.buttonElement + .addClass( "ui-state-active" ) + .attr( "aria-pressed", true ); + } else { + this.buttonElement + .removeClass( "ui-state-active" ) + .attr( "aria-pressed", false ); + } + } + }, + + _resetButton: function() { + if ( this.type === "input" ) { + if ( this.options.label ) { + this.element.val( this.options.label ); + } + return; + } + var buttonElement = this.buttonElement.removeClass( typeClasses ), + buttonText = $( "" ) + .addClass( "ui-button-text" ) + .html( this.options.label ) + .appendTo( buttonElement.empty() ) + .text(), + icons = this.options.icons, + multipleIcons = icons.primary && icons.secondary, + buttonClasses = []; + + if ( icons.primary || icons.secondary ) { + buttonClasses.push( "ui-button-text-icon" + ( multipleIcons ? "s" : ( icons.primary ? "-primary" : "-secondary" ) ) ); + + if ( icons.primary ) { + buttonElement.prepend( "" ); + } + + if ( icons.secondary ) { + buttonElement.append( "" ); + } + + if ( !this.options.text ) { + buttonClasses.push( multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only" ); + buttonElement.removeClass( "ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary" ); + + if ( !this.hasTitle ) { + buttonElement.attr( "title", buttonText ); + } + } + } else { + buttonClasses.push( "ui-button-text-only" ); + } + buttonElement.addClass( buttonClasses.join( " " ) ); + } +}); + +$.widget( "ui.buttonset", { + options: { + items: ":button, :submit, :reset, :checkbox, :radio, a, :data(button)" + }, + + _create: function() { + this.element.addClass( "ui-buttonset" ); + }, + + _init: function() { + this.refresh(); + }, + + _setOption: function( key, value ) { + if ( key === "disabled" ) { + this.buttons.button( "option", key, value ); + } + + $.Widget.prototype._setOption.apply( this, arguments ); + }, + + refresh: function() { + this.buttons = this.element.find( this.options.items ) + .filter( ":ui-button" ) + .button( "refresh" ) + .end() + .not( ":ui-button" ) + .button() + .end() + .map(function() { + return $( this ).button( "widget" )[ 0 ]; + }) + .removeClass( "ui-corner-all ui-corner-left ui-corner-right" ) + .filter( ":first" ) + .addClass( "ui-corner-left" ) + .end() + .filter( ":last" ) + .addClass( "ui-corner-right" ) + .end() + .end(); + }, + + destroy: function() { + this.element.removeClass( "ui-buttonset" ); + this.buttons + .map(function() { + return $( this ).button( "widget" )[ 0 ]; + }) + .removeClass( "ui-corner-left ui-corner-right" ) + .end() + .button( "destroy" ); + + $.Widget.prototype.destroy.call( this ); + } +}); + +}( jQuery ) ); diff --git a/js/ui/jquery.ui.core.js b/js/ui/jquery.ui.core.js new file mode 100644 index 0000000000..1dbfd6358e --- /dev/null +++ b/js/ui/jquery.ui.core.js @@ -0,0 +1,308 @@ +/*! + * jQuery UI 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI + */ +(function( $, undefined ) { + +// prevent duplicate loading +// this is only a problem because we proxy existing functions +// and we don't want to double proxy them +$.ui = $.ui || {}; +if ( $.ui.version ) { + return; +} + +$.extend( $.ui, { + version: "1.8.10", + + keyCode: { + ALT: 18, + BACKSPACE: 8, + CAPS_LOCK: 20, + COMMA: 188, + COMMAND: 91, + COMMAND_LEFT: 91, // COMMAND + COMMAND_RIGHT: 93, + CONTROL: 17, + DELETE: 46, + DOWN: 40, + END: 35, + ENTER: 13, + ESCAPE: 27, + HOME: 36, + INSERT: 45, + LEFT: 37, + MENU: 93, // COMMAND_RIGHT + NUMPAD_ADD: 107, + NUMPAD_DECIMAL: 110, + NUMPAD_DIVIDE: 111, + NUMPAD_ENTER: 108, + NUMPAD_MULTIPLY: 106, + NUMPAD_SUBTRACT: 109, + PAGE_DOWN: 34, + PAGE_UP: 33, + PERIOD: 190, + RIGHT: 39, + SHIFT: 16, + SPACE: 32, + TAB: 9, + UP: 38, + WINDOWS: 91 // COMMAND + } +}); + +// plugins +$.fn.extend({ + _focus: $.fn.focus, + focus: function( delay, fn ) { + return typeof delay === "number" ? + this.each(function() { + var elem = this; + setTimeout(function() { + $( elem ).focus(); + if ( fn ) { + fn.call( elem ); + } + }, delay ); + }) : + this._focus.apply( this, arguments ); + }, + + scrollParent: function() { + var scrollParent; + if (($.browser.msie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) { + scrollParent = this.parents().filter(function() { + return (/(relative|absolute|fixed)/).test($.curCSS(this,'position',1)) && (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1)); + }).eq(0); + } else { + scrollParent = this.parents().filter(function() { + return (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1)); + }).eq(0); + } + + return (/fixed/).test(this.css('position')) || !scrollParent.length ? $(document) : scrollParent; + }, + + zIndex: function( zIndex ) { + if ( zIndex !== undefined ) { + return this.css( "zIndex", zIndex ); + } + + if ( this.length ) { + var elem = $( this[ 0 ] ), position, value; + while ( elem.length && elem[ 0 ] !== document ) { + // Ignore z-index if position is set to a value where z-index is ignored by the browser + // This makes behavior of this function consistent across browsers + // WebKit always returns auto if the element is positioned + position = elem.css( "position" ); + if ( position === "absolute" || position === "relative" || position === "fixed" ) { + // IE returns 0 when zIndex is not specified + // other browsers return a string + // we ignore the case of nested elements with an explicit value of 0 + //
        + value = parseInt( elem.css( "zIndex" ), 10 ); + if ( !isNaN( value ) && value !== 0 ) { + return value; + } + } + elem = elem.parent(); + } + } + + return 0; + }, + + disableSelection: function() { + return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) + + ".ui-disableSelection", function( event ) { + event.preventDefault(); + }); + }, + + enableSelection: function() { + return this.unbind( ".ui-disableSelection" ); + } +}); + +$.each( [ "Width", "Height" ], function( i, name ) { + var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ], + type = name.toLowerCase(), + orig = { + innerWidth: $.fn.innerWidth, + innerHeight: $.fn.innerHeight, + outerWidth: $.fn.outerWidth, + outerHeight: $.fn.outerHeight + }; + + function reduce( elem, size, border, margin ) { + $.each( side, function() { + size -= parseFloat( $.curCSS( elem, "padding" + this, true) ) || 0; + if ( border ) { + size -= parseFloat( $.curCSS( elem, "border" + this + "Width", true) ) || 0; + } + if ( margin ) { + size -= parseFloat( $.curCSS( elem, "margin" + this, true) ) || 0; + } + }); + return size; + } + + $.fn[ "inner" + name ] = function( size ) { + if ( size === undefined ) { + return orig[ "inner" + name ].call( this ); + } + + return this.each(function() { + $( this ).css( type, reduce( this, size ) + "px" ); + }); + }; + + $.fn[ "outer" + name] = function( size, margin ) { + if ( typeof size !== "number" ) { + return orig[ "outer" + name ].call( this, size ); + } + + return this.each(function() { + $( this).css( type, reduce( this, size, true, margin ) + "px" ); + }); + }; +}); + +// selectors +function visible( element ) { + return !$( element ).parents().andSelf().filter(function() { + return $.curCSS( this, "visibility" ) === "hidden" || + $.expr.filters.hidden( this ); + }).length; +} + +$.extend( $.expr[ ":" ], { + data: function( elem, i, match ) { + return !!$.data( elem, match[ 3 ] ); + }, + + focusable: function( element ) { + var nodeName = element.nodeName.toLowerCase(), + tabIndex = $.attr( element, "tabindex" ); + if ( "area" === nodeName ) { + var map = element.parentNode, + mapName = map.name, + img; + if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) { + return false; + } + img = $( "img[usemap=#" + mapName + "]" )[0]; + return !!img && visible( img ); + } + return ( /input|select|textarea|button|object/.test( nodeName ) + ? !element.disabled + : "a" == nodeName + ? element.href || !isNaN( tabIndex ) + : !isNaN( tabIndex )) + // the element and all of its ancestors must be visible + && visible( element ); + }, + + tabbable: function( element ) { + var tabIndex = $.attr( element, "tabindex" ); + return ( isNaN( tabIndex ) || tabIndex >= 0 ) && $( element ).is( ":focusable" ); + } +}); + +// support +$(function() { + var body = document.body, + div = body.appendChild( div = document.createElement( "div" ) ); + + $.extend( div.style, { + minHeight: "100px", + height: "auto", + padding: 0, + borderWidth: 0 + }); + + $.support.minHeight = div.offsetHeight === 100; + $.support.selectstart = "onselectstart" in div; + + // set display to none to avoid a layout bug in IE + // http://dev.jquery.com/ticket/4014 + body.removeChild( div ).style.display = "none"; +}); + + + + + +// deprecated +$.extend( $.ui, { + // $.ui.plugin is deprecated. Use the proxy pattern instead. + plugin: { + add: function( module, option, set ) { + var proto = $.ui[ module ].prototype; + for ( var i in set ) { + proto.plugins[ i ] = proto.plugins[ i ] || []; + proto.plugins[ i ].push( [ option, set[ i ] ] ); + } + }, + call: function( instance, name, args ) { + var set = instance.plugins[ name ]; + if ( !set || !instance.element[ 0 ].parentNode ) { + return; + } + + for ( var i = 0; i < set.length; i++ ) { + if ( instance.options[ set[ i ][ 0 ] ] ) { + set[ i ][ 1 ].apply( instance.element, args ); + } + } + } + }, + + // will be deprecated when we switch to jQuery 1.4 - use jQuery.contains() + contains: function( a, b ) { + return document.compareDocumentPosition ? + a.compareDocumentPosition( b ) & 16 : + a !== b && a.contains( b ); + }, + + // only used by resizable + hasScroll: function( el, a ) { + + //If overflow is hidden, the element might have extra content, but the user wants to hide it + if ( $( el ).css( "overflow" ) === "hidden") { + return false; + } + + var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop", + has = false; + + if ( el[ scroll ] > 0 ) { + return true; + } + + // TODO: determine which cases actually cause this to happen + // if the element doesn't have the scroll set, see if it's possible to + // set the scroll + el[ scroll ] = 1; + has = ( el[ scroll ] > 0 ); + el[ scroll ] = 0; + return has; + }, + + // these are odd functions, fix the API or move into individual plugins + isOverAxis: function( x, reference, size ) { + //Determines when x coordinate is over "b" element axis + return ( x > reference ) && ( x < ( reference + size ) ); + }, + isOver: function( y, x, top, left, height, width ) { + //Determines when x, y coordinates is over "b" element + return $.ui.isOverAxis( y, top, height ) && $.ui.isOverAxis( x, left, width ); + } +}); + +})( jQuery ); diff --git a/js/ui/jquery.ui.datepicker.js b/js/ui/jquery.ui.datepicker.js new file mode 100644 index 0000000000..0e896462c0 --- /dev/null +++ b/js/ui/jquery.ui.datepicker.js @@ -0,0 +1,1766 @@ +/* + * jQuery UI Datepicker 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Datepicker + * + * Depends: + * jquery.ui.core.js + */ +(function( $, undefined ) { + +$.extend($.ui, { datepicker: { version: "1.8.10" } }); + +var PROP_NAME = 'datepicker'; +var dpuuid = new Date().getTime(); + +/* Date picker manager. + Use the singleton instance of this class, $.datepicker, to interact with the date picker. + Settings for (groups of) date pickers are maintained in an instance object, + allowing multiple different settings on the same page. */ + +function Datepicker() { + this.debug = false; // Change this to true to start debugging + this._curInst = null; // The current instance in use + this._keyEvent = false; // If the last event was a key event + this._disabledInputs = []; // List of date picker inputs that have been disabled + this._datepickerShowing = false; // True if the popup picker is showing , false if not + this._inDialog = false; // True if showing within a "dialog", false if not + this._mainDivId = 'ui-datepicker-div'; // The ID of the main datepicker division + this._inlineClass = 'ui-datepicker-inline'; // The name of the inline marker class + this._appendClass = 'ui-datepicker-append'; // The name of the append marker class + this._triggerClass = 'ui-datepicker-trigger'; // The name of the trigger marker class + this._dialogClass = 'ui-datepicker-dialog'; // The name of the dialog marker class + this._disableClass = 'ui-datepicker-disabled'; // The name of the disabled covering marker class + this._unselectableClass = 'ui-datepicker-unselectable'; // The name of the unselectable cell marker class + this._currentClass = 'ui-datepicker-current-day'; // The name of the current day marker class + this._dayOverClass = 'ui-datepicker-days-cell-over'; // The name of the day hover marker class + this.regional = []; // Available regional settings, indexed by language code + this.regional[''] = { // Default regional settings + closeText: 'Done', // Display text for close link + prevText: 'Prev', // Display text for previous month link + nextText: 'Next', // Display text for next month link + currentText: 'Today', // Display text for current month link + monthNames: ['January','February','March','April','May','June', + 'July','August','September','October','November','December'], // Names of months for drop-down and formatting + monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], // For formatting + dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], // For formatting + dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], // For formatting + dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], // Column headings for days starting at Sunday + weekHeader: 'Wk', // Column header for week of the year + dateFormat: 'mm/dd/yy', // See format options on parseDate + firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ... + isRTL: false, // True if right-to-left language, false if left-to-right + showMonthAfterYear: false, // True if the year select precedes month, false for month then year + yearSuffix: '' // Additional text to append to the year in the month headers + }; + this._defaults = { // Global defaults for all the date picker instances + showOn: 'focus', // 'focus' for popup on focus, + // 'button' for trigger button, or 'both' for either + showAnim: 'fadeIn', // Name of jQuery animation for popup + showOptions: {}, // Options for enhanced animations + defaultDate: null, // Used when field is blank: actual date, + // +/-number for offset from today, null for today + appendText: '', // Display text following the input box, e.g. showing the format + buttonText: '...', // Text for trigger button + buttonImage: '', // URL for trigger button image + buttonImageOnly: false, // True if the image appears alone, false if it appears on a button + hideIfNoPrevNext: false, // True to hide next/previous month links + // if not applicable, false to just disable them + navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links + gotoCurrent: false, // True if today link goes back to current selection instead + changeMonth: false, // True if month can be selected directly, false if only prev/next + changeYear: false, // True if year can be selected directly, false if only prev/next + yearRange: 'c-10:c+10', // Range of years to display in drop-down, + // either relative to today's year (-nn:+nn), relative to currently displayed year + // (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n) + showOtherMonths: false, // True to show dates in other months, false to leave blank + selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable + showWeek: false, // True to show week of the year, false to not show it + calculateWeek: this.iso8601Week, // How to calculate the week of the year, + // takes a Date and returns the number of the week for it + shortYearCutoff: '+10', // Short year values < this are in the current century, + // > this are in the previous century, + // string value starting with '+' for current year + value + minDate: null, // The earliest selectable date, or null for no limit + maxDate: null, // The latest selectable date, or null for no limit + duration: 'fast', // Duration of display/closure + beforeShowDay: null, // Function that takes a date and returns an array with + // [0] = true if selectable, false if not, [1] = custom CSS class name(s) or '', + // [2] = cell title (optional), e.g. $.datepicker.noWeekends + beforeShow: null, // Function that takes an input field and + // returns a set of custom settings for the date picker + onSelect: null, // Define a callback function when a date is selected + onChangeMonthYear: null, // Define a callback function when the month or year is changed + onClose: null, // Define a callback function when the datepicker is closed + numberOfMonths: 1, // Number of months to show at a time + showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0) + stepMonths: 1, // Number of months to step back/forward + stepBigMonths: 12, // Number of months to step back/forward for the big links + altField: '', // Selector for an alternate field to store selected dates into + altFormat: '', // The date format to use for the alternate field + constrainInput: true, // The input is constrained by the current date format + showButtonPanel: false, // True to show button panel, false to not show it + autoSize: false // True to size the input for the date format, false to leave as is + }; + $.extend(this._defaults, this.regional['']); + this.dpDiv = $('
        '); +} + +$.extend(Datepicker.prototype, { + /* Class name added to elements to indicate already configured with a date picker. */ + markerClassName: 'hasDatepicker', + + /* Debug logging (if enabled). */ + log: function () { + if (this.debug) + console.log.apply('', arguments); + }, + + // TODO rename to "widget" when switching to widget factory + _widgetDatepicker: function() { + return this.dpDiv; + }, + + /* Override the default settings for all instances of the date picker. + @param settings object - the new settings to use as defaults (anonymous object) + @return the manager object */ + setDefaults: function(settings) { + extendRemove(this._defaults, settings || {}); + return this; + }, + + /* Attach the date picker to a jQuery selection. + @param target element - the target input field or division or span + @param settings object - the new settings to use for this date picker instance (anonymous) */ + _attachDatepicker: function(target, settings) { + // check for settings on the control itself - in namespace 'date:' + var inlineSettings = null; + for (var attrName in this._defaults) { + var attrValue = target.getAttribute('date:' + attrName); + if (attrValue) { + inlineSettings = inlineSettings || {}; + try { + inlineSettings[attrName] = eval(attrValue); + } catch (err) { + inlineSettings[attrName] = attrValue; + } + } + } + var nodeName = target.nodeName.toLowerCase(); + var inline = (nodeName == 'div' || nodeName == 'span'); + if (!target.id) { + this.uuid += 1; + target.id = 'dp' + this.uuid; + } + var inst = this._newInst($(target), inline); + inst.settings = $.extend({}, settings || {}, inlineSettings || {}); + if (nodeName == 'input') { + this._connectDatepicker(target, inst); + } else if (inline) { + this._inlineDatepicker(target, inst); + } + }, + + /* Create a new instance object. */ + _newInst: function(target, inline) { + var id = target[0].id.replace(/([^A-Za-z0-9_-])/g, '\\\\$1'); // escape jQuery meta chars + return {id: id, input: target, // associated target + selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection + drawMonth: 0, drawYear: 0, // month being drawn + inline: inline, // is datepicker inline or not + dpDiv: (!inline ? this.dpDiv : // presentation div + $('
        '))}; + }, + + /* Attach the date picker to an input field. */ + _connectDatepicker: function(target, inst) { + var input = $(target); + inst.append = $([]); + inst.trigger = $([]); + if (input.hasClass(this.markerClassName)) + return; + this._attachments(input, inst); + input.addClass(this.markerClassName).keydown(this._doKeyDown). + keypress(this._doKeyPress).keyup(this._doKeyUp). + bind("setData.datepicker", function(event, key, value) { + inst.settings[key] = value; + }).bind("getData.datepicker", function(event, key) { + return this._get(inst, key); + }); + this._autoSize(inst); + $.data(target, PROP_NAME, inst); + }, + + /* Make attachments based on settings. */ + _attachments: function(input, inst) { + var appendText = this._get(inst, 'appendText'); + var isRTL = this._get(inst, 'isRTL'); + if (inst.append) + inst.append.remove(); + if (appendText) { + inst.append = $('' + appendText + ''); + input[isRTL ? 'before' : 'after'](inst.append); + } + input.unbind('focus', this._showDatepicker); + if (inst.trigger) + inst.trigger.remove(); + var showOn = this._get(inst, 'showOn'); + if (showOn == 'focus' || showOn == 'both') // pop-up date picker when in the marked field + input.focus(this._showDatepicker); + if (showOn == 'button' || showOn == 'both') { // pop-up date picker when button clicked + var buttonText = this._get(inst, 'buttonText'); + var buttonImage = this._get(inst, 'buttonImage'); + inst.trigger = $(this._get(inst, 'buttonImageOnly') ? + $('').addClass(this._triggerClass). + attr({ src: buttonImage, alt: buttonText, title: buttonText }) : + $('').addClass(this._triggerClass). + html(buttonImage == '' ? buttonText : $('').attr( + { src:buttonImage, alt:buttonText, title:buttonText }))); + input[isRTL ? 'before' : 'after'](inst.trigger); + inst.trigger.click(function() { + if ($.datepicker._datepickerShowing && $.datepicker._lastInput == input[0]) + $.datepicker._hideDatepicker(); + else + $.datepicker._showDatepicker(input[0]); + return false; + }); + } + }, + + /* Apply the maximum length for the date format. */ + _autoSize: function(inst) { + if (this._get(inst, 'autoSize') && !inst.inline) { + var date = new Date(2009, 12 - 1, 20); // Ensure double digits + var dateFormat = this._get(inst, 'dateFormat'); + if (dateFormat.match(/[DM]/)) { + var findMax = function(names) { + var max = 0; + var maxI = 0; + for (var i = 0; i < names.length; i++) { + if (names[i].length > max) { + max = names[i].length; + maxI = i; + } + } + return maxI; + }; + date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ? + 'monthNames' : 'monthNamesShort')))); + date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ? + 'dayNames' : 'dayNamesShort'))) + 20 - date.getDay()); + } + inst.input.attr('size', this._formatDate(inst, date).length); + } + }, + + /* Attach an inline date picker to a div. */ + _inlineDatepicker: function(target, inst) { + var divSpan = $(target); + if (divSpan.hasClass(this.markerClassName)) + return; + divSpan.addClass(this.markerClassName).append(inst.dpDiv). + bind("setData.datepicker", function(event, key, value){ + inst.settings[key] = value; + }).bind("getData.datepicker", function(event, key){ + return this._get(inst, key); + }); + $.data(target, PROP_NAME, inst); + this._setDate(inst, this._getDefaultDate(inst), true); + this._updateDatepicker(inst); + this._updateAlternate(inst); + inst.dpDiv.show(); + }, + + /* Pop-up the date picker in a "dialog" box. + @param input element - ignored + @param date string or Date - the initial date to display + @param onSelect function - the function to call when a date is selected + @param settings object - update the dialog date picker instance's settings (anonymous object) + @param pos int[2] - coordinates for the dialog's position within the screen or + event - with x/y coordinates or + leave empty for default (screen centre) + @return the manager object */ + _dialogDatepicker: function(input, date, onSelect, settings, pos) { + var inst = this._dialogInst; // internal instance + if (!inst) { + this.uuid += 1; + var id = 'dp' + this.uuid; + this._dialogInput = $(''); + this._dialogInput.keydown(this._doKeyDown); + $('body').append(this._dialogInput); + inst = this._dialogInst = this._newInst(this._dialogInput, false); + inst.settings = {}; + $.data(this._dialogInput[0], PROP_NAME, inst); + } + extendRemove(inst.settings, settings || {}); + date = (date && date.constructor == Date ? this._formatDate(inst, date) : date); + this._dialogInput.val(date); + + this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null); + if (!this._pos) { + var browserWidth = document.documentElement.clientWidth; + var browserHeight = document.documentElement.clientHeight; + var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft; + var scrollY = document.documentElement.scrollTop || document.body.scrollTop; + this._pos = // should use actual width/height below + [(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY]; + } + + // move input on screen for focus, but hidden behind dialog + this._dialogInput.css('left', (this._pos[0] + 20) + 'px').css('top', this._pos[1] + 'px'); + inst.settings.onSelect = onSelect; + this._inDialog = true; + this.dpDiv.addClass(this._dialogClass); + this._showDatepicker(this._dialogInput[0]); + if ($.blockUI) + $.blockUI(this.dpDiv); + $.data(this._dialogInput[0], PROP_NAME, inst); + return this; + }, + + /* Detach a datepicker from its control. + @param target element - the target input field or division or span */ + _destroyDatepicker: function(target) { + var $target = $(target); + var inst = $.data(target, PROP_NAME); + if (!$target.hasClass(this.markerClassName)) { + return; + } + var nodeName = target.nodeName.toLowerCase(); + $.removeData(target, PROP_NAME); + if (nodeName == 'input') { + inst.append.remove(); + inst.trigger.remove(); + $target.removeClass(this.markerClassName). + unbind('focus', this._showDatepicker). + unbind('keydown', this._doKeyDown). + unbind('keypress', this._doKeyPress). + unbind('keyup', this._doKeyUp); + } else if (nodeName == 'div' || nodeName == 'span') + $target.removeClass(this.markerClassName).empty(); + }, + + /* Enable the date picker to a jQuery selection. + @param target element - the target input field or division or span */ + _enableDatepicker: function(target) { + var $target = $(target); + var inst = $.data(target, PROP_NAME); + if (!$target.hasClass(this.markerClassName)) { + return; + } + var nodeName = target.nodeName.toLowerCase(); + if (nodeName == 'input') { + target.disabled = false; + inst.trigger.filter('button'). + each(function() { this.disabled = false; }).end(). + filter('img').css({opacity: '1.0', cursor: ''}); + } + else if (nodeName == 'div' || nodeName == 'span') { + var inline = $target.children('.' + this._inlineClass); + inline.children().removeClass('ui-state-disabled'); + } + this._disabledInputs = $.map(this._disabledInputs, + function(value) { return (value == target ? null : value); }); // delete entry + }, + + /* Disable the date picker to a jQuery selection. + @param target element - the target input field or division or span */ + _disableDatepicker: function(target) { + var $target = $(target); + var inst = $.data(target, PROP_NAME); + if (!$target.hasClass(this.markerClassName)) { + return; + } + var nodeName = target.nodeName.toLowerCase(); + if (nodeName == 'input') { + target.disabled = true; + inst.trigger.filter('button'). + each(function() { this.disabled = true; }).end(). + filter('img').css({opacity: '0.5', cursor: 'default'}); + } + else if (nodeName == 'div' || nodeName == 'span') { + var inline = $target.children('.' + this._inlineClass); + inline.children().addClass('ui-state-disabled'); + } + this._disabledInputs = $.map(this._disabledInputs, + function(value) { return (value == target ? null : value); }); // delete entry + this._disabledInputs[this._disabledInputs.length] = target; + }, + + /* Is the first field in a jQuery collection disabled as a datepicker? + @param target element - the target input field or division or span + @return boolean - true if disabled, false if enabled */ + _isDisabledDatepicker: function(target) { + if (!target) { + return false; + } + for (var i = 0; i < this._disabledInputs.length; i++) { + if (this._disabledInputs[i] == target) + return true; + } + return false; + }, + + /* Retrieve the instance data for the target control. + @param target element - the target input field or division or span + @return object - the associated instance data + @throws error if a jQuery problem getting data */ + _getInst: function(target) { + try { + return $.data(target, PROP_NAME); + } + catch (err) { + throw 'Missing instance data for this datepicker'; + } + }, + + /* Update or retrieve the settings for a date picker attached to an input field or division. + @param target element - the target input field or division or span + @param name object - the new settings to update or + string - the name of the setting to change or retrieve, + when retrieving also 'all' for all instance settings or + 'defaults' for all global defaults + @param value any - the new value for the setting + (omit if above is an object or to retrieve a value) */ + _optionDatepicker: function(target, name, value) { + var inst = this._getInst(target); + if (arguments.length == 2 && typeof name == 'string') { + return (name == 'defaults' ? $.extend({}, $.datepicker._defaults) : + (inst ? (name == 'all' ? $.extend({}, inst.settings) : + this._get(inst, name)) : null)); + } + var settings = name || {}; + if (typeof name == 'string') { + settings = {}; + settings[name] = value; + } + if (inst) { + if (this._curInst == inst) { + this._hideDatepicker(); + } + var date = this._getDateDatepicker(target, true); + extendRemove(inst.settings, settings); + this._attachments($(target), inst); + this._autoSize(inst); + this._setDateDatepicker(target, date); + this._updateDatepicker(inst); + } + }, + + // change method deprecated + _changeDatepicker: function(target, name, value) { + this._optionDatepicker(target, name, value); + }, + + /* Redraw the date picker attached to an input field or division. + @param target element - the target input field or division or span */ + _refreshDatepicker: function(target) { + var inst = this._getInst(target); + if (inst) { + this._updateDatepicker(inst); + } + }, + + /* Set the dates for a jQuery selection. + @param target element - the target input field or division or span + @param date Date - the new date */ + _setDateDatepicker: function(target, date) { + var inst = this._getInst(target); + if (inst) { + this._setDate(inst, date); + this._updateDatepicker(inst); + this._updateAlternate(inst); + } + }, + + /* Get the date(s) for the first entry in a jQuery selection. + @param target element - the target input field or division or span + @param noDefault boolean - true if no default date is to be used + @return Date - the current date */ + _getDateDatepicker: function(target, noDefault) { + var inst = this._getInst(target); + if (inst && !inst.inline) + this._setDateFromField(inst, noDefault); + return (inst ? this._getDate(inst) : null); + }, + + /* Handle keystrokes. */ + _doKeyDown: function(event) { + var inst = $.datepicker._getInst(event.target); + var handled = true; + var isRTL = inst.dpDiv.is('.ui-datepicker-rtl'); + inst._keyEvent = true; + if ($.datepicker._datepickerShowing) + switch (event.keyCode) { + case 9: $.datepicker._hideDatepicker(); + handled = false; + break; // hide on tab out + case 13: var sel = $('td.' + $.datepicker._dayOverClass + ':not(.' + + $.datepicker._currentClass + ')', inst.dpDiv); + if (sel[0]) + $.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]); + else + $.datepicker._hideDatepicker(); + return false; // don't submit the form + break; // select the value on enter + case 27: $.datepicker._hideDatepicker(); + break; // hide on escape + case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ? + -$.datepicker._get(inst, 'stepBigMonths') : + -$.datepicker._get(inst, 'stepMonths')), 'M'); + break; // previous month/year on page up/+ ctrl + case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ? + +$.datepicker._get(inst, 'stepBigMonths') : + +$.datepicker._get(inst, 'stepMonths')), 'M'); + break; // next month/year on page down/+ ctrl + case 35: if (event.ctrlKey || event.metaKey) $.datepicker._clearDate(event.target); + handled = event.ctrlKey || event.metaKey; + break; // clear on ctrl or command +end + case 36: if (event.ctrlKey || event.metaKey) $.datepicker._gotoToday(event.target); + handled = event.ctrlKey || event.metaKey; + break; // current on ctrl or command +home + case 37: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), 'D'); + handled = event.ctrlKey || event.metaKey; + // -1 day on ctrl or command +left + if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ? + -$.datepicker._get(inst, 'stepBigMonths') : + -$.datepicker._get(inst, 'stepMonths')), 'M'); + // next month/year on alt +left on Mac + break; + case 38: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, -7, 'D'); + handled = event.ctrlKey || event.metaKey; + break; // -1 week on ctrl or command +up + case 39: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), 'D'); + handled = event.ctrlKey || event.metaKey; + // +1 day on ctrl or command +right + if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ? + +$.datepicker._get(inst, 'stepBigMonths') : + +$.datepicker._get(inst, 'stepMonths')), 'M'); + // next month/year on alt +right + break; + case 40: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, +7, 'D'); + handled = event.ctrlKey || event.metaKey; + break; // +1 week on ctrl or command +down + default: handled = false; + } + else if (event.keyCode == 36 && event.ctrlKey) // display the date picker on ctrl+home + $.datepicker._showDatepicker(this); + else { + handled = false; + } + if (handled) { + event.preventDefault(); + event.stopPropagation(); + } + }, + + /* Filter entered characters - based on date format. */ + _doKeyPress: function(event) { + var inst = $.datepicker._getInst(event.target); + if ($.datepicker._get(inst, 'constrainInput')) { + var chars = $.datepicker._possibleChars($.datepicker._get(inst, 'dateFormat')); + var chr = String.fromCharCode(event.charCode == undefined ? event.keyCode : event.charCode); + return event.ctrlKey || event.metaKey || (chr < ' ' || !chars || chars.indexOf(chr) > -1); + } + }, + + /* Synchronise manual entry and field/alternate field. */ + _doKeyUp: function(event) { + var inst = $.datepicker._getInst(event.target); + if (inst.input.val() != inst.lastVal) { + try { + var date = $.datepicker.parseDate($.datepicker._get(inst, 'dateFormat'), + (inst.input ? inst.input.val() : null), + $.datepicker._getFormatConfig(inst)); + if (date) { // only if valid + $.datepicker._setDateFromField(inst); + $.datepicker._updateAlternate(inst); + $.datepicker._updateDatepicker(inst); + } + } + catch (event) { + $.datepicker.log(event); + } + } + return true; + }, + + /* Pop-up the date picker for a given input field. + @param input element - the input field attached to the date picker or + event - if triggered by focus */ + _showDatepicker: function(input) { + input = input.target || input; + if (input.nodeName.toLowerCase() != 'input') // find from button/image trigger + input = $('input', input.parentNode)[0]; + if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput == input) // already here + return; + var inst = $.datepicker._getInst(input); + if ($.datepicker._curInst && $.datepicker._curInst != inst) { + $.datepicker._curInst.dpDiv.stop(true, true); + } + var beforeShow = $.datepicker._get(inst, 'beforeShow'); + extendRemove(inst.settings, (beforeShow ? beforeShow.apply(input, [input, inst]) : {})); + inst.lastVal = null; + $.datepicker._lastInput = input; + $.datepicker._setDateFromField(inst); + if ($.datepicker._inDialog) // hide cursor + input.value = ''; + if (!$.datepicker._pos) { // position below input + $.datepicker._pos = $.datepicker._findPos(input); + $.datepicker._pos[1] += input.offsetHeight; // add the height + } + var isFixed = false; + $(input).parents().each(function() { + isFixed |= $(this).css('position') == 'fixed'; + return !isFixed; + }); + if (isFixed && $.browser.opera) { // correction for Opera when fixed and scrolled + $.datepicker._pos[0] -= document.documentElement.scrollLeft; + $.datepicker._pos[1] -= document.documentElement.scrollTop; + } + var offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]}; + $.datepicker._pos = null; + //to avoid flashes on Firefox + inst.dpDiv.empty(); + // determine sizing offscreen + inst.dpDiv.css({position: 'absolute', display: 'block', top: '-1000px'}); + $.datepicker._updateDatepicker(inst); + // fix width for dynamic number of date pickers + // and adjust position before showing + offset = $.datepicker._checkOffset(inst, offset, isFixed); + inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ? + 'static' : (isFixed ? 'fixed' : 'absolute')), display: 'none', + left: offset.left + 'px', top: offset.top + 'px'}); + if (!inst.inline) { + var showAnim = $.datepicker._get(inst, 'showAnim'); + var duration = $.datepicker._get(inst, 'duration'); + var postProcess = function() { + $.datepicker._datepickerShowing = true; + var cover = inst.dpDiv.find('iframe.ui-datepicker-cover'); // IE6- only + if( !! cover.length ){ + var borders = $.datepicker._getBorders(inst.dpDiv); + cover.css({left: -borders[0], top: -borders[1], + width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight()}); + } + }; + inst.dpDiv.zIndex($(input).zIndex()+1); + if ($.effects && $.effects[showAnim]) + inst.dpDiv.show(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess); + else + inst.dpDiv[showAnim || 'show']((showAnim ? duration : null), postProcess); + if (!showAnim || !duration) + postProcess(); + if (inst.input.is(':visible') && !inst.input.is(':disabled')) + inst.input.focus(); + $.datepicker._curInst = inst; + } + }, + + /* Generate the date picker content. */ + _updateDatepicker: function(inst) { + var self = this; + var borders = $.datepicker._getBorders(inst.dpDiv); + inst.dpDiv.empty().append(this._generateHTML(inst)); + var cover = inst.dpDiv.find('iframe.ui-datepicker-cover'); // IE6- only + if( !!cover.length ){ //avoid call to outerXXXX() when not in IE6 + cover.css({left: -borders[0], top: -borders[1], width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight()}) + } + inst.dpDiv.find('button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a') + .bind('mouseout', function(){ + $(this).removeClass('ui-state-hover'); + if(this.className.indexOf('ui-datepicker-prev') != -1) $(this).removeClass('ui-datepicker-prev-hover'); + if(this.className.indexOf('ui-datepicker-next') != -1) $(this).removeClass('ui-datepicker-next-hover'); + }) + .bind('mouseover', function(){ + if (!self._isDisabledDatepicker( inst.inline ? inst.dpDiv.parent()[0] : inst.input[0])) { + $(this).parents('.ui-datepicker-calendar').find('a').removeClass('ui-state-hover'); + $(this).addClass('ui-state-hover'); + if(this.className.indexOf('ui-datepicker-prev') != -1) $(this).addClass('ui-datepicker-prev-hover'); + if(this.className.indexOf('ui-datepicker-next') != -1) $(this).addClass('ui-datepicker-next-hover'); + } + }) + .end() + .find('.' + this._dayOverClass + ' a') + .trigger('mouseover') + .end(); + var numMonths = this._getNumberOfMonths(inst); + var cols = numMonths[1]; + var width = 17; + if (cols > 1) + inst.dpDiv.addClass('ui-datepicker-multi-' + cols).css('width', (width * cols) + 'em'); + else + inst.dpDiv.removeClass('ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4').width(''); + inst.dpDiv[(numMonths[0] != 1 || numMonths[1] != 1 ? 'add' : 'remove') + + 'Class']('ui-datepicker-multi'); + inst.dpDiv[(this._get(inst, 'isRTL') ? 'add' : 'remove') + + 'Class']('ui-datepicker-rtl'); + if (inst == $.datepicker._curInst && $.datepicker._datepickerShowing && inst.input && + // #6694 - don't focus the input if it's already focused + // this breaks the change event in IE + inst.input.is(':visible') && !inst.input.is(':disabled') && inst.input[0] != document.activeElement) + inst.input.focus(); + // deffered render of the years select (to avoid flashes on Firefox) + if( inst.yearshtml ){ + var origyearshtml = inst.yearshtml; + setTimeout(function(){ + //assure that inst.yearshtml didn't change. + if( origyearshtml === inst.yearshtml ){ + inst.dpDiv.find('select.ui-datepicker-year:first').replaceWith(inst.yearshtml); + } + origyearshtml = inst.yearshtml = null; + }, 0); + } + }, + + /* Retrieve the size of left and top borders for an element. + @param elem (jQuery object) the element of interest + @return (number[2]) the left and top borders */ + _getBorders: function(elem) { + var convert = function(value) { + return {thin: 1, medium: 2, thick: 3}[value] || value; + }; + return [parseFloat(convert(elem.css('border-left-width'))), + parseFloat(convert(elem.css('border-top-width')))]; + }, + + /* Check positioning to remain on screen. */ + _checkOffset: function(inst, offset, isFixed) { + var dpWidth = inst.dpDiv.outerWidth(); + var dpHeight = inst.dpDiv.outerHeight(); + var inputWidth = inst.input ? inst.input.outerWidth() : 0; + var inputHeight = inst.input ? inst.input.outerHeight() : 0; + var viewWidth = document.documentElement.clientWidth + $(document).scrollLeft(); + var viewHeight = document.documentElement.clientHeight + $(document).scrollTop(); + + offset.left -= (this._get(inst, 'isRTL') ? (dpWidth - inputWidth) : 0); + offset.left -= (isFixed && offset.left == inst.input.offset().left) ? $(document).scrollLeft() : 0; + offset.top -= (isFixed && offset.top == (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0; + + // now check if datepicker is showing outside window viewport - move to a better place if so. + offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ? + Math.abs(offset.left + dpWidth - viewWidth) : 0); + offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ? + Math.abs(dpHeight + inputHeight) : 0); + + return offset; + }, + + /* Find an object's position on the screen. */ + _findPos: function(obj) { + var inst = this._getInst(obj); + var isRTL = this._get(inst, 'isRTL'); + while (obj && (obj.type == 'hidden' || obj.nodeType != 1 || $.expr.filters.hidden(obj))) { + obj = obj[isRTL ? 'previousSibling' : 'nextSibling']; + } + var position = $(obj).offset(); + return [position.left, position.top]; + }, + + /* Hide the date picker from view. + @param input element - the input field attached to the date picker */ + _hideDatepicker: function(input) { + var inst = this._curInst; + if (!inst || (input && inst != $.data(input, PROP_NAME))) + return; + if (this._datepickerShowing) { + var showAnim = this._get(inst, 'showAnim'); + var duration = this._get(inst, 'duration'); + var postProcess = function() { + $.datepicker._tidyDialog(inst); + this._curInst = null; + }; + if ($.effects && $.effects[showAnim]) + inst.dpDiv.hide(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess); + else + inst.dpDiv[(showAnim == 'slideDown' ? 'slideUp' : + (showAnim == 'fadeIn' ? 'fadeOut' : 'hide'))]((showAnim ? duration : null), postProcess); + if (!showAnim) + postProcess(); + var onClose = this._get(inst, 'onClose'); + if (onClose) + onClose.apply((inst.input ? inst.input[0] : null), + [(inst.input ? inst.input.val() : ''), inst]); // trigger custom callback + this._datepickerShowing = false; + this._lastInput = null; + if (this._inDialog) { + this._dialogInput.css({ position: 'absolute', left: '0', top: '-100px' }); + if ($.blockUI) { + $.unblockUI(); + $('body').append(this.dpDiv); + } + } + this._inDialog = false; + } + }, + + /* Tidy up after a dialog display. */ + _tidyDialog: function(inst) { + inst.dpDiv.removeClass(this._dialogClass).unbind('.ui-datepicker-calendar'); + }, + + /* Close date picker if clicked elsewhere. */ + _checkExternalClick: function(event) { + if (!$.datepicker._curInst) + return; + var $target = $(event.target); + if ($target[0].id != $.datepicker._mainDivId && + $target.parents('#' + $.datepicker._mainDivId).length == 0 && + !$target.hasClass($.datepicker.markerClassName) && + !$target.hasClass($.datepicker._triggerClass) && + $.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI)) + $.datepicker._hideDatepicker(); + }, + + /* Adjust one of the date sub-fields. */ + _adjustDate: function(id, offset, period) { + var target = $(id); + var inst = this._getInst(target[0]); + if (this._isDisabledDatepicker(target[0])) { + return; + } + this._adjustInstDate(inst, offset + + (period == 'M' ? this._get(inst, 'showCurrentAtPos') : 0), // undo positioning + period); + this._updateDatepicker(inst); + }, + + /* Action for current link. */ + _gotoToday: function(id) { + var target = $(id); + var inst = this._getInst(target[0]); + if (this._get(inst, 'gotoCurrent') && inst.currentDay) { + inst.selectedDay = inst.currentDay; + inst.drawMonth = inst.selectedMonth = inst.currentMonth; + inst.drawYear = inst.selectedYear = inst.currentYear; + } + else { + var date = new Date(); + inst.selectedDay = date.getDate(); + inst.drawMonth = inst.selectedMonth = date.getMonth(); + inst.drawYear = inst.selectedYear = date.getFullYear(); + } + this._notifyChange(inst); + this._adjustDate(target); + }, + + /* Action for selecting a new month/year. */ + _selectMonthYear: function(id, select, period) { + var target = $(id); + var inst = this._getInst(target[0]); + inst._selectingMonthYear = false; + inst['selected' + (period == 'M' ? 'Month' : 'Year')] = + inst['draw' + (period == 'M' ? 'Month' : 'Year')] = + parseInt(select.options[select.selectedIndex].value,10); + this._notifyChange(inst); + this._adjustDate(target); + }, + + /* Restore input focus after not changing month/year. */ + _clickMonthYear: function(id) { + var target = $(id); + var inst = this._getInst(target[0]); + if (inst.input && inst._selectingMonthYear) { + setTimeout(function() { + inst.input.focus(); + }, 0); + } + inst._selectingMonthYear = !inst._selectingMonthYear; + }, + + /* Action for selecting a day. */ + _selectDay: function(id, month, year, td) { + var target = $(id); + if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) { + return; + } + var inst = this._getInst(target[0]); + inst.selectedDay = inst.currentDay = $('a', td).html(); + inst.selectedMonth = inst.currentMonth = month; + inst.selectedYear = inst.currentYear = year; + this._selectDate(id, this._formatDate(inst, + inst.currentDay, inst.currentMonth, inst.currentYear)); + }, + + /* Erase the input field and hide the date picker. */ + _clearDate: function(id) { + var target = $(id); + var inst = this._getInst(target[0]); + this._selectDate(target, ''); + }, + + /* Update the input field with the selected date. */ + _selectDate: function(id, dateStr) { + var target = $(id); + var inst = this._getInst(target[0]); + dateStr = (dateStr != null ? dateStr : this._formatDate(inst)); + if (inst.input) + inst.input.val(dateStr); + this._updateAlternate(inst); + var onSelect = this._get(inst, 'onSelect'); + if (onSelect) + onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]); // trigger custom callback + else if (inst.input) + inst.input.trigger('change'); // fire the change event + if (inst.inline) + this._updateDatepicker(inst); + else { + this._hideDatepicker(); + this._lastInput = inst.input[0]; + if (typeof(inst.input[0]) != 'object') + inst.input.focus(); // restore focus + this._lastInput = null; + } + }, + + /* Update any alternate field to synchronise with the main field. */ + _updateAlternate: function(inst) { + var altField = this._get(inst, 'altField'); + if (altField) { // update alternate field too + var altFormat = this._get(inst, 'altFormat') || this._get(inst, 'dateFormat'); + var date = this._getDate(inst); + var dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst)); + $(altField).each(function() { $(this).val(dateStr); }); + } + }, + + /* Set as beforeShowDay function to prevent selection of weekends. + @param date Date - the date to customise + @return [boolean, string] - is this date selectable?, what is its CSS class? */ + noWeekends: function(date) { + var day = date.getDay(); + return [(day > 0 && day < 6), '']; + }, + + /* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition. + @param date Date - the date to get the week for + @return number - the number of the week within the year that contains this date */ + iso8601Week: function(date) { + var checkDate = new Date(date.getTime()); + // Find Thursday of this week starting on Monday + checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)); + var time = checkDate.getTime(); + checkDate.setMonth(0); // Compare with Jan 1 + checkDate.setDate(1); + return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1; + }, + + /* Parse a string value into a date object. + See formatDate below for the possible formats. + + @param format string - the expected format of the date + @param value string - the date in the above format + @param settings Object - attributes include: + shortYearCutoff number - the cutoff year for determining the century (optional) + dayNamesShort string[7] - abbreviated names of the days from Sunday (optional) + dayNames string[7] - names of the days from Sunday (optional) + monthNamesShort string[12] - abbreviated names of the months (optional) + monthNames string[12] - names of the months (optional) + @return Date - the extracted date value or null if value is blank */ + parseDate: function (format, value, settings) { + if (format == null || value == null) + throw 'Invalid arguments'; + value = (typeof value == 'object' ? value.toString() : value + ''); + if (value == '') + return null; + var shortYearCutoff = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff; + shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff : + new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10)); + var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort; + var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames; + var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort; + var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames; + var year = -1; + var month = -1; + var day = -1; + var doy = -1; + var literal = false; + // Check whether a format character is doubled + var lookAhead = function(match) { + var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); + if (matches) + iFormat++; + return matches; + }; + // Extract a number from the string value + var getNumber = function(match) { + var isDoubled = lookAhead(match); + var size = (match == '@' ? 14 : (match == '!' ? 20 : + (match == 'y' && isDoubled ? 4 : (match == 'o' ? 3 : 2)))); + var digits = new RegExp('^\\d{1,' + size + '}'); + var num = value.substring(iValue).match(digits); + if (!num) + throw 'Missing number at position ' + iValue; + iValue += num[0].length; + return parseInt(num[0], 10); + }; + // Extract a name from the string value and convert to an index + var getName = function(match, shortNames, longNames) { + var names = (lookAhead(match) ? longNames : shortNames); + for (var i = 0; i < names.length; i++) { + if (value.substr(iValue, names[i].length).toLowerCase() == names[i].toLowerCase()) { + iValue += names[i].length; + return i + 1; + } + } + throw 'Unknown name at position ' + iValue; + }; + // Confirm that a literal character matches the string value + var checkLiteral = function() { + if (value.charAt(iValue) != format.charAt(iFormat)) + throw 'Unexpected literal at position ' + iValue; + iValue++; + }; + var iValue = 0; + for (var iFormat = 0; iFormat < format.length; iFormat++) { + if (literal) + if (format.charAt(iFormat) == "'" && !lookAhead("'")) + literal = false; + else + checkLiteral(); + else + switch (format.charAt(iFormat)) { + case 'd': + day = getNumber('d'); + break; + case 'D': + getName('D', dayNamesShort, dayNames); + break; + case 'o': + doy = getNumber('o'); + break; + case 'm': + month = getNumber('m'); + break; + case 'M': + month = getName('M', monthNamesShort, monthNames); + break; + case 'y': + year = getNumber('y'); + break; + case '@': + var date = new Date(getNumber('@')); + year = date.getFullYear(); + month = date.getMonth() + 1; + day = date.getDate(); + break; + case '!': + var date = new Date((getNumber('!') - this._ticksTo1970) / 10000); + year = date.getFullYear(); + month = date.getMonth() + 1; + day = date.getDate(); + break; + case "'": + if (lookAhead("'")) + checkLiteral(); + else + literal = true; + break; + default: + checkLiteral(); + } + } + if (year == -1) + year = new Date().getFullYear(); + else if (year < 100) + year += new Date().getFullYear() - new Date().getFullYear() % 100 + + (year <= shortYearCutoff ? 0 : -100); + if (doy > -1) { + month = 1; + day = doy; + do { + var dim = this._getDaysInMonth(year, month - 1); + if (day <= dim) + break; + month++; + day -= dim; + } while (true); + } + var date = this._daylightSavingAdjust(new Date(year, month - 1, day)); + if (date.getFullYear() != year || date.getMonth() + 1 != month || date.getDate() != day) + throw 'Invalid date'; // E.g. 31/02/* + return date; + }, + + /* Standard date formats. */ + ATOM: 'yy-mm-dd', // RFC 3339 (ISO 8601) + COOKIE: 'D, dd M yy', + ISO_8601: 'yy-mm-dd', + RFC_822: 'D, d M y', + RFC_850: 'DD, dd-M-y', + RFC_1036: 'D, d M y', + RFC_1123: 'D, d M yy', + RFC_2822: 'D, d M yy', + RSS: 'D, d M y', // RFC 822 + TICKS: '!', + TIMESTAMP: '@', + W3C: 'yy-mm-dd', // ISO 8601 + + _ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) + + Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000), + + /* Format a date object into a string value. + The format can be combinations of the following: + d - day of month (no leading zero) + dd - day of month (two digit) + o - day of year (no leading zeros) + oo - day of year (three digit) + D - day name short + DD - day name long + m - month of year (no leading zero) + mm - month of year (two digit) + M - month name short + MM - month name long + y - year (two digit) + yy - year (four digit) + @ - Unix timestamp (ms since 01/01/1970) + ! - Windows ticks (100ns since 01/01/0001) + '...' - literal text + '' - single quote + + @param format string - the desired format of the date + @param date Date - the date value to format + @param settings Object - attributes include: + dayNamesShort string[7] - abbreviated names of the days from Sunday (optional) + dayNames string[7] - names of the days from Sunday (optional) + monthNamesShort string[12] - abbreviated names of the months (optional) + monthNames string[12] - names of the months (optional) + @return string - the date in the above format */ + formatDate: function (format, date, settings) { + if (!date) + return ''; + var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort; + var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames; + var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort; + var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames; + // Check whether a format character is doubled + var lookAhead = function(match) { + var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); + if (matches) + iFormat++; + return matches; + }; + // Format a number, with leading zero if necessary + var formatNumber = function(match, value, len) { + var num = '' + value; + if (lookAhead(match)) + while (num.length < len) + num = '0' + num; + return num; + }; + // Format a name, short or long as requested + var formatName = function(match, value, shortNames, longNames) { + return (lookAhead(match) ? longNames[value] : shortNames[value]); + }; + var output = ''; + var literal = false; + if (date) + for (var iFormat = 0; iFormat < format.length; iFormat++) { + if (literal) + if (format.charAt(iFormat) == "'" && !lookAhead("'")) + literal = false; + else + output += format.charAt(iFormat); + else + switch (format.charAt(iFormat)) { + case 'd': + output += formatNumber('d', date.getDate(), 2); + break; + case 'D': + output += formatName('D', date.getDay(), dayNamesShort, dayNames); + break; + case 'o': + output += formatNumber('o', + (date.getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000, 3); + break; + case 'm': + output += formatNumber('m', date.getMonth() + 1, 2); + break; + case 'M': + output += formatName('M', date.getMonth(), monthNamesShort, monthNames); + break; + case 'y': + output += (lookAhead('y') ? date.getFullYear() : + (date.getYear() % 100 < 10 ? '0' : '') + date.getYear() % 100); + break; + case '@': + output += date.getTime(); + break; + case '!': + output += date.getTime() * 10000 + this._ticksTo1970; + break; + case "'": + if (lookAhead("'")) + output += "'"; + else + literal = true; + break; + default: + output += format.charAt(iFormat); + } + } + return output; + }, + + /* Extract all possible characters from the date format. */ + _possibleChars: function (format) { + var chars = ''; + var literal = false; + // Check whether a format character is doubled + var lookAhead = function(match) { + var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); + if (matches) + iFormat++; + return matches; + }; + for (var iFormat = 0; iFormat < format.length; iFormat++) + if (literal) + if (format.charAt(iFormat) == "'" && !lookAhead("'")) + literal = false; + else + chars += format.charAt(iFormat); + else + switch (format.charAt(iFormat)) { + case 'd': case 'm': case 'y': case '@': + chars += '0123456789'; + break; + case 'D': case 'M': + return null; // Accept anything + case "'": + if (lookAhead("'")) + chars += "'"; + else + literal = true; + break; + default: + chars += format.charAt(iFormat); + } + return chars; + }, + + /* Get a setting value, defaulting if necessary. */ + _get: function(inst, name) { + return inst.settings[name] !== undefined ? + inst.settings[name] : this._defaults[name]; + }, + + /* Parse existing date and initialise date picker. */ + _setDateFromField: function(inst, noDefault) { + if (inst.input.val() == inst.lastVal) { + return; + } + var dateFormat = this._get(inst, 'dateFormat'); + var dates = inst.lastVal = inst.input ? inst.input.val() : null; + var date, defaultDate; + date = defaultDate = this._getDefaultDate(inst); + var settings = this._getFormatConfig(inst); + try { + date = this.parseDate(dateFormat, dates, settings) || defaultDate; + } catch (event) { + this.log(event); + dates = (noDefault ? '' : dates); + } + inst.selectedDay = date.getDate(); + inst.drawMonth = inst.selectedMonth = date.getMonth(); + inst.drawYear = inst.selectedYear = date.getFullYear(); + inst.currentDay = (dates ? date.getDate() : 0); + inst.currentMonth = (dates ? date.getMonth() : 0); + inst.currentYear = (dates ? date.getFullYear() : 0); + this._adjustInstDate(inst); + }, + + /* Retrieve the default date shown on opening. */ + _getDefaultDate: function(inst) { + return this._restrictMinMax(inst, + this._determineDate(inst, this._get(inst, 'defaultDate'), new Date())); + }, + + /* A date may be specified as an exact value or a relative one. */ + _determineDate: function(inst, date, defaultDate) { + var offsetNumeric = function(offset) { + var date = new Date(); + date.setDate(date.getDate() + offset); + return date; + }; + var offsetString = function(offset) { + try { + return $.datepicker.parseDate($.datepicker._get(inst, 'dateFormat'), + offset, $.datepicker._getFormatConfig(inst)); + } + catch (e) { + // Ignore + } + var date = (offset.toLowerCase().match(/^c/) ? + $.datepicker._getDate(inst) : null) || new Date(); + var year = date.getFullYear(); + var month = date.getMonth(); + var day = date.getDate(); + var pattern = /([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g; + var matches = pattern.exec(offset); + while (matches) { + switch (matches[2] || 'd') { + case 'd' : case 'D' : + day += parseInt(matches[1],10); break; + case 'w' : case 'W' : + day += parseInt(matches[1],10) * 7; break; + case 'm' : case 'M' : + month += parseInt(matches[1],10); + day = Math.min(day, $.datepicker._getDaysInMonth(year, month)); + break; + case 'y': case 'Y' : + year += parseInt(matches[1],10); + day = Math.min(day, $.datepicker._getDaysInMonth(year, month)); + break; + } + matches = pattern.exec(offset); + } + return new Date(year, month, day); + }; + var newDate = (date == null || date === '' ? defaultDate : (typeof date == 'string' ? offsetString(date) : + (typeof date == 'number' ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime())))); + newDate = (newDate && newDate.toString() == 'Invalid Date' ? defaultDate : newDate); + if (newDate) { + newDate.setHours(0); + newDate.setMinutes(0); + newDate.setSeconds(0); + newDate.setMilliseconds(0); + } + return this._daylightSavingAdjust(newDate); + }, + + /* Handle switch to/from daylight saving. + Hours may be non-zero on daylight saving cut-over: + > 12 when midnight changeover, but then cannot generate + midnight datetime, so jump to 1AM, otherwise reset. + @param date (Date) the date to check + @return (Date) the corrected date */ + _daylightSavingAdjust: function(date) { + if (!date) return null; + date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0); + return date; + }, + + /* Set the date(s) directly. */ + _setDate: function(inst, date, noChange) { + var clear = !date; + var origMonth = inst.selectedMonth; + var origYear = inst.selectedYear; + var newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date())); + inst.selectedDay = inst.currentDay = newDate.getDate(); + inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth(); + inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear(); + if ((origMonth != inst.selectedMonth || origYear != inst.selectedYear) && !noChange) + this._notifyChange(inst); + this._adjustInstDate(inst); + if (inst.input) { + inst.input.val(clear ? '' : this._formatDate(inst)); + } + }, + + /* Retrieve the date(s) directly. */ + _getDate: function(inst) { + var startDate = (!inst.currentYear || (inst.input && inst.input.val() == '') ? null : + this._daylightSavingAdjust(new Date( + inst.currentYear, inst.currentMonth, inst.currentDay))); + return startDate; + }, + + /* Generate the HTML for the current state of the date picker. */ + _generateHTML: function(inst) { + var today = new Date(); + today = this._daylightSavingAdjust( + new Date(today.getFullYear(), today.getMonth(), today.getDate())); // clear time + var isRTL = this._get(inst, 'isRTL'); + var showButtonPanel = this._get(inst, 'showButtonPanel'); + var hideIfNoPrevNext = this._get(inst, 'hideIfNoPrevNext'); + var navigationAsDateFormat = this._get(inst, 'navigationAsDateFormat'); + var numMonths = this._getNumberOfMonths(inst); + var showCurrentAtPos = this._get(inst, 'showCurrentAtPos'); + var stepMonths = this._get(inst, 'stepMonths'); + var isMultiMonth = (numMonths[0] != 1 || numMonths[1] != 1); + var currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) : + new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); + var minDate = this._getMinMaxDate(inst, 'min'); + var maxDate = this._getMinMaxDate(inst, 'max'); + var drawMonth = inst.drawMonth - showCurrentAtPos; + var drawYear = inst.drawYear; + if (drawMonth < 0) { + drawMonth += 12; + drawYear--; + } + if (maxDate) { + var maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(), + maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate())); + maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw); + while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) { + drawMonth--; + if (drawMonth < 0) { + drawMonth = 11; + drawYear--; + } + } + } + inst.drawMonth = drawMonth; + inst.drawYear = drawYear; + var prevText = this._get(inst, 'prevText'); + prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText, + this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)), + this._getFormatConfig(inst))); + var prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ? + '' + prevText + '' : + (hideIfNoPrevNext ? '' : '' + prevText + '')); + var nextText = this._get(inst, 'nextText'); + nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText, + this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)), + this._getFormatConfig(inst))); + var next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ? + '' + nextText + '' : + (hideIfNoPrevNext ? '' : '' + nextText + '')); + var currentText = this._get(inst, 'currentText'); + var gotoDate = (this._get(inst, 'gotoCurrent') && inst.currentDay ? currentDate : today); + currentText = (!navigationAsDateFormat ? currentText : + this.formatDate(currentText, gotoDate, this._getFormatConfig(inst))); + var controls = (!inst.inline ? '' : ''); + var buttonPanel = (showButtonPanel) ? '
        ' + (isRTL ? controls : '') + + (this._isInRange(inst, gotoDate) ? '' : '') + (isRTL ? '' : controls) + '
        ' : ''; + var firstDay = parseInt(this._get(inst, 'firstDay'),10); + firstDay = (isNaN(firstDay) ? 0 : firstDay); + var showWeek = this._get(inst, 'showWeek'); + var dayNames = this._get(inst, 'dayNames'); + var dayNamesShort = this._get(inst, 'dayNamesShort'); + var dayNamesMin = this._get(inst, 'dayNamesMin'); + var monthNames = this._get(inst, 'monthNames'); + var monthNamesShort = this._get(inst, 'monthNamesShort'); + var beforeShowDay = this._get(inst, 'beforeShowDay'); + var showOtherMonths = this._get(inst, 'showOtherMonths'); + var selectOtherMonths = this._get(inst, 'selectOtherMonths'); + var calculateWeek = this._get(inst, 'calculateWeek') || this.iso8601Week; + var defaultDate = this._getDefaultDate(inst); + var html = ''; + for (var row = 0; row < numMonths[0]; row++) { + var group = ''; + for (var col = 0; col < numMonths[1]; col++) { + var selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay)); + var cornerClass = ' ui-corner-all'; + var calender = ''; + if (isMultiMonth) { + calender += '
        '; + } + calender += '
        ' + + (/all|left/.test(cornerClass) && row == 0 ? (isRTL ? next : prev) : '') + + (/all|right/.test(cornerClass) && row == 0 ? (isRTL ? prev : next) : '') + + this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate, + row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers + '
        ' + + ''; + var thead = (showWeek ? '' : ''); + for (var dow = 0; dow < 7; dow++) { // days of the week + var day = (dow + firstDay) % 7; + thead += '= 5 ? ' class="ui-datepicker-week-end"' : '') + '>' + + '' + dayNamesMin[day] + ''; + } + calender += thead + ''; + var daysInMonth = this._getDaysInMonth(drawYear, drawMonth); + if (drawYear == inst.selectedYear && drawMonth == inst.selectedMonth) + inst.selectedDay = Math.min(inst.selectedDay, daysInMonth); + var leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7; + var numRows = (isMultiMonth ? 6 : Math.ceil((leadDays + daysInMonth) / 7)); // calculate the number of rows to generate + var printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays)); + for (var dRow = 0; dRow < numRows; dRow++) { // create date picker rows + calender += ''; + var tbody = (!showWeek ? '' : ''); + for (var dow = 0; dow < 7; dow++) { // create date picker days + var daySettings = (beforeShowDay ? + beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, '']); + var otherMonth = (printDate.getMonth() != drawMonth); + var unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] || + (minDate && printDate < minDate) || (maxDate && printDate > maxDate); + tbody += ''; // display selectable date + printDate.setDate(printDate.getDate() + 1); + printDate = this._daylightSavingAdjust(printDate); + } + calender += tbody + ''; + } + drawMonth++; + if (drawMonth > 11) { + drawMonth = 0; + drawYear++; + } + calender += '
        ' + this._get(inst, 'weekHeader') + '
        ' + + this._get(inst, 'calculateWeek')(printDate) + '' + // actions + (otherMonth && !showOtherMonths ? ' ' : // display for other months + (unselectable ? '' + printDate.getDate() + '' : '' + printDate.getDate() + '')) + '
        ' + (isMultiMonth ? '
        ' + + ((numMonths[0] > 0 && col == numMonths[1]-1) ? '
        ' : '') : ''); + group += calender; + } + html += group; + } + html += buttonPanel + ($.browser.msie && parseInt($.browser.version,10) < 7 && !inst.inline ? + '' : ''); + inst._keyEvent = false; + return html; + }, + + /* Generate the month and year header. */ + _generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate, + secondary, monthNames, monthNamesShort) { + var changeMonth = this._get(inst, 'changeMonth'); + var changeYear = this._get(inst, 'changeYear'); + var showMonthAfterYear = this._get(inst, 'showMonthAfterYear'); + var html = '
        '; + var monthHtml = ''; + // month selection + if (secondary || !changeMonth) + monthHtml += '' + monthNames[drawMonth] + ''; + else { + var inMinYear = (minDate && minDate.getFullYear() == drawYear); + var inMaxYear = (maxDate && maxDate.getFullYear() == drawYear); + monthHtml += ''; + } + if (!showMonthAfterYear) + html += monthHtml + (secondary || !(changeMonth && changeYear) ? ' ' : ''); + // year selection + inst.yearshtml = ''; + if (secondary || !changeYear) + html += '' + drawYear + ''; + else { + // determine range of years to display + var years = this._get(inst, 'yearRange').split(':'); + var thisYear = new Date().getFullYear(); + var determineYear = function(value) { + var year = (value.match(/c[+-].*/) ? drawYear + parseInt(value.substring(1), 10) : + (value.match(/[+-].*/) ? thisYear + parseInt(value, 10) : + parseInt(value, 10))); + return (isNaN(year) ? thisYear : year); + }; + var year = determineYear(years[0]); + var endYear = Math.max(year, determineYear(years[1] || '')); + year = (minDate ? Math.max(year, minDate.getFullYear()) : year); + endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear); + inst.yearshtml += ''; + //when showing there is no need for later update + if( ! $.browser.mozilla ){ + html += inst.yearshtml; + inst.yearshtml = null; + } else { + // will be replaced later with inst.yearshtml + html += ''; + } + } + html += this._get(inst, 'yearSuffix'); + if (showMonthAfterYear) + html += (secondary || !(changeMonth && changeYear) ? ' ' : '') + monthHtml; + html += '
        '; // Close datepicker_header + return html; + }, + + /* Adjust one of the date sub-fields. */ + _adjustInstDate: function(inst, offset, period) { + var year = inst.drawYear + (period == 'Y' ? offset : 0); + var month = inst.drawMonth + (period == 'M' ? offset : 0); + var day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + + (period == 'D' ? offset : 0); + var date = this._restrictMinMax(inst, + this._daylightSavingAdjust(new Date(year, month, day))); + inst.selectedDay = date.getDate(); + inst.drawMonth = inst.selectedMonth = date.getMonth(); + inst.drawYear = inst.selectedYear = date.getFullYear(); + if (period == 'M' || period == 'Y') + this._notifyChange(inst); + }, + + /* Ensure a date is within any min/max bounds. */ + _restrictMinMax: function(inst, date) { + var minDate = this._getMinMaxDate(inst, 'min'); + var maxDate = this._getMinMaxDate(inst, 'max'); + var newDate = (minDate && date < minDate ? minDate : date); + newDate = (maxDate && newDate > maxDate ? maxDate : newDate); + return newDate; + }, + + /* Notify change of month/year. */ + _notifyChange: function(inst) { + var onChange = this._get(inst, 'onChangeMonthYear'); + if (onChange) + onChange.apply((inst.input ? inst.input[0] : null), + [inst.selectedYear, inst.selectedMonth + 1, inst]); + }, + + /* Determine the number of months to show. */ + _getNumberOfMonths: function(inst) { + var numMonths = this._get(inst, 'numberOfMonths'); + return (numMonths == null ? [1, 1] : (typeof numMonths == 'number' ? [1, numMonths] : numMonths)); + }, + + /* Determine the current maximum date - ensure no time components are set. */ + _getMinMaxDate: function(inst, minMax) { + return this._determineDate(inst, this._get(inst, minMax + 'Date'), null); + }, + + /* Find the number of days in a given month. */ + _getDaysInMonth: function(year, month) { + return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate(); + }, + + /* Find the day of the week of the first of a month. */ + _getFirstDayOfMonth: function(year, month) { + return new Date(year, month, 1).getDay(); + }, + + /* Determines if we should allow a "next/prev" month display change. */ + _canAdjustMonth: function(inst, offset, curYear, curMonth) { + var numMonths = this._getNumberOfMonths(inst); + var date = this._daylightSavingAdjust(new Date(curYear, + curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1)); + if (offset < 0) + date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth())); + return this._isInRange(inst, date); + }, + + /* Is the given date in the accepted range? */ + _isInRange: function(inst, date) { + var minDate = this._getMinMaxDate(inst, 'min'); + var maxDate = this._getMinMaxDate(inst, 'max'); + return ((!minDate || date.getTime() >= minDate.getTime()) && + (!maxDate || date.getTime() <= maxDate.getTime())); + }, + + /* Provide the configuration settings for formatting/parsing. */ + _getFormatConfig: function(inst) { + var shortYearCutoff = this._get(inst, 'shortYearCutoff'); + shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff : + new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10)); + return {shortYearCutoff: shortYearCutoff, + dayNamesShort: this._get(inst, 'dayNamesShort'), dayNames: this._get(inst, 'dayNames'), + monthNamesShort: this._get(inst, 'monthNamesShort'), monthNames: this._get(inst, 'monthNames')}; + }, + + /* Format the given date for display. */ + _formatDate: function(inst, day, month, year) { + if (!day) { + inst.currentDay = inst.selectedDay; + inst.currentMonth = inst.selectedMonth; + inst.currentYear = inst.selectedYear; + } + var date = (day ? (typeof day == 'object' ? day : + this._daylightSavingAdjust(new Date(year, month, day))) : + this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); + return this.formatDate(this._get(inst, 'dateFormat'), date, this._getFormatConfig(inst)); + } +}); + +/* jQuery extend now ignores nulls! */ +function extendRemove(target, props) { + $.extend(target, props); + for (var name in props) + if (props[name] == null || props[name] == undefined) + target[name] = props[name]; + return target; +}; + +/* Determine whether an object is an array. */ +function isArray(a) { + return (a && (($.browser.safari && typeof a == 'object' && a.length) || + (a.constructor && a.constructor.toString().match(/\Array\(\)/)))); +}; + +/* Invoke the datepicker functionality. + @param options string - a command, optionally followed by additional parameters or + Object - settings for attaching new datepicker functionality + @return jQuery object */ +$.fn.datepicker = function(options){ + + /* Verify an empty collection wasn't passed - Fixes #6976 */ + if ( !this.length ) { + return this; + } + + /* Initialise the date picker. */ + if (!$.datepicker.initialized) { + $(document).mousedown($.datepicker._checkExternalClick). + find('body').append($.datepicker.dpDiv); + $.datepicker.initialized = true; + } + + var otherArgs = Array.prototype.slice.call(arguments, 1); + if (typeof options == 'string' && (options == 'isDisabled' || options == 'getDate' || options == 'widget')) + return $.datepicker['_' + options + 'Datepicker']. + apply($.datepicker, [this[0]].concat(otherArgs)); + if (options == 'option' && arguments.length == 2 && typeof arguments[1] == 'string') + return $.datepicker['_' + options + 'Datepicker']. + apply($.datepicker, [this[0]].concat(otherArgs)); + return this.each(function() { + typeof options == 'string' ? + $.datepicker['_' + options + 'Datepicker']. + apply($.datepicker, [this].concat(otherArgs)) : + $.datepicker._attachDatepicker(this, options); + }); +}; + +$.datepicker = new Datepicker(); // singleton instance +$.datepicker.initialized = false; +$.datepicker.uuid = new Date().getTime(); +$.datepicker.version = "1.8.10"; + +// Workaround for #4055 +// Add another global to avoid noConflict issues with inline event handlers +window['DP_jQuery_' + dpuuid] = $; + +})(jQuery); diff --git a/js/ui/jquery.ui.dialog.js b/js/ui/jquery.ui.dialog.js new file mode 100644 index 0000000000..af9fafb528 --- /dev/null +++ b/js/ui/jquery.ui.dialog.js @@ -0,0 +1,857 @@ +/* + * jQuery UI Dialog 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Dialog + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + * jquery.ui.button.js + * jquery.ui.draggable.js + * jquery.ui.mouse.js + * jquery.ui.position.js + * jquery.ui.resizable.js + */ +(function( $, undefined ) { + +var uiDialogClasses = + 'ui-dialog ' + + 'ui-widget ' + + 'ui-widget-content ' + + 'ui-corner-all ', + sizeRelatedOptions = { + buttons: true, + height: true, + maxHeight: true, + maxWidth: true, + minHeight: true, + minWidth: true, + width: true + }, + resizableRelatedOptions = { + maxHeight: true, + maxWidth: true, + minHeight: true, + minWidth: true + }; + +$.widget("ui.dialog", { + options: { + autoOpen: true, + buttons: {}, + closeOnEscape: true, + closeText: 'close', + dialogClass: '', + draggable: true, + hide: null, + height: 'auto', + maxHeight: false, + maxWidth: false, + minHeight: 150, + minWidth: 150, + modal: false, + position: { + my: 'center', + at: 'center', + collision: 'fit', + // ensure that the titlebar is never outside the document + using: function(pos) { + var topOffset = $(this).css(pos).offset().top; + if (topOffset < 0) { + $(this).css('top', pos.top - topOffset); + } + } + }, + resizable: true, + show: null, + stack: true, + title: '', + width: 300, + zIndex: 1000 + }, + + _create: function() { + this.originalTitle = this.element.attr('title'); + // #5742 - .attr() might return a DOMElement + if ( typeof this.originalTitle !== "string" ) { + this.originalTitle = ""; + } + + this.options.title = this.options.title || this.originalTitle; + var self = this, + options = self.options, + + title = options.title || ' ', + titleId = $.ui.dialog.getTitleId(self.element), + + uiDialog = (self.uiDialog = $('
        ')) + .appendTo(document.body) + .hide() + .addClass(uiDialogClasses + options.dialogClass) + .css({ + zIndex: options.zIndex + }) + // setting tabIndex makes the div focusable + // setting outline to 0 prevents a border on focus in Mozilla + .attr('tabIndex', -1).css('outline', 0).keydown(function(event) { + if (options.closeOnEscape && event.keyCode && + event.keyCode === $.ui.keyCode.ESCAPE) { + + self.close(event); + event.preventDefault(); + } + }) + .attr({ + role: 'dialog', + 'aria-labelledby': titleId + }) + .mousedown(function(event) { + self.moveToTop(false, event); + }), + + uiDialogContent = self.element + .show() + .removeAttr('title') + .addClass( + 'ui-dialog-content ' + + 'ui-widget-content') + .appendTo(uiDialog), + + uiDialogTitlebar = (self.uiDialogTitlebar = $('
        ')) + .addClass( + 'ui-dialog-titlebar ' + + 'ui-widget-header ' + + 'ui-corner-all ' + + 'ui-helper-clearfix' + ) + .prependTo(uiDialog), + + uiDialogTitlebarClose = $('') + .addClass( + 'ui-dialog-titlebar-close ' + + 'ui-corner-all' + ) + .attr('role', 'button') + .hover( + function() { + uiDialogTitlebarClose.addClass('ui-state-hover'); + }, + function() { + uiDialogTitlebarClose.removeClass('ui-state-hover'); + } + ) + .focus(function() { + uiDialogTitlebarClose.addClass('ui-state-focus'); + }) + .blur(function() { + uiDialogTitlebarClose.removeClass('ui-state-focus'); + }) + .click(function(event) { + self.close(event); + return false; + }) + .appendTo(uiDialogTitlebar), + + uiDialogTitlebarCloseText = (self.uiDialogTitlebarCloseText = $('')) + .addClass( + 'ui-icon ' + + 'ui-icon-closethick' + ) + .text(options.closeText) + .appendTo(uiDialogTitlebarClose), + + uiDialogTitle = $('') + .addClass('ui-dialog-title') + .attr('id', titleId) + .html(title) + .prependTo(uiDialogTitlebar); + + //handling of deprecated beforeclose (vs beforeClose) option + //Ticket #4669 http://dev.jqueryui.com/ticket/4669 + //TODO: remove in 1.9pre + if ($.isFunction(options.beforeclose) && !$.isFunction(options.beforeClose)) { + options.beforeClose = options.beforeclose; + } + + uiDialogTitlebar.find("*").add(uiDialogTitlebar).disableSelection(); + + if (options.draggable && $.fn.draggable) { + self._makeDraggable(); + } + if (options.resizable && $.fn.resizable) { + self._makeResizable(); + } + + self._createButtons(options.buttons); + self._isOpen = false; + + if ($.fn.bgiframe) { + uiDialog.bgiframe(); + } + }, + + _init: function() { + if ( this.options.autoOpen ) { + this.open(); + } + }, + + destroy: function() { + var self = this; + + if (self.overlay) { + self.overlay.destroy(); + } + self.uiDialog.hide(); + self.element + .unbind('.dialog') + .removeData('dialog') + .removeClass('ui-dialog-content ui-widget-content') + .hide().appendTo('body'); + self.uiDialog.remove(); + + if (self.originalTitle) { + self.element.attr('title', self.originalTitle); + } + + return self; + }, + + widget: function() { + return this.uiDialog; + }, + + close: function(event) { + var self = this, + maxZ, thisZ; + + if (false === self._trigger('beforeClose', event)) { + return; + } + + if (self.overlay) { + self.overlay.destroy(); + } + self.uiDialog.unbind('keypress.ui-dialog'); + + self._isOpen = false; + + if (self.options.hide) { + self.uiDialog.hide(self.options.hide, function() { + self._trigger('close', event); + }); + } else { + self.uiDialog.hide(); + self._trigger('close', event); + } + + $.ui.dialog.overlay.resize(); + + // adjust the maxZ to allow other modal dialogs to continue to work (see #4309) + if (self.options.modal) { + maxZ = 0; + $('.ui-dialog').each(function() { + if (this !== self.uiDialog[0]) { + thisZ = $(this).css('z-index'); + if(!isNaN(thisZ)) { + maxZ = Math.max(maxZ, thisZ); + } + } + }); + $.ui.dialog.maxZ = maxZ; + } + + return self; + }, + + isOpen: function() { + return this._isOpen; + }, + + // the force parameter allows us to move modal dialogs to their correct + // position on open + moveToTop: function(force, event) { + var self = this, + options = self.options, + saveScroll; + + if ((options.modal && !force) || + (!options.stack && !options.modal)) { + return self._trigger('focus', event); + } + + if (options.zIndex > $.ui.dialog.maxZ) { + $.ui.dialog.maxZ = options.zIndex; + } + if (self.overlay) { + $.ui.dialog.maxZ += 1; + self.overlay.$el.css('z-index', $.ui.dialog.overlay.maxZ = $.ui.dialog.maxZ); + } + + //Save and then restore scroll since Opera 9.5+ resets when parent z-Index is changed. + // http://ui.jquery.com/bugs/ticket/3193 + saveScroll = { scrollTop: self.element.attr('scrollTop'), scrollLeft: self.element.attr('scrollLeft') }; + $.ui.dialog.maxZ += 1; + self.uiDialog.css('z-index', $.ui.dialog.maxZ); + self.element.attr(saveScroll); + self._trigger('focus', event); + + return self; + }, + + open: function() { + if (this._isOpen) { return; } + + var self = this, + options = self.options, + uiDialog = self.uiDialog; + + self.overlay = options.modal ? new $.ui.dialog.overlay(self) : null; + self._size(); + self._position(options.position); + uiDialog.show(options.show); + self.moveToTop(true); + + // prevent tabbing out of modal dialogs + if (options.modal) { + uiDialog.bind('keypress.ui-dialog', function(event) { + if (event.keyCode !== $.ui.keyCode.TAB) { + return; + } + + var tabbables = $(':tabbable', this), + first = tabbables.filter(':first'), + last = tabbables.filter(':last'); + + if (event.target === last[0] && !event.shiftKey) { + first.focus(1); + return false; + } else if (event.target === first[0] && event.shiftKey) { + last.focus(1); + return false; + } + }); + } + + // set focus to the first tabbable element in the content area or the first button + // if there are no tabbable elements, set focus on the dialog itself + $(self.element.find(':tabbable').get().concat( + uiDialog.find('.ui-dialog-buttonpane :tabbable').get().concat( + uiDialog.get()))).eq(0).focus(); + + self._isOpen = true; + self._trigger('open'); + + return self; + }, + + _createButtons: function(buttons) { + var self = this, + hasButtons = false, + uiDialogButtonPane = $('
        ') + .addClass( + 'ui-dialog-buttonpane ' + + 'ui-widget-content ' + + 'ui-helper-clearfix' + ), + uiButtonSet = $( "
        " ) + .addClass( "ui-dialog-buttonset" ) + .appendTo( uiDialogButtonPane ); + + // if we already have a button pane, remove it + self.uiDialog.find('.ui-dialog-buttonpane').remove(); + + if (typeof buttons === 'object' && buttons !== null) { + $.each(buttons, function() { + return !(hasButtons = true); + }); + } + if (hasButtons) { + $.each(buttons, function(name, props) { + props = $.isFunction( props ) ? + { click: props, text: name } : + props; + var button = $('') + .attr( props, true ) + .unbind('click') + .click(function() { + props.click.apply(self.element[0], arguments); + }) + .appendTo(uiButtonSet); + if ($.fn.button) { + button.button(); + } + }); + uiDialogButtonPane.appendTo(self.uiDialog); + } + }, + + _makeDraggable: function() { + var self = this, + options = self.options, + doc = $(document), + heightBeforeDrag; + + function filteredUi(ui) { + return { + position: ui.position, + offset: ui.offset + }; + } + + self.uiDialog.draggable({ + cancel: '.ui-dialog-content, .ui-dialog-titlebar-close', + handle: '.ui-dialog-titlebar', + containment: 'document', + start: function(event, ui) { + heightBeforeDrag = options.height === "auto" ? "auto" : $(this).height(); + $(this).height($(this).height()).addClass("ui-dialog-dragging"); + self._trigger('dragStart', event, filteredUi(ui)); + }, + drag: function(event, ui) { + self._trigger('drag', event, filteredUi(ui)); + }, + stop: function(event, ui) { + options.position = [ui.position.left - doc.scrollLeft(), + ui.position.top - doc.scrollTop()]; + $(this).removeClass("ui-dialog-dragging").height(heightBeforeDrag); + self._trigger('dragStop', event, filteredUi(ui)); + $.ui.dialog.overlay.resize(); + } + }); + }, + + _makeResizable: function(handles) { + handles = (handles === undefined ? this.options.resizable : handles); + var self = this, + options = self.options, + // .ui-resizable has position: relative defined in the stylesheet + // but dialogs have to use absolute or fixed positioning + position = self.uiDialog.css('position'), + resizeHandles = (typeof handles === 'string' ? + handles : + 'n,e,s,w,se,sw,ne,nw' + ); + + function filteredUi(ui) { + return { + originalPosition: ui.originalPosition, + originalSize: ui.originalSize, + position: ui.position, + size: ui.size + }; + } + + self.uiDialog.resizable({ + cancel: '.ui-dialog-content', + containment: 'document', + alsoResize: self.element, + maxWidth: options.maxWidth, + maxHeight: options.maxHeight, + minWidth: options.minWidth, + minHeight: self._minHeight(), + handles: resizeHandles, + start: function(event, ui) { + $(this).addClass("ui-dialog-resizing"); + self._trigger('resizeStart', event, filteredUi(ui)); + }, + resize: function(event, ui) { + self._trigger('resize', event, filteredUi(ui)); + }, + stop: function(event, ui) { + $(this).removeClass("ui-dialog-resizing"); + options.height = $(this).height(); + options.width = $(this).width(); + self._trigger('resizeStop', event, filteredUi(ui)); + $.ui.dialog.overlay.resize(); + } + }) + .css('position', position) + .find('.ui-resizable-se').addClass('ui-icon ui-icon-grip-diagonal-se'); + }, + + _minHeight: function() { + var options = this.options; + + if (options.height === 'auto') { + return options.minHeight; + } else { + return Math.min(options.minHeight, options.height); + } + }, + + _position: function(position) { + var myAt = [], + offset = [0, 0], + isVisible; + + if (position) { + // deep extending converts arrays to objects in jQuery <= 1.3.2 :-( + // if (typeof position == 'string' || $.isArray(position)) { + // myAt = $.isArray(position) ? position : position.split(' '); + + if (typeof position === 'string' || (typeof position === 'object' && '0' in position)) { + myAt = position.split ? position.split(' ') : [position[0], position[1]]; + if (myAt.length === 1) { + myAt[1] = myAt[0]; + } + + $.each(['left', 'top'], function(i, offsetPosition) { + if (+myAt[i] === myAt[i]) { + offset[i] = myAt[i]; + myAt[i] = offsetPosition; + } + }); + + position = { + my: myAt.join(" "), + at: myAt.join(" "), + offset: offset.join(" ") + }; + } + + position = $.extend({}, $.ui.dialog.prototype.options.position, position); + } else { + position = $.ui.dialog.prototype.options.position; + } + + // need to show the dialog to get the actual offset in the position plugin + isVisible = this.uiDialog.is(':visible'); + if (!isVisible) { + this.uiDialog.show(); + } + this.uiDialog + // workaround for jQuery bug #5781 http://dev.jquery.com/ticket/5781 + .css({ top: 0, left: 0 }) + .position($.extend({ of: window }, position)); + if (!isVisible) { + this.uiDialog.hide(); + } + }, + + _setOptions: function( options ) { + var self = this, + resizableOptions = {}, + resize = false; + + $.each( options, function( key, value ) { + self._setOption( key, value ); + + if ( key in sizeRelatedOptions ) { + resize = true; + } + if ( key in resizableRelatedOptions ) { + resizableOptions[ key ] = value; + } + }); + + if ( resize ) { + this._size(); + } + if ( this.uiDialog.is( ":data(resizable)" ) ) { + this.uiDialog.resizable( "option", resizableOptions ); + } + }, + + _setOption: function(key, value){ + var self = this, + uiDialog = self.uiDialog; + + switch (key) { + //handling of deprecated beforeclose (vs beforeClose) option + //Ticket #4669 http://dev.jqueryui.com/ticket/4669 + //TODO: remove in 1.9pre + case "beforeclose": + key = "beforeClose"; + break; + case "buttons": + self._createButtons(value); + break; + case "closeText": + // ensure that we always pass a string + self.uiDialogTitlebarCloseText.text("" + value); + break; + case "dialogClass": + uiDialog + .removeClass(self.options.dialogClass) + .addClass(uiDialogClasses + value); + break; + case "disabled": + if (value) { + uiDialog.addClass('ui-dialog-disabled'); + } else { + uiDialog.removeClass('ui-dialog-disabled'); + } + break; + case "draggable": + var isDraggable = uiDialog.is( ":data(draggable)" ); + if ( isDraggable && !value ) { + uiDialog.draggable( "destroy" ); + } + + if ( !isDraggable && value ) { + self._makeDraggable(); + } + break; + case "position": + self._position(value); + break; + case "resizable": + // currently resizable, becoming non-resizable + var isResizable = uiDialog.is( ":data(resizable)" ); + if (isResizable && !value) { + uiDialog.resizable('destroy'); + } + + // currently resizable, changing handles + if (isResizable && typeof value === 'string') { + uiDialog.resizable('option', 'handles', value); + } + + // currently non-resizable, becoming resizable + if (!isResizable && value !== false) { + self._makeResizable(value); + } + break; + case "title": + // convert whatever was passed in o a string, for html() to not throw up + $(".ui-dialog-title", self.uiDialogTitlebar).html("" + (value || ' ')); + break; + } + + $.Widget.prototype._setOption.apply(self, arguments); + }, + + _size: function() { + /* If the user has resized the dialog, the .ui-dialog and .ui-dialog-content + * divs will both have width and height set, so we need to reset them + */ + var options = this.options, + nonContentHeight, + minContentHeight, + isVisible = this.uiDialog.is( ":visible" ); + + // reset content sizing + this.element.show().css({ + width: 'auto', + minHeight: 0, + height: 0 + }); + + if (options.minWidth > options.width) { + options.width = options.minWidth; + } + + // reset wrapper sizing + // determine the height of all the non-content elements + nonContentHeight = this.uiDialog.css({ + height: 'auto', + width: options.width + }) + .height(); + minContentHeight = Math.max( 0, options.minHeight - nonContentHeight ); + + if ( options.height === "auto" ) { + // only needed for IE6 support + if ( $.support.minHeight ) { + this.element.css({ + minHeight: minContentHeight, + height: "auto" + }); + } else { + this.uiDialog.show(); + var autoHeight = this.element.css( "height", "auto" ).height(); + if ( !isVisible ) { + this.uiDialog.hide(); + } + this.element.height( Math.max( autoHeight, minContentHeight ) ); + } + } else { + this.element.height( Math.max( options.height - nonContentHeight, 0 ) ); + } + + if (this.uiDialog.is(':data(resizable)')) { + this.uiDialog.resizable('option', 'minHeight', this._minHeight()); + } + } +}); + +$.extend($.ui.dialog, { + version: "1.8.10", + + uuid: 0, + maxZ: 0, + + getTitleId: function($el) { + var id = $el.attr('id'); + if (!id) { + this.uuid += 1; + id = this.uuid; + } + return 'ui-dialog-title-' + id; + }, + + overlay: function(dialog) { + this.$el = $.ui.dialog.overlay.create(dialog); + } +}); + +$.extend($.ui.dialog.overlay, { + instances: [], + // reuse old instances due to IE memory leak with alpha transparency (see #5185) + oldInstances: [], + maxZ: 0, + events: $.map('focus,mousedown,mouseup,keydown,keypress,click'.split(','), + function(event) { return event + '.dialog-overlay'; }).join(' '), + create: function(dialog) { + if (this.instances.length === 0) { + // prevent use of anchors and inputs + // we use a setTimeout in case the overlay is created from an + // event that we're going to be cancelling (see #2804) + setTimeout(function() { + // handle $(el).dialog().dialog('close') (see #4065) + if ($.ui.dialog.overlay.instances.length) { + $(document).bind($.ui.dialog.overlay.events, function(event) { + // stop events if the z-index of the target is < the z-index of the overlay + // we cannot return true when we don't want to cancel the event (#3523) + if ($(event.target).zIndex() < $.ui.dialog.overlay.maxZ) { + return false; + } + }); + } + }, 1); + + // allow closing by pressing the escape key + $(document).bind('keydown.dialog-overlay', function(event) { + if (dialog.options.closeOnEscape && event.keyCode && + event.keyCode === $.ui.keyCode.ESCAPE) { + + dialog.close(event); + event.preventDefault(); + } + }); + + // handle window resize + $(window).bind('resize.dialog-overlay', $.ui.dialog.overlay.resize); + } + + var $el = (this.oldInstances.pop() || $('
        ').addClass('ui-widget-overlay')) + .appendTo(document.body) + .css({ + width: this.width(), + height: this.height() + }); + + if ($.fn.bgiframe) { + $el.bgiframe(); + } + + this.instances.push($el); + return $el; + }, + + destroy: function($el) { + var indexOf = $.inArray($el, this.instances); + if (indexOf != -1){ + this.oldInstances.push(this.instances.splice(indexOf, 1)[0]); + } + + if (this.instances.length === 0) { + $([document, window]).unbind('.dialog-overlay'); + } + + $el.remove(); + + // adjust the maxZ to allow other modal dialogs to continue to work (see #4309) + var maxZ = 0; + $.each(this.instances, function() { + maxZ = Math.max(maxZ, this.css('z-index')); + }); + this.maxZ = maxZ; + }, + + height: function() { + var scrollHeight, + offsetHeight; + // handle IE 6 + if ($.browser.msie && $.browser.version < 7) { + scrollHeight = Math.max( + document.documentElement.scrollHeight, + document.body.scrollHeight + ); + offsetHeight = Math.max( + document.documentElement.offsetHeight, + document.body.offsetHeight + ); + + if (scrollHeight < offsetHeight) { + return $(window).height() + 'px'; + } else { + return scrollHeight + 'px'; + } + // handle "good" browsers + } else { + return $(document).height() + 'px'; + } + }, + + width: function() { + var scrollWidth, + offsetWidth; + // handle IE 6 + if ($.browser.msie && $.browser.version < 7) { + scrollWidth = Math.max( + document.documentElement.scrollWidth, + document.body.scrollWidth + ); + offsetWidth = Math.max( + document.documentElement.offsetWidth, + document.body.offsetWidth + ); + + if (scrollWidth < offsetWidth) { + return $(window).width() + 'px'; + } else { + return scrollWidth + 'px'; + } + // handle "good" browsers + } else { + return $(document).width() + 'px'; + } + }, + + resize: function() { + /* If the dialog is draggable and the user drags it past the + * right edge of the window, the document becomes wider so we + * need to stretch the overlay. If the user then drags the + * dialog back to the left, the document will become narrower, + * so we need to shrink the overlay to the appropriate size. + * This is handled by shrinking the overlay before setting it + * to the full document size. + */ + var $overlays = $([]); + $.each($.ui.dialog.overlay.instances, function() { + $overlays = $overlays.add(this); + }); + + $overlays.css({ + width: 0, + height: 0 + }).css({ + width: $.ui.dialog.overlay.width(), + height: $.ui.dialog.overlay.height() + }); + } +}); + +$.extend($.ui.dialog.overlay.prototype, { + destroy: function() { + $.ui.dialog.overlay.destroy(this.$el); + } +}); + +}(jQuery)); diff --git a/js/ui/jquery.ui.draggable.js b/js/ui/jquery.ui.draggable.js new file mode 100644 index 0000000000..245d079a12 --- /dev/null +++ b/js/ui/jquery.ui.draggable.js @@ -0,0 +1,797 @@ +/* + * jQuery UI Draggable 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Draggables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function( $, undefined ) { + +$.widget("ui.draggable", $.ui.mouse, { + widgetEventPrefix: "drag", + options: { + addClasses: true, + appendTo: "parent", + axis: false, + connectToSortable: false, + containment: false, + cursor: "auto", + cursorAt: false, + grid: false, + handle: false, + helper: "original", + iframeFix: false, + opacity: false, + refreshPositions: false, + revert: false, + revertDuration: 500, + scope: "default", + scroll: true, + scrollSensitivity: 20, + scrollSpeed: 20, + snap: false, + snapMode: "both", + snapTolerance: 20, + stack: false, + zIndex: false + }, + _create: function() { + + if (this.options.helper == 'original' && !(/^(?:r|a|f)/).test(this.element.css("position"))) + this.element[0].style.position = 'relative'; + + (this.options.addClasses && this.element.addClass("ui-draggable")); + (this.options.disabled && this.element.addClass("ui-draggable-disabled")); + + this._mouseInit(); + + }, + + destroy: function() { + if(!this.element.data('draggable')) return; + this.element + .removeData("draggable") + .unbind(".draggable") + .removeClass("ui-draggable" + + " ui-draggable-dragging" + + " ui-draggable-disabled"); + this._mouseDestroy(); + + return this; + }, + + _mouseCapture: function(event) { + + var o = this.options; + + // among others, prevent a drag on a resizable-handle + if (this.helper || o.disabled || $(event.target).is('.ui-resizable-handle')) + return false; + + //Quit if we're not on a valid handle + this.handle = this._getHandle(event); + if (!this.handle) + return false; + + return true; + + }, + + _mouseStart: function(event) { + + var o = this.options; + + //Create and append the visible helper + this.helper = this._createHelper(event); + + //Cache the helper size + this._cacheHelperProportions(); + + //If ddmanager is used for droppables, set the global draggable + if($.ui.ddmanager) + $.ui.ddmanager.current = this; + + /* + * - Position generation - + * This block generates everything position related - it's the core of draggables. + */ + + //Cache the margins of the original element + this._cacheMargins(); + + //Store the helper's css position + this.cssPosition = this.helper.css("position"); + this.scrollParent = this.helper.scrollParent(); + + //The element's absolute position on the page minus margins + this.offset = this.positionAbs = this.element.offset(); + this.offset = { + top: this.offset.top - this.margins.top, + left: this.offset.left - this.margins.left + }; + + $.extend(this.offset, { + click: { //Where the click happened, relative to the element + left: event.pageX - this.offset.left, + top: event.pageY - this.offset.top + }, + parent: this._getParentOffset(), + relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper + }); + + //Generate the original position + this.originalPosition = this.position = this._generatePosition(event); + this.originalPageX = event.pageX; + this.originalPageY = event.pageY; + + //Adjust the mouse offset relative to the helper if 'cursorAt' is supplied + (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt)); + + //Set a containment if given in the options + if(o.containment) + this._setContainment(); + + //Trigger event + callbacks + if(this._trigger("start", event) === false) { + this._clear(); + return false; + } + + //Recache the helper size + this._cacheHelperProportions(); + + //Prepare the droppable offsets + if ($.ui.ddmanager && !o.dropBehaviour) + $.ui.ddmanager.prepareOffsets(this, event); + + this.helper.addClass("ui-draggable-dragging"); + this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position + return true; + }, + + _mouseDrag: function(event, noPropagation) { + + //Compute the helpers position + this.position = this._generatePosition(event); + this.positionAbs = this._convertPositionTo("absolute"); + + //Call plugins and callbacks and use the resulting position if something is returned + if (!noPropagation) { + var ui = this._uiHash(); + if(this._trigger('drag', event, ui) === false) { + this._mouseUp({}); + return false; + } + this.position = ui.position; + } + + if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px'; + if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px'; + if($.ui.ddmanager) $.ui.ddmanager.drag(this, event); + + return false; + }, + + _mouseStop: function(event) { + + //If we are using droppables, inform the manager about the drop + var dropped = false; + if ($.ui.ddmanager && !this.options.dropBehaviour) + dropped = $.ui.ddmanager.drop(this, event); + + //if a drop comes from outside (a sortable) + if(this.dropped) { + dropped = this.dropped; + this.dropped = false; + } + + //if the original element is removed, don't bother to continue if helper is set to "original" + if((!this.element[0] || !this.element[0].parentNode) && this.options.helper == "original") + return false; + + if((this.options.revert == "invalid" && !dropped) || (this.options.revert == "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) { + var self = this; + $(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() { + if(self._trigger("stop", event) !== false) { + self._clear(); + } + }); + } else { + if(this._trigger("stop", event) !== false) { + this._clear(); + } + } + + return false; + }, + + cancel: function() { + + if(this.helper.is(".ui-draggable-dragging")) { + this._mouseUp({}); + } else { + this._clear(); + } + + return this; + + }, + + _getHandle: function(event) { + + var handle = !this.options.handle || !$(this.options.handle, this.element).length ? true : false; + $(this.options.handle, this.element) + .find("*") + .andSelf() + .each(function() { + if(this == event.target) handle = true; + }); + + return handle; + + }, + + _createHelper: function(event) { + + var o = this.options; + var helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper == 'clone' ? this.element.clone() : this.element); + + if(!helper.parents('body').length) + helper.appendTo((o.appendTo == 'parent' ? this.element[0].parentNode : o.appendTo)); + + if(helper[0] != this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) + helper.css("position", "absolute"); + + return helper; + + }, + + _adjustOffsetFromHelper: function(obj) { + if (typeof obj == 'string') { + obj = obj.split(' '); + } + if ($.isArray(obj)) { + obj = {left: +obj[0], top: +obj[1] || 0}; + } + if ('left' in obj) { + this.offset.click.left = obj.left + this.margins.left; + } + if ('right' in obj) { + this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left; + } + if ('top' in obj) { + this.offset.click.top = obj.top + this.margins.top; + } + if ('bottom' in obj) { + this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top; + } + }, + + _getParentOffset: function() { + + //Get the offsetParent and cache its position + this.offsetParent = this.helper.offsetParent(); + var po = this.offsetParent.offset(); + + // This is a special case where we need to modify a offset calculated on start, since the following happened: + // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent + // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that + // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag + if(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) { + po.left += this.scrollParent.scrollLeft(); + po.top += this.scrollParent.scrollTop(); + } + + if((this.offsetParent[0] == document.body) //This needs to be actually done for all browsers, since pageX/pageY includes this information + || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.browser.msie)) //Ugly IE fix + po = { top: 0, left: 0 }; + + return { + top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0), + left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0) + }; + + }, + + _getRelativeOffset: function() { + + if(this.cssPosition == "relative") { + var p = this.element.position(); + return { + top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(), + left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft() + }; + } else { + return { top: 0, left: 0 }; + } + + }, + + _cacheMargins: function() { + this.margins = { + left: (parseInt(this.element.css("marginLeft"),10) || 0), + top: (parseInt(this.element.css("marginTop"),10) || 0) + }; + }, + + _cacheHelperProportions: function() { + this.helperProportions = { + width: this.helper.outerWidth(), + height: this.helper.outerHeight() + }; + }, + + _setContainment: function() { + + var o = this.options; + if(o.containment == 'parent') o.containment = this.helper[0].parentNode; + if(o.containment == 'document' || o.containment == 'window') this.containment = [ + (o.containment == 'document' ? 0 : $(window).scrollLeft()) - this.offset.relative.left - this.offset.parent.left, + (o.containment == 'document' ? 0 : $(window).scrollTop()) - this.offset.relative.top - this.offset.parent.top, + (o.containment == 'document' ? 0 : $(window).scrollLeft()) + $(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left, + (o.containment == 'document' ? 0 : $(window).scrollTop()) + ($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top + ]; + + if(!(/^(document|window|parent)$/).test(o.containment) && o.containment.constructor != Array) { + var ce = $(o.containment)[0]; if(!ce) return; + var co = $(o.containment).offset(); + var over = ($(ce).css("overflow") != 'hidden'); + + this.containment = [ + co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left, + co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top, + co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left, + co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top + ]; + } else if(o.containment.constructor == Array) { + this.containment = o.containment; + } + + }, + + _convertPositionTo: function(d, pos) { + + if(!pos) pos = this.position; + var mod = d == "absolute" ? 1 : -1; + var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); + + return { + top: ( + pos.top // The absolute mouse position + + this.offset.relative.top * mod // Only for relative positioned nodes: Relative offset from element to offset parent + + this.offset.parent.top * mod // The offsetParent's offset without borders (offset + border) + - ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod) + ), + left: ( + pos.left // The absolute mouse position + + this.offset.relative.left * mod // Only for relative positioned nodes: Relative offset from element to offset parent + + this.offset.parent.left * mod // The offsetParent's offset without borders (offset + border) + - ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod) + ) + }; + + }, + + _generatePosition: function(event) { + + var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); + var pageX = event.pageX; + var pageY = event.pageY; + + /* + * - Position constraining - + * Constrain the position to a mix of grid, containment. + */ + + if(this.originalPosition) { //If we are not dragging yet, we won't check for options + + if(this.containment) { + if(event.pageX - this.offset.click.left < this.containment[0]) pageX = this.containment[0] + this.offset.click.left; + if(event.pageY - this.offset.click.top < this.containment[1]) pageY = this.containment[1] + this.offset.click.top; + if(event.pageX - this.offset.click.left > this.containment[2]) pageX = this.containment[2] + this.offset.click.left; + if(event.pageY - this.offset.click.top > this.containment[3]) pageY = this.containment[3] + this.offset.click.top; + } + + if(o.grid) { + var top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1]; + pageY = this.containment ? (!(top - this.offset.click.top < this.containment[1] || top - this.offset.click.top > this.containment[3]) ? top : (!(top - this.offset.click.top < this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top; + + var left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0]; + pageX = this.containment ? (!(left - this.offset.click.left < this.containment[0] || left - this.offset.click.left > this.containment[2]) ? left : (!(left - this.offset.click.left < this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left; + } + + } + + return { + top: ( + pageY // The absolute mouse position + - this.offset.click.top // Click offset (relative to the element) + - this.offset.relative.top // Only for relative positioned nodes: Relative offset from element to offset parent + - this.offset.parent.top // The offsetParent's offset without borders (offset + border) + + ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) )) + ), + left: ( + pageX // The absolute mouse position + - this.offset.click.left // Click offset (relative to the element) + - this.offset.relative.left // Only for relative positioned nodes: Relative offset from element to offset parent + - this.offset.parent.left // The offsetParent's offset without borders (offset + border) + + ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() )) + ) + }; + + }, + + _clear: function() { + this.helper.removeClass("ui-draggable-dragging"); + if(this.helper[0] != this.element[0] && !this.cancelHelperRemoval) this.helper.remove(); + //if($.ui.ddmanager) $.ui.ddmanager.current = null; + this.helper = null; + this.cancelHelperRemoval = false; + }, + + // From now on bulk stuff - mainly helpers + + _trigger: function(type, event, ui) { + ui = ui || this._uiHash(); + $.ui.plugin.call(this, type, [event, ui]); + if(type == "drag") this.positionAbs = this._convertPositionTo("absolute"); //The absolute position has to be recalculated after plugins + return $.Widget.prototype._trigger.call(this, type, event, ui); + }, + + plugins: {}, + + _uiHash: function(event) { + return { + helper: this.helper, + position: this.position, + originalPosition: this.originalPosition, + offset: this.positionAbs + }; + } + +}); + +$.extend($.ui.draggable, { + version: "1.8.10" +}); + +$.ui.plugin.add("draggable", "connectToSortable", { + start: function(event, ui) { + + var inst = $(this).data("draggable"), o = inst.options, + uiSortable = $.extend({}, ui, { item: inst.element }); + inst.sortables = []; + $(o.connectToSortable).each(function() { + var sortable = $.data(this, 'sortable'); + if (sortable && !sortable.options.disabled) { + inst.sortables.push({ + instance: sortable, + shouldRevert: sortable.options.revert + }); + sortable._refreshItems(); //Do a one-time refresh at start to refresh the containerCache + sortable._trigger("activate", event, uiSortable); + } + }); + + }, + stop: function(event, ui) { + + //If we are still over the sortable, we fake the stop event of the sortable, but also remove helper + var inst = $(this).data("draggable"), + uiSortable = $.extend({}, ui, { item: inst.element }); + + $.each(inst.sortables, function() { + if(this.instance.isOver) { + + this.instance.isOver = 0; + + inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance + this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work) + + //The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: 'valid/invalid' + if(this.shouldRevert) this.instance.options.revert = true; + + //Trigger the stop of the sortable + this.instance._mouseStop(event); + + this.instance.options.helper = this.instance.options._helper; + + //If the helper has been the original item, restore properties in the sortable + if(inst.options.helper == 'original') + this.instance.currentItem.css({ top: 'auto', left: 'auto' }); + + } else { + this.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance + this.instance._trigger("deactivate", event, uiSortable); + } + + }); + + }, + drag: function(event, ui) { + + var inst = $(this).data("draggable"), self = this; + + var checkPos = function(o) { + var dyClick = this.offset.click.top, dxClick = this.offset.click.left; + var helperTop = this.positionAbs.top, helperLeft = this.positionAbs.left; + var itemHeight = o.height, itemWidth = o.width; + var itemTop = o.top, itemLeft = o.left; + + return $.ui.isOver(helperTop + dyClick, helperLeft + dxClick, itemTop, itemLeft, itemHeight, itemWidth); + }; + + $.each(inst.sortables, function(i) { + + //Copy over some variables to allow calling the sortable's native _intersectsWith + this.instance.positionAbs = inst.positionAbs; + this.instance.helperProportions = inst.helperProportions; + this.instance.offset.click = inst.offset.click; + + if(this.instance._intersectsWith(this.instance.containerCache)) { + + //If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once + if(!this.instance.isOver) { + + this.instance.isOver = 1; + //Now we fake the start of dragging for the sortable instance, + //by cloning the list group item, appending it to the sortable and using it as inst.currentItem + //We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one) + this.instance.currentItem = $(self).clone().appendTo(this.instance.element).data("sortable-item", true); + this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it + this.instance.options.helper = function() { return ui.helper[0]; }; + + event.target = this.instance.currentItem[0]; + this.instance._mouseCapture(event, true); + this.instance._mouseStart(event, true, true); + + //Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes + this.instance.offset.click.top = inst.offset.click.top; + this.instance.offset.click.left = inst.offset.click.left; + this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left; + this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top; + + inst._trigger("toSortable", event); + inst.dropped = this.instance.element; //draggable revert needs that + //hack so receive/update callbacks work (mostly) + inst.currentItem = inst.element; + this.instance.fromOutside = inst; + + } + + //Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable + if(this.instance.currentItem) this.instance._mouseDrag(event); + + } else { + + //If it doesn't intersect with the sortable, and it intersected before, + //we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval + if(this.instance.isOver) { + + this.instance.isOver = 0; + this.instance.cancelHelperRemoval = true; + + //Prevent reverting on this forced stop + this.instance.options.revert = false; + + // The out event needs to be triggered independently + this.instance._trigger('out', event, this.instance._uiHash(this.instance)); + + this.instance._mouseStop(event, true); + this.instance.options.helper = this.instance.options._helper; + + //Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size + this.instance.currentItem.remove(); + if(this.instance.placeholder) this.instance.placeholder.remove(); + + inst._trigger("fromSortable", event); + inst.dropped = false; //draggable revert needs that + } + + }; + + }); + + } +}); + +$.ui.plugin.add("draggable", "cursor", { + start: function(event, ui) { + var t = $('body'), o = $(this).data('draggable').options; + if (t.css("cursor")) o._cursor = t.css("cursor"); + t.css("cursor", o.cursor); + }, + stop: function(event, ui) { + var o = $(this).data('draggable').options; + if (o._cursor) $('body').css("cursor", o._cursor); + } +}); + +$.ui.plugin.add("draggable", "iframeFix", { + start: function(event, ui) { + var o = $(this).data('draggable').options; + $(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() { + $('
        ') + .css({ + width: this.offsetWidth+"px", height: this.offsetHeight+"px", + position: "absolute", opacity: "0.001", zIndex: 1000 + }) + .css($(this).offset()) + .appendTo("body"); + }); + }, + stop: function(event, ui) { + $("div.ui-draggable-iframeFix").each(function() { this.parentNode.removeChild(this); }); //Remove frame helpers + } +}); + +$.ui.plugin.add("draggable", "opacity", { + start: function(event, ui) { + var t = $(ui.helper), o = $(this).data('draggable').options; + if(t.css("opacity")) o._opacity = t.css("opacity"); + t.css('opacity', o.opacity); + }, + stop: function(event, ui) { + var o = $(this).data('draggable').options; + if(o._opacity) $(ui.helper).css('opacity', o._opacity); + } +}); + +$.ui.plugin.add("draggable", "scroll", { + start: function(event, ui) { + var i = $(this).data("draggable"); + if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') i.overflowOffset = i.scrollParent.offset(); + }, + drag: function(event, ui) { + + var i = $(this).data("draggable"), o = i.options, scrolled = false; + + if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') { + + if(!o.axis || o.axis != 'x') { + if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) + i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed; + else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity) + i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed; + } + + if(!o.axis || o.axis != 'y') { + if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) + i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed; + else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity) + i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed; + } + + } else { + + if(!o.axis || o.axis != 'x') { + if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) + scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed); + else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) + scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed); + } + + if(!o.axis || o.axis != 'y') { + if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) + scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed); + else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) + scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed); + } + + } + + if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) + $.ui.ddmanager.prepareOffsets(i, event); + + } +}); + +$.ui.plugin.add("draggable", "snap", { + start: function(event, ui) { + + var i = $(this).data("draggable"), o = i.options; + i.snapElements = []; + + $(o.snap.constructor != String ? ( o.snap.items || ':data(draggable)' ) : o.snap).each(function() { + var $t = $(this); var $o = $t.offset(); + if(this != i.element[0]) i.snapElements.push({ + item: this, + width: $t.outerWidth(), height: $t.outerHeight(), + top: $o.top, left: $o.left + }); + }); + + }, + drag: function(event, ui) { + + var inst = $(this).data("draggable"), o = inst.options; + var d = o.snapTolerance; + + var x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width, + y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height; + + for (var i = inst.snapElements.length - 1; i >= 0; i--){ + + var l = inst.snapElements[i].left, r = l + inst.snapElements[i].width, + t = inst.snapElements[i].top, b = t + inst.snapElements[i].height; + + //Yes, I know, this is insane ;) + if(!((l-d < x1 && x1 < r+d && t-d < y1 && y1 < b+d) || (l-d < x1 && x1 < r+d && t-d < y2 && y2 < b+d) || (l-d < x2 && x2 < r+d && t-d < y1 && y1 < b+d) || (l-d < x2 && x2 < r+d && t-d < y2 && y2 < b+d))) { + if(inst.snapElements[i].snapping) (inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item }))); + inst.snapElements[i].snapping = false; + continue; + } + + if(o.snapMode != 'inner') { + var ts = Math.abs(t - y2) <= d; + var bs = Math.abs(b - y1) <= d; + var ls = Math.abs(l - x2) <= d; + var rs = Math.abs(r - x1) <= d; + if(ts) ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top; + if(bs) ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top; + if(ls) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left; + if(rs) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left; + } + + var first = (ts || bs || ls || rs); + + if(o.snapMode != 'outer') { + var ts = Math.abs(t - y1) <= d; + var bs = Math.abs(b - y2) <= d; + var ls = Math.abs(l - x1) <= d; + var rs = Math.abs(r - x2) <= d; + if(ts) ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top; + if(bs) ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top; + if(ls) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left; + if(rs) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left; + } + + if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) + (inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item }))); + inst.snapElements[i].snapping = (ts || bs || ls || rs || first); + + }; + + } +}); + +$.ui.plugin.add("draggable", "stack", { + start: function(event, ui) { + + var o = $(this).data("draggable").options; + + var group = $.makeArray($(o.stack)).sort(function(a,b) { + return (parseInt($(a).css("zIndex"),10) || 0) - (parseInt($(b).css("zIndex"),10) || 0); + }); + if (!group.length) { return; } + + var min = parseInt(group[0].style.zIndex) || 0; + $(group).each(function(i) { + this.style.zIndex = min + i; + }); + + this[0].style.zIndex = min + group.length; + + } +}); + +$.ui.plugin.add("draggable", "zIndex", { + start: function(event, ui) { + var t = $(ui.helper), o = $(this).data("draggable").options; + if(t.css("zIndex")) o._zIndex = t.css("zIndex"); + t.css('zIndex', o.zIndex); + }, + stop: function(event, ui) { + var o = $(this).data("draggable").options; + if(o._zIndex) $(ui.helper).css('zIndex', o._zIndex); + } +}); + +})(jQuery); diff --git a/js/ui/jquery.ui.droppable.js b/js/ui/jquery.ui.droppable.js new file mode 100644 index 0000000000..62bd7b0e55 --- /dev/null +++ b/js/ui/jquery.ui.droppable.js @@ -0,0 +1,285 @@ +/* + * jQuery UI Droppable 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Droppables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + * jquery.ui.mouse.js + * jquery.ui.draggable.js + */ +(function( $, undefined ) { + +$.widget("ui.droppable", { + widgetEventPrefix: "drop", + options: { + accept: '*', + activeClass: false, + addClasses: true, + greedy: false, + hoverClass: false, + scope: 'default', + tolerance: 'intersect' + }, + _create: function() { + + var o = this.options, accept = o.accept; + this.isover = 0; this.isout = 1; + + this.accept = $.isFunction(accept) ? accept : function(d) { + return d.is(accept); + }; + + //Store the droppable's proportions + this.proportions = { width: this.element[0].offsetWidth, height: this.element[0].offsetHeight }; + + // Add the reference and positions to the manager + $.ui.ddmanager.droppables[o.scope] = $.ui.ddmanager.droppables[o.scope] || []; + $.ui.ddmanager.droppables[o.scope].push(this); + + (o.addClasses && this.element.addClass("ui-droppable")); + + }, + + destroy: function() { + var drop = $.ui.ddmanager.droppables[this.options.scope]; + for ( var i = 0; i < drop.length; i++ ) + if ( drop[i] == this ) + drop.splice(i, 1); + + this.element + .removeClass("ui-droppable ui-droppable-disabled") + .removeData("droppable") + .unbind(".droppable"); + + return this; + }, + + _setOption: function(key, value) { + + if(key == 'accept') { + this.accept = $.isFunction(value) ? value : function(d) { + return d.is(value); + }; + } + $.Widget.prototype._setOption.apply(this, arguments); + }, + + _activate: function(event) { + var draggable = $.ui.ddmanager.current; + if(this.options.activeClass) this.element.addClass(this.options.activeClass); + (draggable && this._trigger('activate', event, this.ui(draggable))); + }, + + _deactivate: function(event) { + var draggable = $.ui.ddmanager.current; + if(this.options.activeClass) this.element.removeClass(this.options.activeClass); + (draggable && this._trigger('deactivate', event, this.ui(draggable))); + }, + + _over: function(event) { + + var draggable = $.ui.ddmanager.current; + if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return; // Bail if draggable and droppable are same element + + if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) { + if(this.options.hoverClass) this.element.addClass(this.options.hoverClass); + this._trigger('over', event, this.ui(draggable)); + } + + }, + + _out: function(event) { + + var draggable = $.ui.ddmanager.current; + if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return; // Bail if draggable and droppable are same element + + if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) { + if(this.options.hoverClass) this.element.removeClass(this.options.hoverClass); + this._trigger('out', event, this.ui(draggable)); + } + + }, + + _drop: function(event,custom) { + + var draggable = custom || $.ui.ddmanager.current; + if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return false; // Bail if draggable and droppable are same element + + var childrenIntersection = false; + this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function() { + var inst = $.data(this, 'droppable'); + if( + inst.options.greedy + && !inst.options.disabled + && inst.options.scope == draggable.options.scope + && inst.accept.call(inst.element[0], (draggable.currentItem || draggable.element)) + && $.ui.intersect(draggable, $.extend(inst, { offset: inst.element.offset() }), inst.options.tolerance) + ) { childrenIntersection = true; return false; } + }); + if(childrenIntersection) return false; + + if(this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) { + if(this.options.activeClass) this.element.removeClass(this.options.activeClass); + if(this.options.hoverClass) this.element.removeClass(this.options.hoverClass); + this._trigger('drop', event, this.ui(draggable)); + return this.element; + } + + return false; + + }, + + ui: function(c) { + return { + draggable: (c.currentItem || c.element), + helper: c.helper, + position: c.position, + offset: c.positionAbs + }; + } + +}); + +$.extend($.ui.droppable, { + version: "1.8.10" +}); + +$.ui.intersect = function(draggable, droppable, toleranceMode) { + + if (!droppable.offset) return false; + + var x1 = (draggable.positionAbs || draggable.position.absolute).left, x2 = x1 + draggable.helperProportions.width, + y1 = (draggable.positionAbs || draggable.position.absolute).top, y2 = y1 + draggable.helperProportions.height; + var l = droppable.offset.left, r = l + droppable.proportions.width, + t = droppable.offset.top, b = t + droppable.proportions.height; + + switch (toleranceMode) { + case 'fit': + return (l <= x1 && x2 <= r + && t <= y1 && y2 <= b); + break; + case 'intersect': + return (l < x1 + (draggable.helperProportions.width / 2) // Right Half + && x2 - (draggable.helperProportions.width / 2) < r // Left Half + && t < y1 + (draggable.helperProportions.height / 2) // Bottom Half + && y2 - (draggable.helperProportions.height / 2) < b ); // Top Half + break; + case 'pointer': + var draggableLeft = ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left), + draggableTop = ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top), + isOver = $.ui.isOver(draggableTop, draggableLeft, t, l, droppable.proportions.height, droppable.proportions.width); + return isOver; + break; + case 'touch': + return ( + (y1 >= t && y1 <= b) || // Top edge touching + (y2 >= t && y2 <= b) || // Bottom edge touching + (y1 < t && y2 > b) // Surrounded vertically + ) && ( + (x1 >= l && x1 <= r) || // Left edge touching + (x2 >= l && x2 <= r) || // Right edge touching + (x1 < l && x2 > r) // Surrounded horizontally + ); + break; + default: + return false; + break; + } + +}; + +/* + This manager tracks offsets of draggables and droppables +*/ +$.ui.ddmanager = { + current: null, + droppables: { 'default': [] }, + prepareOffsets: function(t, event) { + + var m = $.ui.ddmanager.droppables[t.options.scope] || []; + var type = event ? event.type : null; // workaround for #2317 + var list = (t.currentItem || t.element).find(":data(droppable)").andSelf(); + + droppablesLoop: for (var i = 0; i < m.length; i++) { + + if(m[i].options.disabled || (t && !m[i].accept.call(m[i].element[0],(t.currentItem || t.element)))) continue; //No disabled and non-accepted + for (var j=0; j < list.length; j++) { if(list[j] == m[i].element[0]) { m[i].proportions.height = 0; continue droppablesLoop; } }; //Filter out elements in the current dragged item + m[i].visible = m[i].element.css("display") != "none"; if(!m[i].visible) continue; //If the element is not visible, continue + + m[i].offset = m[i].element.offset(); + m[i].proportions = { width: m[i].element[0].offsetWidth, height: m[i].element[0].offsetHeight }; + + if(type == "mousedown") m[i]._activate.call(m[i], event); //Activate the droppable if used directly from draggables + + } + + }, + drop: function(draggable, event) { + + var dropped = false; + $.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() { + + if(!this.options) return; + if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance)) + dropped = dropped || this._drop.call(this, event); + + if (!this.options.disabled && this.visible && this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) { + this.isout = 1; this.isover = 0; + this._deactivate.call(this, event); + } + + }); + return dropped; + + }, + drag: function(draggable, event) { + + //If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse. + if(draggable.options.refreshPositions) $.ui.ddmanager.prepareOffsets(draggable, event); + + //Run through all droppables and check their positions based on specific tolerance options + $.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() { + + if(this.options.disabled || this.greedyChild || !this.visible) return; + var intersects = $.ui.intersect(draggable, this, this.options.tolerance); + + var c = !intersects && this.isover == 1 ? 'isout' : (intersects && this.isover == 0 ? 'isover' : null); + if(!c) return; + + var parentInstance; + if (this.options.greedy) { + var parent = this.element.parents(':data(droppable):eq(0)'); + if (parent.length) { + parentInstance = $.data(parent[0], 'droppable'); + parentInstance.greedyChild = (c == 'isover' ? 1 : 0); + } + } + + // we just moved into a greedy child + if (parentInstance && c == 'isover') { + parentInstance['isover'] = 0; + parentInstance['isout'] = 1; + parentInstance._out.call(parentInstance, event); + } + + this[c] = 1; this[c == 'isout' ? 'isover' : 'isout'] = 0; + this[c == "isover" ? "_over" : "_out"].call(this, event); + + // we just moved out of a greedy child + if (parentInstance && c == 'isout') { + parentInstance['isout'] = 0; + parentInstance['isover'] = 1; + parentInstance._over.call(parentInstance, event); + } + }); + + } +}; + +})(jQuery); diff --git a/js/ui/jquery.ui.mouse.js b/js/ui/jquery.ui.mouse.js new file mode 100644 index 0000000000..3c3e7970a0 --- /dev/null +++ b/js/ui/jquery.ui.mouse.js @@ -0,0 +1,151 @@ +/*! + * jQuery UI Mouse 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Mouse + * + * Depends: + * jquery.ui.widget.js + */ +(function( $, undefined ) { + +$.widget("ui.mouse", { + options: { + cancel: ':input,option', + distance: 1, + delay: 0 + }, + _mouseInit: function() { + var self = this; + + this.element + .bind('mousedown.'+this.widgetName, function(event) { + return self._mouseDown(event); + }) + .bind('click.'+this.widgetName, function(event) { + if (true === $.data(event.target, self.widgetName + '.preventClickEvent')) { + $.removeData(event.target, self.widgetName + '.preventClickEvent'); + event.stopImmediatePropagation(); + return false; + } + }); + + this.started = false; + }, + + // TODO: make sure destroying one instance of mouse doesn't mess with + // other instances of mouse + _mouseDestroy: function() { + this.element.unbind('.'+this.widgetName); + }, + + _mouseDown: function(event) { + // don't let more than one widget handle mouseStart + // TODO: figure out why we have to use originalEvent + event.originalEvent = event.originalEvent || {}; + if (event.originalEvent.mouseHandled) { return; } + + // we may have missed mouseup (out of window) + (this._mouseStarted && this._mouseUp(event)); + + this._mouseDownEvent = event; + + var self = this, + btnIsLeft = (event.which == 1), + elIsCancel = (typeof this.options.cancel == "string" ? $(event.target).parents().add(event.target).filter(this.options.cancel).length : false); + if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) { + return true; + } + + this.mouseDelayMet = !this.options.delay; + if (!this.mouseDelayMet) { + this._mouseDelayTimer = setTimeout(function() { + self.mouseDelayMet = true; + }, this.options.delay); + } + + if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { + this._mouseStarted = (this._mouseStart(event) !== false); + if (!this._mouseStarted) { + event.preventDefault(); + return true; + } + } + + // these delegates are required to keep context + this._mouseMoveDelegate = function(event) { + return self._mouseMove(event); + }; + this._mouseUpDelegate = function(event) { + return self._mouseUp(event); + }; + $(document) + .bind('mousemove.'+this.widgetName, this._mouseMoveDelegate) + .bind('mouseup.'+this.widgetName, this._mouseUpDelegate); + + event.preventDefault(); + event.originalEvent.mouseHandled = true; + return true; + }, + + _mouseMove: function(event) { + // IE mouseup check - mouseup happened when mouse was out of window + if ($.browser.msie && !(document.documentMode >= 9) && !event.button) { + return this._mouseUp(event); + } + + if (this._mouseStarted) { + this._mouseDrag(event); + return event.preventDefault(); + } + + if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { + this._mouseStarted = + (this._mouseStart(this._mouseDownEvent, event) !== false); + (this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event)); + } + + return !this._mouseStarted; + }, + + _mouseUp: function(event) { + $(document) + .unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate) + .unbind('mouseup.'+this.widgetName, this._mouseUpDelegate); + + if (this._mouseStarted) { + this._mouseStarted = false; + + if (event.target == this._mouseDownEvent.target) { + $.data(event.target, this.widgetName + '.preventClickEvent', true); + } + + this._mouseStop(event); + } + + return false; + }, + + _mouseDistanceMet: function(event) { + return (Math.max( + Math.abs(this._mouseDownEvent.pageX - event.pageX), + Math.abs(this._mouseDownEvent.pageY - event.pageY) + ) >= this.options.distance + ); + }, + + _mouseDelayMet: function(event) { + return this.mouseDelayMet; + }, + + // These are placeholder methods, to be overriden by extending plugin + _mouseStart: function(event) {}, + _mouseDrag: function(event) {}, + _mouseStop: function(event) {}, + _mouseCapture: function(event) { return true; } +}); + +})(jQuery); diff --git a/js/ui/jquery.ui.position.js b/js/ui/jquery.ui.position.js new file mode 100644 index 0000000000..b6ad10caef --- /dev/null +++ b/js/ui/jquery.ui.position.js @@ -0,0 +1,252 @@ +/* + * jQuery UI Position 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Position + */ +(function( $, undefined ) { + +$.ui = $.ui || {}; + +var horizontalPositions = /left|center|right/, + verticalPositions = /top|center|bottom/, + center = "center", + _position = $.fn.position, + _offset = $.fn.offset; + +$.fn.position = function( options ) { + if ( !options || !options.of ) { + return _position.apply( this, arguments ); + } + + // make a copy, we don't want to modify arguments + options = $.extend( {}, options ); + + var target = $( options.of ), + targetElem = target[0], + collision = ( options.collision || "flip" ).split( " " ), + offset = options.offset ? options.offset.split( " " ) : [ 0, 0 ], + targetWidth, + targetHeight, + basePosition; + + if ( targetElem.nodeType === 9 ) { + targetWidth = target.width(); + targetHeight = target.height(); + basePosition = { top: 0, left: 0 }; + // TODO: use $.isWindow() in 1.9 + } else if ( targetElem.setTimeout ) { + targetWidth = target.width(); + targetHeight = target.height(); + basePosition = { top: target.scrollTop(), left: target.scrollLeft() }; + } else if ( targetElem.preventDefault ) { + // force left top to allow flipping + options.at = "left top"; + targetWidth = targetHeight = 0; + basePosition = { top: options.of.pageY, left: options.of.pageX }; + } else { + targetWidth = target.outerWidth(); + targetHeight = target.outerHeight(); + basePosition = target.offset(); + } + + // force my and at to have valid horizontal and veritcal positions + // if a value is missing or invalid, it will be converted to center + $.each( [ "my", "at" ], function() { + var pos = ( options[this] || "" ).split( " " ); + if ( pos.length === 1) { + pos = horizontalPositions.test( pos[0] ) ? + pos.concat( [center] ) : + verticalPositions.test( pos[0] ) ? + [ center ].concat( pos ) : + [ center, center ]; + } + pos[ 0 ] = horizontalPositions.test( pos[0] ) ? pos[ 0 ] : center; + pos[ 1 ] = verticalPositions.test( pos[1] ) ? pos[ 1 ] : center; + options[ this ] = pos; + }); + + // normalize collision option + if ( collision.length === 1 ) { + collision[ 1 ] = collision[ 0 ]; + } + + // normalize offset option + offset[ 0 ] = parseInt( offset[0], 10 ) || 0; + if ( offset.length === 1 ) { + offset[ 1 ] = offset[ 0 ]; + } + offset[ 1 ] = parseInt( offset[1], 10 ) || 0; + + if ( options.at[0] === "right" ) { + basePosition.left += targetWidth; + } else if ( options.at[0] === center ) { + basePosition.left += targetWidth / 2; + } + + if ( options.at[1] === "bottom" ) { + basePosition.top += targetHeight; + } else if ( options.at[1] === center ) { + basePosition.top += targetHeight / 2; + } + + basePosition.left += offset[ 0 ]; + basePosition.top += offset[ 1 ]; + + return this.each(function() { + var elem = $( this ), + elemWidth = elem.outerWidth(), + elemHeight = elem.outerHeight(), + marginLeft = parseInt( $.curCSS( this, "marginLeft", true ) ) || 0, + marginTop = parseInt( $.curCSS( this, "marginTop", true ) ) || 0, + collisionWidth = elemWidth + marginLeft + + ( parseInt( $.curCSS( this, "marginRight", true ) ) || 0 ), + collisionHeight = elemHeight + marginTop + + ( parseInt( $.curCSS( this, "marginBottom", true ) ) || 0 ), + position = $.extend( {}, basePosition ), + collisionPosition; + + if ( options.my[0] === "right" ) { + position.left -= elemWidth; + } else if ( options.my[0] === center ) { + position.left -= elemWidth / 2; + } + + if ( options.my[1] === "bottom" ) { + position.top -= elemHeight; + } else if ( options.my[1] === center ) { + position.top -= elemHeight / 2; + } + + // prevent fractions (see #5280) + position.left = Math.round( position.left ); + position.top = Math.round( position.top ); + + collisionPosition = { + left: position.left - marginLeft, + top: position.top - marginTop + }; + + $.each( [ "left", "top" ], function( i, dir ) { + if ( $.ui.position[ collision[i] ] ) { + $.ui.position[ collision[i] ][ dir ]( position, { + targetWidth: targetWidth, + targetHeight: targetHeight, + elemWidth: elemWidth, + elemHeight: elemHeight, + collisionPosition: collisionPosition, + collisionWidth: collisionWidth, + collisionHeight: collisionHeight, + offset: offset, + my: options.my, + at: options.at + }); + } + }); + + if ( $.fn.bgiframe ) { + elem.bgiframe(); + } + elem.offset( $.extend( position, { using: options.using } ) ); + }); +}; + +$.ui.position = { + fit: { + left: function( position, data ) { + var win = $( window ), + over = data.collisionPosition.left + data.collisionWidth - win.width() - win.scrollLeft(); + position.left = over > 0 ? position.left - over : Math.max( position.left - data.collisionPosition.left, position.left ); + }, + top: function( position, data ) { + var win = $( window ), + over = data.collisionPosition.top + data.collisionHeight - win.height() - win.scrollTop(); + position.top = over > 0 ? position.top - over : Math.max( position.top - data.collisionPosition.top, position.top ); + } + }, + + flip: { + left: function( position, data ) { + if ( data.at[0] === center ) { + return; + } + var win = $( window ), + over = data.collisionPosition.left + data.collisionWidth - win.width() - win.scrollLeft(), + myOffset = data.my[ 0 ] === "left" ? + -data.elemWidth : + data.my[ 0 ] === "right" ? + data.elemWidth : + 0, + atOffset = data.at[ 0 ] === "left" ? + data.targetWidth : + -data.targetWidth, + offset = -2 * data.offset[ 0 ]; + position.left += data.collisionPosition.left < 0 ? + myOffset + atOffset + offset : + over > 0 ? + myOffset + atOffset + offset : + 0; + }, + top: function( position, data ) { + if ( data.at[1] === center ) { + return; + } + var win = $( window ), + over = data.collisionPosition.top + data.collisionHeight - win.height() - win.scrollTop(), + myOffset = data.my[ 1 ] === "top" ? + -data.elemHeight : + data.my[ 1 ] === "bottom" ? + data.elemHeight : + 0, + atOffset = data.at[ 1 ] === "top" ? + data.targetHeight : + -data.targetHeight, + offset = -2 * data.offset[ 1 ]; + position.top += data.collisionPosition.top < 0 ? + myOffset + atOffset + offset : + over > 0 ? + myOffset + atOffset + offset : + 0; + } + } +}; + +// offset setter from jQuery 1.4 +if ( !$.offset.setOffset ) { + $.offset.setOffset = function( elem, options ) { + // set position first, in-case top/left are set even on static elem + if ( /static/.test( $.curCSS( elem, "position" ) ) ) { + elem.style.position = "relative"; + } + var curElem = $( elem ), + curOffset = curElem.offset(), + curTop = parseInt( $.curCSS( elem, "top", true ), 10 ) || 0, + curLeft = parseInt( $.curCSS( elem, "left", true ), 10) || 0, + props = { + top: (options.top - curOffset.top) + curTop, + left: (options.left - curOffset.left) + curLeft + }; + + if ( 'using' in options ) { + options.using.call( elem, props ); + } else { + curElem.css( props ); + } + }; + + $.fn.offset = function( options ) { + var elem = this[ 0 ]; + if ( !elem || !elem.ownerDocument ) { return null; } + if ( options ) { + return this.each(function() { + $.offset.setOffset( this, options ); + }); + } + return _offset.call( this ); + }; +} + +}( jQuery )); diff --git a/js/ui/jquery.ui.progressbar.js b/js/ui/jquery.ui.progressbar.js new file mode 100644 index 0000000000..d54e583f56 --- /dev/null +++ b/js/ui/jquery.ui.progressbar.js @@ -0,0 +1,108 @@ +/* + * jQuery UI Progressbar 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Progressbar + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function( $, undefined ) { + +$.widget( "ui.progressbar", { + options: { + value: 0, + max: 100 + }, + + min: 0, + + _create: function() { + this.element + .addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" ) + .attr({ + role: "progressbar", + "aria-valuemin": this.min, + "aria-valuemax": this.options.max, + "aria-valuenow": this._value() + }); + + this.valueDiv = $( "
        " ) + .appendTo( this.element ); + + this.oldValue = this._value(); + this._refreshValue(); + }, + + destroy: function() { + this.element + .removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" ) + .removeAttr( "role" ) + .removeAttr( "aria-valuemin" ) + .removeAttr( "aria-valuemax" ) + .removeAttr( "aria-valuenow" ); + + this.valueDiv.remove(); + + $.Widget.prototype.destroy.apply( this, arguments ); + }, + + value: function( newValue ) { + if ( newValue === undefined ) { + return this._value(); + } + + this._setOption( "value", newValue ); + return this; + }, + + _setOption: function( key, value ) { + if ( key === "value" ) { + this.options.value = value; + this._refreshValue(); + if ( this._value() === this.options.max ) { + this._trigger( "complete" ); + } + } + + $.Widget.prototype._setOption.apply( this, arguments ); + }, + + _value: function() { + var val = this.options.value; + // normalize invalid value + if ( typeof val !== "number" ) { + val = 0; + } + return Math.min( this.options.max, Math.max( this.min, val ) ); + }, + + _percentage: function() { + return 100 * this._value() / this.options.max; + }, + + _refreshValue: function() { + var value = this.value(); + var percentage = this._percentage(); + + if ( this.oldValue !== value ) { + this.oldValue = value; + this._trigger( "change" ); + } + + this.valueDiv + .toggleClass( "ui-corner-right", value === this.options.max ) + .width( percentage.toFixed(0) + "%" ); + this.element.attr( "aria-valuenow", value ); + } +}); + +$.extend( $.ui.progressbar, { + version: "1.8.10" +}); + +})( jQuery ); diff --git a/js/ui/jquery.ui.resizable.js b/js/ui/jquery.ui.resizable.js new file mode 100644 index 0000000000..1d7648a0c4 --- /dev/null +++ b/js/ui/jquery.ui.resizable.js @@ -0,0 +1,812 @@ +/* + * jQuery UI Resizable 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Resizables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function( $, undefined ) { + +$.widget("ui.resizable", $.ui.mouse, { + widgetEventPrefix: "resize", + options: { + alsoResize: false, + animate: false, + animateDuration: "slow", + animateEasing: "swing", + aspectRatio: false, + autoHide: false, + containment: false, + ghost: false, + grid: false, + handles: "e,s,se", + helper: false, + maxHeight: null, + maxWidth: null, + minHeight: 10, + minWidth: 10, + zIndex: 1000 + }, + _create: function() { + + var self = this, o = this.options; + this.element.addClass("ui-resizable"); + + $.extend(this, { + _aspectRatio: !!(o.aspectRatio), + aspectRatio: o.aspectRatio, + originalElement: this.element, + _proportionallyResizeElements: [], + _helper: o.helper || o.ghost || o.animate ? o.helper || 'ui-resizable-helper' : null + }); + + //Wrap the element if it cannot hold child nodes + if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)) { + + //Opera fix for relative positioning + if (/relative/.test(this.element.css('position')) && $.browser.opera) + this.element.css({ position: 'relative', top: 'auto', left: 'auto' }); + + //Create a wrapper element and set the wrapper to the new current internal element + this.element.wrap( + $('
        ').css({ + position: this.element.css('position'), + width: this.element.outerWidth(), + height: this.element.outerHeight(), + top: this.element.css('top'), + left: this.element.css('left') + }) + ); + + //Overwrite the original this.element + this.element = this.element.parent().data( + "resizable", this.element.data('resizable') + ); + + this.elementIsWrapper = true; + + //Move margins to the wrapper + this.element.css({ marginLeft: this.originalElement.css("marginLeft"), marginTop: this.originalElement.css("marginTop"), marginRight: this.originalElement.css("marginRight"), marginBottom: this.originalElement.css("marginBottom") }); + this.originalElement.css({ marginLeft: 0, marginTop: 0, marginRight: 0, marginBottom: 0}); + + //Prevent Safari textarea resize + this.originalResizeStyle = this.originalElement.css('resize'); + this.originalElement.css('resize', 'none'); + + //Push the actual element to our proportionallyResize internal array + this._proportionallyResizeElements.push(this.originalElement.css({ position: 'static', zoom: 1, display: 'block' })); + + // avoid IE jump (hard set the margin) + this.originalElement.css({ margin: this.originalElement.css('margin') }); + + // fix handlers offset + this._proportionallyResize(); + + } + + this.handles = o.handles || (!$('.ui-resizable-handle', this.element).length ? "e,s,se" : { n: '.ui-resizable-n', e: '.ui-resizable-e', s: '.ui-resizable-s', w: '.ui-resizable-w', se: '.ui-resizable-se', sw: '.ui-resizable-sw', ne: '.ui-resizable-ne', nw: '.ui-resizable-nw' }); + if(this.handles.constructor == String) { + + if(this.handles == 'all') this.handles = 'n,e,s,w,se,sw,ne,nw'; + var n = this.handles.split(","); this.handles = {}; + + for(var i = 0; i < n.length; i++) { + + var handle = $.trim(n[i]), hname = 'ui-resizable-'+handle; + var axis = $('
        '); + + // increase zIndex of sw, se, ne, nw axis + //TODO : this modifies original option + if(/sw|se|ne|nw/.test(handle)) axis.css({ zIndex: ++o.zIndex }); + + //TODO : What's going on here? + if ('se' == handle) { + axis.addClass('ui-icon ui-icon-gripsmall-diagonal-se'); + }; + + //Insert into internal handles object and append to element + this.handles[handle] = '.ui-resizable-'+handle; + this.element.append(axis); + } + + } + + this._renderAxis = function(target) { + + target = target || this.element; + + for(var i in this.handles) { + + if(this.handles[i].constructor == String) + this.handles[i] = $(this.handles[i], this.element).show(); + + //Apply pad to wrapper element, needed to fix axis position (textarea, inputs, scrolls) + if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) { + + var axis = $(this.handles[i], this.element), padWrapper = 0; + + //Checking the correct pad and border + padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth(); + + //The padding type i have to apply... + var padPos = [ 'padding', + /ne|nw|n/.test(i) ? 'Top' : + /se|sw|s/.test(i) ? 'Bottom' : + /^e$/.test(i) ? 'Right' : 'Left' ].join(""); + + target.css(padPos, padWrapper); + + this._proportionallyResize(); + + } + + //TODO: What's that good for? There's not anything to be executed left + if(!$(this.handles[i]).length) + continue; + + } + }; + + //TODO: make renderAxis a prototype function + this._renderAxis(this.element); + + this._handles = $('.ui-resizable-handle', this.element) + .disableSelection(); + + //Matching axis name + this._handles.mouseover(function() { + if (!self.resizing) { + if (this.className) + var axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i); + //Axis, default = se + self.axis = axis && axis[1] ? axis[1] : 'se'; + } + }); + + //If we want to auto hide the elements + if (o.autoHide) { + this._handles.hide(); + $(this.element) + .addClass("ui-resizable-autohide") + .hover(function() { + $(this).removeClass("ui-resizable-autohide"); + self._handles.show(); + }, + function(){ + if (!self.resizing) { + $(this).addClass("ui-resizable-autohide"); + self._handles.hide(); + } + }); + } + + //Initialize the mouse interaction + this._mouseInit(); + + }, + + destroy: function() { + + this._mouseDestroy(); + + var _destroy = function(exp) { + $(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing") + .removeData("resizable").unbind(".resizable").find('.ui-resizable-handle').remove(); + }; + + //TODO: Unwrap at same DOM position + if (this.elementIsWrapper) { + _destroy(this.element); + var wrapper = this.element; + wrapper.after( + this.originalElement.css({ + position: wrapper.css('position'), + width: wrapper.outerWidth(), + height: wrapper.outerHeight(), + top: wrapper.css('top'), + left: wrapper.css('left') + }) + ).remove(); + } + + this.originalElement.css('resize', this.originalResizeStyle); + _destroy(this.originalElement); + + return this; + }, + + _mouseCapture: function(event) { + var handle = false; + for (var i in this.handles) { + if ($(this.handles[i])[0] == event.target) { + handle = true; + } + } + + return !this.options.disabled && handle; + }, + + _mouseStart: function(event) { + + var o = this.options, iniPos = this.element.position(), el = this.element; + + this.resizing = true; + this.documentScroll = { top: $(document).scrollTop(), left: $(document).scrollLeft() }; + + // bugfix for http://dev.jquery.com/ticket/1749 + if (el.is('.ui-draggable') || (/absolute/).test(el.css('position'))) { + el.css({ position: 'absolute', top: iniPos.top, left: iniPos.left }); + } + + //Opera fixing relative position + if ($.browser.opera && (/relative/).test(el.css('position'))) + el.css({ position: 'relative', top: 'auto', left: 'auto' }); + + this._renderProxy(); + + var curleft = num(this.helper.css('left')), curtop = num(this.helper.css('top')); + + if (o.containment) { + curleft += $(o.containment).scrollLeft() || 0; + curtop += $(o.containment).scrollTop() || 0; + } + + //Store needed variables + this.offset = this.helper.offset(); + this.position = { left: curleft, top: curtop }; + this.size = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() }; + this.originalSize = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() }; + this.originalPosition = { left: curleft, top: curtop }; + this.sizeDiff = { width: el.outerWidth() - el.width(), height: el.outerHeight() - el.height() }; + this.originalMousePosition = { left: event.pageX, top: event.pageY }; + + //Aspect Ratio + this.aspectRatio = (typeof o.aspectRatio == 'number') ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1); + + var cursor = $('.ui-resizable-' + this.axis).css('cursor'); + $('body').css('cursor', cursor == 'auto' ? this.axis + '-resize' : cursor); + + el.addClass("ui-resizable-resizing"); + this._propagate("start", event); + return true; + }, + + _mouseDrag: function(event) { + + //Increase performance, avoid regex + var el = this.helper, o = this.options, props = {}, + self = this, smp = this.originalMousePosition, a = this.axis; + + var dx = (event.pageX-smp.left)||0, dy = (event.pageY-smp.top)||0; + var trigger = this._change[a]; + if (!trigger) return false; + + // Calculate the attrs that will be change + var data = trigger.apply(this, [event, dx, dy]), ie6 = $.browser.msie && $.browser.version < 7, csdif = this.sizeDiff; + + if (this._aspectRatio || event.shiftKey) + data = this._updateRatio(data, event); + + data = this._respectSize(data, event); + + // plugins callbacks need to be called first + this._propagate("resize", event); + + el.css({ + top: this.position.top + "px", left: this.position.left + "px", + width: this.size.width + "px", height: this.size.height + "px" + }); + + if (!this._helper && this._proportionallyResizeElements.length) + this._proportionallyResize(); + + this._updateCache(data); + + // calling the user callback at the end + this._trigger('resize', event, this.ui()); + + return false; + }, + + _mouseStop: function(event) { + + this.resizing = false; + var o = this.options, self = this; + + if(this._helper) { + var pr = this._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName), + soffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height, + soffsetw = ista ? 0 : self.sizeDiff.width; + + var s = { width: (self.helper.width() - soffsetw), height: (self.helper.height() - soffseth) }, + left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null, + top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null; + + if (!o.animate) + this.element.css($.extend(s, { top: top, left: left })); + + self.helper.height(self.size.height); + self.helper.width(self.size.width); + + if (this._helper && !o.animate) this._proportionallyResize(); + } + + $('body').css('cursor', 'auto'); + + this.element.removeClass("ui-resizable-resizing"); + + this._propagate("stop", event); + + if (this._helper) this.helper.remove(); + return false; + + }, + + _updateCache: function(data) { + var o = this.options; + this.offset = this.helper.offset(); + if (isNumber(data.left)) this.position.left = data.left; + if (isNumber(data.top)) this.position.top = data.top; + if (isNumber(data.height)) this.size.height = data.height; + if (isNumber(data.width)) this.size.width = data.width; + }, + + _updateRatio: function(data, event) { + + var o = this.options, cpos = this.position, csize = this.size, a = this.axis; + + if (data.height) data.width = (csize.height * this.aspectRatio); + else if (data.width) data.height = (csize.width / this.aspectRatio); + + if (a == 'sw') { + data.left = cpos.left + (csize.width - data.width); + data.top = null; + } + if (a == 'nw') { + data.top = cpos.top + (csize.height - data.height); + data.left = cpos.left + (csize.width - data.width); + } + + return data; + }, + + _respectSize: function(data, event) { + + var el = this.helper, o = this.options, pRatio = this._aspectRatio || event.shiftKey, a = this.axis, + ismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height), + isminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height); + + if (isminw) data.width = o.minWidth; + if (isminh) data.height = o.minHeight; + if (ismaxw) data.width = o.maxWidth; + if (ismaxh) data.height = o.maxHeight; + + var dw = this.originalPosition.left + this.originalSize.width, dh = this.position.top + this.size.height; + var cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a); + + if (isminw && cw) data.left = dw - o.minWidth; + if (ismaxw && cw) data.left = dw - o.maxWidth; + if (isminh && ch) data.top = dh - o.minHeight; + if (ismaxh && ch) data.top = dh - o.maxHeight; + + // fixing jump error on top/left - bug #2330 + var isNotwh = !data.width && !data.height; + if (isNotwh && !data.left && data.top) data.top = null; + else if (isNotwh && !data.top && data.left) data.left = null; + + return data; + }, + + _proportionallyResize: function() { + + var o = this.options; + if (!this._proportionallyResizeElements.length) return; + var element = this.helper || this.element; + + for (var i=0; i < this._proportionallyResizeElements.length; i++) { + + var prel = this._proportionallyResizeElements[i]; + + if (!this.borderDif) { + var b = [prel.css('borderTopWidth'), prel.css('borderRightWidth'), prel.css('borderBottomWidth'), prel.css('borderLeftWidth')], + p = [prel.css('paddingTop'), prel.css('paddingRight'), prel.css('paddingBottom'), prel.css('paddingLeft')]; + + this.borderDif = $.map(b, function(v, i) { + var border = parseInt(v,10)||0, padding = parseInt(p[i],10)||0; + return border + padding; + }); + } + + if ($.browser.msie && !(!($(element).is(':hidden') || $(element).parents(':hidden').length))) + continue; + + prel.css({ + height: (element.height() - this.borderDif[0] - this.borderDif[2]) || 0, + width: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0 + }); + + }; + + }, + + _renderProxy: function() { + + var el = this.element, o = this.options; + this.elementOffset = el.offset(); + + if(this._helper) { + + this.helper = this.helper || $('
        '); + + // fix ie6 offset TODO: This seems broken + var ie6 = $.browser.msie && $.browser.version < 7, ie6offset = (ie6 ? 1 : 0), + pxyoffset = ( ie6 ? 2 : -1 ); + + this.helper.addClass(this._helper).css({ + width: this.element.outerWidth() + pxyoffset, + height: this.element.outerHeight() + pxyoffset, + position: 'absolute', + left: this.elementOffset.left - ie6offset +'px', + top: this.elementOffset.top - ie6offset +'px', + zIndex: ++o.zIndex //TODO: Don't modify option + }); + + this.helper + .appendTo("body") + .disableSelection(); + + } else { + this.helper = this.element; + } + + }, + + _change: { + e: function(event, dx, dy) { + return { width: this.originalSize.width + dx }; + }, + w: function(event, dx, dy) { + var o = this.options, cs = this.originalSize, sp = this.originalPosition; + return { left: sp.left + dx, width: cs.width - dx }; + }, + n: function(event, dx, dy) { + var o = this.options, cs = this.originalSize, sp = this.originalPosition; + return { top: sp.top + dy, height: cs.height - dy }; + }, + s: function(event, dx, dy) { + return { height: this.originalSize.height + dy }; + }, + se: function(event, dx, dy) { + return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [event, dx, dy])); + }, + sw: function(event, dx, dy) { + return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [event, dx, dy])); + }, + ne: function(event, dx, dy) { + return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [event, dx, dy])); + }, + nw: function(event, dx, dy) { + return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [event, dx, dy])); + } + }, + + _propagate: function(n, event) { + $.ui.plugin.call(this, n, [event, this.ui()]); + (n != "resize" && this._trigger(n, event, this.ui())); + }, + + plugins: {}, + + ui: function() { + return { + originalElement: this.originalElement, + element: this.element, + helper: this.helper, + position: this.position, + size: this.size, + originalSize: this.originalSize, + originalPosition: this.originalPosition + }; + } + +}); + +$.extend($.ui.resizable, { + version: "1.8.10" +}); + +/* + * Resizable Extensions + */ + +$.ui.plugin.add("resizable", "alsoResize", { + + start: function (event, ui) { + var self = $(this).data("resizable"), o = self.options; + + var _store = function (exp) { + $(exp).each(function() { + var el = $(this); + el.data("resizable-alsoresize", { + width: parseInt(el.width(), 10), height: parseInt(el.height(), 10), + left: parseInt(el.css('left'), 10), top: parseInt(el.css('top'), 10), + position: el.css('position') // to reset Opera on stop() + }); + }); + }; + + if (typeof(o.alsoResize) == 'object' && !o.alsoResize.parentNode) { + if (o.alsoResize.length) { o.alsoResize = o.alsoResize[0]; _store(o.alsoResize); } + else { $.each(o.alsoResize, function (exp) { _store(exp); }); } + }else{ + _store(o.alsoResize); + } + }, + + resize: function (event, ui) { + var self = $(this).data("resizable"), o = self.options, os = self.originalSize, op = self.originalPosition; + + var delta = { + height: (self.size.height - os.height) || 0, width: (self.size.width - os.width) || 0, + top: (self.position.top - op.top) || 0, left: (self.position.left - op.left) || 0 + }, + + _alsoResize = function (exp, c) { + $(exp).each(function() { + var el = $(this), start = $(this).data("resizable-alsoresize"), style = {}, + css = c && c.length ? c : el.parents(ui.originalElement[0]).length ? ['width', 'height'] : ['width', 'height', 'top', 'left']; + + $.each(css, function (i, prop) { + var sum = (start[prop]||0) + (delta[prop]||0); + if (sum && sum >= 0) + style[prop] = sum || null; + }); + + // Opera fixing relative position + if ($.browser.opera && /relative/.test(el.css('position'))) { + self._revertToRelativePosition = true; + el.css({ position: 'absolute', top: 'auto', left: 'auto' }); + } + + el.css(style); + }); + }; + + if (typeof(o.alsoResize) == 'object' && !o.alsoResize.nodeType) { + $.each(o.alsoResize, function (exp, c) { _alsoResize(exp, c); }); + }else{ + _alsoResize(o.alsoResize); + } + }, + + stop: function (event, ui) { + var self = $(this).data("resizable"), o = self.options; + + var _reset = function (exp) { + $(exp).each(function() { + var el = $(this); + // reset position for Opera - no need to verify it was changed + el.css({ position: el.data("resizable-alsoresize").position }); + }); + }; + + if (self._revertToRelativePosition) { + self._revertToRelativePosition = false; + if (typeof(o.alsoResize) == 'object' && !o.alsoResize.nodeType) { + $.each(o.alsoResize, function (exp) { _reset(exp); }); + }else{ + _reset(o.alsoResize); + } + } + + $(this).removeData("resizable-alsoresize"); + } +}); + +$.ui.plugin.add("resizable", "animate", { + + stop: function(event, ui) { + var self = $(this).data("resizable"), o = self.options; + + var pr = self._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName), + soffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height, + soffsetw = ista ? 0 : self.sizeDiff.width; + + var style = { width: (self.size.width - soffsetw), height: (self.size.height - soffseth) }, + left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null, + top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null; + + self.element.animate( + $.extend(style, top && left ? { top: top, left: left } : {}), { + duration: o.animateDuration, + easing: o.animateEasing, + step: function() { + + var data = { + width: parseInt(self.element.css('width'), 10), + height: parseInt(self.element.css('height'), 10), + top: parseInt(self.element.css('top'), 10), + left: parseInt(self.element.css('left'), 10) + }; + + if (pr && pr.length) $(pr[0]).css({ width: data.width, height: data.height }); + + // propagating resize, and updating values for each animation step + self._updateCache(data); + self._propagate("resize", event); + + } + } + ); + } + +}); + +$.ui.plugin.add("resizable", "containment", { + + start: function(event, ui) { + var self = $(this).data("resizable"), o = self.options, el = self.element; + var oc = o.containment, ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc; + if (!ce) return; + + self.containerElement = $(ce); + + if (/document/.test(oc) || oc == document) { + self.containerOffset = { left: 0, top: 0 }; + self.containerPosition = { left: 0, top: 0 }; + + self.parentData = { + element: $(document), left: 0, top: 0, + width: $(document).width(), height: $(document).height() || document.body.parentNode.scrollHeight + }; + } + + // i'm a node, so compute top, left, right, bottom + else { + var element = $(ce), p = []; + $([ "Top", "Right", "Left", "Bottom" ]).each(function(i, name) { p[i] = num(element.css("padding" + name)); }); + + self.containerOffset = element.offset(); + self.containerPosition = element.position(); + self.containerSize = { height: (element.innerHeight() - p[3]), width: (element.innerWidth() - p[1]) }; + + var co = self.containerOffset, ch = self.containerSize.height, cw = self.containerSize.width, + width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw ), height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch); + + self.parentData = { + element: ce, left: co.left, top: co.top, width: width, height: height + }; + } + }, + + resize: function(event, ui) { + var self = $(this).data("resizable"), o = self.options, + ps = self.containerSize, co = self.containerOffset, cs = self.size, cp = self.position, + pRatio = self._aspectRatio || event.shiftKey, cop = { top:0, left:0 }, ce = self.containerElement; + + if (ce[0] != document && (/static/).test(ce.css('position'))) cop = co; + + if (cp.left < (self._helper ? co.left : 0)) { + self.size.width = self.size.width + (self._helper ? (self.position.left - co.left) : (self.position.left - cop.left)); + if (pRatio) self.size.height = self.size.width / o.aspectRatio; + self.position.left = o.helper ? co.left : 0; + } + + if (cp.top < (self._helper ? co.top : 0)) { + self.size.height = self.size.height + (self._helper ? (self.position.top - co.top) : self.position.top); + if (pRatio) self.size.width = self.size.height * o.aspectRatio; + self.position.top = self._helper ? co.top : 0; + } + + self.offset.left = self.parentData.left+self.position.left; + self.offset.top = self.parentData.top+self.position.top; + + var woset = Math.abs( (self._helper ? self.offset.left - cop.left : (self.offset.left - cop.left)) + self.sizeDiff.width ), + hoset = Math.abs( (self._helper ? self.offset.top - cop.top : (self.offset.top - co.top)) + self.sizeDiff.height ); + + var isParent = self.containerElement.get(0) == self.element.parent().get(0), + isOffsetRelative = /relative|absolute/.test(self.containerElement.css('position')); + + if(isParent && isOffsetRelative) woset -= self.parentData.left; + + if (woset + self.size.width >= self.parentData.width) { + self.size.width = self.parentData.width - woset; + if (pRatio) self.size.height = self.size.width / self.aspectRatio; + } + + if (hoset + self.size.height >= self.parentData.height) { + self.size.height = self.parentData.height - hoset; + if (pRatio) self.size.width = self.size.height * self.aspectRatio; + } + }, + + stop: function(event, ui){ + var self = $(this).data("resizable"), o = self.options, cp = self.position, + co = self.containerOffset, cop = self.containerPosition, ce = self.containerElement; + + var helper = $(self.helper), ho = helper.offset(), w = helper.outerWidth() - self.sizeDiff.width, h = helper.outerHeight() - self.sizeDiff.height; + + if (self._helper && !o.animate && (/relative/).test(ce.css('position'))) + $(this).css({ left: ho.left - cop.left - co.left, width: w, height: h }); + + if (self._helper && !o.animate && (/static/).test(ce.css('position'))) + $(this).css({ left: ho.left - cop.left - co.left, width: w, height: h }); + + } +}); + +$.ui.plugin.add("resizable", "ghost", { + + start: function(event, ui) { + + var self = $(this).data("resizable"), o = self.options, cs = self.size; + + self.ghost = self.originalElement.clone(); + self.ghost + .css({ opacity: .25, display: 'block', position: 'relative', height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 }) + .addClass('ui-resizable-ghost') + .addClass(typeof o.ghost == 'string' ? o.ghost : ''); + + self.ghost.appendTo(self.helper); + + }, + + resize: function(event, ui){ + var self = $(this).data("resizable"), o = self.options; + if (self.ghost) self.ghost.css({ position: 'relative', height: self.size.height, width: self.size.width }); + }, + + stop: function(event, ui){ + var self = $(this).data("resizable"), o = self.options; + if (self.ghost && self.helper) self.helper.get(0).removeChild(self.ghost.get(0)); + } + +}); + +$.ui.plugin.add("resizable", "grid", { + + resize: function(event, ui) { + var self = $(this).data("resizable"), o = self.options, cs = self.size, os = self.originalSize, op = self.originalPosition, a = self.axis, ratio = o._aspectRatio || event.shiftKey; + o.grid = typeof o.grid == "number" ? [o.grid, o.grid] : o.grid; + var ox = Math.round((cs.width - os.width) / (o.grid[0]||1)) * (o.grid[0]||1), oy = Math.round((cs.height - os.height) / (o.grid[1]||1)) * (o.grid[1]||1); + + if (/^(se|s|e)$/.test(a)) { + self.size.width = os.width + ox; + self.size.height = os.height + oy; + } + else if (/^(ne)$/.test(a)) { + self.size.width = os.width + ox; + self.size.height = os.height + oy; + self.position.top = op.top - oy; + } + else if (/^(sw)$/.test(a)) { + self.size.width = os.width + ox; + self.size.height = os.height + oy; + self.position.left = op.left - ox; + } + else { + self.size.width = os.width + ox; + self.size.height = os.height + oy; + self.position.top = op.top - oy; + self.position.left = op.left - ox; + } + } + +}); + +var num = function(v) { + return parseInt(v, 10) || 0; +}; + +var isNumber = function(value) { + return !isNaN(parseInt(value, 10)); +}; + +})(jQuery); diff --git a/js/ui/jquery.ui.selectable.js b/js/ui/jquery.ui.selectable.js new file mode 100644 index 0000000000..9ada93b96d --- /dev/null +++ b/js/ui/jquery.ui.selectable.js @@ -0,0 +1,266 @@ +/* + * jQuery UI Selectable 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Selectables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function( $, undefined ) { + +$.widget("ui.selectable", $.ui.mouse, { + options: { + appendTo: 'body', + autoRefresh: true, + distance: 0, + filter: '*', + tolerance: 'touch' + }, + _create: function() { + var self = this; + + this.element.addClass("ui-selectable"); + + this.dragged = false; + + // cache selectee children based on filter + var selectees; + this.refresh = function() { + selectees = $(self.options.filter, self.element[0]); + selectees.each(function() { + var $this = $(this); + var pos = $this.offset(); + $.data(this, "selectable-item", { + element: this, + $element: $this, + left: pos.left, + top: pos.top, + right: pos.left + $this.outerWidth(), + bottom: pos.top + $this.outerHeight(), + startselected: false, + selected: $this.hasClass('ui-selected'), + selecting: $this.hasClass('ui-selecting'), + unselecting: $this.hasClass('ui-unselecting') + }); + }); + }; + this.refresh(); + + this.selectees = selectees.addClass("ui-selectee"); + + this._mouseInit(); + + this.helper = $("
        "); + }, + + destroy: function() { + this.selectees + .removeClass("ui-selectee") + .removeData("selectable-item"); + this.element + .removeClass("ui-selectable ui-selectable-disabled") + .removeData("selectable") + .unbind(".selectable"); + this._mouseDestroy(); + + return this; + }, + + _mouseStart: function(event) { + var self = this; + + this.opos = [event.pageX, event.pageY]; + + if (this.options.disabled) + return; + + var options = this.options; + + this.selectees = $(options.filter, this.element[0]); + + this._trigger("start", event); + + $(options.appendTo).append(this.helper); + // position helper (lasso) + this.helper.css({ + "left": event.clientX, + "top": event.clientY, + "width": 0, + "height": 0 + }); + + if (options.autoRefresh) { + this.refresh(); + } + + this.selectees.filter('.ui-selected').each(function() { + var selectee = $.data(this, "selectable-item"); + selectee.startselected = true; + if (!event.metaKey) { + selectee.$element.removeClass('ui-selected'); + selectee.selected = false; + selectee.$element.addClass('ui-unselecting'); + selectee.unselecting = true; + // selectable UNSELECTING callback + self._trigger("unselecting", event, { + unselecting: selectee.element + }); + } + }); + + $(event.target).parents().andSelf().each(function() { + var selectee = $.data(this, "selectable-item"); + if (selectee) { + var doSelect = !event.metaKey || !selectee.$element.hasClass('ui-selected'); + selectee.$element + .removeClass(doSelect ? "ui-unselecting" : "ui-selected") + .addClass(doSelect ? "ui-selecting" : "ui-unselecting"); + selectee.unselecting = !doSelect; + selectee.selecting = doSelect; + selectee.selected = doSelect; + // selectable (UN)SELECTING callback + if (doSelect) { + self._trigger("selecting", event, { + selecting: selectee.element + }); + } else { + self._trigger("unselecting", event, { + unselecting: selectee.element + }); + } + return false; + } + }); + + }, + + _mouseDrag: function(event) { + var self = this; + this.dragged = true; + + if (this.options.disabled) + return; + + var options = this.options; + + var x1 = this.opos[0], y1 = this.opos[1], x2 = event.pageX, y2 = event.pageY; + if (x1 > x2) { var tmp = x2; x2 = x1; x1 = tmp; } + if (y1 > y2) { var tmp = y2; y2 = y1; y1 = tmp; } + this.helper.css({left: x1, top: y1, width: x2-x1, height: y2-y1}); + + this.selectees.each(function() { + var selectee = $.data(this, "selectable-item"); + //prevent helper from being selected if appendTo: selectable + if (!selectee || selectee.element == self.element[0]) + return; + var hit = false; + if (options.tolerance == 'touch') { + hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) ); + } else if (options.tolerance == 'fit') { + hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2); + } + + if (hit) { + // SELECT + if (selectee.selected) { + selectee.$element.removeClass('ui-selected'); + selectee.selected = false; + } + if (selectee.unselecting) { + selectee.$element.removeClass('ui-unselecting'); + selectee.unselecting = false; + } + if (!selectee.selecting) { + selectee.$element.addClass('ui-selecting'); + selectee.selecting = true; + // selectable SELECTING callback + self._trigger("selecting", event, { + selecting: selectee.element + }); + } + } else { + // UNSELECT + if (selectee.selecting) { + if (event.metaKey && selectee.startselected) { + selectee.$element.removeClass('ui-selecting'); + selectee.selecting = false; + selectee.$element.addClass('ui-selected'); + selectee.selected = true; + } else { + selectee.$element.removeClass('ui-selecting'); + selectee.selecting = false; + if (selectee.startselected) { + selectee.$element.addClass('ui-unselecting'); + selectee.unselecting = true; + } + // selectable UNSELECTING callback + self._trigger("unselecting", event, { + unselecting: selectee.element + }); + } + } + if (selectee.selected) { + if (!event.metaKey && !selectee.startselected) { + selectee.$element.removeClass('ui-selected'); + selectee.selected = false; + + selectee.$element.addClass('ui-unselecting'); + selectee.unselecting = true; + // selectable UNSELECTING callback + self._trigger("unselecting", event, { + unselecting: selectee.element + }); + } + } + } + }); + + return false; + }, + + _mouseStop: function(event) { + var self = this; + + this.dragged = false; + + var options = this.options; + + $('.ui-unselecting', this.element[0]).each(function() { + var selectee = $.data(this, "selectable-item"); + selectee.$element.removeClass('ui-unselecting'); + selectee.unselecting = false; + selectee.startselected = false; + self._trigger("unselected", event, { + unselected: selectee.element + }); + }); + $('.ui-selecting', this.element[0]).each(function() { + var selectee = $.data(this, "selectable-item"); + selectee.$element.removeClass('ui-selecting').addClass('ui-selected'); + selectee.selecting = false; + selectee.selected = true; + selectee.startselected = true; + self._trigger("selected", event, { + selected: selectee.element + }); + }); + this._trigger("stop", event); + + this.helper.remove(); + + return false; + } + +}); + +$.extend($.ui.selectable, { + version: "1.8.10" +}); + +})(jQuery); diff --git a/js/ui/jquery.ui.slider.js b/js/ui/jquery.ui.slider.js new file mode 100644 index 0000000000..fa571a9645 --- /dev/null +++ b/js/ui/jquery.ui.slider.js @@ -0,0 +1,682 @@ +/* + * jQuery UI Slider 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Slider + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function( $, undefined ) { + +// number of pages in a slider +// (how many times can you page up/down to go through the whole range) +var numPages = 5; + +$.widget( "ui.slider", $.ui.mouse, { + + widgetEventPrefix: "slide", + + options: { + animate: false, + distance: 0, + max: 100, + min: 0, + orientation: "horizontal", + range: false, + step: 1, + value: 0, + values: null + }, + + _create: function() { + var self = this, + o = this.options; + + this._keySliding = false; + this._mouseSliding = false; + this._animateOff = true; + this._handleIndex = null; + this._detectOrientation(); + this._mouseInit(); + + this.element + .addClass( "ui-slider" + + " ui-slider-" + this.orientation + + " ui-widget" + + " ui-widget-content" + + " ui-corner-all" ); + + if ( o.disabled ) { + this.element.addClass( "ui-slider-disabled ui-disabled" ); + } + + this.range = $([]); + + if ( o.range ) { + if ( o.range === true ) { + this.range = $( "
        " ); + if ( !o.values ) { + o.values = [ this._valueMin(), this._valueMin() ]; + } + if ( o.values.length && o.values.length !== 2 ) { + o.values = [ o.values[0], o.values[0] ]; + } + } else { + this.range = $( "
        " ); + } + + this.range + .appendTo( this.element ) + .addClass( "ui-slider-range" ); + + if ( o.range === "min" || o.range === "max" ) { + this.range.addClass( "ui-slider-range-" + o.range ); + } + + // note: this isn't the most fittingly semantic framework class for this element, + // but worked best visually with a variety of themes + this.range.addClass( "ui-widget-header" ); + } + + if ( $( ".ui-slider-handle", this.element ).length === 0 ) { + $( "" ) + .appendTo( this.element ) + .addClass( "ui-slider-handle" ); + } + + if ( o.values && o.values.length ) { + while ( $(".ui-slider-handle", this.element).length < o.values.length ) { + $( "" ) + .appendTo( this.element ) + .addClass( "ui-slider-handle" ); + } + } + + this.handles = $( ".ui-slider-handle", this.element ) + .addClass( "ui-state-default" + + " ui-corner-all" ); + + this.handle = this.handles.eq( 0 ); + + this.handles.add( this.range ).filter( "a" ) + .click(function( event ) { + event.preventDefault(); + }) + .hover(function() { + if ( !o.disabled ) { + $( this ).addClass( "ui-state-hover" ); + } + }, function() { + $( this ).removeClass( "ui-state-hover" ); + }) + .focus(function() { + if ( !o.disabled ) { + $( ".ui-slider .ui-state-focus" ).removeClass( "ui-state-focus" ); + $( this ).addClass( "ui-state-focus" ); + } else { + $( this ).blur(); + } + }) + .blur(function() { + $( this ).removeClass( "ui-state-focus" ); + }); + + this.handles.each(function( i ) { + $( this ).data( "index.ui-slider-handle", i ); + }); + + this.handles + .keydown(function( event ) { + var ret = true, + index = $( this ).data( "index.ui-slider-handle" ), + allowed, + curVal, + newVal, + step; + + if ( self.options.disabled ) { + return; + } + + switch ( event.keyCode ) { + case $.ui.keyCode.HOME: + case $.ui.keyCode.END: + case $.ui.keyCode.PAGE_UP: + case $.ui.keyCode.PAGE_DOWN: + case $.ui.keyCode.UP: + case $.ui.keyCode.RIGHT: + case $.ui.keyCode.DOWN: + case $.ui.keyCode.LEFT: + ret = false; + if ( !self._keySliding ) { + self._keySliding = true; + $( this ).addClass( "ui-state-active" ); + allowed = self._start( event, index ); + if ( allowed === false ) { + return; + } + } + break; + } + + step = self.options.step; + if ( self.options.values && self.options.values.length ) { + curVal = newVal = self.values( index ); + } else { + curVal = newVal = self.value(); + } + + switch ( event.keyCode ) { + case $.ui.keyCode.HOME: + newVal = self._valueMin(); + break; + case $.ui.keyCode.END: + newVal = self._valueMax(); + break; + case $.ui.keyCode.PAGE_UP: + newVal = self._trimAlignValue( curVal + ( (self._valueMax() - self._valueMin()) / numPages ) ); + break; + case $.ui.keyCode.PAGE_DOWN: + newVal = self._trimAlignValue( curVal - ( (self._valueMax() - self._valueMin()) / numPages ) ); + break; + case $.ui.keyCode.UP: + case $.ui.keyCode.RIGHT: + if ( curVal === self._valueMax() ) { + return; + } + newVal = self._trimAlignValue( curVal + step ); + break; + case $.ui.keyCode.DOWN: + case $.ui.keyCode.LEFT: + if ( curVal === self._valueMin() ) { + return; + } + newVal = self._trimAlignValue( curVal - step ); + break; + } + + self._slide( event, index, newVal ); + + return ret; + + }) + .keyup(function( event ) { + var index = $( this ).data( "index.ui-slider-handle" ); + + if ( self._keySliding ) { + self._keySliding = false; + self._stop( event, index ); + self._change( event, index ); + $( this ).removeClass( "ui-state-active" ); + } + + }); + + this._refreshValue(); + + this._animateOff = false; + }, + + destroy: function() { + this.handles.remove(); + this.range.remove(); + + this.element + .removeClass( "ui-slider" + + " ui-slider-horizontal" + + " ui-slider-vertical" + + " ui-slider-disabled" + + " ui-widget" + + " ui-widget-content" + + " ui-corner-all" ) + .removeData( "slider" ) + .unbind( ".slider" ); + + this._mouseDestroy(); + + return this; + }, + + _mouseCapture: function( event ) { + var o = this.options, + position, + normValue, + distance, + closestHandle, + self, + index, + allowed, + offset, + mouseOverHandle; + + if ( o.disabled ) { + return false; + } + + this.elementSize = { + width: this.element.outerWidth(), + height: this.element.outerHeight() + }; + this.elementOffset = this.element.offset(); + + position = { x: event.pageX, y: event.pageY }; + normValue = this._normValueFromMouse( position ); + distance = this._valueMax() - this._valueMin() + 1; + self = this; + this.handles.each(function( i ) { + var thisDistance = Math.abs( normValue - self.values(i) ); + if ( distance > thisDistance ) { + distance = thisDistance; + closestHandle = $( this ); + index = i; + } + }); + + // workaround for bug #3736 (if both handles of a range are at 0, + // the first is always used as the one with least distance, + // and moving it is obviously prevented by preventing negative ranges) + if( o.range === true && this.values(1) === o.min ) { + index += 1; + closestHandle = $( this.handles[index] ); + } + + allowed = this._start( event, index ); + if ( allowed === false ) { + return false; + } + this._mouseSliding = true; + + self._handleIndex = index; + + closestHandle + .addClass( "ui-state-active" ) + .focus(); + + offset = closestHandle.offset(); + mouseOverHandle = !$( event.target ).parents().andSelf().is( ".ui-slider-handle" ); + this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : { + left: event.pageX - offset.left - ( closestHandle.width() / 2 ), + top: event.pageY - offset.top - + ( closestHandle.height() / 2 ) - + ( parseInt( closestHandle.css("borderTopWidth"), 10 ) || 0 ) - + ( parseInt( closestHandle.css("borderBottomWidth"), 10 ) || 0) + + ( parseInt( closestHandle.css("marginTop"), 10 ) || 0) + }; + + if ( !this.handles.hasClass( "ui-state-hover" ) ) { + this._slide( event, index, normValue ); + } + this._animateOff = true; + return true; + }, + + _mouseStart: function( event ) { + return true; + }, + + _mouseDrag: function( event ) { + var position = { x: event.pageX, y: event.pageY }, + normValue = this._normValueFromMouse( position ); + + this._slide( event, this._handleIndex, normValue ); + + return false; + }, + + _mouseStop: function( event ) { + this.handles.removeClass( "ui-state-active" ); + this._mouseSliding = false; + + this._stop( event, this._handleIndex ); + this._change( event, this._handleIndex ); + + this._handleIndex = null; + this._clickOffset = null; + this._animateOff = false; + + return false; + }, + + _detectOrientation: function() { + this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal"; + }, + + _normValueFromMouse: function( position ) { + var pixelTotal, + pixelMouse, + percentMouse, + valueTotal, + valueMouse; + + if ( this.orientation === "horizontal" ) { + pixelTotal = this.elementSize.width; + pixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 ); + } else { + pixelTotal = this.elementSize.height; + pixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 ); + } + + percentMouse = ( pixelMouse / pixelTotal ); + if ( percentMouse > 1 ) { + percentMouse = 1; + } + if ( percentMouse < 0 ) { + percentMouse = 0; + } + if ( this.orientation === "vertical" ) { + percentMouse = 1 - percentMouse; + } + + valueTotal = this._valueMax() - this._valueMin(); + valueMouse = this._valueMin() + percentMouse * valueTotal; + + return this._trimAlignValue( valueMouse ); + }, + + _start: function( event, index ) { + var uiHash = { + handle: this.handles[ index ], + value: this.value() + }; + if ( this.options.values && this.options.values.length ) { + uiHash.value = this.values( index ); + uiHash.values = this.values(); + } + return this._trigger( "start", event, uiHash ); + }, + + _slide: function( event, index, newVal ) { + var otherVal, + newValues, + allowed; + + if ( this.options.values && this.options.values.length ) { + otherVal = this.values( index ? 0 : 1 ); + + if ( ( this.options.values.length === 2 && this.options.range === true ) && + ( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) ) + ) { + newVal = otherVal; + } + + if ( newVal !== this.values( index ) ) { + newValues = this.values(); + newValues[ index ] = newVal; + // A slide can be canceled by returning false from the slide callback + allowed = this._trigger( "slide", event, { + handle: this.handles[ index ], + value: newVal, + values: newValues + } ); + otherVal = this.values( index ? 0 : 1 ); + if ( allowed !== false ) { + this.values( index, newVal, true ); + } + } + } else { + if ( newVal !== this.value() ) { + // A slide can be canceled by returning false from the slide callback + allowed = this._trigger( "slide", event, { + handle: this.handles[ index ], + value: newVal + } ); + if ( allowed !== false ) { + this.value( newVal ); + } + } + } + }, + + _stop: function( event, index ) { + var uiHash = { + handle: this.handles[ index ], + value: this.value() + }; + if ( this.options.values && this.options.values.length ) { + uiHash.value = this.values( index ); + uiHash.values = this.values(); + } + + this._trigger( "stop", event, uiHash ); + }, + + _change: function( event, index ) { + if ( !this._keySliding && !this._mouseSliding ) { + var uiHash = { + handle: this.handles[ index ], + value: this.value() + }; + if ( this.options.values && this.options.values.length ) { + uiHash.value = this.values( index ); + uiHash.values = this.values(); + } + + this._trigger( "change", event, uiHash ); + } + }, + + value: function( newValue ) { + if ( arguments.length ) { + this.options.value = this._trimAlignValue( newValue ); + this._refreshValue(); + this._change( null, 0 ); + } + + return this._value(); + }, + + values: function( index, newValue ) { + var vals, + newValues, + i; + + if ( arguments.length > 1 ) { + this.options.values[ index ] = this._trimAlignValue( newValue ); + this._refreshValue(); + this._change( null, index ); + } + + if ( arguments.length ) { + if ( $.isArray( arguments[ 0 ] ) ) { + vals = this.options.values; + newValues = arguments[ 0 ]; + for ( i = 0; i < vals.length; i += 1 ) { + vals[ i ] = this._trimAlignValue( newValues[ i ] ); + this._change( null, i ); + } + this._refreshValue(); + } else { + if ( this.options.values && this.options.values.length ) { + return this._values( index ); + } else { + return this.value(); + } + } + } else { + return this._values(); + } + }, + + _setOption: function( key, value ) { + var i, + valsLength = 0; + + if ( $.isArray( this.options.values ) ) { + valsLength = this.options.values.length; + } + + $.Widget.prototype._setOption.apply( this, arguments ); + + switch ( key ) { + case "disabled": + if ( value ) { + this.handles.filter( ".ui-state-focus" ).blur(); + this.handles.removeClass( "ui-state-hover" ); + this.handles.attr( "disabled", "disabled" ); + this.element.addClass( "ui-disabled" ); + } else { + this.handles.removeAttr( "disabled" ); + this.element.removeClass( "ui-disabled" ); + } + break; + case "orientation": + this._detectOrientation(); + this.element + .removeClass( "ui-slider-horizontal ui-slider-vertical" ) + .addClass( "ui-slider-" + this.orientation ); + this._refreshValue(); + break; + case "value": + this._animateOff = true; + this._refreshValue(); + this._change( null, 0 ); + this._animateOff = false; + break; + case "values": + this._animateOff = true; + this._refreshValue(); + for ( i = 0; i < valsLength; i += 1 ) { + this._change( null, i ); + } + this._animateOff = false; + break; + } + }, + + //internal value getter + // _value() returns value trimmed by min and max, aligned by step + _value: function() { + var val = this.options.value; + val = this._trimAlignValue( val ); + + return val; + }, + + //internal values getter + // _values() returns array of values trimmed by min and max, aligned by step + // _values( index ) returns single value trimmed by min and max, aligned by step + _values: function( index ) { + var val, + vals, + i; + + if ( arguments.length ) { + val = this.options.values[ index ]; + val = this._trimAlignValue( val ); + + return val; + } else { + // .slice() creates a copy of the array + // this copy gets trimmed by min and max and then returned + vals = this.options.values.slice(); + for ( i = 0; i < vals.length; i+= 1) { + vals[ i ] = this._trimAlignValue( vals[ i ] ); + } + + return vals; + } + }, + + // returns the step-aligned value that val is closest to, between (inclusive) min and max + _trimAlignValue: function( val ) { + if ( val <= this._valueMin() ) { + return this._valueMin(); + } + if ( val >= this._valueMax() ) { + return this._valueMax(); + } + var step = ( this.options.step > 0 ) ? this.options.step : 1, + valModStep = (val - this._valueMin()) % step; + alignValue = val - valModStep; + + if ( Math.abs(valModStep) * 2 >= step ) { + alignValue += ( valModStep > 0 ) ? step : ( -step ); + } + + // Since JavaScript has problems with large floats, round + // the final value to 5 digits after the decimal point (see #4124) + return parseFloat( alignValue.toFixed(5) ); + }, + + _valueMin: function() { + return this.options.min; + }, + + _valueMax: function() { + return this.options.max; + }, + + _refreshValue: function() { + var oRange = this.options.range, + o = this.options, + self = this, + animate = ( !this._animateOff ) ? o.animate : false, + valPercent, + _set = {}, + lastValPercent, + value, + valueMin, + valueMax; + + if ( this.options.values && this.options.values.length ) { + this.handles.each(function( i, j ) { + valPercent = ( self.values(i) - self._valueMin() ) / ( self._valueMax() - self._valueMin() ) * 100; + _set[ self.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%"; + $( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate ); + if ( self.options.range === true ) { + if ( self.orientation === "horizontal" ) { + if ( i === 0 ) { + self.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { left: valPercent + "%" }, o.animate ); + } + if ( i === 1 ) { + self.range[ animate ? "animate" : "css" ]( { width: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } ); + } + } else { + if ( i === 0 ) { + self.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { bottom: ( valPercent ) + "%" }, o.animate ); + } + if ( i === 1 ) { + self.range[ animate ? "animate" : "css" ]( { height: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } ); + } + } + } + lastValPercent = valPercent; + }); + } else { + value = this.value(); + valueMin = this._valueMin(); + valueMax = this._valueMax(); + valPercent = ( valueMax !== valueMin ) ? + ( value - valueMin ) / ( valueMax - valueMin ) * 100 : + 0; + _set[ self.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%"; + this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate ); + + if ( oRange === "min" && this.orientation === "horizontal" ) { + this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { width: valPercent + "%" }, o.animate ); + } + if ( oRange === "max" && this.orientation === "horizontal" ) { + this.range[ animate ? "animate" : "css" ]( { width: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } ); + } + if ( oRange === "min" && this.orientation === "vertical" ) { + this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { height: valPercent + "%" }, o.animate ); + } + if ( oRange === "max" && this.orientation === "vertical" ) { + this.range[ animate ? "animate" : "css" ]( { height: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } ); + } + } + } + +}); + +$.extend( $.ui.slider, { + version: "1.8.10" +}); + +}(jQuery)); diff --git a/js/ui/jquery.ui.sortable.js b/js/ui/jquery.ui.sortable.js new file mode 100644 index 0000000000..9665b77dd0 --- /dev/null +++ b/js/ui/jquery.ui.sortable.js @@ -0,0 +1,1073 @@ +/* + * jQuery UI Sortable 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Sortables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function( $, undefined ) { + +$.widget("ui.sortable", $.ui.mouse, { + widgetEventPrefix: "sort", + options: { + appendTo: "parent", + axis: false, + connectWith: false, + containment: false, + cursor: 'auto', + cursorAt: false, + dropOnEmpty: true, + forcePlaceholderSize: false, + forceHelperSize: false, + grid: false, + handle: false, + helper: "original", + items: '> *', + opacity: false, + placeholder: false, + revert: false, + scroll: true, + scrollSensitivity: 20, + scrollSpeed: 20, + scope: "default", + tolerance: "intersect", + zIndex: 1000 + }, + _create: function() { + + var o = this.options; + this.containerCache = {}; + this.element.addClass("ui-sortable"); + + //Get the items + this.refresh(); + + //Let's determine if the items are floating + this.floating = this.items.length ? (/left|right/).test(this.items[0].item.css('float')) : false; + + //Let's determine the parent's offset + this.offset = this.element.offset(); + + //Initialize mouse events for interaction + this._mouseInit(); + + }, + + destroy: function() { + this.element + .removeClass("ui-sortable ui-sortable-disabled") + .removeData("sortable") + .unbind(".sortable"); + this._mouseDestroy(); + + for ( var i = this.items.length - 1; i >= 0; i-- ) + this.items[i].item.removeData("sortable-item"); + + return this; + }, + + _setOption: function(key, value){ + if ( key === "disabled" ) { + this.options[ key ] = value; + + this.widget() + [ value ? "addClass" : "removeClass"]( "ui-sortable-disabled" ); + } else { + // Don't call widget base _setOption for disable as it adds ui-state-disabled class + $.Widget.prototype._setOption.apply(this, arguments); + } + }, + + _mouseCapture: function(event, overrideHandle) { + + if (this.reverting) { + return false; + } + + if(this.options.disabled || this.options.type == 'static') return false; + + //We have to refresh the items data once first + this._refreshItems(event); + + //Find out if the clicked node (or one of its parents) is a actual item in this.items + var currentItem = null, self = this, nodes = $(event.target).parents().each(function() { + if($.data(this, 'sortable-item') == self) { + currentItem = $(this); + return false; + } + }); + if($.data(event.target, 'sortable-item') == self) currentItem = $(event.target); + + if(!currentItem) return false; + if(this.options.handle && !overrideHandle) { + var validHandle = false; + + $(this.options.handle, currentItem).find("*").andSelf().each(function() { if(this == event.target) validHandle = true; }); + if(!validHandle) return false; + } + + this.currentItem = currentItem; + this._removeCurrentsFromItems(); + return true; + + }, + + _mouseStart: function(event, overrideHandle, noActivation) { + + var o = this.options, self = this; + this.currentContainer = this; + + //We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture + this.refreshPositions(); + + //Create and append the visible helper + this.helper = this._createHelper(event); + + //Cache the helper size + this._cacheHelperProportions(); + + /* + * - Position generation - + * This block generates everything position related - it's the core of draggables. + */ + + //Cache the margins of the original element + this._cacheMargins(); + + //Get the next scrolling parent + this.scrollParent = this.helper.scrollParent(); + + //The element's absolute position on the page minus margins + this.offset = this.currentItem.offset(); + this.offset = { + top: this.offset.top - this.margins.top, + left: this.offset.left - this.margins.left + }; + + // Only after we got the offset, we can change the helper's position to absolute + // TODO: Still need to figure out a way to make relative sorting possible + this.helper.css("position", "absolute"); + this.cssPosition = this.helper.css("position"); + + $.extend(this.offset, { + click: { //Where the click happened, relative to the element + left: event.pageX - this.offset.left, + top: event.pageY - this.offset.top + }, + parent: this._getParentOffset(), + relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper + }); + + //Generate the original position + this.originalPosition = this._generatePosition(event); + this.originalPageX = event.pageX; + this.originalPageY = event.pageY; + + //Adjust the mouse offset relative to the helper if 'cursorAt' is supplied + (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt)); + + //Cache the former DOM position + this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] }; + + //If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way + if(this.helper[0] != this.currentItem[0]) { + this.currentItem.hide(); + } + + //Create the placeholder + this._createPlaceholder(); + + //Set a containment if given in the options + if(o.containment) + this._setContainment(); + + if(o.cursor) { // cursor option + if ($('body').css("cursor")) this._storedCursor = $('body').css("cursor"); + $('body').css("cursor", o.cursor); + } + + if(o.opacity) { // opacity option + if (this.helper.css("opacity")) this._storedOpacity = this.helper.css("opacity"); + this.helper.css("opacity", o.opacity); + } + + if(o.zIndex) { // zIndex option + if (this.helper.css("zIndex")) this._storedZIndex = this.helper.css("zIndex"); + this.helper.css("zIndex", o.zIndex); + } + + //Prepare scrolling + if(this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML') + this.overflowOffset = this.scrollParent.offset(); + + //Call callbacks + this._trigger("start", event, this._uiHash()); + + //Recache the helper size + if(!this._preserveHelperProportions) + this._cacheHelperProportions(); + + + //Post 'activate' events to possible containers + if(!noActivation) { + for (var i = this.containers.length - 1; i >= 0; i--) { this.containers[i]._trigger("activate", event, self._uiHash(this)); } + } + + //Prepare possible droppables + if($.ui.ddmanager) + $.ui.ddmanager.current = this; + + if ($.ui.ddmanager && !o.dropBehaviour) + $.ui.ddmanager.prepareOffsets(this, event); + + this.dragging = true; + + this.helper.addClass("ui-sortable-helper"); + this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position + return true; + + }, + + _mouseDrag: function(event) { + + //Compute the helpers position + this.position = this._generatePosition(event); + this.positionAbs = this._convertPositionTo("absolute"); + + if (!this.lastPositionAbs) { + this.lastPositionAbs = this.positionAbs; + } + + //Do scrolling + if(this.options.scroll) { + var o = this.options, scrolled = false; + if(this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML') { + + if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) + this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed; + else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity) + this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed; + + if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) + this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed; + else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity) + this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed; + + } else { + + if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) + scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed); + else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) + scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed); + + if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) + scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed); + else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) + scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed); + + } + + if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) + $.ui.ddmanager.prepareOffsets(this, event); + } + + //Regenerate the absolute position used for position checks + this.positionAbs = this._convertPositionTo("absolute"); + + //Set the helper position + if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px'; + if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px'; + + //Rearrange + for (var i = this.items.length - 1; i >= 0; i--) { + + //Cache variables and intersection, continue if no intersection + var item = this.items[i], itemElement = item.item[0], intersection = this._intersectsWithPointer(item); + if (!intersection) continue; + + if(itemElement != this.currentItem[0] //cannot intersect with itself + && this.placeholder[intersection == 1 ? "next" : "prev"]()[0] != itemElement //no useless actions that have been done before + && !$.ui.contains(this.placeholder[0], itemElement) //no action if the item moved is the parent of the item checked + && (this.options.type == 'semi-dynamic' ? !$.ui.contains(this.element[0], itemElement) : true) + //&& itemElement.parentNode == this.placeholder[0].parentNode // only rearrange items within the same container + ) { + + this.direction = intersection == 1 ? "down" : "up"; + + if (this.options.tolerance == "pointer" || this._intersectsWithSides(item)) { + this._rearrange(event, item); + } else { + break; + } + + this._trigger("change", event, this._uiHash()); + break; + } + } + + //Post events to containers + this._contactContainers(event); + + //Interconnect with droppables + if($.ui.ddmanager) $.ui.ddmanager.drag(this, event); + + //Call callbacks + this._trigger('sort', event, this._uiHash()); + + this.lastPositionAbs = this.positionAbs; + return false; + + }, + + _mouseStop: function(event, noPropagation) { + + if(!event) return; + + //If we are using droppables, inform the manager about the drop + if ($.ui.ddmanager && !this.options.dropBehaviour) + $.ui.ddmanager.drop(this, event); + + if(this.options.revert) { + var self = this; + var cur = self.placeholder.offset(); + + self.reverting = true; + + $(this.helper).animate({ + left: cur.left - this.offset.parent.left - self.margins.left + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollLeft), + top: cur.top - this.offset.parent.top - self.margins.top + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollTop) + }, parseInt(this.options.revert, 10) || 500, function() { + self._clear(event); + }); + } else { + this._clear(event, noPropagation); + } + + return false; + + }, + + cancel: function() { + + var self = this; + + if(this.dragging) { + + this._mouseUp({ target: null }); + + if(this.options.helper == "original") + this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"); + else + this.currentItem.show(); + + //Post deactivating events to containers + for (var i = this.containers.length - 1; i >= 0; i--){ + this.containers[i]._trigger("deactivate", null, self._uiHash(this)); + if(this.containers[i].containerCache.over) { + this.containers[i]._trigger("out", null, self._uiHash(this)); + this.containers[i].containerCache.over = 0; + } + } + + } + + if (this.placeholder) { + //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node! + if(this.placeholder[0].parentNode) this.placeholder[0].parentNode.removeChild(this.placeholder[0]); + if(this.options.helper != "original" && this.helper && this.helper[0].parentNode) this.helper.remove(); + + $.extend(this, { + helper: null, + dragging: false, + reverting: false, + _noFinalSort: null + }); + + if(this.domPosition.prev) { + $(this.domPosition.prev).after(this.currentItem); + } else { + $(this.domPosition.parent).prepend(this.currentItem); + } + } + + return this; + + }, + + serialize: function(o) { + + var items = this._getItemsAsjQuery(o && o.connected); + var str = []; o = o || {}; + + $(items).each(function() { + var res = ($(o.item || this).attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/)); + if(res) str.push((o.key || res[1]+'[]')+'='+(o.key && o.expression ? res[1] : res[2])); + }); + + if(!str.length && o.key) { + str.push(o.key + '='); + } + + return str.join('&'); + + }, + + toArray: function(o) { + + var items = this._getItemsAsjQuery(o && o.connected); + var ret = []; o = o || {}; + + items.each(function() { ret.push($(o.item || this).attr(o.attribute || 'id') || ''); }); + return ret; + + }, + + /* Be careful with the following core functions */ + _intersectsWith: function(item) { + + var x1 = this.positionAbs.left, + x2 = x1 + this.helperProportions.width, + y1 = this.positionAbs.top, + y2 = y1 + this.helperProportions.height; + + var l = item.left, + r = l + item.width, + t = item.top, + b = t + item.height; + + var dyClick = this.offset.click.top, + dxClick = this.offset.click.left; + + var isOverElement = (y1 + dyClick) > t && (y1 + dyClick) < b && (x1 + dxClick) > l && (x1 + dxClick) < r; + + if( this.options.tolerance == "pointer" + || this.options.forcePointerForContainers + || (this.options.tolerance != "pointer" && this.helperProportions[this.floating ? 'width' : 'height'] > item[this.floating ? 'width' : 'height']) + ) { + return isOverElement; + } else { + + return (l < x1 + (this.helperProportions.width / 2) // Right Half + && x2 - (this.helperProportions.width / 2) < r // Left Half + && t < y1 + (this.helperProportions.height / 2) // Bottom Half + && y2 - (this.helperProportions.height / 2) < b ); // Top Half + + } + }, + + _intersectsWithPointer: function(item) { + + var isOverElementHeight = $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height), + isOverElementWidth = $.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width), + isOverElement = isOverElementHeight && isOverElementWidth, + verticalDirection = this._getDragVerticalDirection(), + horizontalDirection = this._getDragHorizontalDirection(); + + if (!isOverElement) + return false; + + return this.floating ? + ( ((horizontalDirection && horizontalDirection == "right") || verticalDirection == "down") ? 2 : 1 ) + : ( verticalDirection && (verticalDirection == "down" ? 2 : 1) ); + + }, + + _intersectsWithSides: function(item) { + + var isOverBottomHalf = $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height), + isOverRightHalf = $.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width), + verticalDirection = this._getDragVerticalDirection(), + horizontalDirection = this._getDragHorizontalDirection(); + + if (this.floating && horizontalDirection) { + return ((horizontalDirection == "right" && isOverRightHalf) || (horizontalDirection == "left" && !isOverRightHalf)); + } else { + return verticalDirection && ((verticalDirection == "down" && isOverBottomHalf) || (verticalDirection == "up" && !isOverBottomHalf)); + } + + }, + + _getDragVerticalDirection: function() { + var delta = this.positionAbs.top - this.lastPositionAbs.top; + return delta != 0 && (delta > 0 ? "down" : "up"); + }, + + _getDragHorizontalDirection: function() { + var delta = this.positionAbs.left - this.lastPositionAbs.left; + return delta != 0 && (delta > 0 ? "right" : "left"); + }, + + refresh: function(event) { + this._refreshItems(event); + this.refreshPositions(); + return this; + }, + + _connectWith: function() { + var options = this.options; + return options.connectWith.constructor == String + ? [options.connectWith] + : options.connectWith; + }, + + _getItemsAsjQuery: function(connected) { + + var self = this; + var items = []; + var queries = []; + var connectWith = this._connectWith(); + + if(connectWith && connected) { + for (var i = connectWith.length - 1; i >= 0; i--){ + var cur = $(connectWith[i]); + for (var j = cur.length - 1; j >= 0; j--){ + var inst = $.data(cur[j], 'sortable'); + if(inst && inst != this && !inst.options.disabled) { + queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not('.ui-sortable-placeholder'), inst]); + } + }; + }; + } + + queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not('.ui-sortable-placeholder'), this]); + + for (var i = queries.length - 1; i >= 0; i--){ + queries[i][0].each(function() { + items.push(this); + }); + }; + + return $(items); + + }, + + _removeCurrentsFromItems: function() { + + var list = this.currentItem.find(":data(sortable-item)"); + + for (var i=0; i < this.items.length; i++) { + + for (var j=0; j < list.length; j++) { + if(list[j] == this.items[i].item[0]) + this.items.splice(i,1); + }; + + }; + + }, + + _refreshItems: function(event) { + + this.items = []; + this.containers = [this]; + var items = this.items; + var self = this; + var queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]]; + var connectWith = this._connectWith(); + + if(connectWith) { + for (var i = connectWith.length - 1; i >= 0; i--){ + var cur = $(connectWith[i]); + for (var j = cur.length - 1; j >= 0; j--){ + var inst = $.data(cur[j], 'sortable'); + if(inst && inst != this && !inst.options.disabled) { + queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]); + this.containers.push(inst); + } + }; + }; + } + + for (var i = queries.length - 1; i >= 0; i--) { + var targetData = queries[i][1]; + var _queries = queries[i][0]; + + for (var j=0, queriesLength = _queries.length; j < queriesLength; j++) { + var item = $(_queries[j]); + + item.data('sortable-item', targetData); // Data for target checking (mouse manager) + + items.push({ + item: item, + instance: targetData, + width: 0, height: 0, + left: 0, top: 0 + }); + }; + }; + + }, + + refreshPositions: function(fast) { + + //This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change + if(this.offsetParent && this.helper) { + this.offset.parent = this._getParentOffset(); + } + + for (var i = this.items.length - 1; i >= 0; i--){ + var item = this.items[i]; + + var t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item; + + if (!fast) { + item.width = t.outerWidth(); + item.height = t.outerHeight(); + } + + var p = t.offset(); + item.left = p.left; + item.top = p.top; + }; + + if(this.options.custom && this.options.custom.refreshContainers) { + this.options.custom.refreshContainers.call(this); + } else { + for (var i = this.containers.length - 1; i >= 0; i--){ + var p = this.containers[i].element.offset(); + this.containers[i].containerCache.left = p.left; + this.containers[i].containerCache.top = p.top; + this.containers[i].containerCache.width = this.containers[i].element.outerWidth(); + this.containers[i].containerCache.height = this.containers[i].element.outerHeight(); + }; + } + + return this; + }, + + _createPlaceholder: function(that) { + + var self = that || this, o = self.options; + + if(!o.placeholder || o.placeholder.constructor == String) { + var className = o.placeholder; + o.placeholder = { + element: function() { + + var el = $(document.createElement(self.currentItem[0].nodeName)) + .addClass(className || self.currentItem[0].className+" ui-sortable-placeholder") + .removeClass("ui-sortable-helper")[0]; + + if(!className) + el.style.visibility = "hidden"; + + return el; + }, + update: function(container, p) { + + // 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that + // 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified + if(className && !o.forcePlaceholderSize) return; + + //If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item + if(!p.height()) { p.height(self.currentItem.innerHeight() - parseInt(self.currentItem.css('paddingTop')||0, 10) - parseInt(self.currentItem.css('paddingBottom')||0, 10)); }; + if(!p.width()) { p.width(self.currentItem.innerWidth() - parseInt(self.currentItem.css('paddingLeft')||0, 10) - parseInt(self.currentItem.css('paddingRight')||0, 10)); }; + } + }; + } + + //Create the placeholder + self.placeholder = $(o.placeholder.element.call(self.element, self.currentItem)); + + //Append it after the actual current item + self.currentItem.after(self.placeholder); + + //Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317) + o.placeholder.update(self, self.placeholder); + + }, + + _contactContainers: function(event) { + + // get innermost container that intersects with item + var innermostContainer = null, innermostIndex = null; + + + for (var i = this.containers.length - 1; i >= 0; i--){ + + // never consider a container that's located within the item itself + if($.ui.contains(this.currentItem[0], this.containers[i].element[0])) + continue; + + if(this._intersectsWith(this.containers[i].containerCache)) { + + // if we've already found a container and it's more "inner" than this, then continue + if(innermostContainer && $.ui.contains(this.containers[i].element[0], innermostContainer.element[0])) + continue; + + innermostContainer = this.containers[i]; + innermostIndex = i; + + } else { + // container doesn't intersect. trigger "out" event if necessary + if(this.containers[i].containerCache.over) { + this.containers[i]._trigger("out", event, this._uiHash(this)); + this.containers[i].containerCache.over = 0; + } + } + + } + + // if no intersecting containers found, return + if(!innermostContainer) return; + + // move the item into the container if it's not there already + if(this.containers.length === 1) { + this.containers[innermostIndex]._trigger("over", event, this._uiHash(this)); + this.containers[innermostIndex].containerCache.over = 1; + } else if(this.currentContainer != this.containers[innermostIndex]) { + + //When entering a new container, we will find the item with the least distance and append our item near it + var dist = 10000; var itemWithLeastDistance = null; var base = this.positionAbs[this.containers[innermostIndex].floating ? 'left' : 'top']; + for (var j = this.items.length - 1; j >= 0; j--) { + if(!$.ui.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) continue; + var cur = this.items[j][this.containers[innermostIndex].floating ? 'left' : 'top']; + if(Math.abs(cur - base) < dist) { + dist = Math.abs(cur - base); itemWithLeastDistance = this.items[j]; + } + } + + if(!itemWithLeastDistance && !this.options.dropOnEmpty) //Check if dropOnEmpty is enabled + return; + + this.currentContainer = this.containers[innermostIndex]; + itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true); + this._trigger("change", event, this._uiHash()); + this.containers[innermostIndex]._trigger("change", event, this._uiHash(this)); + + //Update the placeholder + this.options.placeholder.update(this.currentContainer, this.placeholder); + + this.containers[innermostIndex]._trigger("over", event, this._uiHash(this)); + this.containers[innermostIndex].containerCache.over = 1; + } + + + }, + + _createHelper: function(event) { + + var o = this.options; + var helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper == 'clone' ? this.currentItem.clone() : this.currentItem); + + if(!helper.parents('body').length) //Add the helper to the DOM if that didn't happen already + $(o.appendTo != 'parent' ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]); + + if(helper[0] == this.currentItem[0]) + this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") }; + + if(helper[0].style.width == '' || o.forceHelperSize) helper.width(this.currentItem.width()); + if(helper[0].style.height == '' || o.forceHelperSize) helper.height(this.currentItem.height()); + + return helper; + + }, + + _adjustOffsetFromHelper: function(obj) { + if (typeof obj == 'string') { + obj = obj.split(' '); + } + if ($.isArray(obj)) { + obj = {left: +obj[0], top: +obj[1] || 0}; + } + if ('left' in obj) { + this.offset.click.left = obj.left + this.margins.left; + } + if ('right' in obj) { + this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left; + } + if ('top' in obj) { + this.offset.click.top = obj.top + this.margins.top; + } + if ('bottom' in obj) { + this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top; + } + }, + + _getParentOffset: function() { + + + //Get the offsetParent and cache its position + this.offsetParent = this.helper.offsetParent(); + var po = this.offsetParent.offset(); + + // This is a special case where we need to modify a offset calculated on start, since the following happened: + // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent + // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that + // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag + if(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) { + po.left += this.scrollParent.scrollLeft(); + po.top += this.scrollParent.scrollTop(); + } + + if((this.offsetParent[0] == document.body) //This needs to be actually done for all browsers, since pageX/pageY includes this information + || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.browser.msie)) //Ugly IE fix + po = { top: 0, left: 0 }; + + return { + top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0), + left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0) + }; + + }, + + _getRelativeOffset: function() { + + if(this.cssPosition == "relative") { + var p = this.currentItem.position(); + return { + top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(), + left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft() + }; + } else { + return { top: 0, left: 0 }; + } + + }, + + _cacheMargins: function() { + this.margins = { + left: (parseInt(this.currentItem.css("marginLeft"),10) || 0), + top: (parseInt(this.currentItem.css("marginTop"),10) || 0) + }; + }, + + _cacheHelperProportions: function() { + this.helperProportions = { + width: this.helper.outerWidth(), + height: this.helper.outerHeight() + }; + }, + + _setContainment: function() { + + var o = this.options; + if(o.containment == 'parent') o.containment = this.helper[0].parentNode; + if(o.containment == 'document' || o.containment == 'window') this.containment = [ + 0 - this.offset.relative.left - this.offset.parent.left, + 0 - this.offset.relative.top - this.offset.parent.top, + $(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left, + ($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top + ]; + + if(!(/^(document|window|parent)$/).test(o.containment)) { + var ce = $(o.containment)[0]; + var co = $(o.containment).offset(); + var over = ($(ce).css("overflow") != 'hidden'); + + this.containment = [ + co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left, + co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top, + co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left, + co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top + ]; + } + + }, + + _convertPositionTo: function(d, pos) { + + if(!pos) pos = this.position; + var mod = d == "absolute" ? 1 : -1; + var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); + + return { + top: ( + pos.top // The absolute mouse position + + this.offset.relative.top * mod // Only for relative positioned nodes: Relative offset from element to offset parent + + this.offset.parent.top * mod // The offsetParent's offset without borders (offset + border) + - ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod) + ), + left: ( + pos.left // The absolute mouse position + + this.offset.relative.left * mod // Only for relative positioned nodes: Relative offset from element to offset parent + + this.offset.parent.left * mod // The offsetParent's offset without borders (offset + border) + - ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod) + ) + }; + + }, + + _generatePosition: function(event) { + + var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); + + // This is another very weird special case that only happens for relative elements: + // 1. If the css position is relative + // 2. and the scroll parent is the document or similar to the offset parent + // we have to refresh the relative offset during the scroll so there are no jumps + if(this.cssPosition == 'relative' && !(this.scrollParent[0] != document && this.scrollParent[0] != this.offsetParent[0])) { + this.offset.relative = this._getRelativeOffset(); + } + + var pageX = event.pageX; + var pageY = event.pageY; + + /* + * - Position constraining - + * Constrain the position to a mix of grid, containment. + */ + + if(this.originalPosition) { //If we are not dragging yet, we won't check for options + + if(this.containment) { + if(event.pageX - this.offset.click.left < this.containment[0]) pageX = this.containment[0] + this.offset.click.left; + if(event.pageY - this.offset.click.top < this.containment[1]) pageY = this.containment[1] + this.offset.click.top; + if(event.pageX - this.offset.click.left > this.containment[2]) pageX = this.containment[2] + this.offset.click.left; + if(event.pageY - this.offset.click.top > this.containment[3]) pageY = this.containment[3] + this.offset.click.top; + } + + if(o.grid) { + var top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1]; + pageY = this.containment ? (!(top - this.offset.click.top < this.containment[1] || top - this.offset.click.top > this.containment[3]) ? top : (!(top - this.offset.click.top < this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top; + + var left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0]; + pageX = this.containment ? (!(left - this.offset.click.left < this.containment[0] || left - this.offset.click.left > this.containment[2]) ? left : (!(left - this.offset.click.left < this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left; + } + + } + + return { + top: ( + pageY // The absolute mouse position + - this.offset.click.top // Click offset (relative to the element) + - this.offset.relative.top // Only for relative positioned nodes: Relative offset from element to offset parent + - this.offset.parent.top // The offsetParent's offset without borders (offset + border) + + ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) )) + ), + left: ( + pageX // The absolute mouse position + - this.offset.click.left // Click offset (relative to the element) + - this.offset.relative.left // Only for relative positioned nodes: Relative offset from element to offset parent + - this.offset.parent.left // The offsetParent's offset without borders (offset + border) + + ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() )) + ) + }; + + }, + + _rearrange: function(event, i, a, hardRefresh) { + + a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction == 'down' ? i.item[0] : i.item[0].nextSibling)); + + //Various things done here to improve the performance: + // 1. we create a setTimeout, that calls refreshPositions + // 2. on the instance, we have a counter variable, that get's higher after every append + // 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same + // 4. this lets only the last addition to the timeout stack through + this.counter = this.counter ? ++this.counter : 1; + var self = this, counter = this.counter; + + window.setTimeout(function() { + if(counter == self.counter) self.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove + },0); + + }, + + _clear: function(event, noPropagation) { + + this.reverting = false; + // We delay all events that have to be triggered to after the point where the placeholder has been removed and + // everything else normalized again + var delayedTriggers = [], self = this; + + // We first have to update the dom position of the actual currentItem + // Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088) + if(!this._noFinalSort && this.currentItem[0].parentNode) this.placeholder.before(this.currentItem); + this._noFinalSort = null; + + if(this.helper[0] == this.currentItem[0]) { + for(var i in this._storedCSS) { + if(this._storedCSS[i] == 'auto' || this._storedCSS[i] == 'static') this._storedCSS[i] = ''; + } + this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"); + } else { + this.currentItem.show(); + } + + if(this.fromOutside && !noPropagation) delayedTriggers.push(function(event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); }); + if((this.fromOutside || this.domPosition.prev != this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent != this.currentItem.parent()[0]) && !noPropagation) delayedTriggers.push(function(event) { this._trigger("update", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed + if(!$.ui.contains(this.element[0], this.currentItem[0])) { //Node was moved out of the current element + if(!noPropagation) delayedTriggers.push(function(event) { this._trigger("remove", event, this._uiHash()); }); + for (var i = this.containers.length - 1; i >= 0; i--){ + if($.ui.contains(this.containers[i].element[0], this.currentItem[0]) && !noPropagation) { + delayedTriggers.push((function(c) { return function(event) { c._trigger("receive", event, this._uiHash(this)); }; }).call(this, this.containers[i])); + delayedTriggers.push((function(c) { return function(event) { c._trigger("update", event, this._uiHash(this)); }; }).call(this, this.containers[i])); + } + }; + }; + + //Post events to containers + for (var i = this.containers.length - 1; i >= 0; i--){ + if(!noPropagation) delayedTriggers.push((function(c) { return function(event) { c._trigger("deactivate", event, this._uiHash(this)); }; }).call(this, this.containers[i])); + if(this.containers[i].containerCache.over) { + delayedTriggers.push((function(c) { return function(event) { c._trigger("out", event, this._uiHash(this)); }; }).call(this, this.containers[i])); + this.containers[i].containerCache.over = 0; + } + } + + //Do what was originally in plugins + if(this._storedCursor) $('body').css("cursor", this._storedCursor); //Reset cursor + if(this._storedOpacity) this.helper.css("opacity", this._storedOpacity); //Reset opacity + if(this._storedZIndex) this.helper.css("zIndex", this._storedZIndex == 'auto' ? '' : this._storedZIndex); //Reset z-index + + this.dragging = false; + if(this.cancelHelperRemoval) { + if(!noPropagation) { + this._trigger("beforeStop", event, this._uiHash()); + for (var i=0; i < delayedTriggers.length; i++) { delayedTriggers[i].call(this, event); }; //Trigger all delayed events + this._trigger("stop", event, this._uiHash()); + } + return false; + } + + if(!noPropagation) this._trigger("beforeStop", event, this._uiHash()); + + //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node! + this.placeholder[0].parentNode.removeChild(this.placeholder[0]); + + if(this.helper[0] != this.currentItem[0]) this.helper.remove(); this.helper = null; + + if(!noPropagation) { + for (var i=0; i < delayedTriggers.length; i++) { delayedTriggers[i].call(this, event); }; //Trigger all delayed events + this._trigger("stop", event, this._uiHash()); + } + + this.fromOutside = false; + return true; + + }, + + _trigger: function() { + if ($.Widget.prototype._trigger.apply(this, arguments) === false) { + this.cancel(); + } + }, + + _uiHash: function(inst) { + var self = inst || this; + return { + helper: self.helper, + placeholder: self.placeholder || $([]), + position: self.position, + originalPosition: self.originalPosition, + offset: self.positionAbs, + item: self.currentItem, + sender: inst ? inst.element : null + }; + } + +}); + +$.extend($.ui.sortable, { + version: "1.8.10" +}); + +})(jQuery); diff --git a/js/ui/jquery.ui.tabs.js b/js/ui/jquery.ui.tabs.js new file mode 100644 index 0000000000..c985230d1b --- /dev/null +++ b/js/ui/jquery.ui.tabs.js @@ -0,0 +1,758 @@ +/* + * jQuery UI Tabs 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Tabs + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function( $, undefined ) { + +var tabId = 0, + listId = 0; + +function getNextTabId() { + return ++tabId; +} + +function getNextListId() { + return ++listId; +} + +$.widget( "ui.tabs", { + options: { + add: null, + ajaxOptions: null, + cache: false, + cookie: null, // e.g. { expires: 7, path: '/', domain: 'jquery.com', secure: true } + collapsible: false, + disable: null, + disabled: [], + enable: null, + event: "click", + fx: null, // e.g. { height: 'toggle', opacity: 'toggle', duration: 200 } + idPrefix: "ui-tabs-", + load: null, + panelTemplate: "
        ", + remove: null, + select: null, + show: null, + spinner: "Loading…", + tabTemplate: "
      • #{label}
      • " + }, + + _create: function() { + this._tabify( true ); + }, + + _setOption: function( key, value ) { + if ( key == "selected" ) { + if (this.options.collapsible && value == this.options.selected ) { + return; + } + this.select( value ); + } else { + this.options[ key ] = value; + this._tabify(); + } + }, + + _tabId: function( a ) { + return a.title && a.title.replace( /\s/g, "_" ).replace( /[^\w\u00c0-\uFFFF-]/g, "" ) || + this.options.idPrefix + getNextTabId(); + }, + + _sanitizeSelector: function( hash ) { + // we need this because an id may contain a ":" + return hash.replace( /:/g, "\\:" ); + }, + + _cookie: function() { + var cookie = this.cookie || + ( this.cookie = this.options.cookie.name || "ui-tabs-" + getNextListId() ); + return $.cookie.apply( null, [ cookie ].concat( $.makeArray( arguments ) ) ); + }, + + _ui: function( tab, panel ) { + return { + tab: tab, + panel: panel, + index: this.anchors.index( tab ) + }; + }, + + _cleanup: function() { + // restore all former loading tabs labels + this.lis.filter( ".ui-state-processing" ) + .removeClass( "ui-state-processing" ) + .find( "span:data(label.tabs)" ) + .each(function() { + var el = $( this ); + el.html( el.data( "label.tabs" ) ).removeData( "label.tabs" ); + }); + }, + + _tabify: function( init ) { + var self = this, + o = this.options, + fragmentId = /^#.+/; // Safari 2 reports '#' for an empty hash + + this.list = this.element.find( "ol,ul" ).eq( 0 ); + this.lis = $( " > li:has(a[href])", this.list ); + this.anchors = this.lis.map(function() { + return $( "a", this )[ 0 ]; + }); + this.panels = $( [] ); + + this.anchors.each(function( i, a ) { + var href = $( a ).attr( "href" ); + // For dynamically created HTML that contains a hash as href IE < 8 expands + // such href to the full page url with hash and then misinterprets tab as ajax. + // Same consideration applies for an added tab with a fragment identifier + // since a[href=#fragment-identifier] does unexpectedly not match. + // Thus normalize href attribute... + var hrefBase = href.split( "#" )[ 0 ], + baseEl; + if ( hrefBase && ( hrefBase === location.toString().split( "#" )[ 0 ] || + ( baseEl = $( "base" )[ 0 ]) && hrefBase === baseEl.href ) ) { + href = a.hash; + a.href = href; + } + + // inline tab + if ( fragmentId.test( href ) ) { + self.panels = self.panels.add( self.element.find( self._sanitizeSelector( href ) ) ); + // remote tab + // prevent loading the page itself if href is just "#" + } else if ( href && href !== "#" ) { + // required for restore on destroy + $.data( a, "href.tabs", href ); + + // TODO until #3808 is fixed strip fragment identifier from url + // (IE fails to load from such url) + $.data( a, "load.tabs", href.replace( /#.*$/, "" ) ); + + var id = self._tabId( a ); + a.href = "#" + id; + var $panel = self.element.find( "#" + id ); + if ( !$panel.length ) { + $panel = $( o.panelTemplate ) + .attr( "id", id ) + .addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" ) + .insertAfter( self.panels[ i - 1 ] || self.list ); + $panel.data( "destroy.tabs", true ); + } + self.panels = self.panels.add( $panel ); + // invalid tab href + } else { + o.disabled.push( i ); + } + }); + + // initialization from scratch + if ( init ) { + // attach necessary classes for styling + this.element.addClass( "ui-tabs ui-widget ui-widget-content ui-corner-all" ); + this.list.addClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" ); + this.lis.addClass( "ui-state-default ui-corner-top" ); + this.panels.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" ); + + // Selected tab + // use "selected" option or try to retrieve: + // 1. from fragment identifier in url + // 2. from cookie + // 3. from selected class attribute on
      • + if ( o.selected === undefined ) { + if ( location.hash ) { + this.anchors.each(function( i, a ) { + if ( a.hash == location.hash ) { + o.selected = i; + return false; + } + }); + } + if ( typeof o.selected !== "number" && o.cookie ) { + o.selected = parseInt( self._cookie(), 10 ); + } + if ( typeof o.selected !== "number" && this.lis.filter( ".ui-tabs-selected" ).length ) { + o.selected = this.lis.index( this.lis.filter( ".ui-tabs-selected" ) ); + } + o.selected = o.selected || ( this.lis.length ? 0 : -1 ); + } else if ( o.selected === null ) { // usage of null is deprecated, TODO remove in next release + o.selected = -1; + } + + // sanity check - default to first tab... + o.selected = ( ( o.selected >= 0 && this.anchors[ o.selected ] ) || o.selected < 0 ) + ? o.selected + : 0; + + // Take disabling tabs via class attribute from HTML + // into account and update option properly. + // A selected tab cannot become disabled. + o.disabled = $.unique( o.disabled.concat( + $.map( this.lis.filter( ".ui-state-disabled" ), function( n, i ) { + return self.lis.index( n ); + }) + ) ).sort(); + + if ( $.inArray( o.selected, o.disabled ) != -1 ) { + o.disabled.splice( $.inArray( o.selected, o.disabled ), 1 ); + } + + // highlight selected tab + this.panels.addClass( "ui-tabs-hide" ); + this.lis.removeClass( "ui-tabs-selected ui-state-active" ); + // check for length avoids error when initializing empty list + if ( o.selected >= 0 && this.anchors.length ) { + self.element.find( self._sanitizeSelector( self.anchors[ o.selected ].hash ) ).removeClass( "ui-tabs-hide" ); + this.lis.eq( o.selected ).addClass( "ui-tabs-selected ui-state-active" ); + + // seems to be expected behavior that the show callback is fired + self.element.queue( "tabs", function() { + self._trigger( "show", null, + self._ui( self.anchors[ o.selected ], self.element.find( self._sanitizeSelector( self.anchors[ o.selected ].hash ) )[ 0 ] ) ); + }); + + this.load( o.selected ); + } + + // clean up to avoid memory leaks in certain versions of IE 6 + // TODO: namespace this event + $( window ).bind( "unload", function() { + self.lis.add( self.anchors ).unbind( ".tabs" ); + self.lis = self.anchors = self.panels = null; + }); + // update selected after add/remove + } else { + o.selected = this.lis.index( this.lis.filter( ".ui-tabs-selected" ) ); + } + + // update collapsible + // TODO: use .toggleClass() + this.element[ o.collapsible ? "addClass" : "removeClass" ]( "ui-tabs-collapsible" ); + + // set or update cookie after init and add/remove respectively + if ( o.cookie ) { + this._cookie( o.selected, o.cookie ); + } + + // disable tabs + for ( var i = 0, li; ( li = this.lis[ i ] ); i++ ) { + $( li )[ $.inArray( i, o.disabled ) != -1 && + // TODO: use .toggleClass() + !$( li ).hasClass( "ui-tabs-selected" ) ? "addClass" : "removeClass" ]( "ui-state-disabled" ); + } + + // reset cache if switching from cached to not cached + if ( o.cache === false ) { + this.anchors.removeData( "cache.tabs" ); + } + + // remove all handlers before, tabify may run on existing tabs after add or option change + this.lis.add( this.anchors ).unbind( ".tabs" ); + + if ( o.event !== "mouseover" ) { + var addState = function( state, el ) { + if ( el.is( ":not(.ui-state-disabled)" ) ) { + el.addClass( "ui-state-" + state ); + } + }; + var removeState = function( state, el ) { + el.removeClass( "ui-state-" + state ); + }; + this.lis.bind( "mouseover.tabs" , function() { + addState( "hover", $( this ) ); + }); + this.lis.bind( "mouseout.tabs", function() { + removeState( "hover", $( this ) ); + }); + this.anchors.bind( "focus.tabs", function() { + addState( "focus", $( this ).closest( "li" ) ); + }); + this.anchors.bind( "blur.tabs", function() { + removeState( "focus", $( this ).closest( "li" ) ); + }); + } + + // set up animations + var hideFx, showFx; + if ( o.fx ) { + if ( $.isArray( o.fx ) ) { + hideFx = o.fx[ 0 ]; + showFx = o.fx[ 1 ]; + } else { + hideFx = showFx = o.fx; + } + } + + // Reset certain styles left over from animation + // and prevent IE's ClearType bug... + function resetStyle( $el, fx ) { + $el.css( "display", "" ); + if ( !$.support.opacity && fx.opacity ) { + $el[ 0 ].style.removeAttribute( "filter" ); + } + } + + // Show a tab... + var showTab = showFx + ? function( clicked, $show ) { + $( clicked ).closest( "li" ).addClass( "ui-tabs-selected ui-state-active" ); + $show.hide().removeClass( "ui-tabs-hide" ) // avoid flicker that way + .animate( showFx, showFx.duration || "normal", function() { + resetStyle( $show, showFx ); + self._trigger( "show", null, self._ui( clicked, $show[ 0 ] ) ); + }); + } + : function( clicked, $show ) { + $( clicked ).closest( "li" ).addClass( "ui-tabs-selected ui-state-active" ); + $show.removeClass( "ui-tabs-hide" ); + self._trigger( "show", null, self._ui( clicked, $show[ 0 ] ) ); + }; + + // Hide a tab, $show is optional... + var hideTab = hideFx + ? function( clicked, $hide ) { + $hide.animate( hideFx, hideFx.duration || "normal", function() { + self.lis.removeClass( "ui-tabs-selected ui-state-active" ); + $hide.addClass( "ui-tabs-hide" ); + resetStyle( $hide, hideFx ); + self.element.dequeue( "tabs" ); + }); + } + : function( clicked, $hide, $show ) { + self.lis.removeClass( "ui-tabs-selected ui-state-active" ); + $hide.addClass( "ui-tabs-hide" ); + self.element.dequeue( "tabs" ); + }; + + // attach tab event handler, unbind to avoid duplicates from former tabifying... + this.anchors.bind( o.event + ".tabs", function() { + var el = this, + $li = $(el).closest( "li" ), + $hide = self.panels.filter( ":not(.ui-tabs-hide)" ), + $show = self.element.find( self._sanitizeSelector( el.hash ) ); + + // If tab is already selected and not collapsible or tab disabled or + // or is already loading or click callback returns false stop here. + // Check if click handler returns false last so that it is not executed + // for a disabled or loading tab! + if ( ( $li.hasClass( "ui-tabs-selected" ) && !o.collapsible) || + $li.hasClass( "ui-state-disabled" ) || + $li.hasClass( "ui-state-processing" ) || + self.panels.filter( ":animated" ).length || + self._trigger( "select", null, self._ui( this, $show[ 0 ] ) ) === false ) { + this.blur(); + return false; + } + + o.selected = self.anchors.index( this ); + + self.abort(); + + // if tab may be closed + if ( o.collapsible ) { + if ( $li.hasClass( "ui-tabs-selected" ) ) { + o.selected = -1; + + if ( o.cookie ) { + self._cookie( o.selected, o.cookie ); + } + + self.element.queue( "tabs", function() { + hideTab( el, $hide ); + }).dequeue( "tabs" ); + + this.blur(); + return false; + } else if ( !$hide.length ) { + if ( o.cookie ) { + self._cookie( o.selected, o.cookie ); + } + + self.element.queue( "tabs", function() { + showTab( el, $show ); + }); + + // TODO make passing in node possible, see also http://dev.jqueryui.com/ticket/3171 + self.load( self.anchors.index( this ) ); + + this.blur(); + return false; + } + } + + if ( o.cookie ) { + self._cookie( o.selected, o.cookie ); + } + + // show new tab + if ( $show.length ) { + if ( $hide.length ) { + self.element.queue( "tabs", function() { + hideTab( el, $hide ); + }); + } + self.element.queue( "tabs", function() { + showTab( el, $show ); + }); + + self.load( self.anchors.index( this ) ); + } else { + throw "jQuery UI Tabs: Mismatching fragment identifier."; + } + + // Prevent IE from keeping other link focussed when using the back button + // and remove dotted border from clicked link. This is controlled via CSS + // in modern browsers; blur() removes focus from address bar in Firefox + // which can become a usability and annoying problem with tabs('rotate'). + if ( $.browser.msie ) { + this.blur(); + } + }); + + // disable click in any case + this.anchors.bind( "click.tabs", function(){ + return false; + }); + }, + + _getIndex: function( index ) { + // meta-function to give users option to provide a href string instead of a numerical index. + // also sanitizes numerical indexes to valid values. + if ( typeof index == "string" ) { + index = this.anchors.index( this.anchors.filter( "[href$=" + index + "]" ) ); + } + + return index; + }, + + destroy: function() { + var o = this.options; + + this.abort(); + + this.element + .unbind( ".tabs" ) + .removeClass( "ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible" ) + .removeData( "tabs" ); + + this.list.removeClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" ); + + this.anchors.each(function() { + var href = $.data( this, "href.tabs" ); + if ( href ) { + this.href = href; + } + var $this = $( this ).unbind( ".tabs" ); + $.each( [ "href", "load", "cache" ], function( i, prefix ) { + $this.removeData( prefix + ".tabs" ); + }); + }); + + this.lis.unbind( ".tabs" ).add( this.panels ).each(function() { + if ( $.data( this, "destroy.tabs" ) ) { + $( this ).remove(); + } else { + $( this ).removeClass([ + "ui-state-default", + "ui-corner-top", + "ui-tabs-selected", + "ui-state-active", + "ui-state-hover", + "ui-state-focus", + "ui-state-disabled", + "ui-tabs-panel", + "ui-widget-content", + "ui-corner-bottom", + "ui-tabs-hide" + ].join( " " ) ); + } + }); + + if ( o.cookie ) { + this._cookie( null, o.cookie ); + } + + return this; + }, + + add: function( url, label, index ) { + if ( index === undefined ) { + index = this.anchors.length; + } + + var self = this, + o = this.options, + $li = $( o.tabTemplate.replace( /#\{href\}/g, url ).replace( /#\{label\}/g, label ) ), + id = !url.indexOf( "#" ) ? url.replace( "#", "" ) : this._tabId( $( "a", $li )[ 0 ] ); + + $li.addClass( "ui-state-default ui-corner-top" ).data( "destroy.tabs", true ); + + // try to find an existing element before creating a new one + var $panel = self.element.find( "#" + id ); + if ( !$panel.length ) { + $panel = $( o.panelTemplate ) + .attr( "id", id ) + .data( "destroy.tabs", true ); + } + $panel.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" ); + + if ( index >= this.lis.length ) { + $li.appendTo( this.list ); + $panel.appendTo( this.list[ 0 ].parentNode ); + } else { + $li.insertBefore( this.lis[ index ] ); + $panel.insertBefore( this.panels[ index ] ); + } + + o.disabled = $.map( o.disabled, function( n, i ) { + return n >= index ? ++n : n; + }); + + this._tabify(); + + if ( this.anchors.length == 1 ) { + o.selected = 0; + $li.addClass( "ui-tabs-selected ui-state-active" ); + $panel.removeClass( "ui-tabs-hide" ); + this.element.queue( "tabs", function() { + self._trigger( "show", null, self._ui( self.anchors[ 0 ], self.panels[ 0 ] ) ); + }); + + this.load( 0 ); + } + + this._trigger( "add", null, this._ui( this.anchors[ index ], this.panels[ index ] ) ); + return this; + }, + + remove: function( index ) { + index = this._getIndex( index ); + var o = this.options, + $li = this.lis.eq( index ).remove(), + $panel = this.panels.eq( index ).remove(); + + // If selected tab was removed focus tab to the right or + // in case the last tab was removed the tab to the left. + if ( $li.hasClass( "ui-tabs-selected" ) && this.anchors.length > 1) { + this.select( index + ( index + 1 < this.anchors.length ? 1 : -1 ) ); + } + + o.disabled = $.map( + $.grep( o.disabled, function(n, i) { + return n != index; + }), + function( n, i ) { + return n >= index ? --n : n; + }); + + this._tabify(); + + this._trigger( "remove", null, this._ui( $li.find( "a" )[ 0 ], $panel[ 0 ] ) ); + return this; + }, + + enable: function( index ) { + index = this._getIndex( index ); + var o = this.options; + if ( $.inArray( index, o.disabled ) == -1 ) { + return; + } + + this.lis.eq( index ).removeClass( "ui-state-disabled" ); + o.disabled = $.grep( o.disabled, function( n, i ) { + return n != index; + }); + + this._trigger( "enable", null, this._ui( this.anchors[ index ], this.panels[ index ] ) ); + return this; + }, + + disable: function( index ) { + index = this._getIndex( index ); + var self = this, o = this.options; + // cannot disable already selected tab + if ( index != o.selected ) { + this.lis.eq( index ).addClass( "ui-state-disabled" ); + + o.disabled.push( index ); + o.disabled.sort(); + + this._trigger( "disable", null, this._ui( this.anchors[ index ], this.panels[ index ] ) ); + } + + return this; + }, + + select: function( index ) { + index = this._getIndex( index ); + if ( index == -1 ) { + if ( this.options.collapsible && this.options.selected != -1 ) { + index = this.options.selected; + } else { + return this; + } + } + this.anchors.eq( index ).trigger( this.options.event + ".tabs" ); + return this; + }, + + load: function( index ) { + index = this._getIndex( index ); + var self = this, + o = this.options, + a = this.anchors.eq( index )[ 0 ], + url = $.data( a, "load.tabs" ); + + this.abort(); + + // not remote or from cache + if ( !url || this.element.queue( "tabs" ).length !== 0 && $.data( a, "cache.tabs" ) ) { + this.element.dequeue( "tabs" ); + return; + } + + // load remote from here on + this.lis.eq( index ).addClass( "ui-state-processing" ); + + if ( o.spinner ) { + var span = $( "span", a ); + span.data( "label.tabs", span.html() ).html( o.spinner ); + } + + this.xhr = $.ajax( $.extend( {}, o.ajaxOptions, { + url: url, + success: function( r, s ) { + self.element.find( self._sanitizeSelector( a.hash ) ).html( r ); + + // take care of tab labels + self._cleanup(); + + if ( o.cache ) { + $.data( a, "cache.tabs", true ); + } + + self._trigger( "load", null, self._ui( self.anchors[ index ], self.panels[ index ] ) ); + try { + o.ajaxOptions.success( r, s ); + } + catch ( e ) {} + }, + error: function( xhr, s, e ) { + // take care of tab labels + self._cleanup(); + + self._trigger( "load", null, self._ui( self.anchors[ index ], self.panels[ index ] ) ); + try { + // Passing index avoid a race condition when this method is + // called after the user has selected another tab. + // Pass the anchor that initiated this request allows + // loadError to manipulate the tab content panel via $(a.hash) + o.ajaxOptions.error( xhr, s, index, a ); + } + catch ( e ) {} + } + } ) ); + + // last, so that load event is fired before show... + self.element.dequeue( "tabs" ); + + return this; + }, + + abort: function() { + // stop possibly running animations + this.element.queue( [] ); + this.panels.stop( false, true ); + + // "tabs" queue must not contain more than two elements, + // which are the callbacks for the latest clicked tab... + this.element.queue( "tabs", this.element.queue( "tabs" ).splice( -2, 2 ) ); + + // terminate pending requests from other tabs + if ( this.xhr ) { + this.xhr.abort(); + delete this.xhr; + } + + // take care of tab labels + this._cleanup(); + return this; + }, + + url: function( index, url ) { + this.anchors.eq( index ).removeData( "cache.tabs" ).data( "load.tabs", url ); + return this; + }, + + length: function() { + return this.anchors.length; + } +}); + +$.extend( $.ui.tabs, { + version: "1.8.10" +}); + +/* + * Tabs Extensions + */ + +/* + * Rotate + */ +$.extend( $.ui.tabs.prototype, { + rotation: null, + rotate: function( ms, continuing ) { + var self = this, + o = this.options; + + var rotate = self._rotate || ( self._rotate = function( e ) { + clearTimeout( self.rotation ); + self.rotation = setTimeout(function() { + var t = o.selected; + self.select( ++t < self.anchors.length ? t : 0 ); + }, ms ); + + if ( e ) { + e.stopPropagation(); + } + }); + + var stop = self._unrotate || ( self._unrotate = !continuing + ? function(e) { + if (e.clientX) { // in case of a true click + self.rotate(null); + } + } + : function( e ) { + t = o.selected; + rotate(); + }); + + // start rotation + if ( ms ) { + this.element.bind( "tabsshow", rotate ); + this.anchors.bind( o.event + ".tabs", stop ); + rotate(); + // stop rotation + } else { + clearTimeout( self.rotation ); + this.element.unbind( "tabsshow", rotate ); + this.anchors.unbind( o.event + ".tabs", stop ); + delete this._rotate; + delete this._unrotate; + } + + return this; + } +}); + +})( jQuery ); diff --git a/js/ui/jquery.ui.widget.js b/js/ui/jquery.ui.widget.js new file mode 100644 index 0000000000..e8f4e9854b --- /dev/null +++ b/js/ui/jquery.ui.widget.js @@ -0,0 +1,262 @@ +/*! + * jQuery UI Widget 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Widget + */ +(function( $, undefined ) { + +// jQuery 1.4+ +if ( $.cleanData ) { + var _cleanData = $.cleanData; + $.cleanData = function( elems ) { + for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) { + $( elem ).triggerHandler( "remove" ); + } + _cleanData( elems ); + }; +} else { + var _remove = $.fn.remove; + $.fn.remove = function( selector, keepData ) { + return this.each(function() { + if ( !keepData ) { + if ( !selector || $.filter( selector, [ this ] ).length ) { + $( "*", this ).add( [ this ] ).each(function() { + $( this ).triggerHandler( "remove" ); + }); + } + } + return _remove.call( $(this), selector, keepData ); + }); + }; +} + +$.widget = function( name, base, prototype ) { + var namespace = name.split( "." )[ 0 ], + fullName; + name = name.split( "." )[ 1 ]; + fullName = namespace + "-" + name; + + if ( !prototype ) { + prototype = base; + base = $.Widget; + } + + // create selector for plugin + $.expr[ ":" ][ fullName ] = function( elem ) { + return !!$.data( elem, name ); + }; + + $[ namespace ] = $[ namespace ] || {}; + $[ namespace ][ name ] = function( options, element ) { + // allow instantiation without initializing for simple inheritance + if ( arguments.length ) { + this._createWidget( options, element ); + } + }; + + var basePrototype = new base(); + // we need to make the options hash a property directly on the new instance + // otherwise we'll modify the options hash on the prototype that we're + // inheriting from +// $.each( basePrototype, function( key, val ) { +// if ( $.isPlainObject(val) ) { +// basePrototype[ key ] = $.extend( {}, val ); +// } +// }); + basePrototype.options = $.extend( true, {}, basePrototype.options ); + $[ namespace ][ name ].prototype = $.extend( true, basePrototype, { + namespace: namespace, + widgetName: name, + widgetEventPrefix: $[ namespace ][ name ].prototype.widgetEventPrefix || name, + widgetBaseClass: fullName + }, prototype ); + + $.widget.bridge( name, $[ namespace ][ name ] ); +}; + +$.widget.bridge = function( name, object ) { + $.fn[ name ] = function( options ) { + var isMethodCall = typeof options === "string", + args = Array.prototype.slice.call( arguments, 1 ), + returnValue = this; + + // allow multiple hashes to be passed on init + options = !isMethodCall && args.length ? + $.extend.apply( null, [ true, options ].concat(args) ) : + options; + + // prevent calls to internal methods + if ( isMethodCall && options.charAt( 0 ) === "_" ) { + return returnValue; + } + + if ( isMethodCall ) { + this.each(function() { + var instance = $.data( this, name ), + methodValue = instance && $.isFunction( instance[options] ) ? + instance[ options ].apply( instance, args ) : + instance; + // TODO: add this back in 1.9 and use $.error() (see #5972) +// if ( !instance ) { +// throw "cannot call methods on " + name + " prior to initialization; " + +// "attempted to call method '" + options + "'"; +// } +// if ( !$.isFunction( instance[options] ) ) { +// throw "no such method '" + options + "' for " + name + " widget instance"; +// } +// var methodValue = instance[ options ].apply( instance, args ); + if ( methodValue !== instance && methodValue !== undefined ) { + returnValue = methodValue; + return false; + } + }); + } else { + this.each(function() { + var instance = $.data( this, name ); + if ( instance ) { + instance.option( options || {} )._init(); + } else { + $.data( this, name, new object( options, this ) ); + } + }); + } + + return returnValue; + }; +}; + +$.Widget = function( options, element ) { + // allow instantiation without initializing for simple inheritance + if ( arguments.length ) { + this._createWidget( options, element ); + } +}; + +$.Widget.prototype = { + widgetName: "widget", + widgetEventPrefix: "", + options: { + disabled: false + }, + _createWidget: function( options, element ) { + // $.widget.bridge stores the plugin instance, but we do it anyway + // so that it's stored even before the _create function runs + $.data( element, this.widgetName, this ); + this.element = $( element ); + this.options = $.extend( true, {}, + this.options, + this._getCreateOptions(), + options ); + + var self = this; + this.element.bind( "remove." + this.widgetName, function() { + self.destroy(); + }); + + this._create(); + this._trigger( "create" ); + this._init(); + }, + _getCreateOptions: function() { + return $.metadata && $.metadata.get( this.element[0] )[ this.widgetName ]; + }, + _create: function() {}, + _init: function() {}, + + destroy: function() { + this.element + .unbind( "." + this.widgetName ) + .removeData( this.widgetName ); + this.widget() + .unbind( "." + this.widgetName ) + .removeAttr( "aria-disabled" ) + .removeClass( + this.widgetBaseClass + "-disabled " + + "ui-state-disabled" ); + }, + + widget: function() { + return this.element; + }, + + option: function( key, value ) { + var options = key; + + if ( arguments.length === 0 ) { + // don't return a reference to the internal hash + return $.extend( {}, this.options ); + } + + if (typeof key === "string" ) { + if ( value === undefined ) { + return this.options[ key ]; + } + options = {}; + options[ key ] = value; + } + + this._setOptions( options ); + + return this; + }, + _setOptions: function( options ) { + var self = this; + $.each( options, function( key, value ) { + self._setOption( key, value ); + }); + + return this; + }, + _setOption: function( key, value ) { + this.options[ key ] = value; + + if ( key === "disabled" ) { + this.widget() + [ value ? "addClass" : "removeClass"]( + this.widgetBaseClass + "-disabled" + " " + + "ui-state-disabled" ) + .attr( "aria-disabled", value ); + } + + return this; + }, + + enable: function() { + return this._setOption( "disabled", false ); + }, + disable: function() { + return this._setOption( "disabled", true ); + }, + + _trigger: function( type, event, data ) { + var callback = this.options[ type ]; + + event = $.Event( event ); + event.type = ( type === this.widgetEventPrefix ? + type : + this.widgetEventPrefix + type ).toLowerCase(); + data = data || {}; + + // copy original event properties over to the new event + // this would happen if we could call $.event.fix instead of $.Event + // but we don't have a way to force an event to be fixed multiple times + if ( event.originalEvent ) { + for ( var i = $.event.props.length, prop; i; ) { + prop = $.event.props[ --i ]; + event[ prop ] = event.originalEvent[ prop ]; + } + } + + this.element.trigger( event, data ); + + return !( $.isFunction(callback) && + callback.call( this.element[0], event, data ) === false || + event.isDefaultPrevented() ); + } +}; + +})( jQuery ); From 5c26f36a7c8106ffce82940c09e9af0deb2e29c1 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Thu, 10 Mar 2011 10:19:50 -0600 Subject: [PATCH 014/146] slim down the name of the jquery file --- js/{jquery-ui-1.8.10.custom.min.js => jquery-ui.min.js} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename js/{jquery-ui-1.8.10.custom.min.js => jquery-ui.min.js} (100%) diff --git a/js/jquery-ui-1.8.10.custom.min.js b/js/jquery-ui.min.js similarity index 100% rename from js/jquery-ui-1.8.10.custom.min.js rename to js/jquery-ui.min.js From a5daed0aa816c4ecbb6857cf747cb2cbf45c8db5 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Thu, 10 Mar 2011 10:28:08 -0600 Subject: [PATCH 015/146] load jquery-ui css and js by default --- .../smoothness/{jquery-ui-1.8.10.custom.css => jquery-ui.css} | 0 lib/action.php | 3 +++ 2 files changed, 3 insertions(+) rename js/css/smoothness/{jquery-ui-1.8.10.custom.css => jquery-ui.css} (100%) diff --git a/js/css/smoothness/jquery-ui-1.8.10.custom.css b/js/css/smoothness/jquery-ui.css similarity index 100% rename from js/css/smoothness/jquery-ui-1.8.10.custom.css rename to js/css/smoothness/jquery-ui.css diff --git a/lib/action.php b/lib/action.php index 0ba4b8b8ff..7614f4be3a 100644 --- a/lib/action.php +++ b/lib/action.php @@ -222,6 +222,8 @@ class Action extends HTMLOutputter // lawsuit Event::handle('EndShowLaconicaStyles', array($this)); } + $this->cssLink(common_path('js/css/smoothness/jquery-ui.css')); + if (Event::handle('StartShowUAStyles', array($this))) { $this->comment('[if IE]>script('jquery.min.js'); $this->script('jquery.form.min.js'); + $this->script('jquery-ui.min.js'); $this->script('jquery.cookie.min.js'); $this->inlineScript('if (typeof window.JSON !== "object") { $.getScript("'.common_path('js/json2.min.js').'"); }'); $this->script('jquery.joverlay.min.js'); From c4bada902296ec8d77c232a0a638b0dd60aa1bd0 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Thu, 10 Mar 2011 10:53:11 -0600 Subject: [PATCH 016/146] use jquery-ui for input_forms tabset --- js/util.js | 16 ---------------- lib/action.php | 7 ++++--- theme/rebase/css/display.css | 12 ------------ 3 files changed, 4 insertions(+), 31 deletions(-) diff --git a/js/util.js b/js/util.js index cc95a08bf5..67e28485e4 100644 --- a/js/util.js +++ b/js/util.js @@ -1276,22 +1276,6 @@ var SN = { // StatusNet return false; }, - - /** - * Switch to another active input sub-form. - * This will hide the current form (if any), show the new one, and - * update the input type tab selection state. - * - * @param {String} tag - */ - switchInputFormTab: function(tag) { - // The one that's current isn't current anymore - $('.input_form_nav_tab.current').removeClass('current'); - $('#input_form_nav_'+tag).addClass('current'); - - $('.input_form.current').removeClass('current'); - $('#input_form_'+tag).addClass('current'); - } }, Init: { diff --git a/lib/action.php b/lib/action.php index 7614f4be3a..686b512a2c 100644 --- a/lib/action.php +++ b/lib/action.php @@ -315,6 +315,7 @@ class Action extends HTMLOutputter // lawsuit $this->showScriptMessages(); // Frame-busting code to avoid clickjacking attacks. $this->inlineScript('if (window.top !== window.self) { window.top.location.href = window.self.location.href; }'); + $this->inlineScript('$(document).ready(function(){ $(\'#input_forms\').tabs(); });'); Event::handle('EndShowStatusNetScripts', array($this)); Event::handle('EndShowLaconicaScripts', array($this)); } @@ -592,7 +593,7 @@ class Action extends HTMLOutputter // lawsuit { $tabs = array('status' => _('Status')); - $this->elementStart('div', 'input_forms'); + $this->elementStart('div', array('id' => 'input_forms')); if (Event::handle('StartShowEntryForms', array(&$tabs))) { @@ -611,7 +612,7 @@ class Action extends HTMLOutputter // lawsuit $this->elementStart('li', $attrs); $this->element('a', - array('href' => 'javascript:SN.U.switchInputFormTab("'.$tag.'")'), + array('href' => '#input_forms-'.$tag), $title); $this->elementEnd('li'); } @@ -621,7 +622,7 @@ class Action extends HTMLOutputter // lawsuit foreach ($tabs as $tag => $title) { $attrs = array('class' => 'input_form', - 'id' => 'input_form_'.$tag); + 'id' => 'input_forms-'.$tag); if ($tag == 'status') { $attrs['class'] .= ' current'; diff --git a/theme/rebase/css/display.css b/theme/rebase/css/display.css index c1ac1e8f4d..f7a9486f24 100644 --- a/theme/rebase/css/display.css +++ b/theme/rebase/css/display.css @@ -1962,18 +1962,6 @@ margin-bottom:18px; padding-left:20px; } -#input_form_nav { - list-style-type: none; -} - -#input_form_nav li { - display:inline; -} - -.input_form_nav_tab.current { - text-decoration: underline; -} - .input_form { display: none; } From 39f8d2c72830d7bc3c08f60d1df38d19c846a74b Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Thu, 10 Mar 2011 11:25:34 -0600 Subject: [PATCH 017/146] date picker for event form --- plugins/Event/EventPlugin.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/plugins/Event/EventPlugin.php b/plugins/Event/EventPlugin.php index 5c2fd35d74..4159641d08 100644 --- a/plugins/Event/EventPlugin.php +++ b/plugins/Event/EventPlugin.php @@ -435,4 +435,9 @@ class EventPlugin extends MicroappPlugin common_log(LOG_DEBUG, "Not deleting related, wtf..."); } } + + function onEndShowScripts($action) + { + $action->inlineScript('$(document).ready(function() { $("#startdate").datepicker(); $("#enddate").datepicker(); });'); + } } From c456e998c7de9b70171db4524dc7ac90e908b7ad Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Thu, 10 Mar 2011 14:14:21 -0800 Subject: [PATCH 018/146] Make phone numbers save --- plugins/ExtendedProfile/extendedprofile.php | 24 ++-- .../ExtendedProfile/extendedprofilewidget.php | 48 ++++++++ .../profiledetailsettingsaction.php | 109 +++++++++++++++--- 3 files changed, 155 insertions(+), 26 deletions(-) diff --git a/plugins/ExtendedProfile/extendedprofile.php b/plugins/ExtendedProfile/extendedprofile.php index 5ad6db114f..908f0bc721 100644 --- a/plugins/ExtendedProfile/extendedprofile.php +++ b/plugins/ExtendedProfile/extendedprofile.php @@ -39,7 +39,7 @@ class ExtendedProfile $this->user = $profile->getUser(); $this->sections = $this->getSections(); $this->fields = $this->loadFields(); - common_debug(var_export($this->fields, true)); + //common_debug(var_export($this->fields, true)); } /** @@ -96,6 +96,21 @@ class ExtendedProfile } } + + function getPhones() + { + return array( + 'label' => _m('Phone'), + 'type' => 'phone', + 'multi' => true, + 'index' => 8123, + 'rel' => 'home', + 'value' => '510-528-0079', + 'vcard' => 'tel' + + ); + } + /** * Return all the sections of the extended profile * @@ -140,12 +155,7 @@ class ExtendedProfile 'contact' => array( 'label' => _m('Contact'), 'fields' => array( - 'phone' => array( - 'label' => _m('Phone'), - 'type' => 'phone', - 'multi' => true, - 'vcard' => 'tel', - ), + 'phone' => $this->getPhones(), 'im' => array( 'label' => _m('IM'), 'type' => 'im', diff --git a/plugins/ExtendedProfile/extendedprofilewidget.php b/plugins/ExtendedProfile/extendedprofilewidget.php index fbb3ff3c23..f5685e9981 100644 --- a/plugins/ExtendedProfile/extendedprofilewidget.php +++ b/plugins/ExtendedProfile/extendedprofilewidget.php @@ -150,10 +150,55 @@ class ExtendedProfileWidget extends Form case 'tags': $this->out->text($this->ext->getTags()); break; + case 'phone': + common_debug("GOT a PHONE!"); + $this->showPhone($field); + break; default: $this->out->text("TYPE: $type"); } + } + protected function showPhone($field) + { + $this->out->elementStart('div', array('class' => 'phone-display')); + $this->out->text($field['value']); + $this->out->text(' (' . $field['rel'] . ')'); + $this->out->elementEnd('div'); + } + + protected function showEditablePhone($name, $field) + { + $index = $field['index']; + $id = "extprofile-$name-$index"; + $rel = $id . '-rel'; + + $this->out->elementStart('div', array('class' => 'phone-edit')); + $this->out->input($id, null, $field['value']); + $this->out->dropdown( + $id . '-rel', + 'Type', + array( + 'office' => 'Office', + 'mobile' => 'Mobile', + 'home' => 'Home', + 'pager' => 'Pager', + 'other' => 'Other' + ), + null, + false, + $field['rel'] + ); + if ($field['multi']) { + $this->out->element( + 'a', + array( + 'name' => $name, + 'href' => 'javascript://'), + '+' + ); + } + $this->out->elementEnd('div'); } /** @@ -182,6 +227,9 @@ class ExtendedProfileWidget extends Form case 'tags': $out->input($id, null, $this->ext->getTags()); break; + case 'phone': + $this->showEditablePhone($name, $field); + break; default: $out->input($id, null, "TYPE: $type"); } diff --git a/plugins/ExtendedProfile/profiledetailsettingsaction.php b/plugins/ExtendedProfile/profiledetailsettingsaction.php index 0f84dc0582..c18732c058 100644 --- a/plugins/ExtendedProfile/profiledetailsettingsaction.php +++ b/plugins/ExtendedProfile/profiledetailsettingsaction.php @@ -101,51 +101,122 @@ class ProfileDetailSettingsAction extends SettingsAction foreach ($simpleFieldNames as $name) { $value = $this->trimmed('extprofile-' . $name); - $this->saveSimpleField($user, $name, $value); + $this->saveField($user, $name, $value); } + $this->savePhoneNumbers($user); + $this->showForm(_('Details saved.'), true); } - function saveSimpleField($user, $name, $value) + function savePhoneNumbers($user) { + $phones = $this->findPhoneNumbers(); + + foreach ($phones as $phone) { + $this->saveField( + $user, + 'phone', + $phone['value'], + $phone['rel'], + $phone['index'] + ); + } + } + + function findPhoneNumbers() { + $phones = array(); + $phoneParams = $this->findMultiParams('phone'); + ksort($phoneParams); // this sorts them into pairs + $phones = $this->arraySplit($phoneParams, sizeof($phoneParams) / 2); + + $phoneTuples = array(); + + foreach($phones as $phone) { + $firstkey = array_shift(array_keys($phone)); + $index = substr($firstkey, strrpos($firstkey, '-') + 1); + list($number, $rel) = array_values($phone); + + $phoneTuples[] = array( + 'value' => $number, + 'index' => $index, + 'rel' => $rel + ); + + return $phoneTuples; + } + + return $phones; + } + + function arraySplit($array, $pieces) + { + if ($pieces < 2) { + return array($array); + } + + $newCount = ceil(count($array) / $pieces); + $a = array_slice($array, 0, $newCount); + $b = array_split(array_slice($array, $newCount), $pieces - 1); + + return array_merge(array($a), $b); + } + + function findMultiParams($type) { + $formVals = array(); + $target = $type; + foreach ($_POST as $key => $val) { + if (strrpos('extprofile-' . $key, $target) !== false) { + $formVals[$key] = $val; + } + } + return $formVals; + } + + /** + * Save an extended profile field as a Profile_detail + * + * @param User $user the current user + * @param string $name field name + * @param string $value field value + * @param string $rel field rel (type) + * @param int $index index (fields can have multiple values) + */ + function saveField($user, $name, $value, $rel = null, $index = null) { $profile = $user->getProfile(); - - $detail = new Profile_detail(); + $detail = new Profile_detail(); $detail->profile_id = $profile->id; $detail->field_name = $name; + $detail->value_index = $index; $result = $detail->find(true); - if (empty($result)) { - + $detial->value_index = $index; + $detail->rel = $rel; $detail->field_value = $value; - - $detail->created = common_sql_now(); - - common_debug("XXXXXXXXXXXXXXX not found"); - + $detail->created = common_sql_now(); $result = $detail->insert(); - if (empty($result)) { common_log_db_error($detail, 'INSERT', __FILE__); $this->serverError(_m('Could not save profile details.')); } - } else { - - common_debug('zzzzz FOUND'); $orig = clone($detail); - $detail->field_value = $value; - $result = $detail->update($orig); + $detail->field_value = $value; + $detail->rel = $rel; + + $result = $detail->update($orig); + if (empty($result)) { + common_log_db_error($detail, 'UPDATE', __FILE__); + $this->serverError(_m('Could not save profile details.')); + } } $detail->free(); - } /** @@ -189,7 +260,7 @@ class ProfileDetailSettingsAction extends SettingsAction || $location != $profile->location || !empty($newTags) || $bio != $profile->bio) { - + $orig = clone($profile); $profile->nickname = $user->nickname; From 8efd2cf04dfb3343b88cb51f5740bb1688ba3c05 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Thu, 10 Mar 2011 16:57:41 -0800 Subject: [PATCH 019/146] Make phone number save and display from DB --- plugins/ExtendedProfile/extendedprofile.php | 39 ++++++++++++++----- .../ExtendedProfile/extendedprofilewidget.php | 18 +++++++-- 2 files changed, 44 insertions(+), 13 deletions(-) diff --git a/plugins/ExtendedProfile/extendedprofile.php b/plugins/ExtendedProfile/extendedprofile.php index 908f0bc721..2a10759d91 100644 --- a/plugins/ExtendedProfile/extendedprofile.php +++ b/plugins/ExtendedProfile/extendedprofile.php @@ -37,8 +37,10 @@ class ExtendedProfile { $this->profile = $profile; $this->user = $profile->getUser(); - $this->sections = $this->getSections(); $this->fields = $this->loadFields(); + $this->sections = $this->getSections(); + //common_debug(var_export($this->sections, true)); + //common_debug(var_export($this->fields, true)); } @@ -96,19 +98,36 @@ class ExtendedProfile } } - function getPhones() { - return array( + $phones = $this->fields['phone']; + $pArrays = array(); + + if (empty($phones)) { + $pArrays[] = array( 'label' => _m('Phone'), 'type' => 'phone', - 'multi' => true, - 'index' => 8123, - 'rel' => 'home', - 'value' => '510-528-0079', - 'vcard' => 'tel' - - ); + 'vcard' => 'tel', + 'multi' => true + ); + } else { + for ($i = 0; $i < sizeof($phones); $i++) { + $pa = array( + 'label' => _m('Phone'), + 'type' => 'phone', + 'index' => $phones[$i]->value_index, + 'rel' => $phones[$i]->rel, + 'value' => $phones[$i]->field_value, + 'vcard' => 'tel' + ); + // Last phone record should allow adding more + if ($i == sizeof($phones) - 1) { + $pa['multi'] = true; + } + $pArrays[] = $pa; + } + } + return $pArrays; } /** diff --git a/plugins/ExtendedProfile/extendedprofilewidget.php b/plugins/ExtendedProfile/extendedprofilewidget.php index f5685e9981..d31a34b1e2 100644 --- a/plugins/ExtendedProfile/extendedprofilewidget.php +++ b/plugins/ExtendedProfile/extendedprofilewidget.php @@ -101,8 +101,13 @@ class ExtendedProfileWidget extends Form { $this->out->element('h3', null, $section['label']); $this->out->elementStart('table', array('class' => 'extended-profile')); + foreach ($section['fields'] as $fieldName => $field) { - $this->showExtendedProfileField($fieldName, $field); + if ($fieldName == 'phone') { + $this->showPhones($fieldName, $field); + } else { + $this->showExtendedProfileField($fieldName, $field); + } } $this->out->elementEnd('table'); } @@ -151,7 +156,6 @@ class ExtendedProfileWidget extends Form $this->out->text($this->ext->getTags()); break; case 'phone': - common_debug("GOT a PHONE!"); $this->showPhone($field); break; default: @@ -159,11 +163,19 @@ class ExtendedProfileWidget extends Form } } + protected function showPhones($name, $field) { + foreach ($field as $phone) { + $this->showExtendedProfileField($name, $phone); + } + } + protected function showPhone($field) { $this->out->elementStart('div', array('class' => 'phone-display')); $this->out->text($field['value']); - $this->out->text(' (' . $field['rel'] . ')'); + if (!empty($field['rel'])) { + $this->out->text(' (' . $field['rel'] . ')'); + } $this->out->elementEnd('div'); } From 302f0236bdee73afc9183f724432df2f43fb480a Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Thu, 10 Mar 2011 17:13:34 -0800 Subject: [PATCH 020/146] Make correct nav menus show --- plugins/ExtendedProfile/profiledetailaction.php | 13 +------------ .../ExtendedProfile/profiledetailsettingsaction.php | 2 +- 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/plugins/ExtendedProfile/profiledetailaction.php b/plugins/ExtendedProfile/profiledetailaction.php index d2eb06775c..beac7d6321 100644 --- a/plugins/ExtendedProfile/profiledetailaction.php +++ b/plugins/ExtendedProfile/profiledetailaction.php @@ -21,7 +21,7 @@ if (!defined('STATUSNET')) { exit(1); } -class ProfileDetailAction extends ProfileAction +class ProfileDetailAction extends ShowstreamAction { function isReadOnly($args) @@ -34,23 +34,12 @@ class ProfileDetailAction extends ProfileAction return $this->profile->getFancyName(); } - function showLocalNav() - { - $nav = new PersonalGroupNav($this); - $nav->show(); - } - function showStylesheets() { parent::showStylesheets(); $this->cssLink('plugins/ExtendedProfile/profiledetail.css'); return true; } - function handle($args) - { - $this->showPage(); - } - function showContent() { $cur = common_current_user(); diff --git a/plugins/ExtendedProfile/profiledetailsettingsaction.php b/plugins/ExtendedProfile/profiledetailsettingsaction.php index c18732c058..ec2c4935a2 100644 --- a/plugins/ExtendedProfile/profiledetailsettingsaction.php +++ b/plugins/ExtendedProfile/profiledetailsettingsaction.php @@ -21,7 +21,7 @@ if (!defined('STATUSNET')) { exit(1); } -class ProfileDetailSettingsAction extends SettingsAction +class ProfileDetailSettingsAction extends ProfileSettingsAction { function title() From 76bffe1a64a0d077492d577d11472492646f6c27 Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Fri, 11 Mar 2011 18:31:22 +0100 Subject: [PATCH 021/146] * Superfluous whitespace removed * Small L10n updates --- plugins/Poll/Poll.php | 4 ---- plugins/Poll/PollPlugin.php | 8 -------- plugins/Poll/Poll_response.php | 5 ----- plugins/Poll/newpoll.php | 10 +--------- plugins/Poll/newpollform.php | 8 -------- plugins/Poll/pollresponseform.php | 7 ------- plugins/Poll/pollresultform.php | 7 ------- plugins/Poll/respondpoll.php | 9 +-------- plugins/Poll/showpoll.php | 4 ---- 9 files changed, 2 insertions(+), 60 deletions(-) diff --git a/plugins/Poll/Poll.php b/plugins/Poll/Poll.php index 1f26bbf6e4..001648fd21 100644 --- a/plugins/Poll/Poll.php +++ b/plugins/Poll/Poll.php @@ -64,7 +64,6 @@ class Poll extends Managed_DataObject * @return User_greeting_count object found, or null for no hits * */ - function staticGet($k, $v=null) { return Memcached_DataObject::staticGet('Poll', $k, $v); @@ -82,7 +81,6 @@ class Poll extends Managed_DataObject * @return Bookmark object found, or null for no hits * */ - function pkeyGet($kv) { return Memcached_DataObject::pkeyGet('Poll', $kv); @@ -117,7 +115,6 @@ class Poll extends Managed_DataObject * * @return Poll found poll or null */ - function getByNotice($notice) { return self::staticGet('uri', $notice->uri); @@ -209,7 +206,6 @@ class Poll extends Managed_DataObject * * @return Notice saved notice */ - static function saveNew($profile, $question, $opts, $options=null) { if (empty($options)) { diff --git a/plugins/Poll/PollPlugin.php b/plugins/Poll/PollPlugin.php index a2e9814555..b3de0634a9 100644 --- a/plugins/Poll/PollPlugin.php +++ b/plugins/Poll/PollPlugin.php @@ -43,7 +43,6 @@ if (!defined('STATUSNET')) { * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 * @link http://status.net/ */ - class PollPlugin extends MicroAppPlugin { const VERSION = '0.1'; @@ -60,7 +59,6 @@ class PollPlugin extends MicroAppPlugin * * @return boolean hook value; true means continue processing, false means stop. */ - function onCheckSchema() { $schema = Schema::get(); @@ -76,7 +74,6 @@ class PollPlugin extends MicroAppPlugin * * @return boolean hook value */ - function onEndShowStyles($action) { $action->cssLink($this->path('poll.css')); @@ -90,7 +87,6 @@ class PollPlugin extends MicroAppPlugin * * @return boolean hook value; true means continue processing, false means stop. */ - function onAutoload($cls) { $dir = dirname(__FILE__); @@ -123,7 +119,6 @@ class PollPlugin extends MicroAppPlugin * * @return boolean hook value; true means continue processing, false means stop. */ - function onRouterInitialized($m) { $m->connect('main/poll/new', @@ -151,7 +146,6 @@ class PollPlugin extends MicroAppPlugin * * @return value */ - function onPluginVersion(&$versions) { $versions[] = array('name' => 'Poll', @@ -175,7 +169,6 @@ class PollPlugin extends MicroAppPlugin * * @return boolean hook value */ - function deleteRelated($notice) { $p = Poll::getByNotice($notice); @@ -196,7 +189,6 @@ class PollPlugin extends MicroAppPlugin * * @return Notice resulting notice */ - function saveNoticeFromActivity($activity, $profile, $options=array()) { // @fixme diff --git a/plugins/Poll/Poll_response.php b/plugins/Poll/Poll_response.php index 88e6ea890c..8543d1c245 100644 --- a/plugins/Poll/Poll_response.php +++ b/plugins/Poll/Poll_response.php @@ -42,7 +42,6 @@ if (!defined('STATUSNET')) { * * @see DB_DataObject */ - class Poll_response extends Managed_DataObject { public $__table = 'poll_response'; // table name @@ -63,7 +62,6 @@ class Poll_response extends Managed_DataObject * @return User_greeting_count object found, or null for no hits * */ - function staticGet($k, $v=null) { return Memcached_DataObject::staticGet('Poll_response', $k, $v); @@ -81,7 +79,6 @@ class Poll_response extends Managed_DataObject * @return Bookmark object found, or null for no hits * */ - function pkeyGet($kv) { return Memcached_DataObject::pkeyGet('Poll_response', $kv); @@ -120,7 +117,6 @@ class Poll_response extends Managed_DataObject * * @return Poll_response found response or null */ - function getByNotice($notice) { return self::staticGet('uri', $notice->uri); @@ -159,7 +155,6 @@ class Poll_response extends Managed_DataObject * * @return Notice saved notice */ - static function saveNew($profile, $poll, $selection, $options=null) { if (empty($options)) { diff --git a/plugins/Poll/newpoll.php b/plugins/Poll/newpoll.php index fa6eb798d7..585af1a7b5 100644 --- a/plugins/Poll/newpoll.php +++ b/plugins/Poll/newpoll.php @@ -43,7 +43,6 @@ if (!defined('STATUSNET')) { * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 * @link http://status.net/ */ - class NewPollAction extends Action { protected $user = null; @@ -58,7 +57,6 @@ class NewPollAction extends Action * * @return string Action title */ - function title() { return _('New poll'); @@ -71,7 +69,6 @@ class NewPollAction extends Action * * @return boolean true */ - function prepare($argarray) { parent::prepare($argarray); @@ -79,7 +76,7 @@ class NewPollAction extends Action $this->user = common_current_user(); if (empty($this->user)) { - throw new ClientException(_("Must be logged in to post a poll."), + throw new ClientException(_("You must be logged in to post a poll."), 403); } @@ -105,7 +102,6 @@ class NewPollAction extends Action * * @return void */ - function handle($argarray=null) { parent::handle($argarray); @@ -124,7 +120,6 @@ class NewPollAction extends Action * * @return void */ - function newPoll() { if ($this->boolean('ajax')) { @@ -143,7 +138,6 @@ class NewPollAction extends Action $saved = Poll::saveNew($this->user->getProfile(), $this->question, $this->options); - } catch (ClientException $ce) { $this->error = $ce->getMessage(); $this->showPage(); @@ -188,7 +182,6 @@ class NewPollAction extends Action * * @return void */ - function showContent() { if (!empty($this->error)) { @@ -213,7 +206,6 @@ class NewPollAction extends Action * * @return boolean is read only action? */ - function isReadOnly($args) { if ($_SERVER['REQUEST_METHOD'] == 'GET' || diff --git a/plugins/Poll/newpollform.php b/plugins/Poll/newpollform.php index 73e516c891..d751ccd458 100644 --- a/plugins/Poll/newpollform.php +++ b/plugins/Poll/newpollform.php @@ -44,10 +44,8 @@ if (!defined('STATUSNET')) { * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 * @link http://status.net/ */ - class NewpollForm extends Form { - protected $question = null; protected $options = array(); @@ -58,7 +56,6 @@ class NewpollForm extends Form * * @return void */ - function __construct($out=null, $question=null, $options=null) { parent::__construct($out); @@ -69,7 +66,6 @@ class NewpollForm extends Form * * @return int ID of the form */ - function id() { return 'newpoll-form'; @@ -80,7 +76,6 @@ class NewpollForm extends Form * * @return string class of the form */ - function formClass() { return 'form_settings ajax-notice'; @@ -91,7 +86,6 @@ class NewpollForm extends Form * * @return string URL of the action */ - function action() { return common_local_url('newpoll'); @@ -102,7 +96,6 @@ class NewpollForm extends Form * * @return void */ - function formData() { $this->out->elementStart('fieldset', array('id' => 'newpoll-data')); @@ -142,7 +135,6 @@ class NewpollForm extends Form * * @return void */ - function formActions() { $this->out->submit('submit', _m('BUTTON', 'Save')); diff --git a/plugins/Poll/pollresponseform.php b/plugins/Poll/pollresponseform.php index 015dbb1b1f..a543906afb 100644 --- a/plugins/Poll/pollresponseform.php +++ b/plugins/Poll/pollresponseform.php @@ -44,7 +44,6 @@ if (!defined('STATUSNET')) { * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 * @link http://status.net/ */ - class PollResponseForm extends Form { protected $poll; @@ -57,7 +56,6 @@ class PollResponseForm extends Form * * @return void */ - function __construct(Poll $poll, HTMLOutputter $out) { parent::__construct($out); @@ -69,7 +67,6 @@ class PollResponseForm extends Form * * @return int ID of the form */ - function id() { return 'pollresponse-form'; @@ -80,7 +77,6 @@ class PollResponseForm extends Form * * @return string class of the form */ - function formClass() { return 'form_settings ajax'; @@ -91,7 +87,6 @@ class PollResponseForm extends Form * * @return string URL of the action */ - function action() { return common_local_url('respondpoll', array('id' => $this->poll->id)); @@ -102,7 +97,6 @@ class PollResponseForm extends Form * * @return void */ - function formData() { $poll = $this->poll; @@ -127,7 +121,6 @@ class PollResponseForm extends Form * * @return void */ - function formActions() { $this->out->submit('submit', _m('BUTTON', 'Submit')); diff --git a/plugins/Poll/pollresultform.php b/plugins/Poll/pollresultform.php index f4da10cb53..0701482e68 100644 --- a/plugins/Poll/pollresultform.php +++ b/plugins/Poll/pollresultform.php @@ -44,7 +44,6 @@ if (!defined('STATUSNET')) { * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 * @link http://status.net/ */ - class PollResultForm extends Form { protected $poll; @@ -57,7 +56,6 @@ class PollResultForm extends Form * * @return void */ - function __construct(Poll $poll, HTMLOutputter $out) { parent::__construct($out); @@ -69,7 +67,6 @@ class PollResultForm extends Form * * @return int ID of the form */ - function id() { return 'pollresult-form'; @@ -80,7 +77,6 @@ class PollResultForm extends Form * * @return string class of the form */ - function formClass() { return 'form_settings ajax'; @@ -91,7 +87,6 @@ class PollResultForm extends Form * * @return string URL of the action */ - function action() { return common_local_url('respondpoll', array('id' => $this->poll->id)); @@ -102,7 +97,6 @@ class PollResultForm extends Form * * @return void */ - function formData() { $poll = $this->poll; @@ -143,7 +137,6 @@ class PollResultForm extends Form * * @return void */ - function formActions() { } diff --git a/plugins/Poll/respondpoll.php b/plugins/Poll/respondpoll.php index e521a2a68f..0a6014699c 100644 --- a/plugins/Poll/respondpoll.php +++ b/plugins/Poll/respondpoll.php @@ -43,7 +43,6 @@ if (!defined('STATUSNET')) { * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 * @link http://status.net/ */ - class RespondPollAction extends Action { protected $user = null; @@ -58,7 +57,6 @@ class RespondPollAction extends Action * * @return string Action title */ - function title() { return _m('Poll response'); @@ -71,7 +69,6 @@ class RespondPollAction extends Action * * @return boolean true */ - function prepare($argarray) { parent::prepare($argarray); @@ -82,7 +79,7 @@ class RespondPollAction extends Action $this->user = common_current_user(); if (empty($this->user)) { - throw new ClientException(_m("Must be logged in to respond to a poll."), + throw new ClientException(_m("You must be logged in to respond to a poll."), 403); } @@ -112,7 +109,6 @@ class RespondPollAction extends Action * * @return void */ - function handle($argarray=null) { parent::handle($argarray); @@ -131,7 +127,6 @@ class RespondPollAction extends Action * * @return void */ - function respondPoll() { try { @@ -167,7 +162,6 @@ class RespondPollAction extends Action * * @return void */ - function showContent() { if (!empty($this->error)) { @@ -190,7 +184,6 @@ class RespondPollAction extends Action * * @return boolean is read only action? */ - function isReadOnly($args) { if ($_SERVER['REQUEST_METHOD'] == 'GET' || diff --git a/plugins/Poll/showpoll.php b/plugins/Poll/showpoll.php index 21ac7647c0..5b22c06805 100644 --- a/plugins/Poll/showpoll.php +++ b/plugins/Poll/showpoll.php @@ -44,7 +44,6 @@ if (!defined('STATUSNET')) { * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 * @link http://status.net/ */ - class ShowPollAction extends ShownoticeAction { protected $poll = null; @@ -56,7 +55,6 @@ class ShowPollAction extends ShownoticeAction * * @return boolean true */ - function prepare($argarray) { OwnerDesignAction::prepare($argarray); @@ -100,7 +98,6 @@ class ShowPollAction extends ShownoticeAction * * @return string page tile */ - function title() { return sprintf(_('%s\'s poll: %s'), @@ -124,5 +121,4 @@ class ShowPollAction extends ShownoticeAction { return Action::etag(); } - } From a70914cd579c9f600545cd5166ffbd36619aa856 Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Fri, 11 Mar 2011 18:33:19 +0100 Subject: [PATCH 022/146] i18n fixes: plugins should use _m(), not _(). --- plugins/Poll/newpoll.php | 10 +++++----- plugins/Poll/showpoll.php | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/plugins/Poll/newpoll.php b/plugins/Poll/newpoll.php index 585af1a7b5..0386f3e3b8 100644 --- a/plugins/Poll/newpoll.php +++ b/plugins/Poll/newpoll.php @@ -59,7 +59,7 @@ class NewPollAction extends Action */ function title() { - return _('New poll'); + return _m('New poll'); } /** @@ -76,7 +76,7 @@ class NewPollAction extends Action $this->user = common_current_user(); if (empty($this->user)) { - throw new ClientException(_("You must be logged in to post a poll."), + throw new ClientException(_m('You must be logged in to post a poll.'), 403); } @@ -127,11 +127,11 @@ class NewPollAction extends Action } try { if (empty($this->question)) { - throw new ClientException(_('Poll must have a question.')); + throw new ClientException(_m('Poll must have a question.')); } if (count($this->options) < 2) { - throw new ClientException(_('Poll must have at least two options.')); + throw new ClientException(_m('Poll must have at least two options.')); } @@ -150,7 +150,7 @@ class NewPollAction extends Action $this->elementStart('html'); $this->elementStart('head'); // TRANS: Page title after sending a notice. - $this->element('title', null, _('Notice posted')); + $this->element('title', null, _m('Notice posted')); $this->elementEnd('head'); $this->elementStart('body'); $this->showNotice($saved); diff --git a/plugins/Poll/showpoll.php b/plugins/Poll/showpoll.php index 5b22c06805..60669f96ff 100644 --- a/plugins/Poll/showpoll.php +++ b/plugins/Poll/showpoll.php @@ -100,7 +100,7 @@ class ShowPollAction extends ShownoticeAction */ function title() { - return sprintf(_('%s\'s poll: %s'), + return sprintf(_m('%s\'s poll: %s'), $this->user->nickname, $this->poll->question); } From 843ace580d1ea2b05e15710c1b0714dad48dac6c Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Fri, 11 Mar 2011 19:05:28 +0100 Subject: [PATCH 023/146] i18n/L10n updates Translator documentation added --- plugins/Poll/Poll.php | 11 +++++++---- plugins/Poll/PollPlugin.php | 20 ++++++++++++++------ plugins/Poll/Poll_response.php | 10 +++++++--- plugins/Poll/newpoll.php | 4 ++++ plugins/Poll/newpollform.php | 5 +++++ plugins/Poll/pollresponseform.php | 1 + plugins/Poll/respondpoll.php | 10 +++++++--- plugins/Poll/showpoll.php | 8 +++++++- 8 files changed, 52 insertions(+), 17 deletions(-) diff --git a/plugins/Poll/Poll.php b/plugins/Poll/Poll.php index 001648fd21..f5fa9bade5 100644 --- a/plugins/Poll/Poll.php +++ b/plugins/Poll/Poll.php @@ -235,12 +235,15 @@ class Poll extends Managed_DataObject common_log(LOG_DEBUG, "Saving poll: $p->id $p->uri"); $p->insert(); - $content = sprintf(_m('Poll: %s %s'), + // TRANS: Notice content creating a poll. + // TRANS: %1$s is the poll question, %2$s is a link to the poll. + $content = sprintf(_m('Poll: %1$s %2$s'), $question, $p->uri); - $rendered = sprintf(_m('Poll: %s'), - htmlspecialchars($p->uri), - htmlspecialchars($question)); + $link = '' . htmlspecialchars($question) . ''; + // TRANS: Rendered version of the notice content creating a poll. + // TRANS: %s a link to the poll with the question as link description. + $rendered = sprintf(_m('Poll: %s'), $link); $tags = array('poll'); $replies = array(); diff --git a/plugins/Poll/PollPlugin.php b/plugins/Poll/PollPlugin.php index b3de0634a9..34c37eb526 100644 --- a/plugins/Poll/PollPlugin.php +++ b/plugins/Poll/PollPlugin.php @@ -153,6 +153,7 @@ class PollPlugin extends MicroAppPlugin 'author' => 'Brion Vibber', 'homepage' => 'http://status.net/wiki/Plugin:Poll', 'rawdescription' => + // TRANS: Plugin description. _m('Simple extension for supporting basic polls.')); return true; } @@ -229,11 +230,13 @@ class PollPlugin extends MicroAppPlugin $selection = intval($data->getAttribute('selection')); if (!$pollUri) { - throw new Exception('Invalid poll response: no poll reference.'); + // TRANS: Exception thrown trying to respond to a poll without a poll reference. + throw new Exception(_m('Invalid poll response: no poll reference.')); } $poll = Poll::staticGet('uri', $pollUri); if (!$poll) { - throw new Exception('Invalid poll response: poll is unknown.'); + // TRANS: Exception thrown trying to respond to a non-existing poll. + throw new Exception(_m('Invalid poll response: poll is unknown.')); } try { $notice = Poll_response::saveNew($profile, $poll, $selection, $options); @@ -258,7 +261,9 @@ class PollPlugin extends MicroAppPlugin case self::POLL_RESPONSE_OBJECT: return $this->activityObjectFromNoticePollResponse($notice); default: - throw new Exception('Unexpected type for poll plugin: ' . $notice->object_type); + // TRANS: Exception thrown when performing an unexpected action on a poll. + // TRANS: %s is the unpexpected object type. + throw new Exception(sprintf(_m('Unexpected type for poll plugin: %s.'), $notice->object_type)); } } @@ -361,7 +366,9 @@ class PollPlugin extends MicroAppPlugin case self::POLL_RESPONSE_OBJECT: return $this->showNoticePollResponse($notice, $out); default: - throw new Exception('Unexpected type for poll plugin: ' . $notice->object_type); + // TRANS: Exception thrown when performing an unexpected action on a poll. + // TRANS: %s is the unpexpected object type. + throw new Exception(sprintf(_m('Unexpected type for poll plugin: %s.'), $notice->object_type)); } } @@ -388,7 +395,7 @@ class PollPlugin extends MicroAppPlugin $form->show(); } } else { - $out->text('Poll data is missing'); + $out->text(_('Poll data is missing')); } $out->elementEnd('div'); @@ -421,6 +428,7 @@ class PollPlugin extends MicroAppPlugin function appTitle() { - return _m('Poll'); + // TRANS: Application title. + return _m('APPTITLE','Poll'); } } diff --git a/plugins/Poll/Poll_response.php b/plugins/Poll/Poll_response.php index 8543d1c245..a4ea999933 100644 --- a/plugins/Poll/Poll_response.php +++ b/plugins/Poll/Poll_response.php @@ -162,6 +162,7 @@ class Poll_response extends Managed_DataObject } if (!$poll->isValidSelection($selection)) { + // TRANS: Client exception thrown when responding to a poll with an invalid option. throw new ClientException(_m('Invalid poll selection.')); } $opts = $poll->getOptions(); @@ -189,11 +190,14 @@ class Poll_response extends Managed_DataObject common_log(LOG_DEBUG, "Saving poll response: $pr->id $pr->uri"); $pr->insert(); + // TRANS: Notice content voting for a poll. + // TRANS: %s is the chosen option in the poll. $content = sprintf(_m('voted for "%s"'), $answer); - $rendered = sprintf(_m('voted for “%s”'), - htmlspecialchars($poll->uri), - htmlspecialchars($answer)); + $link = '' . htmlspecialchars($answer) . ''; + // TRANS: Rendered version of the notice content voting for a poll. + // TRANS: %s a link to the poll with the chosen option as link description. + $rendered = sprintf(_m('voted for "%s"'), $link); $tags = array(); $replies = array(); diff --git a/plugins/Poll/newpoll.php b/plugins/Poll/newpoll.php index 0386f3e3b8..1048b0a1ed 100644 --- a/plugins/Poll/newpoll.php +++ b/plugins/Poll/newpoll.php @@ -59,6 +59,7 @@ class NewPollAction extends Action */ function title() { + // TRANS: Title for poll page. return _m('New poll'); } @@ -76,6 +77,7 @@ class NewPollAction extends Action $this->user = common_current_user(); if (empty($this->user)) { + // TRANS: Client exception thrown trying to create a poll while not logged in. throw new ClientException(_m('You must be logged in to post a poll.'), 403); } @@ -127,10 +129,12 @@ class NewPollAction extends Action } try { if (empty($this->question)) { + // TRANS: Client exception thrown trying to create a poll without a question. throw new ClientException(_m('Poll must have a question.')); } if (count($this->options) < 2) { + // TRANS: Client exception thrown trying to create a poll with fewer than two options. throw new ClientException(_m('Poll must have at least two options.')); } diff --git a/plugins/Poll/newpollform.php b/plugins/Poll/newpollform.php index d751ccd458..295619b1b9 100644 --- a/plugins/Poll/newpollform.php +++ b/plugins/Poll/newpollform.php @@ -103,8 +103,10 @@ class NewpollForm extends Form $this->li(); $this->out->input('question', + // TRANS: Field label on the page to create a poll. _m('Question'), $this->question, + // TRANS: Field title on the page to create a poll. _m('What question are people answering?')); $this->unli(); @@ -121,6 +123,8 @@ class NewpollForm extends Form } $this->li(); $this->out->input('option' . ($i + 1), + // TRANS: Field label for an answer option on the page to create a poll. + // TRANS: %d is the option number. sprintf(_m('Option %d'), $i + 1), $default); $this->unli(); @@ -137,6 +141,7 @@ class NewpollForm extends Form */ function formActions() { + // TRANS: Button text for saving a new poll. $this->out->submit('submit', _m('BUTTON', 'Save')); } } diff --git a/plugins/Poll/pollresponseform.php b/plugins/Poll/pollresponseform.php index a543906afb..ce1c31f6c2 100644 --- a/plugins/Poll/pollresponseform.php +++ b/plugins/Poll/pollresponseform.php @@ -123,6 +123,7 @@ class PollResponseForm extends Form */ function formActions() { + // TRANS: Button text for submitting a poll response. $this->out->submit('submit', _m('BUTTON', 'Submit')); } } diff --git a/plugins/Poll/respondpoll.php b/plugins/Poll/respondpoll.php index 0a6014699c..74629c3604 100644 --- a/plugins/Poll/respondpoll.php +++ b/plugins/Poll/respondpoll.php @@ -3,7 +3,7 @@ * StatusNet - the distributed open-source microblogging tool * Copyright (C) 2011, StatusNet, Inc. * - * Add a new Poll + * Respond to a Poll * * PHP version 5 * @@ -34,7 +34,7 @@ if (!defined('STATUSNET')) { } /** - * Add a new Poll + * Respond to a Poll * * @category Poll * @package StatusNet @@ -59,6 +59,7 @@ class RespondPollAction extends Action */ function title() { + // TRANS: Page title for poll response. return _m('Poll response'); } @@ -79,6 +80,7 @@ class RespondPollAction extends Action $this->user = common_current_user(); if (empty($this->user)) { + // TRANS: Client exception thrown trying to respond to a poll while not logged in. throw new ClientException(_m("You must be logged in to respond to a poll."), 403); } @@ -90,11 +92,13 @@ class RespondPollAction extends Action $id = $this->trimmed('id'); $this->poll = Poll::staticGet('id', $id); if (empty($this->poll)) { - throw new ClientException(_m("Invalid or missing poll."), 404); + // TRANS: Client exception thrown trying to respond to a non-existing poll. + throw new ClientException(_m('Invalid or missing poll.'), 404); } $selection = intval($this->trimmed('pollselection')); if ($selection < 1 || $selection > count($this->poll->getOptions())) { + // TRANS: Client exception thrown responding to a poll with an invalid answer. throw new ClientException(_m('Invalid poll selection.')); } $this->selection = $selection; diff --git a/plugins/Poll/showpoll.php b/plugins/Poll/showpoll.php index 60669f96ff..d95b1c512e 100644 --- a/plugins/Poll/showpoll.php +++ b/plugins/Poll/showpoll.php @@ -64,6 +64,7 @@ class ShowPollAction extends ShownoticeAction $this->poll = Poll::staticGet('id', $this->id); if (empty($this->poll)) { + // TRANS: Client exception thrown trying to view a non-existing poll. throw new ClientException(_m('No such poll.'), 404); } @@ -71,18 +72,21 @@ class ShowPollAction extends ShownoticeAction if (empty($this->notice)) { // Did we used to have it, and it got deleted? + // TRANS: Client exception thrown trying to view a non-existing poll notice. throw new ClientException(_m('No such poll notice.'), 404); } $this->user = User::staticGet('id', $this->poll->profile_id); if (empty($this->user)) { + // TRANS: Client exception thrown trying to view a poll of a non-existing user. throw new ClientException(_m('No such user.'), 404); } $this->profile = $this->user->getProfile(); if (empty($this->profile)) { + // TRANS: Server exception thrown trying to view a poll for a user for which the profile could not be loaded. throw new ServerException(_m('User without a profile.')); } @@ -100,7 +104,9 @@ class ShowPollAction extends ShownoticeAction */ function title() { - return sprintf(_m('%s\'s poll: %s'), + // TRANS: Page title for a poll. + // TRANS: %1$s is the nickname of the user that created the poll, %2$s is the poll question. + return sprintf(_m('%1$s\'s poll: %2$s'), $this->user->nickname, $this->poll->question); } From eff26421abe2cf6ca10ba32c204f8ff838f6438e Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Fri, 11 Mar 2011 19:32:35 +0100 Subject: [PATCH 024/146] Move translator documentation one line lower. Otherwise it will not be added to the POT file. --- lib/noticeform.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/noticeform.php b/lib/noticeform.php index e604ee9fc4..3909b088d0 100644 --- a/lib/noticeform.php +++ b/lib/noticeform.php @@ -186,8 +186,8 @@ class NoticeForm extends Form if (common_config('attachments', 'uploads')) { $this->out->hidden('MAX_FILE_SIZE', common_config('attachments', 'file_quota')); - // TRANS: Input label in notice form for adding an attachment. $this->out->elementStart('label', array('class' => 'notice_data-attach')); + // TRANS: Input label in notice form for adding an attachment. $this->out->text(_('Attach')); $this->out->element('input', array('class' => 'notice_data-attach', 'type' => 'file', From 69e11bb45e10d1b4f6fa58bef5522ac757fc52c0 Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Fri, 11 Mar 2011 19:33:52 +0100 Subject: [PATCH 025/146] Localisation updates from http://translatewiki.net. --- locale/ar/LC_MESSAGES/statusnet.po | 109 +++- locale/arz/LC_MESSAGES/statusnet.po | 108 +++- locale/bg/LC_MESSAGES/statusnet.po | 107 +++- locale/br/LC_MESSAGES/statusnet.po | 111 ++++- locale/ca/LC_MESSAGES/statusnet.po | 110 ++++- locale/cs/LC_MESSAGES/statusnet.po | 111 ++++- locale/de/LC_MESSAGES/statusnet.po | 264 ++++++---- locale/en_GB/LC_MESSAGES/statusnet.po | 108 +++- locale/eo/LC_MESSAGES/statusnet.po | 265 ++++++---- locale/es/LC_MESSAGES/statusnet.po | 112 ++++- locale/fa/LC_MESSAGES/statusnet.po | 111 ++++- locale/fi/LC_MESSAGES/statusnet.po | 106 +++- locale/fr/LC_MESSAGES/statusnet.po | 111 ++++- locale/fur/LC_MESSAGES/statusnet.po | 112 ++++- locale/gl/LC_MESSAGES/statusnet.po | 113 ++++- locale/hsb/LC_MESSAGES/statusnet.po | 107 +++- locale/hu/LC_MESSAGES/statusnet.po | 109 +++- locale/ia/LC_MESSAGES/statusnet.po | 123 +++-- locale/it/LC_MESSAGES/statusnet.po | 111 ++++- locale/ja/LC_MESSAGES/statusnet.po | 111 ++++- locale/ka/LC_MESSAGES/statusnet.po | 113 ++++- locale/ko/LC_MESSAGES/statusnet.po | 108 +++- locale/mk/LC_MESSAGES/statusnet.po | 123 +++-- locale/ml/LC_MESSAGES/statusnet.po | 114 ++++- locale/nb/LC_MESSAGES/statusnet.po | 112 ++++- locale/nl/LC_MESSAGES/statusnet.po | 123 +++-- locale/pl/LC_MESSAGES/statusnet.po | 112 ++++- locale/pt/LC_MESSAGES/statusnet.po | 111 ++++- locale/pt_BR/LC_MESSAGES/statusnet.po | 112 ++++- locale/ru/LC_MESSAGES/statusnet.po | 112 ++++- locale/statusnet.pot | 464 ++++++++++-------- locale/sv/LC_MESSAGES/statusnet.po | 157 ++++-- locale/te/LC_MESSAGES/statusnet.po | 275 ++++++----- locale/tr/LC_MESSAGES/statusnet.po | 106 +++- locale/uk/LC_MESSAGES/statusnet.po | 123 +++-- locale/zh_CN/LC_MESSAGES/statusnet.po | 112 ++++- .../locale/de/LC_MESSAGES/AccountManager.po | 27 + plugins/Aim/locale/sv/LC_MESSAGES/Aim.po | 34 ++ plugins/Autocomplete/locale/Autocomplete.pot | 4 +- plugins/Bookmark/locale/Bookmark.pot | 4 +- .../locale/ia/LC_MESSAGES/Bookmark.po | 10 +- .../locale/mk/LC_MESSAGES/Bookmark.po | 10 +- .../locale/nl/LC_MESSAGES/Bookmark.po | 10 +- .../locale/uk/LC_MESSAGES/Bookmark.po | 10 +- plugins/Directory/locale/Directory.pot | 58 +++ plugins/Event/locale/Event.pot | 50 ++ .../locale/sv/LC_MESSAGES/ExtendedProfile.po | 97 ++++ .../locale/te/LC_MESSAGES/ExtendedProfile.po | 97 ++++ plugins/Irc/locale/sv/LC_MESSAGES/Irc.po | 39 ++ .../locale/te/LC_MESSAGES/MobileProfile.po | 12 +- plugins/Msn/locale/sv/LC_MESSAGES/Msn.po | 31 ++ plugins/OpenX/locale/de/LC_MESSAGES/OpenX.po | 11 +- plugins/Poll/locale/Poll.pot | 175 +++++++ .../locale/te/LC_MESSAGES/ShareNotice.po | 19 +- plugins/SphinxSearch/locale/SphinxSearch.pot | 4 +- plugins/UserFlag/locale/UserFlag.pot | 4 +- .../locale/de/LC_MESSAGES/UserFlag.po | 95 ++++ plugins/Xmpp/locale/sv/LC_MESSAGES/Xmpp.po | 35 ++ 58 files changed, 4411 insertions(+), 1321 deletions(-) create mode 100644 plugins/AccountManager/locale/de/LC_MESSAGES/AccountManager.po create mode 100644 plugins/Aim/locale/sv/LC_MESSAGES/Aim.po create mode 100644 plugins/Directory/locale/Directory.pot create mode 100644 plugins/Event/locale/Event.pot create mode 100644 plugins/ExtendedProfile/locale/sv/LC_MESSAGES/ExtendedProfile.po create mode 100644 plugins/ExtendedProfile/locale/te/LC_MESSAGES/ExtendedProfile.po create mode 100644 plugins/Irc/locale/sv/LC_MESSAGES/Irc.po create mode 100644 plugins/Msn/locale/sv/LC_MESSAGES/Msn.po create mode 100644 plugins/Poll/locale/Poll.pot create mode 100644 plugins/UserFlag/locale/de/LC_MESSAGES/UserFlag.po create mode 100644 plugins/Xmpp/locale/sv/LC_MESSAGES/Xmpp.po diff --git a/locale/ar/LC_MESSAGES/statusnet.po b/locale/ar/LC_MESSAGES/statusnet.po index 655d9cc767..17a4cb5b14 100644 --- a/locale/ar/LC_MESSAGES/statusnet.po +++ b/locale/ar/LC_MESSAGES/statusnet.po @@ -12,19 +12,19 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-08 01:03+0000\n" -"PO-Revision-Date: 2011-03-08 01:04:58+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:16:53+0000\n" "Language-Team: Arabic \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83429); Translate extension (2011-03-07)\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ar\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=6; plural=(n == 0) ? 0 : ( (n == 1) ? 1 : ( (n == " "2) ? 2 : ( (n%100 >= 3 && n%100 <= 10) ? 3 : ( (n%100 >= 11 && n%100 <= " "99) ? 4 : 5 ) ) ) );\n" -"X-POT-Import-Date: 2011-03-06 02:16:47+0000\n" +"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -1056,7 +1056,7 @@ msgstr "ابحث عن محتويات في الإشعارات" #. TRANS: Client exception thrown when trying favorite a notice without content. #, fuzzy -msgid "Unknown note." +msgid "Unknown notice." msgstr "غير معروفة" #. TRANS: Client exception thrown when trying favorite an already favorited notice. @@ -1635,6 +1635,7 @@ msgstr "احذف هذا المستخدم" #. TRANS: Client error displayed trying to create a new direct message while not logged in. #. TRANS: Client error displayed trying to send a notice while not logged in. #. TRANS: Client error displayed trying to nudge a user without being logged in. +#. TRANS: Client error displayed when trying to enable or disable a plugin while not logged in. #. TRANS: Client error displayed trying a change a subscription while not logged in. #. TRANS: Client error displayed trying to subscribe when not logged in. #. TRANS: Client error message thrown when trying to access the admin panel while not logged in. @@ -3091,6 +3092,10 @@ msgstr "مسار المصدر ليس صحيحا." msgid "Could not create application." msgstr "لم يمكن إنشاء التطبيق." +#, fuzzy +msgid "Invalid image." +msgstr "حجم غير صالح." + #. TRANS: Title for form to create a group. msgid "New group" msgstr "مجموعة جديدة" @@ -3366,52 +3371,77 @@ msgstr "صندوق %s الصادر" msgid "This is your outbox, which lists private messages you have sent." msgstr "هذا صندوق بريدك الصادر، والذي يسرد الرسائل الخاصة التي أرسلتها." +#. TRANS: Title for page where to change password. +#, fuzzy +msgctxt "TITLE" msgid "Change password" msgstr "تغيير كلمة السر" +#. TRANS: Instructions for page where to change password. msgid "Change your password." msgstr "غيّر كلمة سرك." +#. TRANS: Fieldset legend on page where to change password. #. TRANS: Fieldset legend for password reset form. msgid "Password change" msgstr "تغيير كلمة السر" +#. TRANS: Field label on page where to change password. msgid "Old password" msgstr "كلمة السر القديمة" +#. TRANS: Field label on page where to change password. #. TRANS: Field label for password reset form. msgid "New password" msgstr "كلمة السر الجديدة" +#. TRANS: Field title on page where to change password. #, fuzzy msgid "6 or more characters." msgstr "6 أحرف أو أكثر" +#. TRANS: Field label on page where to change password. In this field the new password should be typed a second time. +#, fuzzy +msgctxt "LABEL" +msgid "Confirm" +msgstr "أكّد" + +#. TRANS: Field title on page where to change password. #. TRANS: Ttile for field label for password reset form where the password has to be typed again. #, fuzzy msgid "Same as password above." msgstr "نفس كلمة السر أعلاه" +#. TRANS: Button text on page where to change password. +#, fuzzy +msgctxt "BUTTON" msgid "Change" msgstr "غيّر" +#. TRANS: Form validation error on page where to change password. msgid "Password must be 6 or more characters." msgstr "يجب أن تكون كلمة السر 6 حروف أو أكثر." msgid "Passwords don't match." msgstr "كلمتا السر غير متطابقتين." -msgid "Incorrect old password" +#. TRANS: Form validation error on page where to change password. +#, fuzzy +msgid "Incorrect old password." msgstr "كلمة السر القديمة غير صحيحة" +#. TRANS: Form validation error on page where to change password. msgid "Error saving user; invalid." msgstr "خطأ أثناء حفظ المستخدم؛ غير صالح." +#. TRANS: Server error displayed on page where to change password when password change +#. TRANS: could not be made because of a server error. #. TRANS: Reset password form validation error message. #, fuzzy msgid "Cannot save new password." msgstr "تعذّر حفظ كلمة السر الجديدة." +#. TRANS: Form validation notice on page where to change password. msgid "Password saved." msgstr "حُفظت كلمة السر." @@ -3462,6 +3492,7 @@ msgstr "الموقع" msgid "Server" msgstr "خادوم" +#. TRANS: Field title in Paths admin panel. msgid "Site's server hostname." msgstr "اسم مضيف خادوم الموقع." @@ -3469,6 +3500,7 @@ msgstr "اسم مضيف خادوم الموقع." msgid "Path" msgstr "المسار" +#. TRANS: Field title in Paths admin panel. #, fuzzy msgid "Site path." msgstr "مسار الموقع" @@ -3478,6 +3510,7 @@ msgstr "مسار الموقع" msgid "Locale directory" msgstr "دليل السمات" +#. TRANS: Field title in Paths admin panel. #, fuzzy msgid "Directory path to locales." msgstr "مسار دليل المحليات" @@ -3486,9 +3519,14 @@ msgstr "مسار دليل المحليات" msgid "Fancy URLs" msgstr "مسارات فاخرة" -msgid "Use fancy (more readable and memorable) URLs?" +#. TRANS: Field title in Paths admin panel. +#, fuzzy +msgid "Use fancy URLs (more readable and memorable)?" msgstr "أأستخدم مسارات فاخرة (يمكن قراءتها وتذكرها بسهولة أكبر)؟" +#. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "Theme" msgstr "السمة" @@ -3614,6 +3652,8 @@ msgid "Directory where attachments are located." msgstr "مسار دليل المحليات" #. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "SSL" msgstr "SSL" @@ -3658,10 +3698,14 @@ msgstr "" msgid "People search" msgstr "بحث في الأشخاص" +#. TRANS: Client error displayed when trying to tag a profile with an invalid tag. +#. TRANS: %s is the invalid tag. #, php-format msgid "Not a valid people tag: %s." msgstr "ليس وسم أشخاص صالح: %s." +#. TRANS: Page title for users with a certain self-tag. +#. TRANS: %1$s is the tag, %2$s is the page number. #, php-format msgid "Users self-tagged with %1$s - page %2$d" msgstr "المستخدمون الذين وسموا أنفسهم ب%1$s - الصفحة %2$d" @@ -3671,15 +3715,19 @@ msgctxt "plugin" msgid "Disabled" msgstr "" +#. TRANS: Client error displayed when trying to use another method than POST. +#. TRANS: Do not translate POST. #. TRANS: Client error displayed trying to perform any request method other than POST. #. TRANS: Do not translate POST. msgid "This action only accepts POST requests." msgstr "هذا الإجراء يقبل طلبات POST فقط." +#. TRANS: Client error displayed when trying to enable or disable a plugin without access rights. #, fuzzy msgid "You cannot administer plugins." msgstr "لا يمكنك حذف المستخدمين." +#. TRANS: Client error displayed when trying to enable or disable a non-existing plugin. #, fuzzy msgid "No such plugin." msgstr "لا صفحة كهذه." @@ -3690,7 +3738,8 @@ msgid "Enabled" msgstr "" #. TRANS: Tab and title for plugins admin panel. -#. TRANS: Menu item for site administration +#, fuzzy +msgctxt "TITLE" msgid "Plugins" msgstr "الملحقات" @@ -3706,15 +3755,19 @@ msgstr "" msgid "Default plugins" msgstr "اللغة المبدئية" +#. TRANS: Text displayed on plugin admin page when no plugin are enabled. msgid "" "All default plugins have been disabled from the site's configuration file." msgstr "" +#. TRANS: Client error displayed if the notice posted has too many characters. msgid "Invalid notice content." msgstr "محتوى إشعار غير صالح." +#. TRANS: Exception thrown if a notice's license is not compatible with the StatusNet site license. +#. TRANS: %1$s is the notice license, %2$s is the StatusNet site's license. #, php-format -msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’." +msgid "Notice license \"%1$s\" is not compatible with site license \"%2$s\"." msgstr "" #. TRANS: Page title for profile settings. @@ -3872,44 +3925,58 @@ msgstr "حُفظت الإعدادات." msgid "Restore account" msgstr "أنشئ حسابًا" +#. TRANS: Client error displayed when requesting a public timeline page beyond the page limit. +#. TRANS: %s is the page limit. #, php-format msgid "Beyond the page limit (%s)." msgstr "بعد حد الصفحة (%s)." +#. TRANS: Server error displayed when a public timeline cannot be retrieved. #, fuzzy msgid "Could not retrieve public stream." msgstr "تعذّر إنشاء الكنى." +#. TRANS: Title for all public timeline pages but the first. +#. TRANS: %d is the page number. #, php-format msgid "Public timeline, page %d" msgstr "المسار الزمني العام، صفحة %d" +#. TRANS: Title for the first public timeline page. msgid "Public timeline" msgstr "المسار الزمني العام" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 1.0)" msgstr "" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 2.0)" msgstr "" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (Atom)" msgstr "" +#. TRANS: Text displayed for public feed when there are no public notices. #, php-format msgid "" "This is the public timeline for %%site.name%% but no one has posted anything " "yet." msgstr "" +#. TRANS: Additional text displayed for public feed when there are no public notices for a logged in user. msgid "Be the first to post!" msgstr "كن أول من يُرسل!" +#. TRANS: Additional text displayed for public feed when there are no public notices for a not logged in user. #, php-format msgid "" "Why not [register an account](%%action.register%%) and be the first to post!" msgstr "" +#. TRANS: Message for not logged in users at an invite-only site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -3922,6 +3989,8 @@ msgstr "" "الآن](%%action.register%%) لتشارك اشعاراتك مع أصدقائك وعائلتك وزملائك! " "([اقرأ المزيد](%%doc.help%%))" +#. TRANS: Message for not logged in users at a closed site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -5571,6 +5640,10 @@ msgid "" "along with this program. If not, see %s." msgstr "" +#. TRANS: Menu item for site administration +msgid "Plugins" +msgstr "الملحقات" + #. TRANS: Form input field label for application name. msgid "Name" msgstr "الاسم" @@ -6080,6 +6153,9 @@ msgstr "الأمر لم يُجهزّ بعد." msgid "Unable to delete design setting." msgstr "تعذّر حذف إعدادات التصميم." +msgid "Home" +msgstr "الرئيسية" + #. TRANS: Menu item title/tooltip msgid "Basic site configuration" msgstr "ضبط الموقع الأساسي" @@ -6737,9 +6813,6 @@ msgstr "اذهب إلى المُثبّت." msgid "Database error" msgstr "خطأ قاعدة بيانات" -msgid "Home" -msgstr "الرئيسية" - msgid "Public" msgstr "عام" @@ -7487,7 +7560,6 @@ msgstr "أرسل إشعارًا" msgid "What's up, %s?" msgstr "ما الأخبار يا %s؟" -#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "أرفق" @@ -7554,6 +7626,9 @@ msgstr "احذف هذا الإشعار" msgid "Notice repeated" msgstr "الإشعار مكرر" +msgid "Update your status..." +msgstr "" + msgid "Nudge this user" msgstr "نبّه هذا المستخدم" @@ -8086,11 +8161,3 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" - -#, fuzzy -#~ msgid "Friends timeline" -#~ msgstr "مسار %s الزمني" - -#, fuzzy -#~ msgid "Everyone on this site" -#~ msgstr "ابحث عن أشخاص على هذا الموقع" diff --git a/locale/arz/LC_MESSAGES/statusnet.po b/locale/arz/LC_MESSAGES/statusnet.po index f0c94461f9..96a8a02c59 100644 --- a/locale/arz/LC_MESSAGES/statusnet.po +++ b/locale/arz/LC_MESSAGES/statusnet.po @@ -11,19 +11,19 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-08 01:03+0000\n" -"PO-Revision-Date: 2011-03-08 01:04:59+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:16:54+0000\n" "Language-Team: Egyptian Spoken Arabic \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83429); Translate extension (2011-03-07)\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: arz\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=6; plural= n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" -"X-POT-Import-Date: 2011-03-06 02:16:47+0000\n" +"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -1076,7 +1076,7 @@ msgstr "ابحث عن محتويات فى الإشعارات" #. TRANS: Client exception thrown when trying favorite a notice without content. #, fuzzy -msgid "Unknown note." +msgid "Unknown notice." msgstr "مش معروف" #. TRANS: Client exception thrown when trying favorite an already favorited notice. @@ -1664,6 +1664,7 @@ msgstr "احذف هذا المستخدم" #. TRANS: Client error displayed trying to create a new direct message while not logged in. #. TRANS: Client error displayed trying to send a notice while not logged in. #. TRANS: Client error displayed trying to nudge a user without being logged in. +#. TRANS: Client error displayed when trying to enable or disable a plugin while not logged in. #. TRANS: Client error displayed trying a change a subscription while not logged in. #. TRANS: Client error displayed trying to subscribe when not logged in. #. TRANS: Client error message thrown when trying to access the admin panel while not logged in. @@ -3139,6 +3140,10 @@ msgstr "الSource URL مش مظبوط." msgid "Could not create application." msgstr "مش ممكن إنشاء الapplication." +#, fuzzy +msgid "Invalid image." +msgstr "حجم غير صالح." + #. TRANS: Title for form to create a group. msgid "New group" msgstr "مجموعه جديدة" @@ -3413,52 +3418,77 @@ msgstr "صندوق الصادر" msgid "This is your outbox, which lists private messages you have sent." msgstr "" +#. TRANS: Title for page where to change password. +#, fuzzy +msgctxt "TITLE" msgid "Change password" msgstr "غيّر كلمه السر" +#. TRANS: Instructions for page where to change password. msgid "Change your password." msgstr "غيّر كلمه سرك." +#. TRANS: Fieldset legend on page where to change password. #. TRANS: Fieldset legend for password reset form. msgid "Password change" msgstr "تغيير كلمه السر" +#. TRANS: Field label on page where to change password. msgid "Old password" msgstr "كلمه السر القديمة" +#. TRANS: Field label on page where to change password. #. TRANS: Field label for password reset form. msgid "New password" msgstr "كلمه سر جديدة" +#. TRANS: Field title on page where to change password. #, fuzzy msgid "6 or more characters." msgstr "6 حروف أو أكثر. مطلوب." +#. TRANS: Field label on page where to change password. In this field the new password should be typed a second time. +#, fuzzy +msgctxt "LABEL" +msgid "Confirm" +msgstr "أكّد" + +#. TRANS: Field title on page where to change password. #. TRANS: Ttile for field label for password reset form where the password has to be typed again. #, fuzzy msgid "Same as password above." msgstr "نفس كلمه السر أعلاه" +#. TRANS: Button text on page where to change password. +#, fuzzy +msgctxt "BUTTON" msgid "Change" msgstr "غيّر" +#. TRANS: Form validation error on page where to change password. msgid "Password must be 6 or more characters." msgstr "يجب أن تكون كلمه السر 6 حروف أو أكثر." msgid "Passwords don't match." msgstr "كلمتا السر غير متطابقتين." -msgid "Incorrect old password" +#. TRANS: Form validation error on page where to change password. +#, fuzzy +msgid "Incorrect old password." msgstr "كلمه السر القديمه غير صحيحة" +#. TRANS: Form validation error on page where to change password. msgid "Error saving user; invalid." msgstr "خطأ أثناء حفظ المستخدم؛ غير صالح." +#. TRANS: Server error displayed on page where to change password when password change +#. TRANS: could not be made because of a server error. #. TRANS: Reset password form validation error message. #, fuzzy msgid "Cannot save new password." msgstr "تعذّر حفظ كلمه السر الجديده." +#. TRANS: Form validation notice on page where to change password. msgid "Password saved." msgstr "حُفظت كلمه السر." @@ -3509,6 +3539,7 @@ msgstr "الموقع" msgid "Server" msgstr "خادوم" +#. TRANS: Field title in Paths admin panel. msgid "Site's server hostname." msgstr "اسم مضيف خادوم الموقع." @@ -3516,6 +3547,7 @@ msgstr "اسم مضيف خادوم الموقع." msgid "Path" msgstr "المسار" +#. TRANS: Field title in Paths admin panel. #, fuzzy msgid "Site path." msgstr "مسار الموقع" @@ -3525,6 +3557,7 @@ msgstr "مسار الموقع" msgid "Locale directory" msgstr "دليل السمات" +#. TRANS: Field title in Paths admin panel. #, fuzzy msgid "Directory path to locales." msgstr "مسار دليل المحليات" @@ -3533,9 +3566,14 @@ msgstr "مسار دليل المحليات" msgid "Fancy URLs" msgstr "مسارات فاخرة" -msgid "Use fancy (more readable and memorable) URLs?" +#. TRANS: Field title in Paths admin panel. +#, fuzzy +msgid "Use fancy URLs (more readable and memorable)?" msgstr "أأستخدم مسارات فاخره (يمكن قراءتها وتذكرها بسهوله أكبر)؟" +#. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "Theme" msgstr "السمة" @@ -3661,6 +3699,8 @@ msgid "Directory where attachments are located." msgstr "مسار دليل المحليات" #. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "SSL" msgstr "SSL" @@ -3703,10 +3743,14 @@ msgstr "" msgid "People search" msgstr "بحث فى الأشخاص" +#. TRANS: Client error displayed when trying to tag a profile with an invalid tag. +#. TRANS: %s is the invalid tag. #, php-format msgid "Not a valid people tag: %s." msgstr "ليس عنوان بريد صالح." +#. TRANS: Page title for users with a certain self-tag. +#. TRANS: %1$s is the tag, %2$s is the page number. #, php-format msgid "Users self-tagged with %1$s - page %2$d" msgstr "" @@ -3716,15 +3760,19 @@ msgctxt "plugin" msgid "Disabled" msgstr "" +#. TRANS: Client error displayed when trying to use another method than POST. +#. TRANS: Do not translate POST. #. TRANS: Client error displayed trying to perform any request method other than POST. #. TRANS: Do not translate POST. msgid "This action only accepts POST requests." msgstr "" +#. TRANS: Client error displayed when trying to enable or disable a plugin without access rights. #, fuzzy msgid "You cannot administer plugins." msgstr "لا يمكنك حذف المستخدمين." +#. TRANS: Client error displayed when trying to enable or disable a non-existing plugin. #, fuzzy msgid "No such plugin." msgstr "لا وسم كهذا." @@ -3735,7 +3783,7 @@ msgid "Enabled" msgstr "" #. TRANS: Tab and title for plugins admin panel. -#. TRANS: Menu item for site administration +msgctxt "TITLE" msgid "Plugins" msgstr "" @@ -3751,15 +3799,19 @@ msgstr "" msgid "Default plugins" msgstr "اللغه المفضلة" +#. TRANS: Text displayed on plugin admin page when no plugin are enabled. msgid "" "All default plugins have been disabled from the site's configuration file." msgstr "" +#. TRANS: Client error displayed if the notice posted has too many characters. msgid "Invalid notice content." msgstr "حجم غير صالح." +#. TRANS: Exception thrown if a notice's license is not compatible with the StatusNet site license. +#. TRANS: %1$s is the notice license, %2$s is the StatusNet site's license. #, php-format -msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’." +msgid "Notice license \"%1$s\" is not compatible with site license \"%2$s\"." msgstr "" #. TRANS: Page title for profile settings. @@ -3913,44 +3965,58 @@ msgstr "حُفظت الإعدادات." msgid "Restore account" msgstr "أنشئ مجموعه جديدة" +#. TRANS: Client error displayed when requesting a public timeline page beyond the page limit. +#. TRANS: %s is the page limit. #, fuzzy, php-format msgid "Beyond the page limit (%s)." msgstr "وراء حد الصفحه (%s)" +#. TRANS: Server error displayed when a public timeline cannot be retrieved. #, fuzzy msgid "Could not retrieve public stream." msgstr "تعذّر إنشاء الكنى." +#. TRANS: Title for all public timeline pages but the first. +#. TRANS: %d is the page number. #, php-format msgid "Public timeline, page %d" msgstr "المسار الزمنى العام، صفحه %d" +#. TRANS: Title for the first public timeline page. msgid "Public timeline" msgstr "المسار الزمنى العام" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 1.0)" msgstr "" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 2.0)" msgstr "" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (Atom)" msgstr "" +#. TRANS: Text displayed for public feed when there are no public notices. #, php-format msgid "" "This is the public timeline for %%site.name%% but no one has posted anything " "yet." msgstr "" +#. TRANS: Additional text displayed for public feed when there are no public notices for a logged in user. msgid "Be the first to post!" msgstr "كن أول من يُرسل!" +#. TRANS: Additional text displayed for public feed when there are no public notices for a not logged in user. #, php-format msgid "" "Why not [register an account](%%action.register%%) and be the first to post!" msgstr "" +#. TRANS: Message for not logged in users at an invite-only site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -3963,6 +4029,8 @@ msgstr "" "الآن](%%action.register%%) لتشارك اشعاراتك مع أصدقائك وعائلتك وزملائك! " "([اقرأ المزيد](%%doc.help%%))" +#. TRANS: Message for not logged in users at a closed site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -5606,6 +5674,10 @@ msgid "" "along with this program. If not, see %s." msgstr "" +#. TRANS: Menu item for site administration +msgid "Plugins" +msgstr "" + #. TRANS: Form input field label for application name. msgid "Name" msgstr "الاسم" @@ -6116,6 +6188,9 @@ msgstr "المستخدم ليس مُسكتًا." msgid "Unable to delete design setting." msgstr "تعذّر حذف إعدادات التصميم." +msgid "Home" +msgstr "الرئيسية" + #. TRANS: Menu item title/tooltip msgid "Basic site configuration" msgstr "ضبط الموقع الأساسي" @@ -6747,9 +6822,6 @@ msgstr "اذهب إلى المُثبّت." msgid "Database error" msgstr "خطأ قاعده بيانات" -msgid "Home" -msgstr "الرئيسية" - msgid "Public" msgstr "عام" @@ -7480,7 +7552,6 @@ msgstr "أرسل إشعارًا" msgid "What's up, %s?" msgstr "ما الأخبار يا %s؟" -#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "أرفق" @@ -7547,6 +7618,9 @@ msgstr "احذف هذا الإشعار" msgid "Notice repeated" msgstr "الإشعار مكرر" +msgid "Update your status..." +msgstr "" + msgid "Nudge this user" msgstr "نبّه هذا المستخدم" @@ -8085,11 +8159,3 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" - -#, fuzzy -#~ msgid "Friends timeline" -#~ msgstr "مسار %s الزمني" - -#, fuzzy -#~ msgid "Everyone on this site" -#~ msgstr "ابحث عن أشخاص على هذا الموقع" diff --git a/locale/bg/LC_MESSAGES/statusnet.po b/locale/bg/LC_MESSAGES/statusnet.po index e9a3b189d3..eaabeec93f 100644 --- a/locale/bg/LC_MESSAGES/statusnet.po +++ b/locale/bg/LC_MESSAGES/statusnet.po @@ -11,17 +11,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-08 01:03+0000\n" -"PO-Revision-Date: 2011-03-08 01:05:00+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:16:55+0000\n" "Language-Team: Bulgarian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83429); Translate extension (2011-03-07)\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: bg\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-06 02:16:47+0000\n" +"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -1041,7 +1041,7 @@ msgstr "Търсене в съдържанието на бележките" #. TRANS: Client exception thrown when trying favorite a notice without content. #, fuzzy -msgid "Unknown note." +msgid "Unknown notice." msgstr "Непознато" #. TRANS: Client exception thrown when trying favorite an already favorited notice. @@ -1621,6 +1621,7 @@ msgstr "Изтриване на този потребител" #. TRANS: Client error displayed trying to create a new direct message while not logged in. #. TRANS: Client error displayed trying to send a notice while not logged in. #. TRANS: Client error displayed trying to nudge a user without being logged in. +#. TRANS: Client error displayed when trying to enable or disable a plugin while not logged in. #. TRANS: Client error displayed trying a change a subscription while not logged in. #. TRANS: Client error displayed trying to subscribe when not logged in. #. TRANS: Client error message thrown when trying to access the admin panel while not logged in. @@ -3140,6 +3141,10 @@ msgstr "Името е задължително." msgid "Could not create application." msgstr "Грешка при отбелязване като любима." +#, fuzzy +msgid "Invalid image." +msgstr "Неправилен размер." + #. TRANS: Title for form to create a group. msgid "New group" msgstr "Нова група" @@ -3419,53 +3424,78 @@ msgstr "Изходяща кутия за %s" msgid "This is your outbox, which lists private messages you have sent." msgstr "Това е изходящата ви кутия с лични съобщения до други потребители." +#. TRANS: Title for page where to change password. +#, fuzzy +msgctxt "TITLE" msgid "Change password" msgstr "Смяна на паролата" +#. TRANS: Instructions for page where to change password. msgid "Change your password." msgstr "Смяна на паролата." +#. TRANS: Fieldset legend on page where to change password. #. TRANS: Fieldset legend for password reset form. #, fuzzy msgid "Password change" msgstr "Паролата е записана." +#. TRANS: Field label on page where to change password. msgid "Old password" msgstr "Стара парола" +#. TRANS: Field label on page where to change password. #. TRANS: Field label for password reset form. msgid "New password" msgstr "Нова парола" +#. TRANS: Field title on page where to change password. #, fuzzy msgid "6 or more characters." msgstr "6 или повече знака" +#. TRANS: Field label on page where to change password. In this field the new password should be typed a second time. +#, fuzzy +msgctxt "LABEL" +msgid "Confirm" +msgstr "Потвърждаване" + +#. TRANS: Field title on page where to change password. #. TRANS: Ttile for field label for password reset form where the password has to be typed again. #, fuzzy msgid "Same as password above." msgstr "Също като паролата по-горе" +#. TRANS: Button text on page where to change password. +#, fuzzy +msgctxt "BUTTON" msgid "Change" msgstr "Промяна" +#. TRANS: Form validation error on page where to change password. msgid "Password must be 6 or more characters." msgstr "Паролата трябва да е 6 или повече знака." msgid "Passwords don't match." msgstr "Паролите не съвпадат." -msgid "Incorrect old password" +#. TRANS: Form validation error on page where to change password. +#, fuzzy +msgid "Incorrect old password." msgstr "Грешна стара парола" +#. TRANS: Form validation error on page where to change password. msgid "Error saving user; invalid." msgstr "Грешка при запазване на потребител — невалидност." +#. TRANS: Server error displayed on page where to change password when password change +#. TRANS: could not be made because of a server error. #. TRANS: Reset password form validation error message. #, fuzzy msgid "Cannot save new password." msgstr "Грешка при запазване на новата парола." +#. TRANS: Form validation notice on page where to change password. msgid "Password saved." msgstr "Паролата е записана." @@ -3515,6 +3545,7 @@ msgstr "Сайт" msgid "Server" msgstr "Сървър" +#. TRANS: Field title in Paths admin panel. msgid "Site's server hostname." msgstr "" @@ -3522,6 +3553,7 @@ msgstr "" msgid "Path" msgstr "Път" +#. TRANS: Field title in Paths admin panel. #, fuzzy msgid "Site path." msgstr "Път до сайта" @@ -3531,6 +3563,7 @@ msgstr "Път до сайта" msgid "Locale directory" msgstr "Директория на аватара" +#. TRANS: Field title in Paths admin panel. msgid "Directory path to locales." msgstr "" @@ -3538,9 +3571,12 @@ msgstr "" msgid "Fancy URLs" msgstr "Кратки URL-адреси" -msgid "Use fancy (more readable and memorable) URLs?" +#. TRANS: Field title in Paths admin panel. +msgid "Use fancy URLs (more readable and memorable)?" msgstr "" +#. TRANS: Fieldset legend in Paths admin panel. +msgctxt "LEGEND" msgid "Theme" msgstr "" @@ -3663,6 +3699,8 @@ msgid "Directory where attachments are located." msgstr "" #. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "SSL" msgstr "SSL" @@ -3708,10 +3746,14 @@ msgstr "" msgid "People search" msgstr "Търсене на хора" +#. TRANS: Client error displayed when trying to tag a profile with an invalid tag. +#. TRANS: %s is the invalid tag. #, php-format msgid "Not a valid people tag: %s." msgstr "Неправилен адрес на е-поща." +#. TRANS: Page title for users with a certain self-tag. +#. TRANS: %1$s is the tag, %2$s is the page number. #, fuzzy, php-format msgid "Users self-tagged with %1$s - page %2$d" msgstr "Бележки с етикет %s, страница %d" @@ -3721,15 +3763,19 @@ msgctxt "plugin" msgid "Disabled" msgstr "" +#. TRANS: Client error displayed when trying to use another method than POST. +#. TRANS: Do not translate POST. #. TRANS: Client error displayed trying to perform any request method other than POST. #. TRANS: Do not translate POST. msgid "This action only accepts POST requests." msgstr "" +#. TRANS: Client error displayed when trying to enable or disable a plugin without access rights. #, fuzzy msgid "You cannot administer plugins." msgstr "Не можете да изтривате потребители." +#. TRANS: Client error displayed when trying to enable or disable a non-existing plugin. #, fuzzy msgid "No such plugin." msgstr "Няма такака страница." @@ -3740,7 +3786,8 @@ msgid "Enabled" msgstr "" #. TRANS: Tab and title for plugins admin panel. -#. TRANS: Menu item for site administration +#, fuzzy +msgctxt "TITLE" msgid "Plugins" msgstr "Приставки" @@ -3756,15 +3803,19 @@ msgstr "" msgid "Default plugins" msgstr "Език по подразбиране" +#. TRANS: Text displayed on plugin admin page when no plugin are enabled. msgid "" "All default plugins have been disabled from the site's configuration file." msgstr "" +#. TRANS: Client error displayed if the notice posted has too many characters. msgid "Invalid notice content." msgstr "Неправилен размер." +#. TRANS: Exception thrown if a notice's license is not compatible with the StatusNet site license. +#. TRANS: %1$s is the notice license, %2$s is the StatusNet site's license. #, php-format -msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’." +msgid "Notice license \"%1$s\" is not compatible with site license \"%2$s\"." msgstr "" #. TRANS: Page title for profile settings. @@ -3914,43 +3965,57 @@ msgstr "Настройките са запазени." msgid "Restore account" msgstr "Създаване на нова сметка" +#. TRANS: Client error displayed when requesting a public timeline page beyond the page limit. +#. TRANS: %s is the page limit. #, php-format msgid "Beyond the page limit (%s)." msgstr "" +#. TRANS: Server error displayed when a public timeline cannot be retrieved. msgid "Could not retrieve public stream." msgstr "Грешка при изтегляне на общия поток" +#. TRANS: Title for all public timeline pages but the first. +#. TRANS: %d is the page number. #, php-format msgid "Public timeline, page %d" msgstr "Общ поток, страница %d" +#. TRANS: Title for the first public timeline page. msgid "Public timeline" msgstr "Общ поток" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 1.0)" msgstr "Емисия на общия поток (RSS 1.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 2.0)" msgstr "Емисия на общия поток (RSS 2.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (Atom)" msgstr "Емисия на общия поток (Atom)" +#. TRANS: Text displayed for public feed when there are no public notices. #, php-format msgid "" "This is the public timeline for %%site.name%% but no one has posted anything " "yet." msgstr "" +#. TRANS: Additional text displayed for public feed when there are no public notices for a logged in user. msgid "Be the first to post!" msgstr "" +#. TRANS: Additional text displayed for public feed when there are no public notices for a not logged in user. #, php-format msgid "" "Why not [register an account](%%action.register%%) and be the first to post!" msgstr "" +#. TRANS: Message for not logged in users at an invite-only site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -3959,6 +4024,8 @@ msgid "" "friends, family, and colleagues! ([Read more](%%doc.help%%))" msgstr "" +#. TRANS: Message for not logged in users at a closed site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -5615,6 +5682,10 @@ msgid "" "along with this program. If not, see %s." msgstr "" +#. TRANS: Menu item for site administration +msgid "Plugins" +msgstr "Приставки" + #. TRANS: Form input field label for application name. msgid "Name" msgstr "Име" @@ -6125,6 +6196,9 @@ msgstr "Командата все още не се поддържа." msgid "Unable to delete design setting." msgstr "Грешка при записване настройките за Twitter" +msgid "Home" +msgstr "Лична страница" + #. TRANS: Menu item title/tooltip msgid "Basic site configuration" msgstr "Основна настройка на сайта" @@ -6737,9 +6811,6 @@ msgstr "Влизане в сайта" msgid "Database error" msgstr "Грешка в базата от данни" -msgid "Home" -msgstr "Лична страница" - msgid "Public" msgstr "Общ поток" @@ -7454,7 +7525,6 @@ msgstr "Изпращане на бележка" msgid "What's up, %s?" msgstr "Какво става, %s?" -#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Прикрепяне" @@ -7522,6 +7592,9 @@ msgstr "Изтриване на бележката" msgid "Notice repeated" msgstr "Бележката е повторена." +msgid "Update your status..." +msgstr "" + msgid "Nudge this user" msgstr "Побутване на този потребител" @@ -8037,11 +8110,3 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" - -#, fuzzy -#~ msgid "Friends timeline" -#~ msgstr "Поток на %s" - -#, fuzzy -#~ msgid "Everyone on this site" -#~ msgstr "Търсене на хора в сайта" diff --git a/locale/br/LC_MESSAGES/statusnet.po b/locale/br/LC_MESSAGES/statusnet.po index b6aefb027d..8ca30f42c1 100644 --- a/locale/br/LC_MESSAGES/statusnet.po +++ b/locale/br/LC_MESSAGES/statusnet.po @@ -12,17 +12,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-08 01:03+0000\n" -"PO-Revision-Date: 2011-03-08 01:05:02+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:16:56+0000\n" "Language-Team: Breton \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83429); Translate extension (2011-03-07)\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: br\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-POT-Import-Date: 2011-03-06 02:16:47+0000\n" +"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -1036,7 +1036,8 @@ msgid "Can only fave notices." msgstr "Klask alioù en danvez" #. TRANS: Client exception thrown when trying favorite a notice without content. -msgid "Unknown note." +#, fuzzy +msgid "Unknown notice." msgstr "Notenn dianav." #. TRANS: Client exception thrown when trying favorite an already favorited notice. @@ -1601,6 +1602,7 @@ msgstr "Dilemel ar strollad-mañ" #. TRANS: Client error displayed trying to create a new direct message while not logged in. #. TRANS: Client error displayed trying to send a notice while not logged in. #. TRANS: Client error displayed trying to nudge a user without being logged in. +#. TRANS: Client error displayed when trying to enable or disable a plugin while not logged in. #. TRANS: Client error displayed trying a change a subscription while not logged in. #. TRANS: Client error displayed trying to subscribe when not logged in. #. TRANS: Client error message thrown when trying to access the admin panel while not logged in. @@ -3058,6 +3060,10 @@ msgstr "Ezhomm 'zo eus ar vammenn URL." msgid "Could not create application." msgstr "N'eo ket posubl krouiñ ar poellad." +#, fuzzy +msgid "Invalid image." +msgstr "Ment direizh." + #. TRANS: Title for form to create a group. msgid "New group" msgstr "Strollad nevez" @@ -3342,52 +3348,77 @@ msgstr "Boest kas %s" msgid "This is your outbox, which lists private messages you have sent." msgstr "" +#. TRANS: Title for page where to change password. +#, fuzzy +msgctxt "TITLE" msgid "Change password" msgstr "Cheñch ger-tremen" +#. TRANS: Instructions for page where to change password. msgid "Change your password." msgstr "Cheñch ger-tremen." +#. TRANS: Fieldset legend on page where to change password. #. TRANS: Fieldset legend for password reset form. msgid "Password change" msgstr "Kemmañ ger-tremen" +#. TRANS: Field label on page where to change password. msgid "Old password" msgstr "Ger-tremen kozh" +#. TRANS: Field label on page where to change password. #. TRANS: Field label for password reset form. msgid "New password" msgstr "Ger-tremen nevez" +#. TRANS: Field title on page where to change password. #, fuzzy msgid "6 or more characters." msgstr "6 arouezenn pe muioc'h" +#. TRANS: Field label on page where to change password. In this field the new password should be typed a second time. +#, fuzzy +msgctxt "LABEL" +msgid "Confirm" +msgstr "Kadarnaat" + +#. TRANS: Field title on page where to change password. #. TRANS: Ttile for field label for password reset form where the password has to be typed again. #, fuzzy msgid "Same as password above." msgstr "Memestra eget ar ger tremen a-us" +#. TRANS: Button text on page where to change password. +#, fuzzy +msgctxt "BUTTON" msgid "Change" msgstr "Kemmañ" +#. TRANS: Form validation error on page where to change password. msgid "Password must be 6 or more characters." msgstr "Rankout a ra ar ger-tremen bezañ gant 6 arouezenn d'an nebeutañ." msgid "Passwords don't match." msgstr "Ne glot ket ar gerioù-tremen." -msgid "Incorrect old password" +#. TRANS: Form validation error on page where to change password. +#, fuzzy +msgid "Incorrect old password." msgstr "Ger-termen kozh direizh" +#. TRANS: Form validation error on page where to change password. msgid "Error saving user; invalid." msgstr "Ur fazi 'zo bet e-pad enolladenn an implijer ; diwiriek." +#. TRANS: Server error displayed on page where to change password when password change +#. TRANS: could not be made because of a server error. #. TRANS: Reset password form validation error message. #, fuzzy msgid "Cannot save new password." msgstr "Dibosupl eo enrollañ ar ger-tremen nevez." +#. TRANS: Form validation notice on page where to change password. msgid "Password saved." msgstr "Ger-tremen enrollet." @@ -3437,6 +3468,7 @@ msgstr "Lec'hienn" msgid "Server" msgstr "Servijer" +#. TRANS: Field title in Paths admin panel. msgid "Site's server hostname." msgstr "Anv ostiz servijer al lec'hienn." @@ -3444,6 +3476,7 @@ msgstr "Anv ostiz servijer al lec'hienn." msgid "Path" msgstr "Hent" +#. TRANS: Field title in Paths admin panel. #, fuzzy msgid "Site path." msgstr "Hent al lec'hienn" @@ -3453,6 +3486,7 @@ msgstr "Hent al lec'hienn" msgid "Locale directory" msgstr "Doser an temoù" +#. TRANS: Field title in Paths admin panel. msgid "Directory path to locales." msgstr "" @@ -3460,9 +3494,13 @@ msgstr "" msgid "Fancy URLs" msgstr "URLioù brav" -msgid "Use fancy (more readable and memorable) URLs?" +#. TRANS: Field title in Paths admin panel. +msgid "Use fancy URLs (more readable and memorable)?" msgstr "" +#. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "Theme" msgstr "Danvez" @@ -3584,6 +3622,8 @@ msgid "Directory where attachments are located." msgstr "" #. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "SSL" msgstr "SSL" @@ -3630,10 +3670,14 @@ msgstr "" msgid "People search" msgstr "Klask tud" +#. TRANS: Client error displayed when trying to tag a profile with an invalid tag. +#. TRANS: %s is the invalid tag. #, php-format msgid "Not a valid people tag: %s." msgstr "N'eo ket reizh ar merk-se : %s." +#. TRANS: Page title for users with a certain self-tag. +#. TRANS: %1$s is the tag, %2$s is the page number. #, php-format msgid "Users self-tagged with %1$s - page %2$d" msgstr "Implijerien bet merket drezo o unan gant %1$s - pajenn %2$d" @@ -3643,15 +3687,19 @@ msgctxt "plugin" msgid "Disabled" msgstr "" +#. TRANS: Client error displayed when trying to use another method than POST. +#. TRANS: Do not translate POST. #. TRANS: Client error displayed trying to perform any request method other than POST. #. TRANS: Do not translate POST. msgid "This action only accepts POST requests." msgstr "" +#. TRANS: Client error displayed when trying to enable or disable a plugin without access rights. #, fuzzy msgid "You cannot administer plugins." msgstr "N'hallit ket diverkañ implijerien." +#. TRANS: Client error displayed when trying to enable or disable a non-existing plugin. #, fuzzy msgid "No such plugin." msgstr "N'eus ket eus ar bajenn-se." @@ -3662,7 +3710,8 @@ msgid "Enabled" msgstr "" #. TRANS: Tab and title for plugins admin panel. -#. TRANS: Menu item for site administration +#, fuzzy +msgctxt "TITLE" msgid "Plugins" msgstr "Pluginoù" @@ -3678,15 +3727,19 @@ msgstr "" msgid "Default plugins" msgstr "Yezh dre ziouer" +#. TRANS: Text displayed on plugin admin page when no plugin are enabled. msgid "" "All default plugins have been disabled from the site's configuration file." msgstr "" +#. TRANS: Client error displayed if the notice posted has too many characters. msgid "Invalid notice content." msgstr "Danvez direizh an ali." -#, php-format -msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’." +#. TRANS: Exception thrown if a notice's license is not compatible with the StatusNet site license. +#. TRANS: %1$s is the notice license, %2$s is the StatusNet site's license. +#, fuzzy, php-format +msgid "Notice license \"%1$s\" is not compatible with site license \"%2$s\"." msgstr "" "Aotre-implijout ar menegoù \"%1$s\" ne ya ket gant aotre-implijout al " "lec'hienn \"%2$s\"." @@ -3843,29 +3896,39 @@ msgstr "Enrollet eo bet an arventennoù." msgid "Restore account" msgstr "Krouiñ ur gont" +#. TRANS: Client error displayed when requesting a public timeline page beyond the page limit. +#. TRANS: %s is the page limit. #, php-format msgid "Beyond the page limit (%s)." msgstr "Dreist da bevennoù ar bajenn (%s)." +#. TRANS: Server error displayed when a public timeline cannot be retrieved. msgid "Could not retrieve public stream." msgstr "Dibosupl eo adtapout al lanv foran." +#. TRANS: Title for all public timeline pages but the first. +#. TRANS: %d is the page number. #, php-format msgid "Public timeline, page %d" msgstr "Lanv foran - pajenn %d" +#. TRANS: Title for the first public timeline page. msgid "Public timeline" msgstr "Lanv foran" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 1.0)" msgstr "Neudenn gwazh foran (RSS 1.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 2.0)" msgstr "Neudenn gwazh foran (RSS 2.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (Atom)" msgstr "Neudenn gwazh foran (Atom)" +#. TRANS: Text displayed for public feed when there are no public notices. #, php-format msgid "" "This is the public timeline for %%site.name%% but no one has posted anything " @@ -3873,9 +3936,11 @@ msgid "" msgstr "" "Kronologiezh foran %%site.name%% eo, met den n'en deus skrivet tra ebet." +#. TRANS: Additional text displayed for public feed when there are no public notices for a logged in user. msgid "Be the first to post!" msgstr "Bezit an hini gentañ da bostañ !" +#. TRANS: Additional text displayed for public feed when there are no public notices for a not logged in user. #, php-format msgid "" "Why not [register an account](%%action.register%%) and be the first to post!" @@ -3883,6 +3948,8 @@ msgstr "" "Perak ne [groufec'h ket ur gont](%%action.register%%) ha bezañ an hini " "gentañ da embann un dra !" +#. TRANS: Message for not logged in users at an invite-only site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, fuzzy, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -3893,6 +3960,8 @@ msgstr "" "%%site.name%% a zo ur servij [micro-blogging](http://br.wikipedia.org/wiki/" "Microblog) diazezet war ar meziant frank [StatusNet](http://status.net/)." +#. TRANS: Message for not logged in users at a closed site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -5541,6 +5610,10 @@ msgid "" "along with this program. If not, see %s." msgstr "" +#. TRANS: Menu item for site administration +msgid "Plugins" +msgstr "Pluginoù" + #. TRANS: Form input field label for application name. msgid "Name" msgstr "Anv" @@ -6030,6 +6103,9 @@ msgstr "N'eo ket bet emplementet saveSettings()." msgid "Unable to delete design setting." msgstr "Dibosupl eo dilemel an arventennoù krouiñ." +msgid "Home" +msgstr "Degemer" + #. TRANS: Menu item title/tooltip msgid "Basic site configuration" msgstr "Arventennoù diazez al lec'hienn" @@ -6633,9 +6709,6 @@ msgstr "Mont d'ar meziant staliañ" msgid "Database error" msgstr "Fazi bank roadennoù" -msgid "Home" -msgstr "Degemer" - msgid "Public" msgstr "Foran" @@ -7345,7 +7418,6 @@ msgstr "Kas un ali" msgid "What's up, %s?" msgstr "Penaos 'mañ kont, %s ?" -#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Stagañ" @@ -7412,6 +7484,9 @@ msgstr "Dilemel ar c'hemenn-mañ" msgid "Notice repeated" msgstr "Ali adkemeret" +msgid "Update your status..." +msgstr "" + msgid "Nudge this user" msgstr "Kas ur blinkadenn d'an implijer-mañ" @@ -7923,11 +7998,3 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" - -#, fuzzy -#~ msgid "Friends timeline" -#~ msgstr "Oberezhioù %s" - -#, fuzzy -#~ msgid "Everyone on this site" -#~ msgstr "Klask tud el lec'hienn-mañ" diff --git a/locale/ca/LC_MESSAGES/statusnet.po b/locale/ca/LC_MESSAGES/statusnet.po index 37f2527a9f..c8c23852bb 100644 --- a/locale/ca/LC_MESSAGES/statusnet.po +++ b/locale/ca/LC_MESSAGES/statusnet.po @@ -16,17 +16,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-08 01:03+0000\n" -"PO-Revision-Date: 2011-03-08 01:05:03+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:16:57+0000\n" "Language-Team: Catalan \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83429); Translate extension (2011-03-07)\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ca\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-06 02:16:47+0000\n" +"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -1047,7 +1047,8 @@ msgid "Can only fave notices." msgstr "Només es poden preferir els avisos." #. TRANS: Client exception thrown when trying favorite a notice without content. -msgid "Unknown note." +#, fuzzy +msgid "Unknown notice." msgstr "Nota desconeguda." #. TRANS: Client exception thrown when trying favorite an already favorited notice. @@ -1622,6 +1623,7 @@ msgstr "Elimina el grup." #. TRANS: Client error displayed trying to create a new direct message while not logged in. #. TRANS: Client error displayed trying to send a notice while not logged in. #. TRANS: Client error displayed trying to nudge a user without being logged in. +#. TRANS: Client error displayed when trying to enable or disable a plugin while not logged in. #. TRANS: Client error displayed trying a change a subscription while not logged in. #. TRANS: Client error displayed trying to subscribe when not logged in. #. TRANS: Client error message thrown when trying to access the admin panel while not logged in. @@ -3113,6 +3115,10 @@ msgstr "URL d'origen requerida." msgid "Could not create application." msgstr "No s'ha pogut crear l'aplicació." +#, fuzzy +msgid "Invalid image." +msgstr "La mida no és vàlida." + #. TRANS: Title for form to create a group. msgid "New group" msgstr "Nou grup" @@ -3398,49 +3404,74 @@ msgstr "" "Aquesta és la teva safata de sortida, que et mostrarà els missatges privats " "que has enviat." +#. TRANS: Title for page where to change password. +#, fuzzy +msgctxt "TITLE" msgid "Change password" msgstr "Canvia la contrasenya" +#. TRANS: Instructions for page where to change password. msgid "Change your password." msgstr "Canvieu la vostra contrasenya" +#. TRANS: Fieldset legend on page where to change password. #. TRANS: Fieldset legend for password reset form. msgid "Password change" msgstr "Contrasenya canviada." +#. TRANS: Field label on page where to change password. msgid "Old password" msgstr "Antiga contrasenya" +#. TRANS: Field label on page where to change password. #. TRANS: Field label for password reset form. msgid "New password" msgstr "Nova contrasenya" +#. TRANS: Field title on page where to change password. msgid "6 or more characters." msgstr "6 o més caràcters." +#. TRANS: Field label on page where to change password. In this field the new password should be typed a second time. +#, fuzzy +msgctxt "LABEL" +msgid "Confirm" +msgstr "Confirma" + +#. TRANS: Field title on page where to change password. #. TRANS: Ttile for field label for password reset form where the password has to be typed again. msgid "Same as password above." msgstr "Igual que la contrasenya de dalt" +#. TRANS: Button text on page where to change password. +#, fuzzy +msgctxt "BUTTON" msgid "Change" msgstr "Canvia" +#. TRANS: Form validation error on page where to change password. msgid "Password must be 6 or more characters." msgstr "La contrasenya hauria de ser d'entre 6 a més caràcters." msgid "Passwords don't match." msgstr "Les contrasenyes no coincideixen." -msgid "Incorrect old password" +#. TRANS: Form validation error on page where to change password. +#, fuzzy +msgid "Incorrect old password." msgstr "Contrasenya antiga incorrecta" +#. TRANS: Form validation error on page where to change password. msgid "Error saving user; invalid." msgstr "S'ha produït un error en desar l'usuari; no és vàlid." +#. TRANS: Server error displayed on page where to change password when password change +#. TRANS: could not be made because of a server error. #. TRANS: Reset password form validation error message. msgid "Cannot save new password." msgstr "No es pot desar la nova contrasenya." +#. TRANS: Form validation notice on page where to change password. msgid "Password saved." msgstr "Contrasenya guardada." @@ -3490,6 +3521,7 @@ msgstr "Lloc" msgid "Server" msgstr "Servidor" +#. TRANS: Field title in Paths admin panel. msgid "Site's server hostname." msgstr "Servidor central del lloc." @@ -3497,6 +3529,7 @@ msgstr "Servidor central del lloc." msgid "Path" msgstr "Camí" +#. TRANS: Field title in Paths admin panel. msgid "Site path." msgstr "Camí del lloc." @@ -3504,6 +3537,7 @@ msgstr "Camí del lloc." msgid "Locale directory" msgstr "Directori de les traduccions" +#. TRANS: Field title in Paths admin panel. msgid "Directory path to locales." msgstr "Camí del directori a les traduccions." @@ -3511,9 +3545,14 @@ msgstr "Camí del directori a les traduccions." msgid "Fancy URLs" msgstr "URL atractius" -msgid "Use fancy (more readable and memorable) URLs?" +#. TRANS: Field title in Paths admin panel. +#, fuzzy +msgid "Use fancy URLs (more readable and memorable)?" msgstr "Voleu fer servir URL atractius (més fàcils de llegir i de recordar)?" +#. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "Theme" msgstr "Tema" @@ -3626,6 +3665,8 @@ msgid "Directory where attachments are located." msgstr "Directori on es troben les adjuncions." #. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "SSL" msgstr "SSL" @@ -3670,10 +3711,14 @@ msgstr "" msgid "People search" msgstr "Cerca de gent" +#. TRANS: Client error displayed when trying to tag a profile with an invalid tag. +#. TRANS: %s is the invalid tag. #, php-format msgid "Not a valid people tag: %s." msgstr "No és una etiqueta de gent vàlida: %s" +#. TRANS: Page title for users with a certain self-tag. +#. TRANS: %1$s is the tag, %2$s is the page number. #, php-format msgid "Users self-tagged with %1$s - page %2$d" msgstr "Usuaris que s'han etiquetat amb %1$s - pàgina %2$d" @@ -3683,14 +3728,18 @@ msgctxt "plugin" msgid "Disabled" msgstr "Inhabilitat" +#. TRANS: Client error displayed when trying to use another method than POST. +#. TRANS: Do not translate POST. #. TRANS: Client error displayed trying to perform any request method other than POST. #. TRANS: Do not translate POST. msgid "This action only accepts POST requests." msgstr "Aquesta acció només accepta sol·licituds POST." +#. TRANS: Client error displayed when trying to enable or disable a plugin without access rights. msgid "You cannot administer plugins." msgstr "No es poden administrar els connectors." +#. TRANS: Client error displayed when trying to enable or disable a non-existing plugin. #, fuzzy msgid "No such plugin." msgstr "No existeix la pàgina." @@ -3701,7 +3750,8 @@ msgid "Enabled" msgstr "Habilitat" #. TRANS: Tab and title for plugins admin panel. -#. TRANS: Menu item for site administration +#, fuzzy +msgctxt "TITLE" msgid "Plugins" msgstr "Connectors" @@ -3719,17 +3769,21 @@ msgstr "" msgid "Default plugins" msgstr "Connectors per defecte" +#. TRANS: Text displayed on plugin admin page when no plugin are enabled. msgid "" "All default plugins have been disabled from the site's configuration file." msgstr "" "S'han inhabilitat tots els connectors per defecte del fitxer de configuració " "del lloc." +#. TRANS: Client error displayed if the notice posted has too many characters. msgid "Invalid notice content." msgstr "El contingut de l'avís no és vàlid." -#, php-format -msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’." +#. TRANS: Exception thrown if a notice's license is not compatible with the StatusNet site license. +#. TRANS: %1$s is the notice license, %2$s is the StatusNet site's license. +#, fuzzy, php-format +msgid "Notice license \"%1$s\" is not compatible with site license \"%2$s\"." msgstr "" "La llicència ‘%1$s’ de l'avís no és compatible amb la llicència ‘%2$s’ del " "lloc." @@ -3878,29 +3932,39 @@ msgstr "S'ha desat la configuració." msgid "Restore account" msgstr "Restaura el compte" +#. TRANS: Client error displayed when requesting a public timeline page beyond the page limit. +#. TRANS: %s is the page limit. #, php-format msgid "Beyond the page limit (%s)." msgstr "Més enllà del límit de la pàgina (%s)" +#. TRANS: Server error displayed when a public timeline cannot be retrieved. msgid "Could not retrieve public stream." msgstr "No s'ha pogut recuperar la conversa pública." +#. TRANS: Title for all public timeline pages but the first. +#. TRANS: %d is the page number. #, php-format msgid "Public timeline, page %d" msgstr "Línia temporal pública, pàgina %d" +#. TRANS: Title for the first public timeline page. msgid "Public timeline" msgstr "Línia temporal pública" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 1.0)" msgstr "Flux de canal públic (RSS 1.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 2.0)" msgstr "Flux de canal públic (RSS 2.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (Atom)" msgstr "Flux de canal públic (Atom)" +#. TRANS: Text displayed for public feed when there are no public notices. #, php-format msgid "" "This is the public timeline for %%site.name%% but no one has posted anything " @@ -3909,9 +3973,11 @@ msgstr "" "Aquesta és la línia temporal pública de %%site.name%%, però ningú no hi ha " "enviat res encara." +#. TRANS: Additional text displayed for public feed when there are no public notices for a logged in user. msgid "Be the first to post!" msgstr "Sigueu el primer en escriure-hi!" +#. TRANS: Additional text displayed for public feed when there are no public notices for a not logged in user. #, php-format msgid "" "Why not [register an account](%%action.register%%) and be the first to post!" @@ -3919,6 +3985,8 @@ msgstr "" "Per què no [registreu un compte](%%action.register%%) i sou el primer en " "escriure-hi!" +#. TRANS: Message for not logged in users at an invite-only site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -3931,6 +3999,8 @@ msgstr "" "[Uniu-vos-hi ara](%%action.register%%) per compartir què feu amb els vostres " "amics, familiars, i companys! ([Més informació](%%doc.help%%))" +#. TRANS: Message for not logged in users at a closed site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -5635,6 +5705,10 @@ msgstr "" "Hauríeu d'haver rebut una còpia de la llicència GNU Affero General Public " "License juntament amb el programa. Si no és així, consulteu %s." +#. TRANS: Menu item for site administration +msgid "Plugins" +msgstr "Connectors" + #. TRANS: Form input field label for application name. msgid "Name" msgstr "Nom" @@ -6144,6 +6218,9 @@ msgstr "El saveSettings() no està implementat." msgid "Unable to delete design setting." msgstr "No s'ha pogut eliminar el paràmetre de disseny." +msgid "Home" +msgstr "Pàgina personal" + #. TRANS: Menu item title/tooltip msgid "Basic site configuration" msgstr "Configuració bàsica del lloc" @@ -6771,9 +6848,6 @@ msgstr "Vés a l'instal·lador." msgid "Database error" msgstr "Error de la base de dades" -msgid "Home" -msgstr "Pàgina personal" - msgid "Public" msgstr "Públic" @@ -7573,7 +7647,6 @@ msgstr "Envia un avís" msgid "What's up, %s?" msgstr "Què tal, %s?" -#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Adjunta" @@ -7642,6 +7715,9 @@ msgstr "Elimina aquest avís" msgid "Notice repeated" msgstr "Avís repetit" +msgid "Update your status..." +msgstr "" + msgid "Nudge this user" msgstr "Crida l'atenció a l'usuari" @@ -8142,9 +8218,3 @@ msgstr "L'XML no és vàlid, hi manca l'arrel XRD." #, php-format msgid "Getting backup from file '%s'." msgstr "Es recupera la còpia de seguretat del fitxer '%s'." - -#~ msgid "Friends timeline" -#~ msgstr "Línia temporal dels amics" - -#~ msgid "Everyone on this site" -#~ msgstr "Tothom en aquest lloc" diff --git a/locale/cs/LC_MESSAGES/statusnet.po b/locale/cs/LC_MESSAGES/statusnet.po index e97d4980e0..ec922736f3 100644 --- a/locale/cs/LC_MESSAGES/statusnet.po +++ b/locale/cs/LC_MESSAGES/statusnet.po @@ -11,18 +11,18 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-08 01:03+0000\n" -"PO-Revision-Date: 2011-03-08 01:05:04+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:16:59+0000\n" "Language-Team: Czech \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83429); Translate extension (2011-03-07)\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: cs\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ( (n >= 2 && n <= 4) ? 1 : " "2 );\n" -"X-POT-Import-Date: 2011-03-06 02:16:47+0000\n" +"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -1062,7 +1062,7 @@ msgstr "Najít v obsahu oznámení" #. TRANS: Client exception thrown when trying favorite a notice without content. #, fuzzy -msgid "Unknown note." +msgid "Unknown notice." msgstr "Neznámé" #. TRANS: Client exception thrown when trying favorite an already favorited notice. @@ -1653,6 +1653,7 @@ msgstr "Odstranit tohoto uživatele" #. TRANS: Client error displayed trying to create a new direct message while not logged in. #. TRANS: Client error displayed trying to send a notice while not logged in. #. TRANS: Client error displayed trying to nudge a user without being logged in. +#. TRANS: Client error displayed when trying to enable or disable a plugin while not logged in. #. TRANS: Client error displayed trying a change a subscription while not logged in. #. TRANS: Client error displayed trying to subscribe when not logged in. #. TRANS: Client error message thrown when trying to access the admin panel while not logged in. @@ -3164,6 +3165,10 @@ msgstr "Zdrojové URL je nutné." msgid "Could not create application." msgstr "Nelze vytvořit aplikaci." +#, fuzzy +msgid "Invalid image." +msgstr "Neplatná velikost" + #. TRANS: Title for form to create a group. msgid "New group" msgstr "Nová skupina" @@ -3448,52 +3453,77 @@ msgstr "" "Toto je váš outbox, který obsahuje seznam soukromých zpráv které jste " "odeslali." +#. TRANS: Title for page where to change password. +#, fuzzy +msgctxt "TITLE" msgid "Change password" msgstr "Změnit heslo" +#. TRANS: Instructions for page where to change password. msgid "Change your password." msgstr "Změňte své heslo." +#. TRANS: Fieldset legend on page where to change password. #. TRANS: Fieldset legend for password reset form. msgid "Password change" msgstr "Změna hesla" +#. TRANS: Field label on page where to change password. msgid "Old password" msgstr "Staré heslo" +#. TRANS: Field label on page where to change password. #. TRANS: Field label for password reset form. msgid "New password" msgstr "Nové heslo" +#. TRANS: Field title on page where to change password. #, fuzzy msgid "6 or more characters." msgstr "6 a více znaků" +#. TRANS: Field label on page where to change password. In this field the new password should be typed a second time. +#, fuzzy +msgctxt "LABEL" +msgid "Confirm" +msgstr "Potvrdit" + +#. TRANS: Field title on page where to change password. #. TRANS: Ttile for field label for password reset form where the password has to be typed again. #, fuzzy msgid "Same as password above." msgstr "Stejné jako heslo výše" +#. TRANS: Button text on page where to change password. +#, fuzzy +msgctxt "BUTTON" msgid "Change" msgstr "Změnit" +#. TRANS: Form validation error on page where to change password. msgid "Password must be 6 or more characters." msgstr "Heslo musí být alespoň 6 znaků dlouhé" msgid "Passwords don't match." msgstr "Hesla nesouhlasí" -msgid "Incorrect old password" +#. TRANS: Form validation error on page where to change password. +#, fuzzy +msgid "Incorrect old password." msgstr "Nesprávné staré heslo" +#. TRANS: Form validation error on page where to change password. msgid "Error saving user; invalid." msgstr "Chyba při ukládaní uživatele; neplatný." +#. TRANS: Server error displayed on page where to change password when password change +#. TRANS: could not be made because of a server error. #. TRANS: Reset password form validation error message. #, fuzzy msgid "Cannot save new password." msgstr "Nelze uložit nové heslo" +#. TRANS: Form validation notice on page where to change password. msgid "Password saved." msgstr "Heslo uloženo" @@ -3543,6 +3573,7 @@ msgstr "Stránky" msgid "Server" msgstr "Server" +#. TRANS: Field title in Paths admin panel. msgid "Site's server hostname." msgstr "Hostname (jméno) serveru stránek." @@ -3550,6 +3581,7 @@ msgstr "Hostname (jméno) serveru stránek." msgid "Path" msgstr "Cesta" +#. TRANS: Field title in Paths admin panel. #, fuzzy msgid "Site path." msgstr "Cesta ke stránkám (za jménem serveru)" @@ -3559,6 +3591,7 @@ msgstr "Cesta ke stránkám (za jménem serveru)" msgid "Locale directory" msgstr "adresář tématu" +#. TRANS: Field title in Paths admin panel. #, fuzzy msgid "Directory path to locales." msgstr "Cesta k adresáři locales" @@ -3567,9 +3600,14 @@ msgstr "Cesta k adresáři locales" msgid "Fancy URLs" msgstr "Hezké URL" -msgid "Use fancy (more readable and memorable) URLs?" +#. TRANS: Field title in Paths admin panel. +#, fuzzy +msgid "Use fancy URLs (more readable and memorable)?" msgstr "Použijte Fancy (více čitelné a zapamatovatelné) URL?" +#. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "Theme" msgstr "Téma" @@ -3695,6 +3733,8 @@ msgid "Directory where attachments are located." msgstr "Cesta k adresáři locales" #. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "SSL" msgstr "SSL" @@ -3741,10 +3781,14 @@ msgstr "" msgid "People search" msgstr "Hledání lidí" +#. TRANS: Client error displayed when trying to tag a profile with an invalid tag. +#. TRANS: %s is the invalid tag. #, php-format msgid "Not a valid people tag: %s." msgstr "Není platný člověkotag: %s." +#. TRANS: Page title for users with a certain self-tag. +#. TRANS: %1$s is the tag, %2$s is the page number. #, php-format msgid "Users self-tagged with %1$s - page %2$d" msgstr "Uživatelé kteří se sami otagovali %1$s - strana %2$d" @@ -3754,15 +3798,19 @@ msgctxt "plugin" msgid "Disabled" msgstr "" +#. TRANS: Client error displayed when trying to use another method than POST. +#. TRANS: Do not translate POST. #. TRANS: Client error displayed trying to perform any request method other than POST. #. TRANS: Do not translate POST. msgid "This action only accepts POST requests." msgstr "Tato akce přijímá pouze POST požadavky." +#. TRANS: Client error displayed when trying to enable or disable a plugin without access rights. #, fuzzy msgid "You cannot administer plugins." msgstr "Nemůžete odstranit uživatele." +#. TRANS: Client error displayed when trying to enable or disable a non-existing plugin. #, fuzzy msgid "No such plugin." msgstr "Tady žádná taková stránka není." @@ -3773,7 +3821,8 @@ msgid "Enabled" msgstr "" #. TRANS: Tab and title for plugins admin panel. -#. TRANS: Menu item for site administration +#, fuzzy +msgctxt "TITLE" msgid "Plugins" msgstr "Pluginy" @@ -3789,15 +3838,19 @@ msgstr "" msgid "Default plugins" msgstr "Výchozí jazyk" +#. TRANS: Text displayed on plugin admin page when no plugin are enabled. msgid "" "All default plugins have been disabled from the site's configuration file." msgstr "" +#. TRANS: Client error displayed if the notice posted has too many characters. msgid "Invalid notice content." msgstr "Neplatná velikost" -#, php-format -msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’." +#. TRANS: Exception thrown if a notice's license is not compatible with the StatusNet site license. +#. TRANS: %1$s is the notice license, %2$s is the StatusNet site's license. +#, fuzzy, php-format +msgid "Notice license \"%1$s\" is not compatible with site license \"%2$s\"." msgstr "Licence hlášky ‘%1$s’ není kompatibilní s licencí webu ‘%2$s’." #. TRANS: Page title for profile settings. @@ -3952,29 +4005,39 @@ msgstr "Nastavení uloženo" msgid "Restore account" msgstr "Zaregistrujte se" +#. TRANS: Client error displayed when requesting a public timeline page beyond the page limit. +#. TRANS: %s is the page limit. #, php-format msgid "Beyond the page limit (%s)." msgstr "Přes limit stránky (%s)." +#. TRANS: Server error displayed when a public timeline cannot be retrieved. msgid "Could not retrieve public stream." msgstr "Nepodařilo se získat veřejný proud." +#. TRANS: Title for all public timeline pages but the first. +#. TRANS: %d is the page number. #, php-format msgid "Public timeline, page %d" msgstr "Veřejná časová osa, strana %d" +#. TRANS: Title for the first public timeline page. msgid "Public timeline" msgstr "Veřejné zprávy" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 1.0)" msgstr "Veřejný Stream Feed (RSS 1.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 2.0)" msgstr "Veřejný Stream Feed (RSS 2.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (Atom)" msgstr "Veřejný Stream Feed (Atom)" +#. TRANS: Text displayed for public feed when there are no public notices. #, php-format msgid "" "This is the public timeline for %%site.name%% but no one has posted anything " @@ -3982,15 +4045,19 @@ msgid "" msgstr "" "Tohle je veřejná časová osa %%site.name%%, ale nikdo zatím nic nenapsal." +#. TRANS: Additional text displayed for public feed when there are no public notices for a logged in user. msgid "Be the first to post!" msgstr "Pošlete něco jako první!" +#. TRANS: Additional text displayed for public feed when there are no public notices for a not logged in user. #, php-format msgid "" "Why not [register an account](%%action.register%%) and be the first to post!" msgstr "" "Proč ne [zaregistrovat účet](%%action.register%%) a poslat něco jako první!" +#. TRANS: Message for not logged in users at an invite-only site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -4003,6 +4070,8 @@ msgstr "" "status.net/). [Zaregistrujte se](%%action.register%%) a sdílejte hlášky o " "sobě s přáteli, rodinou a kolegy! ([Čtěte více](%%doc.help%%))" +#. TRANS: Message for not logged in users at a closed site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -5715,6 +5784,10 @@ msgstr "" "Měli byste obdržet kopii GNU Affero General Public License spolu s tímto " "programem. Pokud ne, jděte na %s." +#. TRANS: Menu item for site administration +msgid "Plugins" +msgstr "Pluginy" + #. TRANS: Form input field label for application name. msgid "Name" msgstr "Název" @@ -6218,6 +6291,9 @@ msgstr "saveSettings () není implementována." msgid "Unable to delete design setting." msgstr "Nelze smazat nastavení vzhledu." +msgid "Home" +msgstr "Moje stránky" + #. TRANS: Menu item title/tooltip msgid "Basic site configuration" msgstr "Základní konfigurace webu" @@ -6854,9 +6930,6 @@ msgstr "Jdi na instalaci." msgid "Database error" msgstr "Chyba databáze" -msgid "Home" -msgstr "Moje stránky" - msgid "Public" msgstr "Veřejné" @@ -7666,7 +7739,6 @@ msgstr "Poslat oznámení" msgid "What's up, %s?" msgstr "Co se děje, %s?" -#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Připojit" @@ -7735,6 +7807,9 @@ msgstr "Odstranit toto oznámení" msgid "Notice repeated" msgstr "Sdělení opakováno" +msgid "Update your status..." +msgstr "" + msgid "Nudge this user" msgstr "Pošťuchovat tohoto uživatele" @@ -8252,11 +8327,3 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" - -#, fuzzy -#~ msgid "Friends timeline" -#~ msgstr "časová osa %s" - -#, fuzzy -#~ msgid "Everyone on this site" -#~ msgstr "Najít lidi na této stránce" diff --git a/locale/de/LC_MESSAGES/statusnet.po b/locale/de/LC_MESSAGES/statusnet.po index 939acc989b..3fc5e059c2 100644 --- a/locale/de/LC_MESSAGES/statusnet.po +++ b/locale/de/LC_MESSAGES/statusnet.po @@ -5,6 +5,7 @@ # Author: Bavatar # Author: Brion # Author: George Animal +# Author: Habi # Author: Kghbln # Author: Lutzgh # Author: March @@ -21,17 +22,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-08 01:03+0000\n" -"PO-Revision-Date: 2011-03-08 01:05:05+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:17:00+0000\n" "Language-Team: German \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83429); Translate extension (2011-03-07)\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: de\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-06 02:16:47+0000\n" +"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -312,7 +313,7 @@ msgstr "Konnte Benutzerdesign nicht aktualisieren." #. TRANS: Title for Atom feed. msgctxt "ATOM" msgid "Main" -msgstr "" +msgstr "Main" #. TRANS: Title for Atom feed. %s is a user nickname. #. TRANS: Message is used as link title. %s is a user nickname. @@ -396,7 +397,6 @@ msgid "Recipient user not found." msgstr "Empfänger nicht gefunden." #. TRANS: Client error displayed trying to direct message another user who's not a friend (403). -#, fuzzy msgid "Cannot send direct messages to users who aren't your friend." msgstr "" "Es können keine direkten Nachrichten an Benutzer geschickt werden mit denen " @@ -651,9 +651,8 @@ msgstr "" #. TRANS: API validation exception thrown when alias is the same as nickname. #. TRANS: Group create form validation error. -#, fuzzy msgid "Alias cannot be the same as nickname." -msgstr "Alias kann nicht das gleiche wie der Spitzname sein." +msgstr "Alias kann nicht gleich wie der Spitzname sein." #. TRANS: Client error displayed when uploading a media file has failed. msgid "Upload failed." @@ -864,7 +863,7 @@ msgstr "Kein Status mit dieser ID gefunden." #. TRANS: Client error displayed when trying to delete a notice not using the Atom format. msgid "Can only delete using the Atom format." -msgstr "" +msgstr "Kann nur im Atom-Format gelöscht werden" #. TRANS: Client error displayed when a user has no rights to delete notices of other users. #. TRANS: Error message displayed trying to delete a notice that was not made by the current user. @@ -959,9 +958,9 @@ msgstr "Nicht unterstützte Methode." msgid "Repeated to %s" msgstr "Antworten an %s" -#, fuzzy, php-format +#, php-format msgid "%1$s notices that were to repeated to %2$s / %3$s." -msgstr "Nachrichten von %1$s, die auf Nachrichten von %2$s / %3$s antworten." +msgstr "%1$s Nachrichten, die auf %2$s / %3$s wiederholt wurden." #. TRANS: Title of list of repeated notices of the logged in user. #. TRANS: %s is the nickname of the logged in user. @@ -969,9 +968,9 @@ msgstr "Nachrichten von %1$s, die auf Nachrichten von %2$s / %3$s antworten." msgid "Repeats of %s" msgstr "Antworten von %s" -#, fuzzy, php-format +#, php-format msgid "%1$s notices that %2$s / %3$s has repeated." -msgstr "%1$s markierte Nachricht %2$s als Favorit." +msgstr "%1$s Notizen wurden von %2$s / %3$s wiederholt." #. TRANS: Title for timeline with lastest notices with a given tag. #. TRANS: %s is the tag. @@ -1015,7 +1014,7 @@ msgstr "Nur POST verwenden" #. TRANS: %s is the unsupported activity object type. #, php-format msgid "Cannot handle activity object type \"%s\"." -msgstr "" +msgstr "Aktivität mit Objekttyp \"%s\" kann nicht bearbeitet werden." #. TRANS: Client error displayed when posting a notice without content through the API. #. TRANS: %d is the notice ID (number). @@ -1045,28 +1044,28 @@ msgstr "Profil nicht gefunden." #. TRANS: Subtitle for Atom favorites feed. #. TRANS: %1$s is a user nickname, %2$s is the StatusNet sitename. -#, fuzzy, php-format +#, php-format msgid "Notices %1$s has favorited on %2$s" -msgstr "Aktualisierungen von %1$s und Freunden auf %2$s!" +msgstr "Notizen, die von %1$s auf %2$s favorisiert wurden." #. TRANS: Client exception thrown when trying to set a favorite for another user. #. TRANS: Client exception thrown when trying to subscribe another user. -#, fuzzy msgid "Cannot add someone else's subscription." msgstr "Konnte neues Abonnement nicht eintragen." #. TRANS: Client exception thrown when trying use an incorrect activity verb for the Atom pub method. #, fuzzy msgid "Can only handle favorite activities." -msgstr "Durchsuche den Inhalt der Nachrichten" +msgstr "Kann nur Favoriten-Aktionen bearbeiten." #. TRANS: Client exception thrown when trying favorite an object that is not a notice. #, fuzzy msgid "Can only fave notices." -msgstr "Durchsuche den Inhalt der Nachrichten" +msgstr "Kann nur Notizen favorisieren." #. TRANS: Client exception thrown when trying favorite a notice without content. -msgid "Unknown note." +#, fuzzy +msgid "Unknown notice." msgstr "Unbekannter Hinweis." #. TRANS: Client exception thrown when trying favorite an already favorited notice. @@ -1083,18 +1082,18 @@ msgstr "%s Gruppen-Mitgliedschaften" #. TRANS: %1$s is a username, %2$s is the StatusNet sitename. #, fuzzy, php-format msgid "Groups %1$s is a member of on %2$s" -msgstr "Gruppen, in denen „%s“ Mitglied ist" +msgstr "Gruppen %1$s ist ein Mitglied von %2$s" #. TRANS: Client exception thrown when trying subscribe someone else to a group. #, fuzzy msgid "Cannot add someone else's membership." -msgstr "Konnte neues Abonnement nicht eintragen." +msgstr "Kann Abonnement von jemand anderem nicht eintragen." #. TRANS: Client error displayed when not using the POST verb. #. TRANS: Do not translate POST. #, fuzzy msgid "Can only handle join activities." -msgstr "Durchsuche den Inhalt der Nachrichten" +msgstr "Kann nur Beitritts-Aktivitäten durchführen." #. TRANS: Client exception thrown when trying to subscribe to a non-existing group. msgid "Unknown group." @@ -1115,7 +1114,7 @@ msgstr "Favorit nicht gefunden." #. TRANS: Client exception thrown when trying to remove a favorite notice of another user. #, fuzzy msgid "Cannot delete someone else's favorite." -msgstr "Konnte Favoriten nicht löschen." +msgstr "Kann Favoriten von jemand anderem nicht löschen." #. TRANS: Client exception thrown when referencing a non-existing group. #. TRANS: Client error displayed when requesting a list of blocked users for a non-local group. @@ -1154,7 +1153,7 @@ msgstr "Kein Mitglied" #. TRANS: Client exception thrown when deleting someone else's membership. #, fuzzy msgid "Cannot delete someone else's membership." -msgstr "Konnte Selbst-Abonnement nicht löschen." +msgstr "Konnte Abonnement von jemand anderem nicht löschen." #. TRANS: Client exception thrown when trying to display a subscription for a non-existing profile ID. #. TRANS: %d is the non-existing profile ID number. @@ -1181,7 +1180,7 @@ msgstr "Leute, die „%s“ abonniert haben" #. TRANS: Client error displayed when not using the follow verb. msgid "Can only handle Follow activities." -msgstr "" +msgstr "Kann nur Abonnements-Funktionen bearbeiten." #. TRANS: Client exception thrown when subscribing to an object that is not a person. msgid "Can only follow people." @@ -1195,9 +1194,9 @@ msgstr "Profil %s ist unbekannt" #. TRANS: Client error displayed trying to subscribe to an already subscribed profile. #. TRANS: %s is the profile the user already has a subscription on. -#, fuzzy, php-format +#, php-format msgid "Already subscribed to %s." -msgstr "Bereits abonniert!" +msgstr "%s ist bereits abonniert." #. TRANS: Client error displayed trying to get a non-existing attachment. msgid "No such attachment." @@ -1284,8 +1283,7 @@ msgstr "Keine Datei hoch geladen." #. TRANS: Avatar upload form instruction after uploading a file. #, fuzzy msgid "Pick a square area of the image to be your avatar." -msgstr "" -"Wähle eine quadratische Fläche aus dem Bild, um dein Avatar zu speichern" +msgstr "Wähle einen quadratischen Bereich aus dem Bild als dein Avatar." #. TRANS: Server error displayed if an avatar upload went wrong somehow server side. #. TRANS: Server error displayed trying to crop an uploaded group logo that is no longer present. @@ -1316,7 +1314,7 @@ msgstr "Nur angemeldete Benutzer können Nachrichten wiederholen." #. TRANS: Client exception thrown when trying to backup an account without having backup rights. msgid "You may not backup your account." -msgstr "" +msgstr "Dein Konto kann nicht gesichert werden." #. TRANS: Information displayed on the backup account page. msgid "" @@ -1326,6 +1324,11 @@ msgid "" "addresses is not backed up. Additionally, uploaded files and direct messages " "are not backed up." msgstr "" +"Dein Konto kann im Activity Streams-" +"Format gesichert werden. Dies ist eine experimentelle Funktion und stellt " +"nur ein unvollständige Sicherung dar: private Kontoinformationen wie Email " +"und IM-Adressen werden nicht gesichert. Zusätzlich werden hochgeladene " +"Dateien und direkte Nachrichten nicht gesichert." #. TRANS: Submit button to backup an account on the backup account page. msgctxt "BUTTON" @@ -1335,7 +1338,7 @@ msgstr "Backup" #. TRANS: Title for submit button to backup an account on the backup account page. #, fuzzy msgid "Backup your account." -msgstr "Backup-Konto" +msgstr "Sicherheitskopie des Konto erstellen." #. TRANS: Client error displayed when blocking a user that has already been blocked. msgid "You already blocked that user." @@ -1370,7 +1373,7 @@ msgstr "Nein" #. TRANS: Submit button title for 'No' when blocking a user. #, fuzzy msgid "Do not block this user." -msgstr "Diesen Benutzer freigeben" +msgstr "Diesen Benutzer nicht blokieren." #. TRANS: Button label on the user block form. #. TRANS: Button label on the delete application form. @@ -1499,7 +1502,7 @@ msgstr "Ich bin mir sicher." #. TRANS: %s is the text that needs to be input. #, php-format msgid "You must write \"%s\" exactly in the box." -msgstr "" +msgstr "In der Box muss genau \"%s\" eingetragen werden." #. TRANS: Confirmation that a user account has been deleted. msgid "Account deleted." @@ -1515,6 +1518,8 @@ msgid "" "This will permanently delete your account data from this " "server." msgstr "" +"Dein Konto und alle Daten auf diesem Server werden unwiderruflich " +"gelöscht." #. TRANS: Additional form text for user deletion form shown if a user has account backup rights. #. TRANS: %s is a URL to the backup page. @@ -1523,6 +1528,8 @@ msgid "" "You are strongly advised to back up your data before " "deletion." msgstr "" +"Vor der Löschung raten wir dir dringend, eine Sicherungskopie " +"deiner Daten zu erstellen." #. TRANS: Field label for delete account confirmation entry. #. TRANS: Field label for password reset form where the password has to be typed again. @@ -1642,6 +1649,7 @@ msgstr "Diese Gruppe löschen" #. TRANS: Client error displayed trying to create a new direct message while not logged in. #. TRANS: Client error displayed trying to send a notice while not logged in. #. TRANS: Client error displayed trying to nudge a user without being logged in. +#. TRANS: Client error displayed when trying to enable or disable a plugin while not logged in. #. TRANS: Client error displayed trying a change a subscription while not logged in. #. TRANS: Client error displayed trying to subscribe when not logged in. #. TRANS: Client error message thrown when trying to access the admin panel while not logged in. @@ -1707,9 +1715,8 @@ msgid "Do not delete this user." msgstr "Diesen Benutzer nicht löschen" #. TRANS: Submit button title for 'Yes' when deleting a user. -#, fuzzy msgid "Delete this user." -msgstr "Diesen Benutzer löschen" +msgstr "Diesen Benutzer löschen." #. TRANS: Message used as title for design settings for the site. msgid "Design" @@ -2048,6 +2055,8 @@ msgid "" "To send notices via email, we need to create a unique email address for you " "on this server:" msgstr "" +"Um Notizen per Email zu senden, müssen wir für dich eine eindeutige " +"Emailadresse generieren." #. TRANS: Button label for adding an e-mail address to send notices from. #. TRANS: Button label for adding an SMS e-mail address to send notices from. @@ -2096,7 +2105,7 @@ msgstr "Keine E-Mail-Adresse." #. TRANS: Message given saving e-mail address that cannot be normalised. #, fuzzy msgid "Cannot normalize that email address." -msgstr "Konnte diese E-Mail-Adresse nicht normalisieren" +msgstr "Diese e-Mail-Adresse kann nicht normalisiert werden." #. TRANS: Message given saving e-mail address that not valid. msgid "Not a valid email address." @@ -2631,7 +2640,7 @@ msgstr "IM-Adresse" #, php-format msgid "%s screenname." -msgstr "" +msgstr "%s Benutzername." #. TRANS: Header for IM preferences form. #, fuzzy @@ -3159,6 +3168,10 @@ msgstr "Quell-URL ist erforderlich." msgid "Could not create application." msgstr "Konnte das Programm nicht erstellen." +#, fuzzy +msgid "Invalid image." +msgstr "Ungültige Größe." + #. TRANS: Title for form to create a group. msgid "New group" msgstr "Neue Gruppe" @@ -3385,9 +3398,9 @@ msgstr "Empfänger nicht gefunden." #. TRANS: Server error displayed in oEmbed request when a path is not supported. #. TRANS: %s is a path. -#, php-format +#, fuzzy, php-format msgid "\"%s\" not supported for oembed requests." -msgstr "" +msgstr "\"%s\" ist für Oembed-Anfragen nicht unterstützt." #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png') #, php-format @@ -3448,50 +3461,75 @@ msgid "This is your outbox, which lists private messages you have sent." msgstr "" "Das hier ist dein Postausgang, er beinhaltet deine gesendeten Nachrichten." +#. TRANS: Title for page where to change password. +#, fuzzy +msgctxt "TITLE" msgid "Change password" msgstr "Passwort ändern" +#. TRANS: Instructions for page where to change password. msgid "Change your password." msgstr "Ändere dein Passwort." +#. TRANS: Fieldset legend on page where to change password. #. TRANS: Fieldset legend for password reset form. msgid "Password change" msgstr "Passwort geändert" +#. TRANS: Field label on page where to change password. msgid "Old password" msgstr "Altes Passwort" +#. TRANS: Field label on page where to change password. #. TRANS: Field label for password reset form. msgid "New password" msgstr "Neues Passwort" +#. TRANS: Field title on page where to change password. msgid "6 or more characters." msgstr "6 oder mehr Zeichen" +#. TRANS: Field label on page where to change password. In this field the new password should be typed a second time. +#, fuzzy +msgctxt "LABEL" +msgid "Confirm" +msgstr "Bestätigen" + +#. TRANS: Field title on page where to change password. #. TRANS: Ttile for field label for password reset form where the password has to be typed again. msgid "Same as password above." msgstr "Gleiches Passwort wie zuvor" +#. TRANS: Button text on page where to change password. +#, fuzzy +msgctxt "BUTTON" msgid "Change" msgstr "Ändern" +#. TRANS: Form validation error on page where to change password. msgid "Password must be 6 or more characters." msgstr "Das Passwort muss aus 6 oder mehr Zeichen bestehen." msgid "Passwords don't match." msgstr "Passwörter stimmen nicht überein." -msgid "Incorrect old password" +#. TRANS: Form validation error on page where to change password. +#, fuzzy +msgid "Incorrect old password." msgstr "Altes Passwort falsch" +#. TRANS: Form validation error on page where to change password. msgid "Error saving user; invalid." msgstr "Fehler beim Speichern des Benutzers, ungültig." +#. TRANS: Server error displayed on page where to change password when password change +#. TRANS: could not be made because of a server error. #. TRANS: Reset password form validation error message. #, fuzzy msgid "Cannot save new password." msgstr "Konnte neues Passwort nicht speichern" +#. TRANS: Form validation notice on page where to change password. msgid "Password saved." msgstr "Passwort gespeichert." @@ -3541,6 +3579,7 @@ msgstr "Seite" msgid "Server" msgstr "Server" +#. TRANS: Field title in Paths admin panel. msgid "Site's server hostname." msgstr "Server-Name der Seite" @@ -3548,6 +3587,7 @@ msgstr "Server-Name der Seite" msgid "Path" msgstr "Pfad" +#. TRANS: Field title in Paths admin panel. msgid "Site path." msgstr "Seitenpfad." @@ -3555,6 +3595,7 @@ msgstr "Seitenpfad." msgid "Locale directory" msgstr "Sprachpfad" +#. TRANS: Field title in Paths admin panel. msgid "Directory path to locales." msgstr "Pfad zu den Sprachen." @@ -3562,9 +3603,14 @@ msgstr "Pfad zu den Sprachen." msgid "Fancy URLs" msgstr "Schicke URLs." -msgid "Use fancy (more readable and memorable) URLs?" +#. TRANS: Field title in Paths admin panel. +#, fuzzy +msgid "Use fancy URLs (more readable and memorable)?" msgstr "Schicke URLs (lesbarer und besser zu merken) verwenden?" +#. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "Theme" msgstr "Motiv" @@ -3677,6 +3723,8 @@ msgid "Directory where attachments are located." msgstr "Pfad, in dem sich die Themes befinden." #. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "SSL" msgstr "SSL" @@ -3722,10 +3770,14 @@ msgstr "" msgid "People search" msgstr "Suche nach anderen Benutzern" +#. TRANS: Client error displayed when trying to tag a profile with an invalid tag. +#. TRANS: %s is the invalid tag. #, php-format msgid "Not a valid people tag: %s." msgstr "Ungültiger Personen-Tag: „%s“." +#. TRANS: Page title for users with a certain self-tag. +#. TRANS: %1$s is the tag, %2$s is the page number. #, php-format msgid "Users self-tagged with %1$s - page %2$d" msgstr "Benutzer, die sich selbst mit „%1$s“ getaggt haben - Seite %2$d" @@ -3733,17 +3785,21 @@ msgstr "Benutzer, die sich selbst mit „%1$s“ getaggt haben - Seite %2$d" #. TRANS: Page title for AJAX form return when a disabling a plugin. msgctxt "plugin" msgid "Disabled" -msgstr "" +msgstr "Deaktiviert" +#. TRANS: Client error displayed when trying to use another method than POST. +#. TRANS: Do not translate POST. #. TRANS: Client error displayed trying to perform any request method other than POST. #. TRANS: Do not translate POST. msgid "This action only accepts POST requests." msgstr "Diese Aktion nimmt nur POST-Requests" +#. TRANS: Client error displayed when trying to enable or disable a plugin without access rights. #, fuzzy msgid "You cannot administer plugins." msgstr "Du kannst keine Benutzer löschen." +#. TRANS: Client error displayed when trying to enable or disable a non-existing plugin. #, fuzzy msgid "No such plugin." msgstr "Seite nicht vorhanden" @@ -3751,10 +3807,11 @@ msgstr "Seite nicht vorhanden" #. TRANS: Page title for AJAX form return when enabling a plugin. msgctxt "plugin" msgid "Enabled" -msgstr "" +msgstr "Aktiviert" #. TRANS: Tab and title for plugins admin panel. -#. TRANS: Menu item for site administration +#, fuzzy +msgctxt "TITLE" msgid "Plugins" msgstr "Erweiterungen" @@ -3764,21 +3821,28 @@ msgid "" "\"http://status.net/wiki/Plugins\">online plugin documentation for more " "details." msgstr "" +"Zusätzliche Plugins können eingeschaltet und manuell konfiguriert werden. In " +"der Plugin Dokumentation " +"findest du mehr Details." #. TRANS: Admin form section header #, fuzzy msgid "Default plugins" msgstr "Bevorzugte Sprache" +#. TRANS: Text displayed on plugin admin page when no plugin are enabled. msgid "" "All default plugins have been disabled from the site's configuration file." -msgstr "" +msgstr "Alle Standard-Plugins der Konfigurationsdatei wurden deaktiviert." +#. TRANS: Client error displayed if the notice posted has too many characters. msgid "Invalid notice content." msgstr "Ungültiger Nachrichteninhalt." -#, php-format -msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’." +#. TRANS: Exception thrown if a notice's license is not compatible with the StatusNet site license. +#. TRANS: %1$s is the notice license, %2$s is the StatusNet site's license. +#, fuzzy, php-format +msgid "Notice license \"%1$s\" is not compatible with site license \"%2$s\"." msgstr "" "Die Nachrichtenlizenz „%1$s“ ist nicht kompatibel mit der Lizenz der Seite „%" "2$s“." @@ -3934,29 +3998,39 @@ msgstr "Einstellungen gespeichert." msgid "Restore account" msgstr "Neues Benutzerkonto erstellen" +#. TRANS: Client error displayed when requesting a public timeline page beyond the page limit. +#. TRANS: %s is the page limit. #, php-format msgid "Beyond the page limit (%s)." msgstr "Jenseits des Seitenlimits (%s)." +#. TRANS: Server error displayed when a public timeline cannot be retrieved. msgid "Could not retrieve public stream." msgstr "Konnte öffentlichen Stream nicht abrufen." +#. TRANS: Title for all public timeline pages but the first. +#. TRANS: %d is the page number. #, php-format msgid "Public timeline, page %d" msgstr "Öffentliche Zeitleiste, Seite %d" +#. TRANS: Title for the first public timeline page. msgid "Public timeline" msgstr "Öffentliche Zeitleiste" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 1.0)" msgstr "Feed des öffentlichen Streams (RSS 1.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 2.0)" msgstr "Feed des öffentlichen Streams (RSS 2.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (Atom)" msgstr "Feed des öffentlichen Streams (Atom)" +#. TRANS: Text displayed for public feed when there are no public notices. #, php-format msgid "" "This is the public timeline for %%site.name%% but no one has posted anything " @@ -3965,9 +4039,11 @@ msgstr "" "Dies ist die öffentliche Zeitleiste von %%site.name%%, es wurde allerdings " "noch nichts gepostet." +#. TRANS: Additional text displayed for public feed when there are no public notices for a logged in user. msgid "Be the first to post!" msgstr "Sei der erste, der etwas schreibt!" +#. TRANS: Additional text displayed for public feed when there are no public notices for a not logged in user. #, php-format msgid "" "Why not [register an account](%%action.register%%) and be the first to post!" @@ -3975,6 +4051,8 @@ msgstr "" "Warum nicht ein [Benutzerkonto anlegen](%%action.register%%) und den ersten " "Beitrag abschicken!" +#. TRANS: Message for not logged in users at an invite-only site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -3988,6 +4066,8 @@ msgstr "" "Nachrichten mit deinen Freunden, Familie oder Kollegen aus! ([Mehr " "Informationen](%%doc.help%%))" +#. TRANS: Message for not logged in users at a closed site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -4436,9 +4516,8 @@ msgstr "Du hast noch keine Programme registriert" #. TRANS: Client exception displayed trying to restore an account while something went wrong uploading a file. #. TRANS: Client exception. No file; probably just a non-AJAX submission. -#, fuzzy msgid "No uploaded file." -msgstr "Datei hochladen" +msgstr "Datei hochladen." #. TRANS: Client exception thrown when an uploaded file is larger than set in php.ini. msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini." @@ -4486,16 +4565,20 @@ msgid "" "Feed has been restored. Your old posts should now appear in search and your " "profile page." msgstr "" +"Dein Feed wurde reaktiviert. Deine alten Einträge sollten nun in der Suche " +"und auf deiner Profilseite erscheinen." #. TRANS: Message when a feed restore is in progress. msgid "Feed will be restored. Please wait a few minutes for results." -msgstr "" +msgstr "Feed wird wiederhergestellt. Dies kann einige Minuten dauern." #. TRANS: Form instructions for feed restore. msgid "" "You can upload a backed-up stream in Activity Streams format." msgstr "" +"Eine Sicherungskopie kann im Activity " +"Streams-Format hochgeladen werden." #. TRANS: Title for submit button to confirm upload of a user backup file for account restore. msgid "Upload the file" @@ -5378,7 +5461,7 @@ msgid "[none]" msgstr "Nichts" msgid "[internal]" -msgstr "" +msgstr "[internal]" #. TRANS: Label for dropdown with URL shortener services. msgid "Shorten URLs with" @@ -5389,31 +5472,30 @@ msgid "Automatic shortening service to use." msgstr "URL-Auto-Kürzungs-Dienst." msgid "URL longer than" -msgstr "" +msgstr "URL länger als" msgid "URLs longer than this will be shortened, 0 means always shorten." -msgstr "" +msgstr "längere URLs werden gekürzt. 0 bedeutet immer verkürzen." msgid "Text longer than" -msgstr "" +msgstr "Text länger als" msgid "" "URLs in notices longer than this will be shortened, 0 means always shorten." -msgstr "" +msgstr "längere URLs werden gekürzt. 0 bedeutet immer verkürzen." #. TRANS: Form validation error for form "Other settings" in user profile. msgid "URL shortening service is too long (maximum 50 characters)." msgstr "URL-Auto-Kürzungs-Dienst ist zu lang (maximal 50 Zeichen)." msgid "Invalid number for max url length." -msgstr "" +msgstr "Ungültige Zahl für maximale URL-Länge." -#, fuzzy msgid "Invalid number for max notice length." -msgstr "Ungültiger Nachrichteninhalt." +msgstr "Ungültige Zahl für maximale Nachrichten-Länge." msgid "Error saving user URL shortening preferences." -msgstr "" +msgstr "Fehler beim speichern der URL-Verkürzungs-Einstellungen." #. TRANS: User admin panel title msgctxt "TITLE" @@ -5709,6 +5791,10 @@ msgstr "" "Du hast eine Kopie der GNU Affero General Public License zusammen mit diesem " "Programm erhalten. Wenn nicht, siehe %s." +#. TRANS: Menu item for site administration +msgid "Plugins" +msgstr "Erweiterungen" + #. TRANS: Form input field label for application name. msgid "Name" msgstr "Name" @@ -5992,7 +6078,7 @@ msgstr "Kein einzelner Benutzer für den Ein-Benutzer-Modus ausgewählt." #. TRANS: Server exception. msgid "Single-user mode code called when not enabled." -msgstr "" +msgstr "Einzeluser-Modus aufgerufen, aber nicht aktiviert." #. TRANS: Server exception thrown when creating a group failed. msgid "Could not create group." @@ -6014,19 +6100,19 @@ msgstr "Konnte die lokale Gruppen Information nicht speichern." #. TRANS: %s is the remote site. #, fuzzy, php-format msgid "Cannot locate account %s." -msgstr "Du kannst keine Benutzer löschen." +msgstr "Kann Konto %s nicht finden." #. TRANS: Exception thrown when a service document could not be located account move. #. TRANS: %s is the remote site. #, php-format msgid "Cannot find XRD for %s." -msgstr "" +msgstr "XRD für %s kann nicht gefunden werden." #. TRANS: Exception thrown when an account could not be located when it should be moved. #. TRANS: %s is the remote site. #, php-format msgid "No AtomPub API service for %s." -msgstr "" +msgstr "AtomPub API für %s kann nicht gefunden werden." #. TRANS: Page title. %1$s is the title, %2$s is the site name. #, php-format @@ -6050,11 +6136,11 @@ msgstr "Antworten" #. TRANS: Placeholder text for inline reply form. Clicking in this box will turn it into a mini notice form. msgid "Write a reply..." -msgstr "" +msgstr "Antwort verfassen..." #, fuzzy msgid "Status" -msgstr "StatusNet" +msgstr "Status" #. TRANS: First sentence of the StatusNet site license. Used if 'broughtby' is set. #. TRANS: Text between [] is a link description, text between () is the link itself. @@ -6130,16 +6216,16 @@ msgstr "Root-Element eines Feeds erwartet, aber ganzes XML-Dokument erhalten." #. TRANS: Client exception thrown when using an unknown verb for the activity importer. #, fuzzy, php-format msgid "Unknown verb: \"%s\"." -msgstr "Unbekannte Sprache „%s“" +msgstr "Unbekanntes Verb: „%s“" #. TRANS: Client exception thrown when trying to force a subscription for an untrusted user. msgid "Cannot force subscription for untrusted user." -msgstr "" +msgstr "Abonnement für nicht vertrauten Benutzer kann nicht forciert werden." #. TRANS: Client exception thrown when trying to for a remote user to subscribe. #, fuzzy msgid "Cannot force remote user to subscribe." -msgstr "Gib den Namen des Benutzers an, den du abonnieren möchtest." +msgstr "Kann entfernten Benutzer nicht forciert abonnieren." #. TRANS: Client exception thrown when trying to subscribe to an unknown profile. #, fuzzy @@ -6148,11 +6234,11 @@ msgstr "Profil %s ist unbekannt" #. TRANS: Client exception thrown when trying to import an event not related to the importing user. msgid "This activity seems unrelated to our user." -msgstr "" +msgstr "Diese Aktivität scheint nicht mit dem Benutzer zusammenzuhängen." #. TRANS: Client exception thrown when trying to join a remote group that is not a group. msgid "Remote profile is not a group!" -msgstr "" +msgstr "Entferntes Profil ist keine Gruppe!" #. TRANS: Client exception thrown when trying to join a group the importing user is already a member of. #, fuzzy @@ -6163,11 +6249,11 @@ msgstr "Du bist bereits Mitglied dieser Gruppe" #. TRANS: %1$s is the source URI of the notice, %2$s is the URI of the author. #, php-format msgid "Already know about notice %1$s and it has a different author %2$s." -msgstr "" +msgstr "Ich kennne Notz %1$s bereits. Diese hat einen anderen Autor: %2$s" #. TRANS: Client exception thrown when trying to overwrite the author information for a non-trusted user during import. msgid "Not overwriting author info for non-trusted user." -msgstr "" +msgstr "Autor für nicht-vertrauten Benutzer wird nicht überschrieben." #. TRANS: Client exception thrown when trying to import a notice without content. #. TRANS: %s is the notice URI. @@ -6223,6 +6309,9 @@ msgstr "saveSettings() noch nicht implementiert." msgid "Unable to delete design setting." msgstr "Konnte die Design-Einstellungen nicht löschen." +msgid "Home" +msgstr "Homepage" + #. TRANS: Menu item title/tooltip msgid "Basic site configuration" msgstr "Basis-Seiteneinstellungen" @@ -6292,7 +6381,7 @@ msgid "No application for that consumer key." msgstr "Kein Programm mit diesem Anwender-Schlüssel." msgid "Not allowed to use API." -msgstr "" +msgstr "Darf API nicht verwenden." #. TRANS: OAuth exception given when an incorrect access token was given for a user. msgid "Bad access token." @@ -6318,7 +6407,7 @@ msgstr "Anonyme OAuth-Anwendung konnte nicht erstellt werden." #. TRANS: Exception thrown when no token association could be found. msgid "" "Could not find a profile and application associated with the request token." -msgstr "" +msgstr "Konnte kein Profil und Anwendung für das Anfrage-Token finden." #. TRANS: Exception thrown when no access token can be issued. #, fuzzy @@ -6850,9 +6939,6 @@ msgstr "Zur Installation gehen." msgid "Database error" msgstr "Datenbankfehler." -msgid "Home" -msgstr "Homepage" - msgid "Public" msgstr "Zeitleiste" @@ -7657,7 +7743,6 @@ msgstr "Nachricht senden" msgid "What's up, %s?" msgstr "Was geht, %s?" -#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Anhängen" @@ -7726,6 +7811,9 @@ msgstr "Nachricht löschen" msgid "Notice repeated" msgstr "Nachricht wiederholt" +msgid "Update your status..." +msgstr "" + msgid "Nudge this user" msgstr "Gib diesem Benutzer einen Stups" @@ -7773,16 +7861,16 @@ msgstr "Unbekannt" #. TRANS: Plugin admin panel controls msgctxt "plugin" msgid "Disable" -msgstr "" +msgstr "Deaktivieren" #. TRANS: Plugin admin panel controls msgctxt "plugin" msgid "Enable" -msgstr "" +msgstr "Aktivieren" msgctxt "plugin-description" msgid "(Plugin descriptions unavailable when disabled.)" -msgstr "" +msgstr "(Plugin Beschreibung nicht verfügbar wenn deaktiviert.)" msgid "Settings" msgstr "SMS-Einstellungen" @@ -7977,7 +8065,7 @@ msgid "URL" msgstr "URL" msgid "URL shorteners" -msgstr "" +msgstr "URL-Verkürzer" msgid "Updates by instant messenger (IM)" msgstr "Aktualisierungen via Instant Messenger (IM)" @@ -8228,17 +8316,9 @@ msgstr "Ungültiges XML." #. TRANS: Exception. msgid "Invalid XML, missing XRD root." -msgstr "" +msgstr "Ungültiges XML, XRD-Root fehlt." #. TRANS: Commandline script output. %s is the filename that contains a backup for a user. #, php-format msgid "Getting backup from file '%s'." msgstr "Hole Backup von der Datei „%s“." - -#, fuzzy -#~ msgid "Friends timeline" -#~ msgstr "%s-Zeitleiste" - -#, fuzzy -#~ msgid "Everyone on this site" -#~ msgstr "Finde Leute auf dieser Seite" diff --git a/locale/en_GB/LC_MESSAGES/statusnet.po b/locale/en_GB/LC_MESSAGES/statusnet.po index b7c4366f53..c08f5a607f 100644 --- a/locale/en_GB/LC_MESSAGES/statusnet.po +++ b/locale/en_GB/LC_MESSAGES/statusnet.po @@ -13,17 +13,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-08 01:03+0000\n" -"PO-Revision-Date: 2011-03-08 01:05:06+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:17:01+0000\n" "Language-Team: British English \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83429); Translate extension (2011-03-07)\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: en-gb\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-06 02:16:47+0000\n" +"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -1050,7 +1050,7 @@ msgstr "Find content of notices" #. TRANS: Client exception thrown when trying favorite a notice without content. #, fuzzy -msgid "Unknown note." +msgid "Unknown notice." msgstr "Unknown" #. TRANS: Client exception thrown when trying favorite an already favorited notice. @@ -1639,6 +1639,7 @@ msgstr "Delete this group" #. TRANS: Client error displayed trying to create a new direct message while not logged in. #. TRANS: Client error displayed trying to send a notice while not logged in. #. TRANS: Client error displayed trying to nudge a user without being logged in. +#. TRANS: Client error displayed when trying to enable or disable a plugin while not logged in. #. TRANS: Client error displayed trying a change a subscription while not logged in. #. TRANS: Client error displayed trying to subscribe when not logged in. #. TRANS: Client error message thrown when trying to access the admin panel while not logged in. @@ -3144,6 +3145,10 @@ msgstr "Source URL is required." msgid "Could not create application." msgstr "Could not create application." +#, fuzzy +msgid "Invalid image." +msgstr "Invalid size." + #. TRANS: Title for form to create a group. msgid "New group" msgstr "New group" @@ -3426,52 +3431,77 @@ msgstr "Outbox for %s" msgid "This is your outbox, which lists private messages you have sent." msgstr "This is your outbox, which lists private messages you have sent." +#. TRANS: Title for page where to change password. +#, fuzzy +msgctxt "TITLE" msgid "Change password" msgstr "Change password" +#. TRANS: Instructions for page where to change password. msgid "Change your password." msgstr "Change your password." +#. TRANS: Fieldset legend on page where to change password. #. TRANS: Fieldset legend for password reset form. msgid "Password change" msgstr "Password change" +#. TRANS: Field label on page where to change password. msgid "Old password" msgstr "Old password" +#. TRANS: Field label on page where to change password. #. TRANS: Field label for password reset form. msgid "New password" msgstr "New password" +#. TRANS: Field title on page where to change password. #, fuzzy msgid "6 or more characters." msgstr "6 or more characters" +#. TRANS: Field label on page where to change password. In this field the new password should be typed a second time. +#, fuzzy +msgctxt "LABEL" +msgid "Confirm" +msgstr "Confirm" + +#. TRANS: Field title on page where to change password. #. TRANS: Ttile for field label for password reset form where the password has to be typed again. #, fuzzy msgid "Same as password above." msgstr "Same as password above" +#. TRANS: Button text on page where to change password. +#, fuzzy +msgctxt "BUTTON" msgid "Change" msgstr "Change" +#. TRANS: Form validation error on page where to change password. msgid "Password must be 6 or more characters." msgstr "Password must be 6 or more characters." msgid "Passwords don't match." msgstr "Passwords don't match." -msgid "Incorrect old password" +#. TRANS: Form validation error on page where to change password. +#, fuzzy +msgid "Incorrect old password." msgstr "Incorrect old password" +#. TRANS: Form validation error on page where to change password. msgid "Error saving user; invalid." msgstr "Error saving user; invalid." +#. TRANS: Server error displayed on page where to change password when password change +#. TRANS: could not be made because of a server error. #. TRANS: Reset password form validation error message. #, fuzzy msgid "Cannot save new password." msgstr "Can't save new password." +#. TRANS: Form validation notice on page where to change password. msgid "Password saved." msgstr "Password saved." @@ -3521,6 +3551,7 @@ msgstr "Site" msgid "Server" msgstr "Server" +#. TRANS: Field title in Paths admin panel. msgid "Site's server hostname." msgstr "" @@ -3528,6 +3559,7 @@ msgstr "" msgid "Path" msgstr "" +#. TRANS: Field title in Paths admin panel. #, fuzzy msgid "Site path." msgstr "Site path" @@ -3537,6 +3569,7 @@ msgstr "Site path" msgid "Locale directory" msgstr "Locale Directory" +#. TRANS: Field title in Paths admin panel. msgid "Directory path to locales." msgstr "" @@ -3544,9 +3577,12 @@ msgstr "" msgid "Fancy URLs" msgstr "" -msgid "Use fancy (more readable and memorable) URLs?" +#. TRANS: Field title in Paths admin panel. +msgid "Use fancy URLs (more readable and memorable)?" msgstr "" +#. TRANS: Fieldset legend in Paths admin panel. +msgctxt "LEGEND" msgid "Theme" msgstr "" @@ -3666,6 +3702,8 @@ msgid "Directory where attachments are located." msgstr "" #. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "SSL" msgstr "SSL" @@ -3710,10 +3748,14 @@ msgstr "" msgid "People search" msgstr "People search" +#. TRANS: Client error displayed when trying to tag a profile with an invalid tag. +#. TRANS: %s is the invalid tag. #, php-format msgid "Not a valid people tag: %s." msgstr "Not a valid people tag: %s." +#. TRANS: Page title for users with a certain self-tag. +#. TRANS: %1$s is the tag, %2$s is the page number. #, php-format msgid "Users self-tagged with %1$s - page %2$d" msgstr "Users self-tagged with %1$s - page %2$d" @@ -3723,15 +3765,19 @@ msgctxt "plugin" msgid "Disabled" msgstr "" +#. TRANS: Client error displayed when trying to use another method than POST. +#. TRANS: Do not translate POST. #. TRANS: Client error displayed trying to perform any request method other than POST. #. TRANS: Do not translate POST. msgid "This action only accepts POST requests." msgstr "" +#. TRANS: Client error displayed when trying to enable or disable a plugin without access rights. #, fuzzy msgid "You cannot administer plugins." msgstr "You cannot delete users." +#. TRANS: Client error displayed when trying to enable or disable a non-existing plugin. #, fuzzy msgid "No such plugin." msgstr "No such page." @@ -3742,7 +3788,7 @@ msgid "Enabled" msgstr "" #. TRANS: Tab and title for plugins admin panel. -#. TRANS: Menu item for site administration +msgctxt "TITLE" msgid "Plugins" msgstr "" @@ -3758,15 +3804,19 @@ msgstr "" msgid "Default plugins" msgstr "Default language" +#. TRANS: Text displayed on plugin admin page when no plugin are enabled. msgid "" "All default plugins have been disabled from the site's configuration file." msgstr "" +#. TRANS: Client error displayed if the notice posted has too many characters. msgid "Invalid notice content." msgstr "Invalid notice content." -#, php-format -msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’." +#. TRANS: Exception thrown if a notice's license is not compatible with the StatusNet site license. +#. TRANS: %1$s is the notice license, %2$s is the StatusNet site's license. +#, fuzzy, php-format +msgid "Notice license \"%1$s\" is not compatible with site license \"%2$s\"." msgstr "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’." #. TRANS: Page title for profile settings. @@ -3918,29 +3968,39 @@ msgstr "Settings saved." msgid "Restore account" msgstr "Create an account" +#. TRANS: Client error displayed when requesting a public timeline page beyond the page limit. +#. TRANS: %s is the page limit. #, php-format msgid "Beyond the page limit (%s)." msgstr "" +#. TRANS: Server error displayed when a public timeline cannot be retrieved. msgid "Could not retrieve public stream." msgstr "Could not retrieve public stream." +#. TRANS: Title for all public timeline pages but the first. +#. TRANS: %d is the page number. #, php-format msgid "Public timeline, page %d" msgstr "Public timeline, page %d" +#. TRANS: Title for the first public timeline page. msgid "Public timeline" msgstr "Public timeline" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 1.0)" msgstr "Public Stream Feed (RSS 1.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 2.0)" msgstr "Public Stream Feed (RSS 2.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (Atom)" msgstr "Public Stream Feed (Atom)" +#. TRANS: Text displayed for public feed when there are no public notices. #, php-format msgid "" "This is the public timeline for %%site.name%% but no one has posted anything " @@ -3949,15 +4009,19 @@ msgstr "" "This is the public timeline for %%site.name%% but no one has posted anything " "yet." +#. TRANS: Additional text displayed for public feed when there are no public notices for a logged in user. msgid "Be the first to post!" msgstr "" +#. TRANS: Additional text displayed for public feed when there are no public notices for a not logged in user. #, php-format msgid "" "Why not [register an account](%%action.register%%) and be the first to post!" msgstr "" "Why not [register an account](%%action.register%%) and be the first to post!" +#. TRANS: Message for not logged in users at an invite-only site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -3970,6 +4034,8 @@ msgstr "" "tool. [Join now](%%action.register%%) to share notices about yourself with " "friends, family, and colleagues! ([Read more](%%doc.help%%))" +#. TRANS: Message for not logged in users at a closed site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -5654,6 +5720,10 @@ msgstr "" "You should have received a copy of the GNU Affero General Public License " "along with this program. If not, see %s." +#. TRANS: Menu item for site administration +msgid "Plugins" +msgstr "" + #. TRANS: Form input field label for application name. msgid "Name" msgstr "Name" @@ -6146,6 +6216,9 @@ msgstr "saveSettings() not implemented." msgid "Unable to delete design setting." msgstr "Unable to delete design setting." +msgid "Home" +msgstr "Homepage" + #. TRANS: Menu item title/tooltip msgid "Basic site configuration" msgstr "Basic site configuration" @@ -6765,9 +6838,6 @@ msgstr "Go to the installer." msgid "Database error" msgstr "" -msgid "Home" -msgstr "Homepage" - msgid "Public" msgstr "Public" @@ -7483,7 +7553,6 @@ msgstr "Send a notice" msgid "What's up, %s?" msgstr "What's up, %s?" -#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "" @@ -7549,6 +7618,9 @@ msgstr "Delete this notice" msgid "Notice repeated" msgstr "Notice repeated" +msgid "Update your status..." +msgstr "" + msgid "Nudge this user" msgstr "Nudge this user" @@ -8054,11 +8126,3 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" - -#, fuzzy -#~ msgid "Friends timeline" -#~ msgstr "%s timeline" - -#, fuzzy -#~ msgid "Everyone on this site" -#~ msgstr "Find people on this site" diff --git a/locale/eo/LC_MESSAGES/statusnet.po b/locale/eo/LC_MESSAGES/statusnet.po index fc4a68c796..2b24b835bf 100644 --- a/locale/eo/LC_MESSAGES/statusnet.po +++ b/locale/eo/LC_MESSAGES/statusnet.po @@ -17,17 +17,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-08 01:03+0000\n" -"PO-Revision-Date: 2011-03-08 01:05:07+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:17:02+0000\n" "Language-Team: Esperanto \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83429); Translate extension (2011-03-07)\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: eo\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-06 02:16:47+0000\n" +"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -784,7 +784,8 @@ msgid "" "Please return to the application and enter the following security code to " "complete the process." msgstr "" -"Bonvolu reiri al %s kaj enigu la jenan sekureco-kodo por plenumi la procezon." +"Bonvolu reiri al la aplikaĵo kaj enigi la jenan sekurecan kodon por " +"kompletigi la procezon." #. TRANS: Title of the page notifying the user that the client application was successfully authorized to access the user's account with OAuth. #. TRANS: %s is the authorised application name. @@ -872,10 +873,10 @@ msgstr "Kliento devas providi al \"stato\"-parametro valoron." #. TRANS: Client error displayed when the parameter "status" is missing. #. TRANS: %d is the maximum number of character for a notice. -#, fuzzy, php-format +#, php-format msgid "That's too long. Maximum notice size is %d character." msgid_plural "That's too long. Maximum notice size is %d characters." -msgstr[0] "Tro longas. Longlimo por avizo estas %d signoj." +msgstr[0] "Tro longa. Longlimo por avizo estas %d signo." msgstr[1] "Tro longas. Longlimo por avizo estas %d signoj." #. TRANS: Client error displayed when replying to a non-existing notice. @@ -888,7 +889,7 @@ msgstr "" msgid "Maximum notice size is %d character, including attachment URL." msgid_plural "Maximum notice size is %d characters, including attachment URL." msgstr[0] "" -"Longlimo por avizo estas %d signoj, enkalkulante ankaŭ la retadresojn." +"Longlimo por avizo estas %d signo, enkalkulante ankaŭ la retadresojn." msgstr[1] "" "Longlimo por avizo estas %d signoj, enkalkulante ankaŭ la retadresojn." @@ -956,7 +957,7 @@ msgstr "Ripetoj de %s" #, fuzzy, php-format msgid "%1$s notices that %2$s / %3$s has repeated." -msgstr "%s (@%s) ŝatis vian avizon" +msgstr "Avizoj ĉe %1$s, ripetitaj de %2$s / %3$s." #. TRANS: Title for timeline with lastest notices with a given tag. #. TRANS: %s is the tag. @@ -975,7 +976,7 @@ msgstr "Ĝisdatigoj etikeditaj %1$s ĉe %2$s!" #. TRANS: Client error displayed trying to add a notice to another user's timeline. #, fuzzy msgid "Only the user can add to their own timeline." -msgstr "Nur uzanto povas legi sian propran paŝton." +msgstr "Oni ne povas aldoni al tempstrio de aliulo." #. TRANS: Client error displayed when using another format than AtomPub. msgid "Only accept AtomPub for Atom feeds." @@ -1031,7 +1032,7 @@ msgstr "Ne ekzistas tia profilo." #. TRANS: Subtitle for Atom favorites feed. #. TRANS: %1$s is a user nickname, %2$s is the StatusNet sitename. -#, fuzzy, php-format +#, php-format msgid "Notices %1$s has favorited on %2$s" msgstr "Avizoj, ŝatmarkitaj de %1$s ĉe %2$s" @@ -1052,7 +1053,7 @@ msgstr "Nur avizoj estas ŝatmarkeblaj." #. TRANS: Client exception thrown when trying favorite a notice without content. #, fuzzy -msgid "Unknown note." +msgid "Unknown notice." msgstr "Nekonata" #. TRANS: Client exception thrown when trying favorite an already favorited notice. @@ -1064,24 +1065,22 @@ msgstr "Jam en la ŝatolisto." #. TRANS: %s is a username. #, fuzzy, php-format msgid "%s group memberships" -msgstr "%s grupanoj" +msgstr "Grupanecoj de %s" #. TRANS: Subtitle for group membership feed. #. TRANS: %1$s is a username, %2$s is the StatusNet sitename. -#, fuzzy, php-format +#, php-format msgid "Groups %1$s is a member of on %2$s" -msgstr "Grupoj de %s" +msgstr "Grupoj, kies ano %1$s estas ĉe %2$s" #. TRANS: Client exception thrown when trying subscribe someone else to a group. -#, fuzzy msgid "Cannot add someone else's membership." msgstr "Estas neeble aldoni anecon de aliulo." #. TRANS: Client error displayed when not using the POST verb. #. TRANS: Do not translate POST. -#, fuzzy msgid "Can only handle join activities." -msgstr "Serĉi enhavon ĉe la retejo" +msgstr "" #. TRANS: Client exception thrown when trying to subscribe to a non-existing group. msgid "Unknown group." @@ -1143,9 +1142,8 @@ msgid "Not a member." msgstr "Ne estas ano." #. TRANS: Client exception thrown when deleting someone else's membership. -#, fuzzy msgid "Cannot delete someone else's membership." -msgstr "Ne eblas forigi abonon al vi mem." +msgstr "Estas neeble forigi anecon de aliulo." #. TRANS: Client exception thrown when trying to display a subscription for a non-existing profile ID. #. TRANS: %d is the non-existing profile ID number. @@ -1186,9 +1184,9 @@ msgstr "Nekonata profilo %s." #. TRANS: Client error displayed trying to subscribe to an already subscribed profile. #. TRANS: %s is the profile the user already has a subscription on. -#, fuzzy, php-format +#, php-format msgid "Already subscribed to %s." -msgstr "Jam abonato!" +msgstr "%s jam abonitas de vi." #. TRANS: Client error displayed trying to get a non-existing attachment. msgid "No such attachment." @@ -1252,7 +1250,6 @@ msgstr "Antaŭrigardo" #. TRANS: Button on avatar upload page to delete current avatar. #. TRANS: Button text for user account deletion. -#, fuzzy msgctxt "BUTTON" msgid "Delete" msgstr "Forigi" @@ -1640,6 +1637,7 @@ msgstr "Forigi ĉi tiun grupon." #. TRANS: Client error displayed trying to create a new direct message while not logged in. #. TRANS: Client error displayed trying to send a notice while not logged in. #. TRANS: Client error displayed trying to nudge a user without being logged in. +#. TRANS: Client error displayed when trying to enable or disable a plugin while not logged in. #. TRANS: Client error displayed trying a change a subscription while not logged in. #. TRANS: Client error displayed trying to subscribe when not logged in. #. TRANS: Client error message thrown when trying to access the admin panel while not logged in. @@ -2544,13 +2542,13 @@ msgstr "Neniu rezulto." #. TRANS: Additional text on page where groups can be searched if no results were found for a query for a logged in user. #. TRANS: This message contains Markdown links in the form [link text](link). -#, fuzzy, php-format +#, php-format msgid "" "If you cannot find the group you're looking for, you can [create it](%%" "action.newgroup%%) yourself." msgstr "" -"Se vi ne trovas grupon, kiun vi serĉas, vi povas mem [krei ĝin](%%action." -"newgroup%%)." +"Se vi ne povas trovi grupon, kiun vi serĉas, vi povas mem [krei ĝin](%%" +"action.newgroup%%)." #. TRANS: Additional text on page where groups can be searched if no results were found for a query for a not logged in user. #. TRANS: This message contains Markdown links in the form [link text](link). @@ -2621,20 +2619,16 @@ msgid "IM Preferences" msgstr "Tujmesaĝilaj preferoj" #. TRANS: Checkbox label in IM preferences form. -#, fuzzy msgid "Send me notices" -msgstr "Sendi avizon" +msgstr "Sendi al mi avizojn" #. TRANS: Checkbox label in IM preferences form. -#, fuzzy msgid "Post a notice when my status changes." -msgstr "Afiŝu avizon tiam, kiam mia Jabber/GTalk-stato ŝanĝiĝas." +msgstr "Afiŝi avizon, kiam ŝanĝiĝas mia tujmesaĝila stato." #. TRANS: Checkbox label in IM preferences form. -#, fuzzy msgid "Send me replies from people I'm not subscribed to." -msgstr "" -"Sendu al mi per Jabber/GTalk respondojn de personoj, kiujn mi ne abonas." +msgstr "Sendi al mi respondojn de personoj, kiujn mi ne abonas." #. TRANS: Checkbox label in IM preferences form. #, fuzzy @@ -2644,7 +2638,7 @@ msgstr "Publikigi MikroID por mia retpoŝtadreso." #. TRANS: Server error thrown on database error updating IM preferences. #, fuzzy msgid "Couldn't update IM preferences." -msgstr "Malsukcesis ĝisdatigi uzanton" +msgstr "Malsukcesis ĝisdatigi tujmesaĝajn agordojn." #. TRANS: Confirmation message for successful IM preferences save. #. TRANS: Confirmation message after saving preferences. @@ -2676,20 +2670,16 @@ msgid "Screenname already belongs to another user." msgstr "Jabber-ID jam apartenas al alia uzanto." #. TRANS: Message given saving valid IM address that is to be confirmed. -#, fuzzy msgid "A confirmation code was sent to the IM address you added." -msgstr "" -"Konfirmo-kodo senditas al la tujmesaĝila adreso aldonita. Vi devas permesi " -"al %s sendi mesaĝojn al vi." +msgstr "Konfirmo-kodo senditas al la tujmesaĝila adreso, kiun vi aldonis." #. TRANS: Message given canceling IM address confirmation for the wrong IM address. msgid "That is the wrong IM address." msgstr "Tiu tujmesaĝila adreso estas malĝusta." #. TRANS: Server error thrown on database error canceling IM address confirmation. -#, fuzzy msgid "Couldn't delete confirmation." -msgstr "Malsukcesis forigi tujmesaĝila agordo." +msgstr "Malsukcesis forigo de adreskonfirmo." #. TRANS: Message given after successfully canceling IM address confirmation. msgid "IM confirmation cancelled." @@ -2697,14 +2687,12 @@ msgstr "Tujmesaĝila konfirmo nuligita." #. TRANS: Message given trying to remove an IM address that is not #. TRANS: registered for the active user. -#, fuzzy msgid "That is not your screenname." -msgstr "Tio ne estas via telefonnumero." +msgstr "Tio ne estas via tujmesaĝila adreso." #. TRANS: Server error thrown on database error removing a registered IM address. -#, fuzzy msgid "Couldn't update user im prefs." -msgstr "Malsukcesis ĝisdatigi uzantan informon." +msgstr "Malsukcesis ĝisdatigo de tujmesaĝaj agordoj de uzanto." #. TRANS: Message given after successfully removing a registered Instant Messaging address. msgid "The IM address was removed." @@ -2739,12 +2727,11 @@ msgstr "Ensalutu por inviti aliajn uzantojn al %s." #. TRANS: Form validation message when providing an e-mail address that does not validate. #. TRANS: %s is an invalid e-mail address. -#, fuzzy, php-format +#, php-format msgid "Invalid email address: %s." -msgstr "Nevalida retpoŝtadreso: %s" +msgstr "Nevalida retpoŝtadreso: %s." #. TRANS: Page title when invitations have been sent. -#, fuzzy msgid "Invitations sent" msgstr "Invito(j) senditas" @@ -2943,19 +2930,22 @@ msgstr "Nevalida permesila titolo. La longlimo estas 255 literoj." #. TRANS: Client error displayed specifying an invalid license URL in the license admin panel. msgid "Invalid license URL." -msgstr "" +msgstr "Nevalida URL de permesilo." #. TRANS: Client error displayed specifying an invalid license image URL in the license admin panel. +#, fuzzy msgid "Invalid license image URL." -msgstr "" +msgstr "Nevalida URL de bildo de permesilo." #. TRANS: Client error displayed specifying an invalid license URL in the license admin panel. +#, fuzzy msgid "License URL must be blank or a valid URL." -msgstr "" +msgstr "URL de permesilo devas foresti aŭ esti valida URL." #. TRANS: Client error displayed specifying an invalid license image URL in the license admin panel. +#, fuzzy msgid "License image must be blank or valid URL." -msgstr "" +msgstr "URL de bildo de permesilo devas foresti aŭ esti valida URL." #. TRANS: Form legend in the license admin panel. msgid "License selection" @@ -3054,7 +3044,6 @@ msgid "Automatically login in the future; not for shared computers!" msgstr "Aŭtomate ensaluti estonte; ne taŭge por komuna komputilo!" #. TRANS: Button text for log in on login page. -#, fuzzy msgctxt "BUTTON" msgid "Login" msgstr "Ensaluti" @@ -3131,14 +3120,17 @@ msgstr "Fonta URL bezonata." msgid "Could not create application." msgstr "Malsukcesis krei aplikaĵon." +#, fuzzy +msgid "Invalid image." +msgstr "Grando nevalida." + #. TRANS: Title for form to create a group. msgid "New group" msgstr "Nova grupo" #. TRANS: Client exception thrown when a user tries to create a group while banned. -#, fuzzy msgid "You are not allowed to create groups on this site." -msgstr "Vi ne estas grupano." +msgstr "Vi ne rajtas krei grupojn en ĉi tiu retpaĝaro." #. TRANS: Form instructions for group create form. msgid "Use this form to create a new group." @@ -3151,9 +3143,8 @@ msgstr "Nova mesaĝo" #. TRANS: Client error displayed trying to send a direct message to a user while sender and #. TRANS: receiver are not subscribed to each other. -#, fuzzy msgid "You cannot send a message to this user." -msgstr "Vi ne povas sendi mesaĝon al la uzanto." +msgstr "Vi ne povas sendi mesaĝon al tiu uzanto." #. TRANS: Form validator error displayed trying to send a direct message without content. #. TRANS: Client error displayed trying to send a notice without content. @@ -3325,13 +3316,13 @@ msgstr "" #. TRANS: %s is a path. #, fuzzy, php-format msgid "\"%s\" not found." -msgstr "Metodo de API ne troviĝas." +msgstr "\"%s\" ne trovitas." #. TRANS: Server error displayed in oEmbed action when notice not found. #. TRANS: %s is a notice. -#, fuzzy, php-format +#, php-format msgid "Notice %s not found." -msgstr "Metodo de API ne troviĝas." +msgstr "Avizo %s ne trovitas." #. TRANS: Server error displayed in oEmbed action when notice has not profile. msgid "Notice has no profile." @@ -3413,52 +3404,77 @@ msgid "This is your outbox, which lists private messages you have sent." msgstr "" "Tio ĉi estas via elirkesto, kie listiĝas privataj mesaĝoj, kiujn vi sendis." +#. TRANS: Title for page where to change password. +#, fuzzy +msgctxt "TITLE" msgid "Change password" msgstr "Ŝanĝi pasvorton" +#. TRANS: Instructions for page where to change password. msgid "Change your password." msgstr "Ŝanĝi vian pasvorton." +#. TRANS: Fieldset legend on page where to change password. #. TRANS: Fieldset legend for password reset form. msgid "Password change" msgstr "Pasvorta ŝanĝo" +#. TRANS: Field label on page where to change password. msgid "Old password" msgstr "Malnova pasvorto" +#. TRANS: Field label on page where to change password. #. TRANS: Field label for password reset form. msgid "New password" msgstr "Nova pasvorto" +#. TRANS: Field title on page where to change password. #, fuzzy msgid "6 or more characters." msgstr "6 aŭ pli da literoj" +#. TRANS: Field label on page where to change password. In this field the new password should be typed a second time. +#, fuzzy +msgctxt "LABEL" +msgid "Confirm" +msgstr "Konfirmi" + +#. TRANS: Field title on page where to change password. #. TRANS: Ttile for field label for password reset form where the password has to be typed again. #, fuzzy msgid "Same as password above." msgstr "Same kiel pasvorto supra" +#. TRANS: Button text on page where to change password. +#, fuzzy +msgctxt "BUTTON" msgid "Change" msgstr "Ŝanĝi" +#. TRANS: Form validation error on page where to change password. msgid "Password must be 6 or more characters." msgstr "Pasvorto devas esti 6-litera aŭ pli longa." msgid "Passwords don't match." msgstr "La pasvortoj diferencas." -msgid "Incorrect old password" +#. TRANS: Form validation error on page where to change password. +#, fuzzy +msgid "Incorrect old password." msgstr "Neĝusta malnova pasvorto" +#. TRANS: Form validation error on page where to change password. msgid "Error saving user; invalid." msgstr "Eraris konservi uzanton: nevalida." +#. TRANS: Server error displayed on page where to change password when password change +#. TRANS: could not be made because of a server error. #. TRANS: Reset password form validation error message. #, fuzzy msgid "Cannot save new password." msgstr "Malsukcesis konservi novan pasvorton." +#. TRANS: Form validation notice on page where to change password. msgid "Password saved." msgstr "Pasvorto konservitas." @@ -3508,6 +3524,7 @@ msgstr "Retejo" msgid "Server" msgstr "Servilo" +#. TRANS: Field title in Paths admin panel. msgid "Site's server hostname." msgstr "Gastigserva Nomo de la retejo" @@ -3515,6 +3532,7 @@ msgstr "Gastigserva Nomo de la retejo" msgid "Path" msgstr "Vojo" +#. TRANS: Field title in Paths admin panel. #, fuzzy msgid "Site path." msgstr "Reteja vojo" @@ -3523,6 +3541,7 @@ msgstr "Reteja vojo" msgid "Locale directory" msgstr "Dosierujo de lokaĵaro" +#. TRANS: Field title in Paths admin panel. msgid "Directory path to locales." msgstr "Vojo de dosierujo al lokaĵaroj." @@ -3530,9 +3549,14 @@ msgstr "Vojo de dosierujo al lokaĵaroj." msgid "Fancy URLs" msgstr "Tajlora URL" -msgid "Use fancy (more readable and memorable) URLs?" +#. TRANS: Field title in Paths admin panel. +#, fuzzy +msgid "Use fancy URLs (more readable and memorable)?" msgstr "Ĉu uzi tajloran (pli facile legebla kaj memorebla) URL?" +#. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "Theme" msgstr "Temo" @@ -3645,6 +3669,8 @@ msgid "Directory where attachments are located." msgstr "Dosierujo kie aldonaĵoj estas." #. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "SSL" msgstr "\"SSL\"" @@ -3689,10 +3715,14 @@ msgstr "" msgid "People search" msgstr "Persona serĉado" +#. TRANS: Client error displayed when trying to tag a profile with an invalid tag. +#. TRANS: %s is the invalid tag. #, php-format msgid "Not a valid people tag: %s." msgstr "Ne valida persona markilo: %s." +#. TRANS: Page title for users with a certain self-tag. +#. TRANS: %1$s is the tag, %2$s is the page number. #, php-format msgid "Users self-tagged with %1$s - page %2$d" msgstr "Uzantoj sinmarkitaj per %1$s - paĝo %2$d" @@ -3702,15 +3732,19 @@ msgctxt "plugin" msgid "Disabled" msgstr "" +#. TRANS: Client error displayed when trying to use another method than POST. +#. TRANS: Do not translate POST. #. TRANS: Client error displayed trying to perform any request method other than POST. #. TRANS: Do not translate POST. msgid "This action only accepts POST requests." msgstr "La ago akceptas nur POST-an peton." +#. TRANS: Client error displayed when trying to enable or disable a plugin without access rights. #, fuzzy msgid "You cannot administer plugins." msgstr "Vi ne povas forigi uzantojn." +#. TRANS: Client error displayed when trying to enable or disable a non-existing plugin. #, fuzzy msgid "No such plugin." msgstr "Ne estas tiu paĝo." @@ -3721,7 +3755,8 @@ msgid "Enabled" msgstr "" #. TRANS: Tab and title for plugins admin panel. -#. TRANS: Menu item for site administration +#, fuzzy +msgctxt "TITLE" msgid "Plugins" msgstr "Kromprogramo" @@ -3737,15 +3772,19 @@ msgstr "" msgid "Default plugins" msgstr "Defaŭlta lingvo" +#. TRANS: Text displayed on plugin admin page when no plugin are enabled. msgid "" "All default plugins have been disabled from the site's configuration file." msgstr "" +#. TRANS: Client error displayed if the notice posted has too many characters. msgid "Invalid notice content." msgstr "Nevalida avizo-enhavo" -#, php-format -msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’." +#. TRANS: Exception thrown if a notice's license is not compatible with the StatusNet site license. +#. TRANS: %1$s is the notice license, %2$s is the StatusNet site's license. +#, fuzzy, php-format +msgid "Notice license \"%1$s\" is not compatible with site license \"%2$s\"." msgstr "Aviza permesilo ‘%1$s’ ne konformas al reteja permesilo ‘%2$s’." #. TRANS: Page title for profile settings. @@ -3830,9 +3869,8 @@ msgid "Language" msgstr "Lingvo" #. TRANS: Tooltip for dropdown list label in form for profile settings. -#, fuzzy msgid "Preferred language." -msgstr "Preferata lingvo" +msgstr "Preferata lingvo." #. TRANS: Dropdownlist label in form for profile settings. msgid "Timezone" @@ -3898,29 +3936,39 @@ msgstr "Agordo konservitas." msgid "Restore account" msgstr "Krei konton" +#. TRANS: Client error displayed when requesting a public timeline page beyond the page limit. +#. TRANS: %s is the page limit. #, php-format msgid "Beyond the page limit (%s)." msgstr "Trans paĝolimo (%s)." +#. TRANS: Server error displayed when a public timeline cannot be retrieved. msgid "Could not retrieve public stream." msgstr "Malsukcesis ricevi publikan fluon" +#. TRANS: Title for all public timeline pages but the first. +#. TRANS: %d is the page number. #, php-format msgid "Public timeline, page %d" msgstr "Publika tempstrio, paĝo %d" +#. TRANS: Title for the first public timeline page. msgid "Public timeline" msgstr "Publika tempstrio" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 1.0)" msgstr "Publika fluo (RSS 1.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 2.0)" msgstr "Publika fluo (RSS 2.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (Atom)" msgstr "Publika fluo (Atom)" +#. TRANS: Text displayed for public feed when there are no public notices. #, php-format msgid "" "This is the public timeline for %%site.name%% but no one has posted anything " @@ -3929,14 +3977,18 @@ msgstr "" "Tio ĉi estas la publika tempstrio de %%site.name%%, sed ankoraŭ neniu afiŝis " "ion ajn." +#. TRANS: Additional text displayed for public feed when there are no public notices for a logged in user. msgid "Be the first to post!" msgstr "Estu la unua afiŝanto!" +#. TRANS: Additional text displayed for public feed when there are no public notices for a not logged in user. #, php-format msgid "" "Why not [register an account](%%action.register%%) and be the first to post!" msgstr "Kial ne [krei konton](%%action.register%%) kaj esti la unua afiŝanto!" +#. TRANS: Message for not logged in users at an invite-only site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -3949,6 +4001,8 @@ msgstr "" "net/). [Aniĝu](%%action.register%%) por konigi novaĵon pri vi mem al viaj " "amikoj, familianoj, kaj kolegoj! ([Pli](%%doc.help%%))" +#. TRANS: Message for not logged in users at a closed site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -4313,7 +4367,6 @@ msgstr "Nur ensalutinto rajtas ripeti avizon." msgid "No notice specified." msgstr "Neniu profilo specifiĝas." -#, fuzzy msgid "You cannot repeat your own notice." msgstr "Vi ne povas ripeti vian propran avizon." @@ -4380,7 +4433,7 @@ msgstr "Respondoj al %1$s ĉe %2$s!" #. TRANS: Client exception displayed when trying to restore an account while not logged in. #, fuzzy msgid "Only logged-in users can restore their account." -msgstr "Nur ensalutinto rajtas ripeti avizon." +msgstr "Nur ensalutintoj rajtas restarigi sian konton." #. TRANS: Client exception displayed when trying to restore an account without having restore rights. #, fuzzy @@ -4391,7 +4444,7 @@ msgstr "Vi ankoraŭ neniun aplikaĵon registris." #. TRANS: Client exception. No file; probably just a non-AJAX submission. #, fuzzy msgid "No uploaded file." -msgstr "Alŝuti dosieron" +msgstr "Malestas alŝutita dosiero." #. TRANS: Client exception thrown when an uploaded file is larger than set in php.ini. msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini." @@ -5315,7 +5368,7 @@ msgid "[none]" msgstr "Nenio" msgid "[internal]" -msgstr "" +msgstr "[interna]" #. TRANS: Label for dropdown with URL shortener services. msgid "Shorten URLs with" @@ -5325,18 +5378,22 @@ msgstr "Mallongigu URLojn per" msgid "Automatic shortening service to use." msgstr "Uzota aŭtomata mallongigad-servo." +#, fuzzy msgid "URL longer than" -msgstr "" +msgstr "URL pli longa, ol" msgid "URLs longer than this will be shortened, 0 means always shorten." -msgstr "" +msgstr "URLoj pli longaj ol tio mallongigatos, uzu «0» por ĉiam mallongigi." +#, fuzzy msgid "Text longer than" -msgstr "" +msgstr "Teksto pli longa, ol" msgid "" "URLs in notices longer than this will be shortened, 0 means always shorten." msgstr "" +"URLoj en avizoj pli longaj, ol tio, mallongigatos; uzu «0» por ĉiam " +"mallongigi." #. TRANS: Form validation error for form "Other settings" in user profile. #, fuzzy @@ -5641,6 +5698,10 @@ msgstr "" "Vi laŭe jam ricevis eldonon de la GNU Affero Ĝenerala Publika Permesilo. " "Nekaze, legu %s." +#. TRANS: Menu item for site administration +msgid "Plugins" +msgstr "Kromprogramo" + #. TRANS: Form input field label for application name. msgid "Name" msgstr "Nomo" @@ -5744,7 +5805,7 @@ msgstr "Aniĝi" #. TRANS: %1$s is the member name, %2$s is the subscribed group's name. #, php-format msgid "%1$s has joined group %2$s." -msgstr "" +msgstr "%1$s aniĝis grupon %2$s." #. TRANS: Server exception thrown when updating a local group fails. msgid "Could not update local group." @@ -6140,6 +6201,10 @@ msgstr "saveSettings() ne jam realigita." msgid "Unable to delete design setting." msgstr "Malsukcesas forigi desegnan agordon." +#, fuzzy +msgid "Home" +msgstr "Hejmpaĝo" + #. TRANS: Menu item title/tooltip msgid "Basic site configuration" msgstr "Baza reteja agordo" @@ -6364,7 +6429,7 @@ msgstr "" #. TRANS: Server exception thrown when using the method setActivitySubject() in the class Atom10Feed. #, fuzzy msgid "Do not use this method!" -msgstr "Ne forigi la avizon" +msgstr "Ne uzu ĉi tiun metodon!" #. TRANS: Title. msgid "Notices where this attachment appears" @@ -6377,7 +6442,7 @@ msgstr "Etikedoj por ĉi tiu aldonaĵo" #. TRANS: Exception thrown when a password change fails. #, fuzzy msgid "Password changing failed." -msgstr "La ŝanĝo de pasvorto maltrafis" +msgstr "Ŝanĝo de pasvorto malsukcesis." #. TRANS: Exception thrown when a password change attempt fails because it is not allowed. #, fuzzy @@ -6461,7 +6526,7 @@ msgstr "" #. TRANS: Error message text shown when a favorite could not be set because it has already been favorited. #, fuzzy msgid "Could not create favorite: already favorited." -msgstr "Malsukcesis krei ŝataton." +msgstr "Malsukcesis krei ŝatmarkon: jam ŝatmarkita." #. TRANS: Text shown when a notice has been marked as favourite successfully. msgid "Notice marked as fave." @@ -6771,10 +6836,6 @@ msgstr "Al la instalilo." msgid "Database error" msgstr "Datumbaza eraro" -#, fuzzy -msgid "Home" -msgstr "Hejmpaĝo" - msgid "Public" msgstr "Publika" @@ -7528,7 +7589,7 @@ msgstr "Elektu peranton" #. TRANS Entry in drop-down selection box in direct-message inbox/outbox when no one is available to message. #, fuzzy msgid "No mutual subscribers." -msgstr "Ne abonato!" +msgstr "Mankas abonantoj reciprokaj." msgid "To" msgstr "Al" @@ -7578,7 +7639,6 @@ msgstr "Sendi avizon" msgid "What's up, %s?" msgstr "Kio novas, %s?" -#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Aldoni" @@ -7647,6 +7707,9 @@ msgstr "Forigi la avizon" msgid "Notice repeated" msgstr "Avizo ripetiĝas" +msgid "Update your status..." +msgstr "" + msgid "Nudge this user" msgstr "Puŝeti la uzanton" @@ -7672,9 +7735,8 @@ msgstr "Refoja avizo." msgid "Couldn't insert new subscription." msgstr "Eraris enmeti novan abonon." -#, fuzzy msgid "Your profile" -msgstr "Grupa profilo" +msgstr "Via profilo" msgid "Replies" msgstr "Respondoj" @@ -7705,36 +7767,30 @@ msgctxt "plugin-description" msgid "(Plugin descriptions unavailable when disabled.)" msgstr "" -#, fuzzy msgid "Settings" -msgstr "SMM-a agordo" +msgstr "Agordoj" -#, fuzzy msgid "Change your personal settings" -msgstr "Ŝanĝi vian profilan agordon." +msgstr "Ŝanĝi viajn personajn agordojn" -#, fuzzy msgid "Site configuration" -msgstr "Uzanta agordo" +msgstr "Retej-agordo" -#, fuzzy msgid "Logout" -msgstr " Elsaluti" +msgstr "Elsaluti" -#, fuzzy msgid "Logout from the site" -msgstr "Elsaluti el la retejo" +msgstr "Elsaluti el la retpaĝaro" #, fuzzy msgid "Login to the site" -msgstr "Ensaluti al la retejo" +msgstr "Ensaluti al la retpaĝaro" msgid "Search" msgstr "Serĉi" -#, fuzzy msgid "Search the site" -msgstr "Serĉi ĉe retejo" +msgstr "Serĉi en la retpaĝaro" #. TRANS: H2 text for user subscription statistics. #. TRANS: Label for user statistics. @@ -7810,9 +7866,8 @@ msgid "Revoke the \"%s\" role from this user" msgstr "Revoki rolon %s de la uzanto" #. TRANS: Client error on action trying to visit a non-existing page. -#, fuzzy msgid "Page not found." -msgstr "Metodo de API ne troviĝas." +msgstr "Paĝo ne trovitas." msgid "Sandbox" msgstr "Provejo" @@ -7904,7 +7959,7 @@ msgid "URL" msgstr "URL" msgid "URL shorteners" -msgstr "" +msgstr "Mallongigiloj de URLoj" msgid "Updates by instant messenger (IM)" msgstr "Ĝisdatiĝo per tujmesaĝilo." @@ -8161,11 +8216,3 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" - -#, fuzzy -#~ msgid "Friends timeline" -#~ msgstr "Tempstrio de %s" - -#, fuzzy -#~ msgid "Everyone on this site" -#~ msgstr "Serĉi homon ĉe la retejo" diff --git a/locale/es/LC_MESSAGES/statusnet.po b/locale/es/LC_MESSAGES/statusnet.po index 81bccda833..7319a67351 100644 --- a/locale/es/LC_MESSAGES/statusnet.po +++ b/locale/es/LC_MESSAGES/statusnet.po @@ -18,17 +18,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-08 01:03+0000\n" -"PO-Revision-Date: 2011-03-08 01:05:08+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:17:03+0000\n" "Language-Team: Spanish \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83429); Translate extension (2011-03-07)\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: es\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-06 02:16:47+0000\n" +"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -1060,7 +1060,8 @@ msgid "Can only fave notices." msgstr "Sólo se pueden preferir los avisos." #. TRANS: Client exception thrown when trying favorite a notice without content. -msgid "Unknown note." +#, fuzzy +msgid "Unknown notice." msgstr "Nota desconocida." #. TRANS: Client exception thrown when trying favorite an already favorited notice. @@ -1648,6 +1649,7 @@ msgstr "Borrar este grupo" #. TRANS: Client error displayed trying to create a new direct message while not logged in. #. TRANS: Client error displayed trying to send a notice while not logged in. #. TRANS: Client error displayed trying to nudge a user without being logged in. +#. TRANS: Client error displayed when trying to enable or disable a plugin while not logged in. #. TRANS: Client error displayed trying a change a subscription while not logged in. #. TRANS: Client error displayed trying to subscribe when not logged in. #. TRANS: Client error message thrown when trying to access the admin panel while not logged in. @@ -3165,6 +3167,10 @@ msgstr "Se requiere el URL fuente." msgid "Could not create application." msgstr "No se pudo crear la aplicación." +#, fuzzy +msgid "Invalid image." +msgstr "Tamaño inválido." + #. TRANS: Title for form to create a group. msgid "New group" msgstr "Grupo nuevo " @@ -3449,52 +3455,77 @@ msgid "This is your outbox, which lists private messages you have sent." msgstr "" "Ésta es tu bandeja de salida, incluye la lista de mensajes privados enviados." +#. TRANS: Title for page where to change password. +#, fuzzy +msgctxt "TITLE" msgid "Change password" msgstr "Cambiar contraseña" +#. TRANS: Instructions for page where to change password. msgid "Change your password." msgstr "Cambia tu contraseña" +#. TRANS: Fieldset legend on page where to change password. #. TRANS: Fieldset legend for password reset form. msgid "Password change" msgstr "Cambio de contraseña" +#. TRANS: Field label on page where to change password. msgid "Old password" msgstr "Antigua contraseña" +#. TRANS: Field label on page where to change password. #. TRANS: Field label for password reset form. msgid "New password" msgstr "Nueva contraseña" +#. TRANS: Field title on page where to change password. #, fuzzy msgid "6 or more characters." msgstr "6 o más caracteres" +#. TRANS: Field label on page where to change password. In this field the new password should be typed a second time. +#, fuzzy +msgctxt "LABEL" +msgid "Confirm" +msgstr "Confirmar" + +#. TRANS: Field title on page where to change password. #. TRANS: Ttile for field label for password reset form where the password has to be typed again. #, fuzzy msgid "Same as password above." msgstr "Igual a la contraseña de arriba" +#. TRANS: Button text on page where to change password. +#, fuzzy +msgctxt "BUTTON" msgid "Change" msgstr "Cambiar" +#. TRANS: Form validation error on page where to change password. msgid "Password must be 6 or more characters." msgstr "La contraseña debe tener 6 o más caracteres." msgid "Passwords don't match." msgstr "Las contraseñas no coinciden" -msgid "Incorrect old password" +#. TRANS: Form validation error on page where to change password. +#, fuzzy +msgid "Incorrect old password." msgstr "Contraseña antigua incorrecta." +#. TRANS: Form validation error on page where to change password. msgid "Error saving user; invalid." msgstr "Error al guardar el usuario; inválido." +#. TRANS: Server error displayed on page where to change password when password change +#. TRANS: could not be made because of a server error. #. TRANS: Reset password form validation error message. #, fuzzy msgid "Cannot save new password." msgstr "No se puede guardar la nueva contraseña." +#. TRANS: Form validation notice on page where to change password. msgid "Password saved." msgstr "Se guardó la contraseña." @@ -3544,6 +3575,7 @@ msgstr "Sitio" msgid "Server" msgstr "Servidor" +#. TRANS: Field title in Paths admin panel. msgid "Site's server hostname." msgstr "Nombre del host del servidor del sitio." @@ -3551,6 +3583,7 @@ msgstr "Nombre del host del servidor del sitio." msgid "Path" msgstr "Ruta" +#. TRANS: Field title in Paths admin panel. #, fuzzy msgid "Site path." msgstr "Ruta del sitio" @@ -3560,6 +3593,7 @@ msgstr "Ruta del sitio" msgid "Locale directory" msgstr "Directorio de temas" +#. TRANS: Field title in Paths admin panel. #, fuzzy msgid "Directory path to locales." msgstr "Ruta del directorio de las configuraciones locales" @@ -3568,9 +3602,14 @@ msgstr "Ruta del directorio de las configuraciones locales" msgid "Fancy URLs" msgstr "URL agradables" -msgid "Use fancy (more readable and memorable) URLs?" +#. TRANS: Field title in Paths admin panel. +#, fuzzy +msgid "Use fancy URLs (more readable and memorable)?" msgstr "¿Usar URL amigables (más legibles y memorizables)?" +#. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "Theme" msgstr "Tema" @@ -3696,6 +3735,8 @@ msgid "Directory where attachments are located." msgstr "Ruta del directorio de las configuraciones locales" #. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "SSL" msgstr "SSL" @@ -3742,10 +3783,14 @@ msgstr "" msgid "People search" msgstr "Buscador de gente" +#. TRANS: Client error displayed when trying to tag a profile with an invalid tag. +#. TRANS: %s is the invalid tag. #, php-format msgid "Not a valid people tag: %s." msgstr "No es una etiqueta válida para personas: %s." +#. TRANS: Page title for users with a certain self-tag. +#. TRANS: %1$s is the tag, %2$s is the page number. #, php-format msgid "Users self-tagged with %1$s - page %2$d" msgstr "Usuarios auto etiquetados con %1$s - página %2$d" @@ -3755,15 +3800,19 @@ msgctxt "plugin" msgid "Disabled" msgstr "" +#. TRANS: Client error displayed when trying to use another method than POST. +#. TRANS: Do not translate POST. #. TRANS: Client error displayed trying to perform any request method other than POST. #. TRANS: Do not translate POST. msgid "This action only accepts POST requests." msgstr "Esta acción sólo acepta solicitudes POST." +#. TRANS: Client error displayed when trying to enable or disable a plugin without access rights. #, fuzzy msgid "You cannot administer plugins." msgstr "No puedes borrar usuarios." +#. TRANS: Client error displayed when trying to enable or disable a non-existing plugin. #, fuzzy msgid "No such plugin." msgstr "No existe tal página." @@ -3774,7 +3823,8 @@ msgid "Enabled" msgstr "" #. TRANS: Tab and title for plugins admin panel. -#. TRANS: Menu item for site administration +#, fuzzy +msgctxt "TITLE" msgid "Plugins" msgstr "Complementos" @@ -3790,15 +3840,19 @@ msgstr "" msgid "Default plugins" msgstr "!Idioma predeterminado" +#. TRANS: Text displayed on plugin admin page when no plugin are enabled. msgid "" "All default plugins have been disabled from the site's configuration file." msgstr "" +#. TRANS: Client error displayed if the notice posted has too many characters. msgid "Invalid notice content." msgstr "Contenido de mensaje inválido." -#, php-format -msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’." +#. TRANS: Exception thrown if a notice's license is not compatible with the StatusNet site license. +#. TRANS: %1$s is the notice license, %2$s is the StatusNet site's license. +#, fuzzy, php-format +msgid "Notice license \"%1$s\" is not compatible with site license \"%2$s\"." msgstr "" "La licencia del mensaje %1$s’ es incompatible con la licencia del sitio ‘%2" "$s’." @@ -3956,29 +4010,39 @@ msgstr "Se guardó configuración." msgid "Restore account" msgstr "Crear una cuenta" +#. TRANS: Client error displayed when requesting a public timeline page beyond the page limit. +#. TRANS: %s is the page limit. #, php-format msgid "Beyond the page limit (%s)." msgstr "Más allá del límite de páginas (%s)." +#. TRANS: Server error displayed when a public timeline cannot be retrieved. msgid "Could not retrieve public stream." msgstr "No se pudo acceder a corriente pública." +#. TRANS: Title for all public timeline pages but the first. +#. TRANS: %d is the page number. #, php-format msgid "Public timeline, page %d" msgstr "Línea temporal pública, página %d" +#. TRANS: Title for the first public timeline page. msgid "Public timeline" msgstr "Línea temporal pública" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 1.0)" msgstr "Canal público (RSS 1.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 2.0)" msgstr "Canal público (RSS 2.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (Atom)" msgstr "Canal público (Atom)" +#. TRANS: Text displayed for public feed when there are no public notices. #, php-format msgid "" "This is the public timeline for %%site.name%% but no one has posted anything " @@ -3987,9 +4051,11 @@ msgstr "" "Esta es la línea temporal pública de %%site.name%%, pero aún no se ha " "publicado nada." +#. TRANS: Additional text displayed for public feed when there are no public notices for a logged in user. msgid "Be the first to post!" msgstr "¡Sé la primera persona en publicar algo!" +#. TRANS: Additional text displayed for public feed when there are no public notices for a not logged in user. #, php-format msgid "" "Why not [register an account](%%action.register%%) and be the first to post!" @@ -3997,6 +4063,8 @@ msgstr "" "¿Por qué no [registras una cuenta](%%action.register%%) y te conviertes en " "la primera persona en publicar?" +#. TRANS: Message for not logged in users at an invite-only site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -4010,6 +4078,8 @@ msgstr "" "para compartir notas acerca de tí con tus amistades, familiares y " "compañeros!! ([Más información](%%doc.help%%))" +#. TRANS: Message for not logged in users at a closed site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -5746,6 +5816,10 @@ msgstr "" "Debes haber recibido una copia de la Licencia Pública General de Affero GNU " "con este programa. Si no la recibiste, visita %s." +#. TRANS: Menu item for site administration +msgid "Plugins" +msgstr "Complementos" + #. TRANS: Form input field label for application name. msgid "Name" msgstr "Nombre" @@ -6257,6 +6331,9 @@ msgstr "saveSettings() no implementada." msgid "Unable to delete design setting." msgstr "No se puede eliminar la configuración de diseño." +msgid "Home" +msgstr "Página de inicio" + #. TRANS: Menu item title/tooltip msgid "Basic site configuration" msgstr "Configuración básica del sitio" @@ -6892,9 +6969,6 @@ msgstr "Ir al instalador." msgid "Database error" msgstr "Error de la base de datos" -msgid "Home" -msgstr "Página de inicio" - msgid "Public" msgstr "Público" @@ -7707,7 +7781,6 @@ msgstr "Enviar un mensaje" msgid "What's up, %s?" msgstr "¿Qué tal, %s?" -#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Adjuntar" @@ -7776,6 +7849,9 @@ msgstr "Borrar este mensaje" msgid "Notice repeated" msgstr "Mensaje repetido" +msgid "Update your status..." +msgstr "" + msgid "Nudge this user" msgstr "Dar un toque a este usuario" @@ -8286,11 +8362,3 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" - -#, fuzzy -#~ msgid "Friends timeline" -#~ msgstr "línea temporal de %s" - -#, fuzzy -#~ msgid "Everyone on this site" -#~ msgstr "Encontrar gente en este sitio" diff --git a/locale/fa/LC_MESSAGES/statusnet.po b/locale/fa/LC_MESSAGES/statusnet.po index d8bcba9d6d..443e410308 100644 --- a/locale/fa/LC_MESSAGES/statusnet.po +++ b/locale/fa/LC_MESSAGES/statusnet.po @@ -16,8 +16,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-08 01:03+0000\n" -"PO-Revision-Date: 2011-03-08 01:05:10+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:17:04+0000\n" "Last-Translator: Ahmad Sufi Mahmudi\n" "Language-Team: Persian \n" "MIME-Version: 1.0\n" @@ -26,9 +26,9 @@ msgstr "" "X-Language-Code: fa\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: MediaWiki 1.18alpha (r83429); Translate extension (2011-03-07)\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" -"X-POT-Import-Date: 2011-03-06 02:16:47+0000\n" +"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -1052,7 +1052,7 @@ msgstr "پیدا کردن محتوای پیام‌ها" #. TRANS: Client exception thrown when trying favorite a notice without content. #, fuzzy -msgid "Unknown note." +msgid "Unknown notice." msgstr "ناشناخته" #. TRANS: Client exception thrown when trying favorite an already favorited notice. @@ -1647,6 +1647,7 @@ msgstr "حذف این کاربر" #. TRANS: Client error displayed trying to create a new direct message while not logged in. #. TRANS: Client error displayed trying to send a notice while not logged in. #. TRANS: Client error displayed trying to nudge a user without being logged in. +#. TRANS: Client error displayed when trying to enable or disable a plugin while not logged in. #. TRANS: Client error displayed trying a change a subscription while not logged in. #. TRANS: Client error displayed trying to subscribe when not logged in. #. TRANS: Client error message thrown when trying to access the admin panel while not logged in. @@ -3153,6 +3154,10 @@ msgstr "نشانی اینترنتی منبع مورد نیاز است." msgid "Could not create application." msgstr "نمی‌توان برنامه را ساخت." +#, fuzzy +msgid "Invalid image." +msgstr "اندازه نادرست است." + #. TRANS: Title for form to create a group. msgid "New group" msgstr "گروه جدید" @@ -3436,52 +3441,77 @@ msgstr "" "این صندوق خروجی شماست، که پیام‌های خصوصی فرستاده شده به وسیلهٔ شما را فهرست " "می‌کند." +#. TRANS: Title for page where to change password. +#, fuzzy +msgctxt "TITLE" msgid "Change password" msgstr "تغییر گذرواژه" +#. TRANS: Instructions for page where to change password. msgid "Change your password." msgstr "تغییر گذرواژهٔ شما" +#. TRANS: Fieldset legend on page where to change password. #. TRANS: Fieldset legend for password reset form. msgid "Password change" msgstr "تغییر گذرواژه" +#. TRANS: Field label on page where to change password. msgid "Old password" msgstr "گذرواژهٔ پیشین" +#. TRANS: Field label on page where to change password. #. TRANS: Field label for password reset form. msgid "New password" msgstr "گذرواژهٔ تازه" +#. TRANS: Field title on page where to change password. #, fuzzy msgid "6 or more characters." msgstr "۶ نویسه یا بیش‌تر" +#. TRANS: Field label on page where to change password. In this field the new password should be typed a second time. +#, fuzzy +msgctxt "LABEL" +msgid "Confirm" +msgstr "تایید" + +#. TRANS: Field title on page where to change password. #. TRANS: Ttile for field label for password reset form where the password has to be typed again. #, fuzzy msgid "Same as password above." msgstr "مانند گذرواژهٔ بالا" +#. TRANS: Button text on page where to change password. +#, fuzzy +msgctxt "BUTTON" msgid "Change" msgstr "تغییر" +#. TRANS: Form validation error on page where to change password. msgid "Password must be 6 or more characters." msgstr "گذرواژه باید ۶ نویسه یا بیش‌تر باشد." msgid "Passwords don't match." msgstr "گذرواژه‌ها مطابقت ندارند." -msgid "Incorrect old password" +#. TRANS: Form validation error on page where to change password. +#, fuzzy +msgid "Incorrect old password." msgstr "گذرواژه پیشین اشتباه است" +#. TRANS: Form validation error on page where to change password. msgid "Error saving user; invalid." msgstr "هنگام ذخیرهٔ کاربر خطا رخ داد؛ نامعتبر است." +#. TRANS: Server error displayed on page where to change password when password change +#. TRANS: could not be made because of a server error. #. TRANS: Reset password form validation error message. #, fuzzy msgid "Cannot save new password." msgstr "نمی‌توان گذرواژهٔ جدید را ذخیره کرد." +#. TRANS: Form validation notice on page where to change password. msgid "Password saved." msgstr "گذرواژه ذخیره شد." @@ -3531,6 +3561,7 @@ msgstr "وب‌گاه" msgid "Server" msgstr "کارگزار" +#. TRANS: Field title in Paths admin panel. msgid "Site's server hostname." msgstr "نام میزبان کارگزار وب‌گاه." @@ -3538,6 +3569,7 @@ msgstr "نام میزبان کارگزار وب‌گاه." msgid "Path" msgstr "مسیر" +#. TRANS: Field title in Paths admin panel. #, fuzzy msgid "Site path." msgstr "مسیر وب‌گاه" @@ -3547,6 +3579,7 @@ msgstr "مسیر وب‌گاه" msgid "Locale directory" msgstr "شاخهٔ پوسته" +#. TRANS: Field title in Paths admin panel. #, fuzzy msgid "Directory path to locales." msgstr "مسیر پوشه برای زبان‌های محلی" @@ -3555,9 +3588,14 @@ msgstr "مسیر پوشه برای زبان‌های محلی" msgid "Fancy URLs" msgstr "نشانی‌های تمیز" -msgid "Use fancy (more readable and memorable) URLs?" +#. TRANS: Field title in Paths admin panel. +#, fuzzy +msgid "Use fancy URLs (more readable and memorable)?" msgstr "از نشانی‌های تمیز (خواناتر و ماندگارتر در ذهن) استفاده شود؟" +#. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "Theme" msgstr "پوسته" @@ -3683,6 +3721,8 @@ msgid "Directory where attachments are located." msgstr "مسیر پوشه برای زبان‌های محلی" #. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "SSL" msgstr "SSL" @@ -3729,10 +3769,14 @@ msgstr "" msgid "People search" msgstr "جست‌وجوی کاربران" +#. TRANS: Client error displayed when trying to tag a profile with an invalid tag. +#. TRANS: %s is the invalid tag. #, php-format msgid "Not a valid people tag: %s." msgstr "یک برچسب کاربری معتبر نیست: %s." +#. TRANS: Page title for users with a certain self-tag. +#. TRANS: %1$s is the tag, %2$s is the page number. #, php-format msgid "Users self-tagged with %1$s - page %2$d" msgstr "کاربران خود برچسب‌گذاری شده با %1$s - صفحهٔ %2$d" @@ -3742,15 +3786,19 @@ msgctxt "plugin" msgid "Disabled" msgstr "" +#. TRANS: Client error displayed when trying to use another method than POST. +#. TRANS: Do not translate POST. #. TRANS: Client error displayed trying to perform any request method other than POST. #. TRANS: Do not translate POST. msgid "This action only accepts POST requests." msgstr "این عمل تنها درخواست‌های POST را می‌پذیرد." +#. TRANS: Client error displayed when trying to enable or disable a plugin without access rights. #, fuzzy msgid "You cannot administer plugins." msgstr "شما نمی‌توانید کاربران را پاک کنید." +#. TRANS: Client error displayed when trying to enable or disable a non-existing plugin. #, fuzzy msgid "No such plugin." msgstr "چنین صفحه‌ای وجود ندارد." @@ -3761,7 +3809,8 @@ msgid "Enabled" msgstr "" #. TRANS: Tab and title for plugins admin panel. -#. TRANS: Menu item for site administration +#, fuzzy +msgctxt "TITLE" msgid "Plugins" msgstr "افزونه‌ها" @@ -3777,15 +3826,19 @@ msgstr "" msgid "Default plugins" msgstr "زبان پیش‌فرض" +#. TRANS: Text displayed on plugin admin page when no plugin are enabled. msgid "" "All default plugins have been disabled from the site's configuration file." msgstr "" +#. TRANS: Client error displayed if the notice posted has too many characters. msgid "Invalid notice content." msgstr "محتوای پیام نامعتبر است." -#, php-format -msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’." +#. TRANS: Exception thrown if a notice's license is not compatible with the StatusNet site license. +#. TRANS: %1$s is the notice license, %2$s is the StatusNet site's license. +#, fuzzy, php-format +msgid "Notice license \"%1$s\" is not compatible with site license \"%2$s\"." msgstr "مجوز پیام «%1$s» با مجوز وب‌گاه «%2$s» سازگار نیست." #. TRANS: Page title for profile settings. @@ -3936,29 +3989,39 @@ msgstr "تنظیمات ذخیره شد." msgid "Restore account" msgstr "ساختن یک جساب‌کاربری" +#. TRANS: Client error displayed when requesting a public timeline page beyond the page limit. +#. TRANS: %s is the page limit. #, php-format msgid "Beyond the page limit (%s)." msgstr "" +#. TRANS: Server error displayed when a public timeline cannot be retrieved. msgid "Could not retrieve public stream." msgstr "نمی‌توان جریان عمومی را دریافت کرد." +#. TRANS: Title for all public timeline pages but the first. +#. TRANS: %d is the page number. #, php-format msgid "Public timeline, page %d" msgstr "خط‌زمانی عمومی، صفحهٔ %d" +#. TRANS: Title for the first public timeline page. msgid "Public timeline" msgstr "خط‌زمانی عمومی" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 1.0)" msgstr "خوراک جریان عمومی (RSS 1.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 2.0)" msgstr "خوراک جریان عمومی (RSS 2.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (Atom)" msgstr "خوراک جریان عمومی (Atom)" +#. TRANS: Text displayed for public feed when there are no public notices. #, php-format msgid "" "This is the public timeline for %%site.name%% but no one has posted anything " @@ -3966,14 +4029,18 @@ msgid "" msgstr "" "این خط‌زمانی عمومی برای %%site.name%% است، اما هیچ‌کس هنوز چیزی نفرستاده است." +#. TRANS: Additional text displayed for public feed when there are no public notices for a logged in user. msgid "Be the first to post!" msgstr "اولین کسی باشید که پیام می‌فرستد!" +#. TRANS: Additional text displayed for public feed when there are no public notices for a not logged in user. #, php-format msgid "" "Why not [register an account](%%action.register%%) and be the first to post!" msgstr "چرا [ثبت نام](%%action.register%%) نمی‌کنید و اولین پیام را نمی‌فرستید؟" +#. TRANS: Message for not logged in users at an invite-only site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -3987,6 +4054,8 @@ msgstr "" "action.register%%) تا آگاهی‌هایی را دربارهٔ خودتان با دوستان، خانواده و " "همکاران‌تان به اشتراک بگذارید! ([بیش‌تر بخوانید](%%doc.help%%))" +#. TRANS: Message for not logged in users at a closed site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -5695,6 +5764,10 @@ msgstr "" "شما باید یک رونوشت از مجوز GNU Affero General Public License را همراه این " "برنامه دریافت کرده باشید. اگر چنین نیست، %s را ببینید." +#. TRANS: Menu item for site administration +msgid "Plugins" +msgstr "افزونه‌ها" + #. TRANS: Form input field label for application name. msgid "Name" msgstr "نام" @@ -6195,6 +6268,9 @@ msgstr "saveSettings() پیاده نشده است." msgid "Unable to delete design setting." msgstr "نمی توان تنظیمات طراحی شده را پاک کرد ." +msgid "Home" +msgstr "خانه" + #. TRANS: Menu item title/tooltip msgid "Basic site configuration" msgstr "پیکربندی اولیه وب‌گاه" @@ -6824,9 +6900,6 @@ msgstr "برو به نصاب." msgid "Database error" msgstr "خطای پایگاه داده" -msgid "Home" -msgstr "خانه" - msgid "Public" msgstr "عمومی" @@ -7625,7 +7698,6 @@ msgstr "فرستادن یک پیام" msgid "What's up, %s?" msgstr "چه خبر، %s؟" -#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "پیوست کردن" @@ -7695,6 +7767,9 @@ msgstr "این پیام را پاک کن" msgid "Notice repeated" msgstr "پیام تکرار شد" +msgid "Update your status..." +msgstr "" + msgid "Nudge this user" msgstr "یادآوری‌کردن به این کاربر" @@ -8201,11 +8276,3 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" - -#, fuzzy -#~ msgid "Friends timeline" -#~ msgstr "خط‌زمانی %s" - -#, fuzzy -#~ msgid "Everyone on this site" -#~ msgstr "پیدا کردن افراد در این وب‌گاه" diff --git a/locale/fi/LC_MESSAGES/statusnet.po b/locale/fi/LC_MESSAGES/statusnet.po index 31e3ddcf16..98f6370d3e 100644 --- a/locale/fi/LC_MESSAGES/statusnet.po +++ b/locale/fi/LC_MESSAGES/statusnet.po @@ -15,17 +15,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-08 01:03+0000\n" -"PO-Revision-Date: 2011-03-08 01:05:11+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:17:06+0000\n" "Language-Team: Finnish \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83429); Translate extension (2011-03-07)\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: fi\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-06 02:16:47+0000\n" +"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -1042,7 +1042,8 @@ msgid "Can only fave notices." msgstr "Vain päivityksiä voi merkitä suosikeiksi." #. TRANS: Client exception thrown when trying favorite a notice without content. -msgid "Unknown note." +#, fuzzy +msgid "Unknown notice." msgstr "Tuntematon päivitys." #. TRANS: Client exception thrown when trying favorite an already favorited notice. @@ -1617,6 +1618,7 @@ msgstr "Poista tämä ryhmä." #. TRANS: Client error displayed trying to create a new direct message while not logged in. #. TRANS: Client error displayed trying to send a notice while not logged in. #. TRANS: Client error displayed trying to nudge a user without being logged in. +#. TRANS: Client error displayed when trying to enable or disable a plugin while not logged in. #. TRANS: Client error displayed trying a change a subscription while not logged in. #. TRANS: Client error displayed trying to subscribe when not logged in. #. TRANS: Client error message thrown when trying to access the admin panel while not logged in. @@ -3117,6 +3119,10 @@ msgstr "" msgid "Could not create application." msgstr "Ei voitu lisätä aliasta." +#, fuzzy +msgid "Invalid image." +msgstr "Koko ei kelpaa." + #. TRANS: Title for form to create a group. msgid "New group" msgstr "Uusi ryhmä" @@ -3406,52 +3412,77 @@ msgstr "Käyttäjän %s lähetetyt viestit" msgid "This is your outbox, which lists private messages you have sent." msgstr "Tämä on postilaatikkosi, jossa on lähettämäsi yksityisviestit." +#. TRANS: Title for page where to change password. +#, fuzzy +msgctxt "TITLE" msgid "Change password" msgstr "Vaihda salasana" +#. TRANS: Instructions for page where to change password. msgid "Change your password." msgstr "Vaihda salasanasi." +#. TRANS: Fieldset legend on page where to change password. #. TRANS: Fieldset legend for password reset form. msgid "Password change" msgstr "Salasanan vaihto" +#. TRANS: Field label on page where to change password. msgid "Old password" msgstr "Vanha salasana" +#. TRANS: Field label on page where to change password. #. TRANS: Field label for password reset form. msgid "New password" msgstr "Uusi salasana" +#. TRANS: Field title on page where to change password. #, fuzzy msgid "6 or more characters." msgstr "6 tai useampia merkkejä" +#. TRANS: Field label on page where to change password. In this field the new password should be typed a second time. +#, fuzzy +msgctxt "LABEL" +msgid "Confirm" +msgstr "Vahvista" + +#. TRANS: Field title on page where to change password. #. TRANS: Ttile for field label for password reset form where the password has to be typed again. #, fuzzy msgid "Same as password above." msgstr "Sama kuin ylläoleva salasana" +#. TRANS: Button text on page where to change password. +#, fuzzy +msgctxt "BUTTON" msgid "Change" msgstr "Vaihda" +#. TRANS: Form validation error on page where to change password. msgid "Password must be 6 or more characters." msgstr "Salasanassa pitää olla 6 tai useampia merkkejä." msgid "Passwords don't match." msgstr "Salasanat eivät täsmää." -msgid "Incorrect old password" +#. TRANS: Form validation error on page where to change password. +#, fuzzy +msgid "Incorrect old password." msgstr "Väärä vanha salasana" +#. TRANS: Form validation error on page where to change password. msgid "Error saving user; invalid." msgstr "Virhe tapahtui käyttäjän tallentamisessa; epäkelpo." +#. TRANS: Server error displayed on page where to change password when password change +#. TRANS: could not be made because of a server error. #. TRANS: Reset password form validation error message. #, fuzzy msgid "Cannot save new password." msgstr "Uutta salasanaa ei voida tallentaa." +#. TRANS: Form validation notice on page where to change password. msgid "Password saved." msgstr "Salasana tallennettu." @@ -3503,6 +3534,7 @@ msgstr "Kutsu" msgid "Server" msgstr "Palauta" +#. TRANS: Field title in Paths admin panel. msgid "Site's server hostname." msgstr "" @@ -3511,6 +3543,7 @@ msgstr "" msgid "Path" msgstr "Polut" +#. TRANS: Field title in Paths admin panel. #, fuzzy msgid "Site path." msgstr "Palvelun ilmoitus" @@ -3520,6 +3553,7 @@ msgstr "Palvelun ilmoitus" msgid "Locale directory" msgstr "Taustakuvan hakemisto" +#. TRANS: Field title in Paths admin panel. msgid "Directory path to locales." msgstr "" @@ -3527,9 +3561,12 @@ msgstr "" msgid "Fancy URLs" msgstr "" -msgid "Use fancy (more readable and memorable) URLs?" +#. TRANS: Field title in Paths admin panel. +msgid "Use fancy URLs (more readable and memorable)?" msgstr "" +#. TRANS: Fieldset legend in Paths admin panel. +msgctxt "LEGEND" msgid "Theme" msgstr "" @@ -3656,6 +3693,7 @@ msgstr "" #. TRANS: Fieldset legend in Paths admin panel. #, fuzzy +msgctxt "LEGEND" msgid "SSL" msgstr "SMS" @@ -3705,10 +3743,14 @@ msgstr "" msgid "People search" msgstr "Etsi ihmisiä" +#. TRANS: Client error displayed when trying to tag a profile with an invalid tag. +#. TRANS: %s is the invalid tag. #, php-format msgid "Not a valid people tag: %s." msgstr "Tuo ei ole kelvollinen sähköpostiosoite." +#. TRANS: Page title for users with a certain self-tag. +#. TRANS: %1$s is the tag, %2$s is the page number. #, fuzzy, php-format msgid "Users self-tagged with %1$s - page %2$d" msgstr "Käyttäjät joilla henkilötagi %s - sivu %d" @@ -3718,15 +3760,19 @@ msgctxt "plugin" msgid "Disabled" msgstr "" +#. TRANS: Client error displayed when trying to use another method than POST. +#. TRANS: Do not translate POST. #. TRANS: Client error displayed trying to perform any request method other than POST. #. TRANS: Do not translate POST. msgid "This action only accepts POST requests." msgstr "" +#. TRANS: Client error displayed when trying to enable or disable a plugin without access rights. #, fuzzy msgid "You cannot administer plugins." msgstr "Sinä et voi poistaa käyttäjiä." +#. TRANS: Client error displayed when trying to enable or disable a non-existing plugin. #, fuzzy msgid "No such plugin." msgstr "Sivua ei ole." @@ -3737,7 +3783,7 @@ msgid "Enabled" msgstr "" #. TRANS: Tab and title for plugins admin panel. -#. TRANS: Menu item for site administration +msgctxt "TITLE" msgid "Plugins" msgstr "" @@ -3753,15 +3799,19 @@ msgstr "" msgid "Default plugins" msgstr "Ensisijainen kieli" +#. TRANS: Text displayed on plugin admin page when no plugin are enabled. msgid "" "All default plugins have been disabled from the site's configuration file." msgstr "" +#. TRANS: Client error displayed if the notice posted has too many characters. msgid "Invalid notice content." msgstr "Koko ei kelpaa." +#. TRANS: Exception thrown if a notice's license is not compatible with the StatusNet site license. +#. TRANS: %1$s is the notice license, %2$s is the StatusNet site's license. #, php-format -msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’." +msgid "Notice license \"%1$s\" is not compatible with site license \"%2$s\"." msgstr "" #. TRANS: Page title for profile settings. @@ -3919,29 +3969,39 @@ msgstr "Asetukset tallennettu." msgid "Restore account" msgstr "Luo uusi ryhmä" +#. TRANS: Client error displayed when requesting a public timeline page beyond the page limit. +#. TRANS: %s is the page limit. #, php-format msgid "Beyond the page limit (%s)." msgstr "" +#. TRANS: Server error displayed when a public timeline cannot be retrieved. msgid "Could not retrieve public stream." msgstr "Julkista päivitysvirtaa ei saatu." +#. TRANS: Title for all public timeline pages but the first. +#. TRANS: %d is the page number. #, php-format msgid "Public timeline, page %d" msgstr "Julkinen aikajana, sivu %d" +#. TRANS: Title for the first public timeline page. msgid "Public timeline" msgstr "Julkinen aikajana" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 1.0)" msgstr "Julkinen syöte (RSS 1.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 2.0)" msgstr "Julkisen Aikajanan Syöte (RSS 2.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (Atom)" msgstr "Julkinen syöte (Atom)" +#. TRANS: Text displayed for public feed when there are no public notices. #, fuzzy, php-format msgid "" "This is the public timeline for %%site.name%% but no one has posted anything " @@ -3950,14 +4010,18 @@ msgstr "" "Tämä on käyttäjän %s ja kavereiden aikajana, mutta kukaan ei ole lähettyänyt " "vielä mitään." +#. TRANS: Additional text displayed for public feed when there are no public notices for a logged in user. msgid "Be the first to post!" msgstr "Ole ensimmäinen joka lähettää päivityksen!" +#. TRANS: Additional text displayed for public feed when there are no public notices for a not logged in user. #, php-format msgid "" "Why not [register an account](%%action.register%%) and be the first to post!" msgstr "" +#. TRANS: Message for not logged in users at an invite-only site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -3966,6 +4030,8 @@ msgid "" "friends, family, and colleagues! ([Read more](%%doc.help%%))" msgstr "" +#. TRANS: Message for not logged in users at a closed site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, fuzzy, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -5670,6 +5736,10 @@ msgid "" "along with this program. If not, see %s." msgstr "" +#. TRANS: Menu item for site administration +msgid "Plugins" +msgstr "" + #. TRANS: Form input field label for application name. #, fuzzy msgid "Name" @@ -6183,6 +6253,9 @@ msgstr "Komentoa ei ole vielä toteutettu." msgid "Unable to delete design setting." msgstr "Twitter-asetuksia ei voitu tallentaa!" +msgid "Home" +msgstr "Kotisivu" + #. TRANS: Menu item title/tooltip #, fuzzy msgid "Basic site configuration" @@ -6796,9 +6869,6 @@ msgstr "Kirjaudu sisään palveluun" msgid "Database error" msgstr "Tietokantavirhe" -msgid "Home" -msgstr "Kotisivu" - msgid "Public" msgstr "Julkinen" @@ -7527,7 +7597,6 @@ msgstr "Lähetä päivitys" msgid "What's up, %s?" msgstr "Mitä teet juuri nyt, %s?" -#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "" @@ -7599,6 +7668,9 @@ msgstr "Poista tämä päivitys" msgid "Notice repeated" msgstr "Päivitys on poistettu." +msgid "Update your status..." +msgstr "" + msgid "Nudge this user" msgstr "Tönäise tätä käyttäjää" @@ -8123,11 +8195,3 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" - -#, fuzzy -#~ msgid "Friends timeline" -#~ msgstr "%s aikajana" - -#, fuzzy -#~ msgid "Everyone on this site" -#~ msgstr "Hae ihmisiä tältä sivustolta" diff --git a/locale/fr/LC_MESSAGES/statusnet.po b/locale/fr/LC_MESSAGES/statusnet.po index 4006bd8157..f63f26d5f4 100644 --- a/locale/fr/LC_MESSAGES/statusnet.po +++ b/locale/fr/LC_MESSAGES/statusnet.po @@ -21,17 +21,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-08 01:03+0000\n" -"PO-Revision-Date: 2011-03-08 01:05:12+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:17:07+0000\n" "Language-Team: French \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83429); Translate extension (2011-03-07)\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: fr\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-POT-Import-Date: 2011-03-06 02:16:47+0000\n" +"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -1071,7 +1071,7 @@ msgstr "Ne peut gérer que les activités de publication." #. TRANS: Client exception thrown when trying favorite a notice without content. #, fuzzy -msgid "Unknown note." +msgid "Unknown notice." msgstr "Inconnu" #. TRANS: Client exception thrown when trying favorite an already favorited notice. @@ -1659,6 +1659,7 @@ msgstr "Supprimer ce groupe" #. TRANS: Client error displayed trying to create a new direct message while not logged in. #. TRANS: Client error displayed trying to send a notice while not logged in. #. TRANS: Client error displayed trying to nudge a user without being logged in. +#. TRANS: Client error displayed when trying to enable or disable a plugin while not logged in. #. TRANS: Client error displayed trying a change a subscription while not logged in. #. TRANS: Client error displayed trying to subscribe when not logged in. #. TRANS: Client error message thrown when trying to access the admin panel while not logged in. @@ -3187,6 +3188,10 @@ msgstr "L’URL source est requise." msgid "Could not create application." msgstr "Impossible de créer l’application." +#, fuzzy +msgid "Invalid image." +msgstr "Taille incorrecte." + #. TRANS: Title for form to create a group. msgid "New group" msgstr "Nouveau groupe" @@ -3475,52 +3480,77 @@ msgid "This is your outbox, which lists private messages you have sent." msgstr "" "Cette boîte d’envoi regroupe les messages personnels que vous avez envoyés." +#. TRANS: Title for page where to change password. +#, fuzzy +msgctxt "TITLE" msgid "Change password" msgstr "Changer de mot de passe" +#. TRANS: Instructions for page where to change password. msgid "Change your password." msgstr "Modifier votre mot de passe." +#. TRANS: Fieldset legend on page where to change password. #. TRANS: Fieldset legend for password reset form. msgid "Password change" msgstr "Modification du mot de passe" +#. TRANS: Field label on page where to change password. msgid "Old password" msgstr "Ancien mot de passe" +#. TRANS: Field label on page where to change password. #. TRANS: Field label for password reset form. msgid "New password" msgstr "Nouveau mot de passe" +#. TRANS: Field title on page where to change password. #, fuzzy msgid "6 or more characters." msgstr "6 caractères ou plus" +#. TRANS: Field label on page where to change password. In this field the new password should be typed a second time. +#, fuzzy +msgctxt "LABEL" +msgid "Confirm" +msgstr "Confirmer" + +#. TRANS: Field title on page where to change password. #. TRANS: Ttile for field label for password reset form where the password has to be typed again. #, fuzzy msgid "Same as password above." msgstr "Identique au mot de passe ci-dessus" +#. TRANS: Button text on page where to change password. +#, fuzzy +msgctxt "BUTTON" msgid "Change" msgstr "Modifier" +#. TRANS: Form validation error on page where to change password. msgid "Password must be 6 or more characters." msgstr "Votre mot de passe doit contenir au moins 6 caractères." msgid "Passwords don't match." msgstr "Les mots de passe ne correspondent pas." -msgid "Incorrect old password" +#. TRANS: Form validation error on page where to change password. +#, fuzzy +msgid "Incorrect old password." msgstr "Ancien mot de passe incorrect" +#. TRANS: Form validation error on page where to change password. msgid "Error saving user; invalid." msgstr "Erreur lors de l’enregistrement de l’utilisateur ; invalide." +#. TRANS: Server error displayed on page where to change password when password change +#. TRANS: could not be made because of a server error. #. TRANS: Reset password form validation error message. #, fuzzy msgid "Cannot save new password." msgstr "Impossible de sauvegarder le nouveau mot de passe." +#. TRANS: Form validation notice on page where to change password. msgid "Password saved." msgstr "Mot de passe enregistré." @@ -3570,6 +3600,7 @@ msgstr "Site" msgid "Server" msgstr "Serveur" +#. TRANS: Field title in Paths admin panel. msgid "Site's server hostname." msgstr "Nom d’hôte du serveur du site." @@ -3577,6 +3608,7 @@ msgstr "Nom d’hôte du serveur du site." msgid "Path" msgstr "Chemin" +#. TRANS: Field title in Paths admin panel. msgid "Site path." msgstr "Chemin du site." @@ -3584,6 +3616,7 @@ msgstr "Chemin du site." msgid "Locale directory" msgstr "Dossier des données de localisation" +#. TRANS: Field title in Paths admin panel. msgid "Directory path to locales." msgstr "Chemin du dossier vers les paramètres régionaux." @@ -3591,9 +3624,14 @@ msgstr "Chemin du dossier vers les paramètres régionaux." msgid "Fancy URLs" msgstr "Jolies URL" -msgid "Use fancy (more readable and memorable) URLs?" +#. TRANS: Field title in Paths admin panel. +#, fuzzy +msgid "Use fancy URLs (more readable and memorable)?" msgstr "Utiliser des jolies URL (plus lisibles et faciles à mémoriser) ?" +#. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "Theme" msgstr "Thème" @@ -3706,6 +3744,8 @@ msgid "Directory where attachments are located." msgstr "Le répertoire où les pièces jointes sont stockées." #. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "SSL" msgstr "SSL" @@ -3751,10 +3791,14 @@ msgstr "" msgid "People search" msgstr "Recherche de personnes" +#. TRANS: Client error displayed when trying to tag a profile with an invalid tag. +#. TRANS: %s is the invalid tag. #, php-format msgid "Not a valid people tag: %s." msgstr "Cette marque est invalide : %s." +#. TRANS: Page title for users with a certain self-tag. +#. TRANS: %1$s is the tag, %2$s is the page number. #, php-format msgid "Users self-tagged with %1$s - page %2$d" msgstr "Utilisateurs marqués par eux-mêmes avec %1$s - page %2$d" @@ -3764,15 +3808,19 @@ msgctxt "plugin" msgid "Disabled" msgstr "" +#. TRANS: Client error displayed when trying to use another method than POST. +#. TRANS: Do not translate POST. #. TRANS: Client error displayed trying to perform any request method other than POST. #. TRANS: Do not translate POST. msgid "This action only accepts POST requests." msgstr "Cette action n'accepte que les requêtes de type POST." +#. TRANS: Client error displayed when trying to enable or disable a plugin without access rights. #, fuzzy msgid "You cannot administer plugins." msgstr "Vous ne pouvez pas supprimer des utilisateurs." +#. TRANS: Client error displayed when trying to enable or disable a non-existing plugin. #, fuzzy msgid "No such plugin." msgstr "Page non trouvée." @@ -3783,7 +3831,8 @@ msgid "Enabled" msgstr "" #. TRANS: Tab and title for plugins admin panel. -#. TRANS: Menu item for site administration +#, fuzzy +msgctxt "TITLE" msgid "Plugins" msgstr "Extensions" @@ -3799,15 +3848,19 @@ msgstr "" msgid "Default plugins" msgstr "Langue par défaut" +#. TRANS: Text displayed on plugin admin page when no plugin are enabled. msgid "" "All default plugins have been disabled from the site's configuration file." msgstr "" +#. TRANS: Client error displayed if the notice posted has too many characters. msgid "Invalid notice content." msgstr "Contenu de l’avis invalide." -#, php-format -msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’." +#. TRANS: Exception thrown if a notice's license is not compatible with the StatusNet site license. +#. TRANS: %1$s is the notice license, %2$s is the StatusNet site's license. +#, fuzzy, php-format +msgid "Notice license \"%1$s\" is not compatible with site license \"%2$s\"." msgstr "" "La licence des avis « %1$s » n’est pas compatible avec la licence du site « %2" "$s »." @@ -3962,29 +4015,39 @@ msgstr "Préférences enregistrées." msgid "Restore account" msgstr "Créer un compte" +#. TRANS: Client error displayed when requesting a public timeline page beyond the page limit. +#. TRANS: %s is the page limit. #, php-format msgid "Beyond the page limit (%s)." msgstr "Au-delà de la limite de page (%s)." +#. TRANS: Server error displayed when a public timeline cannot be retrieved. msgid "Could not retrieve public stream." msgstr "Impossible de récupérer le flux public." +#. TRANS: Title for all public timeline pages but the first. +#. TRANS: %d is the page number. #, php-format msgid "Public timeline, page %d" msgstr "Flux public - page %d" +#. TRANS: Title for the first public timeline page. msgid "Public timeline" msgstr "Flux public" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 1.0)" msgstr "Fil du flux public (RSS 1.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 2.0)" msgstr "Fil du flux public (RSS 2.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (Atom)" msgstr "Fil du flux public (Atom)" +#. TRANS: Text displayed for public feed when there are no public notices. #, php-format msgid "" "This is the public timeline for %%site.name%% but no one has posted anything " @@ -3993,9 +4056,11 @@ msgstr "" "Ceci est la chronologie publique de %%site.name%% mais personne n’a encore " "rien posté." +#. TRANS: Additional text displayed for public feed when there are no public notices for a logged in user. msgid "Be the first to post!" msgstr "Soyez le premier à poster !" +#. TRANS: Additional text displayed for public feed when there are no public notices for a not logged in user. #, php-format msgid "" "Why not [register an account](%%action.register%%) and be the first to post!" @@ -4003,6 +4068,8 @@ msgstr "" "Pourquoi ne pas [créer un compte](%%action.register%%) et être le premier à " "poster !" +#. TRANS: Message for not logged in users at an invite-only site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -4016,6 +4083,8 @@ msgstr "" "vous avec vos amis, famille et collègues ! ([Plus d’informations](%%doc.help%" "%))" +#. TRANS: Message for not logged in users at a closed site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -5757,6 +5826,10 @@ msgstr "" "Vous avez dû recevoir une copie de la Licence Publique Générale GNU Affero " "avec ce programme. Si ce n’est pas le cas, consultez %s." +#. TRANS: Menu item for site administration +msgid "Plugins" +msgstr "Extensions" + #. TRANS: Form input field label for application name. msgid "Name" msgstr "Nom" @@ -6267,6 +6340,9 @@ msgstr "saveSettings() n’a pas été implémentée." msgid "Unable to delete design setting." msgstr "Impossible de supprimer les paramètres de conception." +msgid "Home" +msgstr "Site personnel" + #. TRANS: Menu item title/tooltip msgid "Basic site configuration" msgstr "Configuration basique du site" @@ -6908,9 +6984,6 @@ msgstr "Aller au programme d’installation" msgid "Database error" msgstr "Erreur de la base de données" -msgid "Home" -msgstr "Site personnel" - msgid "Public" msgstr "Public" @@ -7721,7 +7794,6 @@ msgstr "Envoyer un avis" msgid "What's up, %s?" msgstr "Quoi de neuf, %s ?" -#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Attacher" @@ -7790,6 +7862,9 @@ msgstr "Supprimer cet avis" msgid "Notice repeated" msgstr "Avis repris" +msgid "Update your status..." +msgstr "" + msgid "Nudge this user" msgstr "Envoyer un clin d’œil à cet utilisateur" @@ -8301,11 +8376,3 @@ msgstr "XML invalide, racine XRD manquante." #, php-format msgid "Getting backup from file '%s'." msgstr "Obtention de la sauvegarde depuis le fichier « %s »." - -#, fuzzy -#~ msgid "Friends timeline" -#~ msgstr "Activité de %s" - -#, fuzzy -#~ msgid "Everyone on this site" -#~ msgstr "Chercher des personnes sur ce site" diff --git a/locale/fur/LC_MESSAGES/statusnet.po b/locale/fur/LC_MESSAGES/statusnet.po index 8935ca9b3a..12cca595ec 100644 --- a/locale/fur/LC_MESSAGES/statusnet.po +++ b/locale/fur/LC_MESSAGES/statusnet.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-08 01:03+0000\n" -"PO-Revision-Date: 2011-03-08 01:05:13+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:17:08+0000\n" "Language-Team: Friulian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-06 02:16:47+0000\n" -"X-Generator: MediaWiki 1.18alpha (r83429); Translate extension (2011-03-07)\n" +"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: fur\n" "X-Message-Group: #out-statusnet-core\n" @@ -1013,8 +1013,9 @@ msgid "Can only fave notices." msgstr "" #. TRANS: Client exception thrown when trying favorite a notice without content. -msgid "Unknown note." -msgstr "" +#, fuzzy +msgid "Unknown notice." +msgstr "Gnûf avîs" #. TRANS: Client exception thrown when trying favorite an already favorited notice. msgid "Already a favorite." @@ -1563,6 +1564,7 @@ msgstr "Elimine chest grup." #. TRANS: Client error displayed trying to create a new direct message while not logged in. #. TRANS: Client error displayed trying to send a notice while not logged in. #. TRANS: Client error displayed trying to nudge a user without being logged in. +#. TRANS: Client error displayed when trying to enable or disable a plugin while not logged in. #. TRANS: Client error displayed trying a change a subscription while not logged in. #. TRANS: Client error displayed trying to subscribe when not logged in. #. TRANS: Client error message thrown when trying to access the admin panel while not logged in. @@ -2981,6 +2983,10 @@ msgstr "" msgid "Could not create application." msgstr "" +#, fuzzy +msgid "Invalid image." +msgstr "La dimension no je valide." + #. TRANS: Title for form to create a group. msgid "New group" msgstr "Gnûf grup" @@ -3256,49 +3262,74 @@ msgstr "" "Cheste e je la tô pueste in jessude, dulà che tu cjatis i messaçs privâts " "che tu âs mandât." +#. TRANS: Title for page where to change password. +#, fuzzy +msgctxt "TITLE" msgid "Change password" msgstr "Cambie la password" +#. TRANS: Instructions for page where to change password. msgid "Change your password." msgstr "Cambie la tô password" +#. TRANS: Fieldset legend on page where to change password. #. TRANS: Fieldset legend for password reset form. msgid "Password change" msgstr "Cambiament di password" +#. TRANS: Field label on page where to change password. msgid "Old password" msgstr "Vecje password" +#. TRANS: Field label on page where to change password. #. TRANS: Field label for password reset form. msgid "New password" msgstr "Gnove password" +#. TRANS: Field title on page where to change password. msgid "6 or more characters." msgstr "6 o plui caratars." +#. TRANS: Field label on page where to change password. In this field the new password should be typed a second time. +#, fuzzy +msgctxt "LABEL" +msgid "Confirm" +msgstr "Conferme" + +#. TRANS: Field title on page where to change password. #. TRANS: Ttile for field label for password reset form where the password has to be typed again. msgid "Same as password above." msgstr "Compagn che la password parsore" +#. TRANS: Button text on page where to change password. +#, fuzzy +msgctxt "BUTTON" msgid "Change" msgstr "Cambie" +#. TRANS: Form validation error on page where to change password. msgid "Password must be 6 or more characters." msgstr "La password e à di sei di sîs o plui caratars." msgid "Passwords don't match." msgstr "Lis passwords no corispuindin." -msgid "Incorrect old password" +#. TRANS: Form validation error on page where to change password. +#, fuzzy +msgid "Incorrect old password." msgstr "La vecje password e je sbaliade" +#. TRANS: Form validation error on page where to change password. msgid "Error saving user; invalid." msgstr "" +#. TRANS: Server error displayed on page where to change password when password change +#. TRANS: could not be made because of a server error. #. TRANS: Reset password form validation error message. msgid "Cannot save new password." msgstr "" +#. TRANS: Form validation notice on page where to change password. msgid "Password saved." msgstr "Password salvade" @@ -3348,6 +3379,7 @@ msgstr "Sît" msgid "Server" msgstr "Servidôr" +#. TRANS: Field title in Paths admin panel. msgid "Site's server hostname." msgstr "" @@ -3355,6 +3387,7 @@ msgstr "" msgid "Path" msgstr "" +#. TRANS: Field title in Paths admin panel. msgid "Site path." msgstr "" @@ -3362,6 +3395,7 @@ msgstr "" msgid "Locale directory" msgstr "" +#. TRANS: Field title in Paths admin panel. msgid "Directory path to locales." msgstr "" @@ -3369,9 +3403,13 @@ msgstr "" msgid "Fancy URLs" msgstr "" -msgid "Use fancy (more readable and memorable) URLs?" +#. TRANS: Field title in Paths admin panel. +msgid "Use fancy URLs (more readable and memorable)?" msgstr "" +#. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "Theme" msgstr "Teme" @@ -3484,6 +3522,8 @@ msgid "Directory where attachments are located." msgstr "" #. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "SSL" msgstr "SSL" @@ -3528,10 +3568,14 @@ msgstr "" msgid "People search" msgstr "Cîr personis" +#. TRANS: Client error displayed when trying to tag a profile with an invalid tag. +#. TRANS: %s is the invalid tag. #, php-format msgid "Not a valid people tag: %s." msgstr "" +#. TRANS: Page title for users with a certain self-tag. +#. TRANS: %1$s is the tag, %2$s is the page number. #, php-format msgid "Users self-tagged with %1$s - page %2$d" msgstr "" @@ -3541,14 +3585,18 @@ msgctxt "plugin" msgid "Disabled" msgstr "" +#. TRANS: Client error displayed when trying to use another method than POST. +#. TRANS: Do not translate POST. #. TRANS: Client error displayed trying to perform any request method other than POST. #. TRANS: Do not translate POST. msgid "This action only accepts POST requests." msgstr "" +#. TRANS: Client error displayed when trying to enable or disable a plugin without access rights. msgid "You cannot administer plugins." msgstr "" +#. TRANS: Client error displayed when trying to enable or disable a non-existing plugin. #, fuzzy msgid "No such plugin." msgstr "La pagjine no esist." @@ -3559,7 +3607,7 @@ msgid "Enabled" msgstr "" #. TRANS: Tab and title for plugins admin panel. -#. TRANS: Menu item for site administration +msgctxt "TITLE" msgid "Plugins" msgstr "" @@ -3575,15 +3623,19 @@ msgstr "" msgid "Default plugins" msgstr "Lenghe predeterminade" +#. TRANS: Text displayed on plugin admin page when no plugin are enabled. msgid "" "All default plugins have been disabled from the site's configuration file." msgstr "" +#. TRANS: Client error displayed if the notice posted has too many characters. msgid "Invalid notice content." msgstr "" +#. TRANS: Exception thrown if a notice's license is not compatible with the StatusNet site license. +#. TRANS: %1$s is the notice license, %2$s is the StatusNet site's license. #, php-format -msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’." +msgid "Notice license \"%1$s\" is not compatible with site license \"%2$s\"." msgstr "" #. TRANS: Page title for profile settings. @@ -3725,43 +3777,57 @@ msgstr "Impuestazions salvadis." msgid "Restore account" msgstr "" +#. TRANS: Client error displayed when requesting a public timeline page beyond the page limit. +#. TRANS: %s is the page limit. #, php-format msgid "Beyond the page limit (%s)." msgstr "" +#. TRANS: Server error displayed when a public timeline cannot be retrieved. msgid "Could not retrieve public stream." msgstr "" +#. TRANS: Title for all public timeline pages but the first. +#. TRANS: %d is the page number. #, php-format msgid "Public timeline, page %d" msgstr "Ativitât publiche, pagjine %d" +#. TRANS: Title for the first public timeline page. msgid "Public timeline" msgstr "Ativitât publiche" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 1.0)" msgstr "Canâl de ativitât publiche (RSS 1.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 2.0)" msgstr "Canâl de ativitât publiche (RSS 2.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (Atom)" msgstr "Canâl de ativitât publiche (Atom)" +#. TRANS: Text displayed for public feed when there are no public notices. #, php-format msgid "" "This is the public timeline for %%site.name%% but no one has posted anything " "yet." msgstr "" +#. TRANS: Additional text displayed for public feed when there are no public notices for a logged in user. msgid "Be the first to post!" msgstr "" +#. TRANS: Additional text displayed for public feed when there are no public notices for a not logged in user. #, php-format msgid "" "Why not [register an account](%%action.register%%) and be the first to post!" msgstr "" +#. TRANS: Message for not logged in users at an invite-only site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -3774,6 +3840,8 @@ msgstr "" "net/). [Unissiti cumò](%%action.register%%) par condividi chel che tu fasis " "cun amîs, famee e companie! ([Altris informazions](%%doc.help%%))" +#. TRANS: Message for not logged in users at a closed site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -5370,6 +5438,10 @@ msgstr "" "Tu varessis di vê ricevût une copie de GNU Affero General Public License " "insieme cun chest program. Se nol è cussì, cjale %s." +#. TRANS: Menu item for site administration +msgid "Plugins" +msgstr "" + #. TRANS: Form input field label for application name. msgid "Name" msgstr "Non" @@ -5860,6 +5932,10 @@ msgstr "" msgid "Unable to delete design setting." msgstr "" +#, fuzzy +msgid "Home" +msgstr "Pagjine web" + #. TRANS: Menu item title/tooltip msgid "Basic site configuration" msgstr "" @@ -6444,10 +6520,6 @@ msgstr "" msgid "Database error" msgstr "Erôr de base di dâts" -#, fuzzy -msgid "Home" -msgstr "Pagjine web" - msgid "Public" msgstr "Public" @@ -7137,7 +7209,6 @@ msgstr "Mande un avîs" msgid "What's up, %s?" msgstr "Ce sucedial, %s?" -#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Aleghe" @@ -7204,6 +7275,9 @@ msgstr "Elimine chest avîs" msgid "Notice repeated" msgstr "Avîs ripetût" +msgid "Update your status..." +msgstr "" + msgid "Nudge this user" msgstr "" @@ -7713,11 +7787,3 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" - -#, fuzzy -#~ msgid "Friends timeline" -#~ msgstr "Ativitât di %s" - -#, fuzzy -#~ msgid "Everyone on this site" -#~ msgstr "Cjate int in chest sît" diff --git a/locale/gl/LC_MESSAGES/statusnet.po b/locale/gl/LC_MESSAGES/statusnet.po index 82a1934778..f189cd13b7 100644 --- a/locale/gl/LC_MESSAGES/statusnet.po +++ b/locale/gl/LC_MESSAGES/statusnet.po @@ -12,17 +12,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-08 01:03+0000\n" -"PO-Revision-Date: 2011-03-08 01:05:14+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:17:09+0000\n" "Language-Team: Galician \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83429); Translate extension (2011-03-07)\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: gl\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-06 02:16:47+0000\n" +"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -1050,7 +1050,7 @@ msgstr "Buscar nos contidos das notas" #. TRANS: Client exception thrown when trying favorite a notice without content. #, fuzzy -msgid "Unknown note." +msgid "Unknown notice." msgstr "Descoñecida" #. TRANS: Client exception thrown when trying favorite an already favorited notice. @@ -1639,6 +1639,7 @@ msgstr "Borrar o usuario" #. TRANS: Client error displayed trying to create a new direct message while not logged in. #. TRANS: Client error displayed trying to send a notice while not logged in. #. TRANS: Client error displayed trying to nudge a user without being logged in. +#. TRANS: Client error displayed when trying to enable or disable a plugin while not logged in. #. TRANS: Client error displayed trying a change a subscription while not logged in. #. TRANS: Client error displayed trying to subscribe when not logged in. #. TRANS: Client error message thrown when trying to access the admin panel while not logged in. @@ -3164,6 +3165,10 @@ msgstr "Necesítase o URL de orixe." msgid "Could not create application." msgstr "Non se puido crear a aplicación." +#, fuzzy +msgid "Invalid image." +msgstr "Tamaño non válido." + #. TRANS: Title for form to create a group. msgid "New group" msgstr "Novo grupo" @@ -3447,52 +3452,77 @@ msgid "This is your outbox, which lists private messages you have sent." msgstr "" "Esta é a súa caixa de saída. Nela lístanse as mensaxes privadas que enviou." +#. TRANS: Title for page where to change password. +#, fuzzy +msgctxt "TITLE" msgid "Change password" msgstr "Cambiar o contrasinal" +#. TRANS: Instructions for page where to change password. msgid "Change your password." msgstr "Cambiar o seu contrasinal." +#. TRANS: Fieldset legend on page where to change password. #. TRANS: Fieldset legend for password reset form. msgid "Password change" msgstr "Cambio de contrasinal" +#. TRANS: Field label on page where to change password. msgid "Old password" msgstr "Contrasinal anterior" +#. TRANS: Field label on page where to change password. #. TRANS: Field label for password reset form. msgid "New password" msgstr "Novo contrasinal" +#. TRANS: Field title on page where to change password. #, fuzzy msgid "6 or more characters." msgstr "Seis ou máis caracteres" +#. TRANS: Field label on page where to change password. In this field the new password should be typed a second time. +#, fuzzy +msgctxt "LABEL" +msgid "Confirm" +msgstr "Confirmar" + +#. TRANS: Field title on page where to change password. #. TRANS: Ttile for field label for password reset form where the password has to be typed again. #, fuzzy msgid "Same as password above." msgstr "Igual ao contrasinal anterior" +#. TRANS: Button text on page where to change password. +#, fuzzy +msgctxt "BUTTON" msgid "Change" msgstr "Cambiar" +#. TRANS: Form validation error on page where to change password. msgid "Password must be 6 or more characters." msgstr "O contrasinal debe conter seis ou máis caracteres." msgid "Passwords don't match." msgstr "Os contrasinais non coinciden." -msgid "Incorrect old password" +#. TRANS: Form validation error on page where to change password. +#, fuzzy +msgid "Incorrect old password." msgstr "O contrasinal anterior non é correcto" +#. TRANS: Form validation error on page where to change password. msgid "Error saving user; invalid." msgstr "Houbo un erro ao gardar o usuario. Incorrecto." +#. TRANS: Server error displayed on page where to change password when password change +#. TRANS: could not be made because of a server error. #. TRANS: Reset password form validation error message. #, fuzzy msgid "Cannot save new password." msgstr "Non se puido gardar o novo contrasinal." +#. TRANS: Form validation notice on page where to change password. msgid "Password saved." msgstr "Gardouse o contrasinal." @@ -3542,6 +3572,7 @@ msgstr "Sitio" msgid "Server" msgstr "Servidor" +#. TRANS: Field title in Paths admin panel. msgid "Site's server hostname." msgstr "Nome do servidor do sitio." @@ -3549,6 +3580,7 @@ msgstr "Nome do servidor do sitio." msgid "Path" msgstr "Ruta" +#. TRANS: Field title in Paths admin panel. msgid "Site path." msgstr "Ruta do sitio." @@ -3556,6 +3588,7 @@ msgstr "Ruta do sitio." msgid "Locale directory" msgstr "Directorio das traducións" +#. TRANS: Field title in Paths admin panel. msgid "Directory path to locales." msgstr "Ruta do directorio das traducións." @@ -3563,9 +3596,14 @@ msgstr "Ruta do directorio das traducións." msgid "Fancy URLs" msgstr "Enderezos URL elegantes" -msgid "Use fancy (more readable and memorable) URLs?" +#. TRANS: Field title in Paths admin panel. +#, fuzzy +msgid "Use fancy URLs (more readable and memorable)?" msgstr "Quere utilizar os enderezos URL elegantes (mellores de ler e lembrar)?" +#. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "Theme" msgstr "Tema visual" @@ -3689,6 +3727,8 @@ msgid "Directory where attachments are located." msgstr "Ruta do directorio das traducións" #. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "SSL" msgstr "SSL" @@ -3735,10 +3775,14 @@ msgstr "" msgid "People search" msgstr "Busca de xente" +#. TRANS: Client error displayed when trying to tag a profile with an invalid tag. +#. TRANS: %s is the invalid tag. #, php-format msgid "Not a valid people tag: %s." msgstr "A etiqueta de persoa non é correcta: %s." +#. TRANS: Page title for users with a certain self-tag. +#. TRANS: %1$s is the tag, %2$s is the page number. #, php-format msgid "Users self-tagged with %1$s - page %2$d" msgstr "Usuarios etiquetados por si mesmos con %1$s - páxina %2$d" @@ -3748,15 +3792,19 @@ msgctxt "plugin" msgid "Disabled" msgstr "" +#. TRANS: Client error displayed when trying to use another method than POST. +#. TRANS: Do not translate POST. #. TRANS: Client error displayed trying to perform any request method other than POST. #. TRANS: Do not translate POST. msgid "This action only accepts POST requests." msgstr "Esta acción só permite solicitudes POST." +#. TRANS: Client error displayed when trying to enable or disable a plugin without access rights. #, fuzzy msgid "You cannot administer plugins." msgstr "Non pode borrar usuarios." +#. TRANS: Client error displayed when trying to enable or disable a non-existing plugin. #, fuzzy msgid "No such plugin." msgstr "Esa páxina non existe." @@ -3767,7 +3815,8 @@ msgid "Enabled" msgstr "" #. TRANS: Tab and title for plugins admin panel. -#. TRANS: Menu item for site administration +#, fuzzy +msgctxt "TITLE" msgid "Plugins" msgstr "Complementos" @@ -3783,15 +3832,19 @@ msgstr "" msgid "Default plugins" msgstr "Lingua por defecto" +#. TRANS: Text displayed on plugin admin page when no plugin are enabled. msgid "" "All default plugins have been disabled from the site's configuration file." msgstr "" +#. TRANS: Client error displayed if the notice posted has too many characters. msgid "Invalid notice content." msgstr "O contido da nota é incorrecto." -#, php-format -msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’." +#. TRANS: Exception thrown if a notice's license is not compatible with the StatusNet site license. +#. TRANS: %1$s is the notice license, %2$s is the StatusNet site's license. +#, fuzzy, php-format +msgid "Notice license \"%1$s\" is not compatible with site license \"%2$s\"." msgstr "" "A licenza \"%1$s\" da nota non é compatible coa licenza \"%2$s\" do sitio." @@ -3949,29 +4002,39 @@ msgstr "Gardouse a configuración." msgid "Restore account" msgstr "Crear unha conta" +#. TRANS: Client error displayed when requesting a public timeline page beyond the page limit. +#. TRANS: %s is the page limit. #, php-format msgid "Beyond the page limit (%s)." msgstr "Alén do límite da páxina (%s)." +#. TRANS: Server error displayed when a public timeline cannot be retrieved. msgid "Could not retrieve public stream." msgstr "Non se puido obter o fluxo público." +#. TRANS: Title for all public timeline pages but the first. +#. TRANS: %d is the page number. #, php-format msgid "Public timeline, page %d" msgstr "Liña do tempo pública, páxina %d" +#. TRANS: Title for the first public timeline page. msgid "Public timeline" msgstr "Liña do tempo pública" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 1.0)" msgstr "Fonte de novas no fluxo público (RSS 1.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 2.0)" msgstr "Fonte de novas no fluxo público (RSS 2.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (Atom)" msgstr "Fonte de novas no fluxo público (Atom)" +#. TRANS: Text displayed for public feed when there are no public notices. #, php-format msgid "" "This is the public timeline for %%site.name%% but no one has posted anything " @@ -3980,9 +4043,11 @@ msgstr "" "Esta é a liña do tempo pública para %%site.name%% pero ninguén publicou nada " "aínda." +#. TRANS: Additional text displayed for public feed when there are no public notices for a logged in user. msgid "Be the first to post!" msgstr "Sexa o primeiro en publicar!" +#. TRANS: Additional text displayed for public feed when there are no public notices for a not logged in user. #, php-format msgid "" "Why not [register an account](%%action.register%%) and be the first to post!" @@ -3990,6 +4055,8 @@ msgstr "" "Por que non [rexistrar unha conta](%%action.register%%) e ser o primeiro en " "publicar?" +#. TRANS: Message for not logged in users at an invite-only site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -4003,6 +4070,8 @@ msgstr "" "register%%) para compartir notas persoais cos amigos, a familia e os " "compañeiros! ([Máis información](%%doc.help%%))" +#. TRANS: Message for not logged in users at a closed site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -5742,6 +5811,10 @@ msgstr "" "Debeu recibir unha copia da Licenza Pública Xeral Affero de GNU xunto co " "programa. En caso contrario, vexa %s." +#. TRANS: Menu item for site administration +msgid "Plugins" +msgstr "Complementos" + #. TRANS: Form input field label for application name. msgid "Name" msgstr "Nome" @@ -6250,6 +6323,10 @@ msgstr "saveSettings() non está integrado." msgid "Unable to delete design setting." msgstr "Non se puido borrar a configuración do deseño." +#, fuzzy +msgid "Home" +msgstr "Páxina persoal" + #. TRANS: Menu item title/tooltip msgid "Basic site configuration" msgstr "Configuración básica do sitio" @@ -6891,10 +6968,6 @@ msgstr "Ir ao instalador." msgid "Database error" msgstr "Houbo un erro na base de datos" -#, fuzzy -msgid "Home" -msgstr "Páxina persoal" - msgid "Public" msgstr "Públicas" @@ -7708,7 +7781,6 @@ msgstr "Enviar unha nota" msgid "What's up, %s?" msgstr "Que hai de novo, %s?" -#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Anexar" @@ -7777,6 +7849,9 @@ msgstr "Borrar esta nota" msgid "Notice repeated" msgstr "Repetiuse a nota" +msgid "Update your status..." +msgstr "" + msgid "Nudge this user" msgstr "Facerlle un aceno a este usuario" @@ -8294,11 +8369,3 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" - -#, fuzzy -#~ msgid "Friends timeline" -#~ msgstr "Liña do tempo de %s" - -#, fuzzy -#~ msgid "Everyone on this site" -#~ msgstr "Atopar xente neste sitio" diff --git a/locale/hsb/LC_MESSAGES/statusnet.po b/locale/hsb/LC_MESSAGES/statusnet.po index a5b1dc4d09..c878043d4b 100644 --- a/locale/hsb/LC_MESSAGES/statusnet.po +++ b/locale/hsb/LC_MESSAGES/statusnet.po @@ -11,18 +11,18 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-08 01:03+0000\n" -"PO-Revision-Date: 2011-03-08 01:05:15+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:17:10+0000\n" "Language-Team: Upper Sorbian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83429); Translate extension (2011-03-07)\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: hsb\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : (n%100==3 || " "n%100==4) ? 2 : 3)\n" -"X-POT-Import-Date: 2011-03-06 02:16:47+0000\n" +"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -1027,7 +1027,8 @@ msgid "Can only fave notices." msgstr "Jenož zdźělenki dadźa so jako fawority składować." #. TRANS: Client exception thrown when trying favorite a notice without content. -msgid "Unknown note." +#, fuzzy +msgid "Unknown notice." msgstr "Njeznata notica." #. TRANS: Client exception thrown when trying favorite an already favorited notice. @@ -1581,6 +1582,7 @@ msgstr "Tutu skupinu zhašeć." #. TRANS: Client error displayed trying to create a new direct message while not logged in. #. TRANS: Client error displayed trying to send a notice while not logged in. #. TRANS: Client error displayed trying to nudge a user without being logged in. +#. TRANS: Client error displayed when trying to enable or disable a plugin while not logged in. #. TRANS: Client error displayed trying a change a subscription while not logged in. #. TRANS: Client error displayed trying to subscribe when not logged in. #. TRANS: Client error message thrown when trying to access the admin panel while not logged in. @@ -3008,6 +3010,10 @@ msgstr "Žórłowy URL je trěbny." msgid "Could not create application." msgstr "Aplikacija njeda so wutworić." +#, fuzzy +msgid "Invalid image." +msgstr "Njepłaćiwa wulkosć." + #. TRANS: Title for form to create a group. msgid "New group" msgstr "Nowa skupina" @@ -3282,49 +3288,74 @@ msgstr "" "To je twój wuchadny póst, kotryž twoje priwatne powěsće nalistuje, kotrež sy " "pósłał." +#. TRANS: Title for page where to change password. +#, fuzzy +msgctxt "TITLE" msgid "Change password" msgstr "Hesło změnić" +#. TRANS: Instructions for page where to change password. msgid "Change your password." msgstr "Změń swoje hesło." +#. TRANS: Fieldset legend on page where to change password. #. TRANS: Fieldset legend for password reset form. msgid "Password change" msgstr "Hesło změnjene" +#. TRANS: Field label on page where to change password. msgid "Old password" msgstr "Stare hesło" +#. TRANS: Field label on page where to change password. #. TRANS: Field label for password reset form. msgid "New password" msgstr "Nowe hesło" +#. TRANS: Field title on page where to change password. msgid "6 or more characters." msgstr "6 abo wjace znamješkow." +#. TRANS: Field label on page where to change password. In this field the new password should be typed a second time. +#, fuzzy +msgctxt "LABEL" +msgid "Confirm" +msgstr "Wobkrućić" + +#. TRANS: Field title on page where to change password. #. TRANS: Ttile for field label for password reset form where the password has to be typed again. msgid "Same as password above." msgstr "Samsne hesło kaž horjeka." +#. TRANS: Button text on page where to change password. +#, fuzzy +msgctxt "BUTTON" msgid "Change" msgstr "Změnić" +#. TRANS: Form validation error on page where to change password. msgid "Password must be 6 or more characters." msgstr "Hesło dyrbi 6 abo wjace znamješkow měć." msgid "Passwords don't match." msgstr "Hesle so njekryjetej." -msgid "Incorrect old password" +#. TRANS: Form validation error on page where to change password. +#, fuzzy +msgid "Incorrect old password." msgstr "Wopačne stare hesło" +#. TRANS: Form validation error on page where to change password. msgid "Error saving user; invalid." msgstr "Zmylk při składowanju wužiwarja; njepłaćiwy." +#. TRANS: Server error displayed on page where to change password when password change +#. TRANS: could not be made because of a server error. #. TRANS: Reset password form validation error message. msgid "Cannot save new password." msgstr "Nowe hesło njeda so składować." +#. TRANS: Form validation notice on page where to change password. msgid "Password saved." msgstr "Hesło składowane." @@ -3374,6 +3405,7 @@ msgstr "Sydło" msgid "Server" msgstr "Serwer" +#. TRANS: Field title in Paths admin panel. msgid "Site's server hostname." msgstr "Serwerowe mjeno sydła" @@ -3381,6 +3413,7 @@ msgstr "Serwerowe mjeno sydła" msgid "Path" msgstr "Šćežka" +#. TRANS: Field title in Paths admin panel. msgid "Site path." msgstr "Sydłowa šćežka." @@ -3388,6 +3421,7 @@ msgstr "Sydłowa šćežka." msgid "Locale directory" msgstr "Zapis lokalow" +#. TRANS: Field title in Paths admin panel. msgid "Directory path to locales." msgstr "Zapisowa šćežka k lokalam." @@ -3395,9 +3429,13 @@ msgstr "Zapisowa šćežka k lokalam." msgid "Fancy URLs" msgstr "Šikwane URL" -msgid "Use fancy (more readable and memorable) URLs?" +#. TRANS: Field title in Paths admin panel. +msgid "Use fancy URLs (more readable and memorable)?" msgstr "" +#. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "Theme" msgstr "Šat" @@ -3510,6 +3548,8 @@ msgid "Directory where attachments are located." msgstr "Zapis, hdźež přiwěški su." #. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "SSL" msgstr "SSL" @@ -3552,10 +3592,14 @@ msgstr "" msgid "People search" msgstr "Za ludźimi pytać" +#. TRANS: Client error displayed when trying to tag a profile with an invalid tag. +#. TRANS: %s is the invalid tag. #, php-format msgid "Not a valid people tag: %s." msgstr "Njepłaćiwa wosobowa taflička: %s." +#. TRANS: Page title for users with a certain self-tag. +#. TRANS: %1$s is the tag, %2$s is the page number. #, php-format msgid "Users self-tagged with %1$s - page %2$d" msgstr "" @@ -3565,15 +3609,19 @@ msgctxt "plugin" msgid "Disabled" msgstr "" +#. TRANS: Client error displayed when trying to use another method than POST. +#. TRANS: Do not translate POST. #. TRANS: Client error displayed trying to perform any request method other than POST. #. TRANS: Do not translate POST. msgid "This action only accepts POST requests." msgstr "" +#. TRANS: Client error displayed when trying to enable or disable a plugin without access rights. #, fuzzy msgid "You cannot administer plugins." msgstr "Njemóžeš wužiwarjow wušmórnyć." +#. TRANS: Client error displayed when trying to enable or disable a non-existing plugin. #, fuzzy msgid "No such plugin." msgstr "Strona njeeksistuje." @@ -3584,7 +3632,8 @@ msgid "Enabled" msgstr "" #. TRANS: Tab and title for plugins admin panel. -#. TRANS: Menu item for site administration +#, fuzzy +msgctxt "TITLE" msgid "Plugins" msgstr "Tykače" @@ -3600,15 +3649,19 @@ msgstr "" msgid "Default plugins" msgstr "Standardna rěč" +#. TRANS: Text displayed on plugin admin page when no plugin are enabled. msgid "" "All default plugins have been disabled from the site's configuration file." msgstr "" +#. TRANS: Client error displayed if the notice posted has too many characters. msgid "Invalid notice content." msgstr "Njepłaćiwy wobsah zdźělenki." +#. TRANS: Exception thrown if a notice's license is not compatible with the StatusNet site license. +#. TRANS: %1$s is the notice license, %2$s is the StatusNet site's license. #, php-format -msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’." +msgid "Notice license \"%1$s\" is not compatible with site license \"%2$s\"." msgstr "" #. TRANS: Page title for profile settings. @@ -3757,43 +3810,57 @@ msgstr "Nastajenja składowane." msgid "Restore account" msgstr "Konto wobnowić" +#. TRANS: Client error displayed when requesting a public timeline page beyond the page limit. +#. TRANS: %s is the page limit. #, php-format msgid "Beyond the page limit (%s)." msgstr "Limit stronow (%s) překročeny." +#. TRANS: Server error displayed when a public timeline cannot be retrieved. msgid "Could not retrieve public stream." msgstr "Zjawny prud njeda so wotwołać." +#. TRANS: Title for all public timeline pages but the first. +#. TRANS: %d is the page number. #, php-format msgid "Public timeline, page %d" msgstr "Zjawna časowa lajsta, strona %d" +#. TRANS: Title for the first public timeline page. msgid "Public timeline" msgstr "" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 1.0)" msgstr "Kanal zjawneho pruda (RSS 1.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 2.0)" msgstr "Kanal zjawneho pruda (RSS 2.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (Atom)" msgstr "Kanal zjawneho pruda (Atom)" +#. TRANS: Text displayed for public feed when there are no public notices. #, php-format msgid "" "This is the public timeline for %%site.name%% but no one has posted anything " "yet." msgstr "" +#. TRANS: Additional text displayed for public feed when there are no public notices for a logged in user. msgid "Be the first to post!" msgstr "Budź prěni, kiž něšto pisa!" +#. TRANS: Additional text displayed for public feed when there are no public notices for a not logged in user. #, php-format msgid "" "Why not [register an account](%%action.register%%) and be the first to post!" msgstr "" +#. TRANS: Message for not logged in users at an invite-only site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -3802,6 +3869,8 @@ msgid "" "friends, family, and colleagues! ([Read more](%%doc.help%%))" msgstr "" +#. TRANS: Message for not logged in users at a closed site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -5365,6 +5434,10 @@ msgid "" "along with this program. If not, see %s." msgstr "" +#. TRANS: Menu item for site administration +msgid "Plugins" +msgstr "Tykače" + #. TRANS: Form input field label for application name. msgid "Name" msgstr "Mjeno" @@ -5852,6 +5925,10 @@ msgstr "saveSettings() njeimplementowany." msgid "Unable to delete design setting." msgstr "Njeje móžno, designowe nastajenje zhašeć." +#, fuzzy +msgid "Home" +msgstr "Startowa strona" + #. TRANS: Menu item title/tooltip msgid "Basic site configuration" msgstr "Zakładna sydłowa konfiguracija" @@ -6455,10 +6532,6 @@ msgstr "K instalaciji" msgid "Database error" msgstr "Zmylk w datowej bance" -#, fuzzy -msgid "Home" -msgstr "Startowa strona" - msgid "Public" msgstr "Zjawny" @@ -7176,7 +7249,6 @@ msgstr "Zdźělenku pósłać" msgid "What's up, %s?" msgstr "Što je, %s?" -#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Připowěsnyć" @@ -7243,6 +7315,9 @@ msgstr "Tutu zdźělenku wušmórnyć" msgid "Notice repeated" msgstr "Zdźělenka wospjetowana" +msgid "Update your status..." +msgstr "" + msgid "Nudge this user" msgstr "Tutoho wužiwarja storčić" @@ -7761,7 +7836,3 @@ msgstr "Njepłaćiwy XML, korjeń XRD faluje." #, php-format msgid "Getting backup from file '%s'." msgstr "Wobstaruje so zawěsćenje z dataje \"%s\"-" - -#, fuzzy -#~ msgid "Everyone on this site" -#~ msgstr "Ludźi na tutym sydle pytać" diff --git a/locale/hu/LC_MESSAGES/statusnet.po b/locale/hu/LC_MESSAGES/statusnet.po index fa3776bd12..f05265f38e 100644 --- a/locale/hu/LC_MESSAGES/statusnet.po +++ b/locale/hu/LC_MESSAGES/statusnet.po @@ -12,13 +12,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-08 01:03+0000\n" -"PO-Revision-Date: 2011-03-08 01:05:16+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:17:11+0000\n" "Language-Team: Hungarian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-06 02:16:47+0000\n" -"X-Generator: MediaWiki 1.18alpha (r83429); Translate extension (2011-03-07)\n" +"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: hu\n" "X-Message-Group: #out-statusnet-core\n" @@ -1043,7 +1043,7 @@ msgstr "Keressünk a hírek tartalmában" #. TRANS: Client exception thrown when trying favorite a notice without content. #, fuzzy -msgid "Unknown note." +msgid "Unknown notice." msgstr "Ismeretlen művelet" #. TRANS: Client exception thrown when trying favorite an already favorited notice. @@ -1629,6 +1629,7 @@ msgstr "Töröljük ezt a felhasználót" #. TRANS: Client error displayed trying to create a new direct message while not logged in. #. TRANS: Client error displayed trying to send a notice while not logged in. #. TRANS: Client error displayed trying to nudge a user without being logged in. +#. TRANS: Client error displayed when trying to enable or disable a plugin while not logged in. #. TRANS: Client error displayed trying a change a subscription while not logged in. #. TRANS: Client error displayed trying to subscribe when not logged in. #. TRANS: Client error message thrown when trying to access the admin panel while not logged in. @@ -3091,6 +3092,10 @@ msgstr "Meg kell adnod forrás URL-t." msgid "Could not create application." msgstr "Nem sikerült létrehozni az alkalmazást." +#, fuzzy +msgid "Invalid image." +msgstr "Érvénytelen méret." + #. TRANS: Title for form to create a group. msgid "New group" msgstr "Új csoport" @@ -3363,52 +3368,77 @@ msgstr "%s kimenő postafiókja" msgid "This is your outbox, which lists private messages you have sent." msgstr "Ez az elküldött privát üzeneteid postafiókja." +#. TRANS: Title for page where to change password. +#, fuzzy +msgctxt "TITLE" msgid "Change password" msgstr "Jelszó megváltoztatása" +#. TRANS: Instructions for page where to change password. msgid "Change your password." msgstr "Változtasd meg a jelszavadat." +#. TRANS: Fieldset legend on page where to change password. #. TRANS: Fieldset legend for password reset form. msgid "Password change" msgstr "Jelszó megváltoztatása" +#. TRANS: Field label on page where to change password. msgid "Old password" msgstr "Régi jelszó" +#. TRANS: Field label on page where to change password. #. TRANS: Field label for password reset form. msgid "New password" msgstr "Új jelszó" +#. TRANS: Field title on page where to change password. #, fuzzy msgid "6 or more characters." msgstr "6 vagy több karakter" +#. TRANS: Field label on page where to change password. In this field the new password should be typed a second time. +#, fuzzy +msgctxt "LABEL" +msgid "Confirm" +msgstr "Megerősítés" + +#. TRANS: Field title on page where to change password. #. TRANS: Ttile for field label for password reset form where the password has to be typed again. #, fuzzy msgid "Same as password above." msgstr "Ugyanaz mint a fenti jelszó" +#. TRANS: Button text on page where to change password. +#, fuzzy +msgctxt "BUTTON" msgid "Change" msgstr "Változtassunk" +#. TRANS: Form validation error on page where to change password. msgid "Password must be 6 or more characters." msgstr "A jelszónak legalább 6 karakterből kell állnia." msgid "Passwords don't match." msgstr "A jelszavak nem egyeznek." -msgid "Incorrect old password" +#. TRANS: Form validation error on page where to change password. +#, fuzzy +msgid "Incorrect old password." msgstr "Érvénytelen a régi jelszó" +#. TRANS: Form validation error on page where to change password. msgid "Error saving user; invalid." msgstr "Hiba a felhasználó mentésekor; érvénytelen." +#. TRANS: Server error displayed on page where to change password when password change +#. TRANS: could not be made because of a server error. #. TRANS: Reset password form validation error message. #, fuzzy msgid "Cannot save new password." msgstr "Az új jelszót nem sikerült elmenteni." +#. TRANS: Form validation notice on page where to change password. msgid "Password saved." msgstr "Jelszó elmentve." @@ -3458,6 +3488,7 @@ msgstr "Webhely" msgid "Server" msgstr "Szerver" +#. TRANS: Field title in Paths admin panel. msgid "Site's server hostname." msgstr "A webhely kiszolgálójának neve." @@ -3465,6 +3496,7 @@ msgstr "A webhely kiszolgálójának neve." msgid "Path" msgstr "Útvonal" +#. TRANS: Field title in Paths admin panel. #, fuzzy msgid "Site path." msgstr "Webhely útvonala" @@ -3474,6 +3506,7 @@ msgstr "Webhely útvonala" msgid "Locale directory" msgstr "Avatar-könyvtár" +#. TRANS: Field title in Paths admin panel. #, fuzzy msgid "Directory path to locales." msgstr "A nyelvi fájlok elérési útvonala" @@ -3482,9 +3515,13 @@ msgstr "A nyelvi fájlok elérési útvonala" msgid "Fancy URLs" msgstr "" -msgid "Use fancy (more readable and memorable) URLs?" +#. TRANS: Field title in Paths admin panel. +msgid "Use fancy URLs (more readable and memorable)?" msgstr "" +#. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "Theme" msgstr "Téma" @@ -3610,6 +3647,8 @@ msgid "Directory where attachments are located." msgstr "A nyelvi fájlok elérési útvonala" #. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "SSL" msgstr "SSL" @@ -3656,10 +3695,14 @@ msgstr "" msgid "People search" msgstr "Emberkereső" +#. TRANS: Client error displayed when trying to tag a profile with an invalid tag. +#. TRANS: %s is the invalid tag. #, php-format msgid "Not a valid people tag: %s." msgstr "" +#. TRANS: Page title for users with a certain self-tag. +#. TRANS: %1$s is the tag, %2$s is the page number. #, php-format msgid "Users self-tagged with %1$s - page %2$d" msgstr "" @@ -3669,15 +3712,19 @@ msgctxt "plugin" msgid "Disabled" msgstr "" +#. TRANS: Client error displayed when trying to use another method than POST. +#. TRANS: Do not translate POST. #. TRANS: Client error displayed trying to perform any request method other than POST. #. TRANS: Do not translate POST. msgid "This action only accepts POST requests." msgstr "" +#. TRANS: Client error displayed when trying to enable or disable a plugin without access rights. #, fuzzy msgid "You cannot administer plugins." msgstr "Nem törölhetsz felhasználókat." +#. TRANS: Client error displayed when trying to enable or disable a non-existing plugin. #, fuzzy msgid "No such plugin." msgstr "Nincs ilyen lap." @@ -3688,7 +3735,7 @@ msgid "Enabled" msgstr "" #. TRANS: Tab and title for plugins admin panel. -#. TRANS: Menu item for site administration +msgctxt "TITLE" msgid "Plugins" msgstr "" @@ -3704,15 +3751,19 @@ msgstr "" msgid "Default plugins" msgstr "Alapértelmezett nyelv" +#. TRANS: Text displayed on plugin admin page when no plugin are enabled. msgid "" "All default plugins have been disabled from the site's configuration file." msgstr "" +#. TRANS: Client error displayed if the notice posted has too many characters. msgid "Invalid notice content." msgstr "Érvénytelen megjegyzéstartalom." -#, php-format -msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’." +#. TRANS: Exception thrown if a notice's license is not compatible with the StatusNet site license. +#. TRANS: %1$s is the notice license, %2$s is the StatusNet site's license. +#, fuzzy, php-format +msgid "Notice license \"%1$s\" is not compatible with site license \"%2$s\"." msgstr "A hír licence ‘%1$s’ nem kompatibilis a webhely licencével ‘%2$s’." #. TRANS: Page title for profile settings. @@ -3868,43 +3919,57 @@ msgstr "A beállításokat elmentettük." msgid "Restore account" msgstr "" +#. TRANS: Client error displayed when requesting a public timeline page beyond the page limit. +#. TRANS: %s is the page limit. #, php-format msgid "Beyond the page limit (%s)." msgstr "" +#. TRANS: Server error displayed when a public timeline cannot be retrieved. msgid "Could not retrieve public stream." msgstr "" +#. TRANS: Title for all public timeline pages but the first. +#. TRANS: %d is the page number. #, php-format msgid "Public timeline, page %d" msgstr "Közösségi történet, %d. oldal" +#. TRANS: Title for the first public timeline page. msgid "Public timeline" msgstr "Közösségi történet" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 1.0)" msgstr "" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 2.0)" msgstr "" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (Atom)" msgstr "" +#. TRANS: Text displayed for public feed when there are no public notices. #, php-format msgid "" "This is the public timeline for %%site.name%% but no one has posted anything " "yet." msgstr "Ez itt %%site.name%% közösségi története, de még senki nem írt semmit." +#. TRANS: Additional text displayed for public feed when there are no public notices for a logged in user. msgid "Be the first to post!" msgstr "Légy az első aki ír!" +#. TRANS: Additional text displayed for public feed when there are no public notices for a not logged in user. #, php-format msgid "" "Why not [register an account](%%action.register%%) and be the first to post!" msgstr "Ha [regisztrálnál](%%action.register%%), te írhatnád az első hírt!" +#. TRANS: Message for not logged in users at an invite-only site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -3918,6 +3983,8 @@ msgstr "" "[Csatlakozz](%%action.register%%), és küldj híreket magadról a barátaidnak, " "a családodnak, a munkatársaidnak! ([Tudj meg többet](%%doc.help%%))" +#. TRANS: Message for not logged in users at a closed site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -5519,6 +5586,10 @@ msgid "" "along with this program. If not, see %s." msgstr "" +#. TRANS: Menu item for site administration +msgid "Plugins" +msgstr "" + #. TRANS: Form input field label for application name. msgid "Name" msgstr "Név" @@ -6003,6 +6074,9 @@ msgstr "" msgid "Unable to delete design setting." msgstr "Nem sikerült törölni a megjelenés beállításait." +msgid "Home" +msgstr "Otthon" + #. TRANS: Menu item title/tooltip msgid "Basic site configuration" msgstr "A webhely elemi beállításai" @@ -6589,9 +6663,6 @@ msgstr "Menj a telepítőhöz." msgid "Database error" msgstr "Adatbázishiba" -msgid "Home" -msgstr "Otthon" - msgid "Public" msgstr "" @@ -7363,7 +7434,6 @@ msgstr "Küldjünk egy hírt" msgid "What's up, %s?" msgstr "Mi hír, %s?" -#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Csatolás" @@ -7430,6 +7500,9 @@ msgstr "Töröljük ezt a hírt" msgid "Notice repeated" msgstr "A hírt megismételtük" +msgid "Update your status..." +msgstr "" + msgid "Nudge this user" msgstr "Bökjük meg ezt a felhasználót" @@ -7936,11 +8009,3 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" - -#, fuzzy -#~ msgid "Friends timeline" -#~ msgstr "%s története" - -#, fuzzy -#~ msgid "Everyone on this site" -#~ msgstr "Emberek keresése az oldalon" diff --git a/locale/ia/LC_MESSAGES/statusnet.po b/locale/ia/LC_MESSAGES/statusnet.po index fce258aa37..a56aa7c5c8 100644 --- a/locale/ia/LC_MESSAGES/statusnet.po +++ b/locale/ia/LC_MESSAGES/statusnet.po @@ -9,17 +9,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-08 01:03+0000\n" -"PO-Revision-Date: 2011-03-08 01:05:17+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:17:12+0000\n" "Language-Team: Interlingua \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83429); Translate extension (2011-03-07)\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ia\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-06 02:16:47+0000\n" +"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -1039,7 +1039,8 @@ msgid "Can only fave notices." msgstr "Solmente notas pote esser addite al favorites." #. TRANS: Client exception thrown when trying favorite a notice without content. -msgid "Unknown note." +#, fuzzy +msgid "Unknown notice." msgstr "Nota incognite." #. TRANS: Client exception thrown when trying favorite an already favorited notice. @@ -1608,6 +1609,7 @@ msgstr "Deler iste gruppo." #. TRANS: Client error displayed trying to create a new direct message while not logged in. #. TRANS: Client error displayed trying to send a notice while not logged in. #. TRANS: Client error displayed trying to nudge a user without being logged in. +#. TRANS: Client error displayed when trying to enable or disable a plugin while not logged in. #. TRANS: Client error displayed trying a change a subscription while not logged in. #. TRANS: Client error displayed trying to subscribe when not logged in. #. TRANS: Client error message thrown when trying to access the admin panel while not logged in. @@ -3081,6 +3083,10 @@ msgstr "Le URL de origine es requirite." msgid "Could not create application." msgstr "Non poteva crear application." +#, fuzzy +msgid "Invalid image." +msgstr "Dimension invalide." + #. TRANS: Title for form to create a group. msgid "New group" msgstr "Nove gruppo" @@ -3365,49 +3371,74 @@ msgid "This is your outbox, which lists private messages you have sent." msgstr "" "Isto es tu cassa de exito, que lista le messages private que tu ha inviate." +#. TRANS: Title for page where to change password. +#, fuzzy +msgctxt "TITLE" msgid "Change password" msgstr "Cambiar contrasigno" +#. TRANS: Instructions for page where to change password. msgid "Change your password." msgstr "Cambiar tu contrasigno." +#. TRANS: Fieldset legend on page where to change password. #. TRANS: Fieldset legend for password reset form. msgid "Password change" msgstr "Cambio del contrasigno" +#. TRANS: Field label on page where to change password. msgid "Old password" msgstr "Ancian contrasigno" +#. TRANS: Field label on page where to change password. #. TRANS: Field label for password reset form. msgid "New password" msgstr "Nove contrasigno" +#. TRANS: Field title on page where to change password. msgid "6 or more characters." msgstr "6 o plus characteres." +#. TRANS: Field label on page where to change password. In this field the new password should be typed a second time. +#, fuzzy +msgctxt "LABEL" +msgid "Confirm" +msgstr "Confirmar" + +#. TRANS: Field title on page where to change password. #. TRANS: Ttile for field label for password reset form where the password has to be typed again. msgid "Same as password above." msgstr "Identic al contrasigno hic supra." +#. TRANS: Button text on page where to change password. +#, fuzzy +msgctxt "BUTTON" msgid "Change" msgstr "Cambiar" +#. TRANS: Form validation error on page where to change password. msgid "Password must be 6 or more characters." msgstr "Le contrasigno debe haber al minus 6 characteres." msgid "Passwords don't match." msgstr "Le contrasignos non corresponde." -msgid "Incorrect old password" +#. TRANS: Form validation error on page where to change password. +#, fuzzy +msgid "Incorrect old password." msgstr "Ancian contrasigno incorrecte" +#. TRANS: Form validation error on page where to change password. msgid "Error saving user; invalid." msgstr "Error de salveguardar le usator; invalide." +#. TRANS: Server error displayed on page where to change password when password change +#. TRANS: could not be made because of a server error. #. TRANS: Reset password form validation error message. msgid "Cannot save new password." msgstr "Non pote salveguardar le nove contrasigno." +#. TRANS: Form validation notice on page where to change password. msgid "Password saved." msgstr "Contrasigno salveguardate." @@ -3457,6 +3488,7 @@ msgstr "Sito" msgid "Server" msgstr "Servitor" +#. TRANS: Field title in Paths admin panel. msgid "Site's server hostname." msgstr "Nomine de host del servitor del sito." @@ -3464,6 +3496,7 @@ msgstr "Nomine de host del servitor del sito." msgid "Path" msgstr "Cammino" +#. TRANS: Field title in Paths admin panel. msgid "Site path." msgstr "Cammino del sito." @@ -3471,6 +3504,7 @@ msgstr "Cammino del sito." msgid "Locale directory" msgstr "Directorio de localisation" +#. TRANS: Field title in Paths admin panel. msgid "Directory path to locales." msgstr "Cammino al directorio de localisation." @@ -3478,9 +3512,14 @@ msgstr "Cammino al directorio de localisation." msgid "Fancy URLs" msgstr "URLs de luxo" -msgid "Use fancy (more readable and memorable) URLs?" +#. TRANS: Field title in Paths admin panel. +#, fuzzy +msgid "Use fancy URLs (more readable and memorable)?" msgstr "Usar URLs de luxo (plus legibile e memorabile)?" +#. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "Theme" msgstr "Thema" @@ -3593,6 +3632,8 @@ msgid "Directory where attachments are located." msgstr "Cammino a ubi se trova le annexos." #. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "SSL" msgstr "SSL" @@ -3637,10 +3678,14 @@ msgstr "" msgid "People search" msgstr "Recerca de personas" +#. TRANS: Client error displayed when trying to tag a profile with an invalid tag. +#. TRANS: %s is the invalid tag. #, php-format msgid "Not a valid people tag: %s." msgstr "Etiquetta de personas invalide: %s." +#. TRANS: Page title for users with a certain self-tag. +#. TRANS: %1$s is the tag, %2$s is the page number. #, php-format msgid "Users self-tagged with %1$s - page %2$d" msgstr "Usatores auto-etiquettate con %1$s - pagina %2$d" @@ -3650,14 +3695,18 @@ msgctxt "plugin" msgid "Disabled" msgstr "Disactivate" +#. TRANS: Client error displayed when trying to use another method than POST. +#. TRANS: Do not translate POST. #. TRANS: Client error displayed trying to perform any request method other than POST. #. TRANS: Do not translate POST. msgid "This action only accepts POST requests." msgstr "Iste action accepta solmente le requestas de typo POST." +#. TRANS: Client error displayed when trying to enable or disable a plugin without access rights. msgid "You cannot administer plugins." msgstr "Tu non pote administrar plug-ins." +#. TRANS: Client error displayed when trying to enable or disable a non-existing plugin. msgid "No such plugin." msgstr "Plug-in non existe." @@ -3667,7 +3716,8 @@ msgid "Enabled" msgstr "Activate" #. TRANS: Tab and title for plugins admin panel. -#. TRANS: Menu item for site administration +#, fuzzy +msgctxt "TITLE" msgid "Plugins" msgstr "Plug-ins" @@ -3685,17 +3735,21 @@ msgstr "" msgid "Default plugins" msgstr "Plug-ins predefinite" +#. TRANS: Text displayed on plugin admin page when no plugin are enabled. msgid "" "All default plugins have been disabled from the site's configuration file." msgstr "" "Tote le plug-ins predefinite ha essite disactivate in le file de " "configuration del sito." +#. TRANS: Client error displayed if the notice posted has too many characters. msgid "Invalid notice content." msgstr "Le contento del nota es invalide." -#, php-format -msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’." +#. TRANS: Exception thrown if a notice's license is not compatible with the StatusNet site license. +#. TRANS: %1$s is the notice license, %2$s is the StatusNet site's license. +#, fuzzy, php-format +msgid "Notice license \"%1$s\" is not compatible with site license \"%2$s\"." msgstr "" "Le licentia del nota ‘%1$s’ non es compatibile con le licentia del sito ‘%2" "$s’." @@ -3843,29 +3897,39 @@ msgstr "Preferentias confirmate." msgid "Restore account" msgstr "Restaurar conto" +#. TRANS: Client error displayed when requesting a public timeline page beyond the page limit. +#. TRANS: %s is the page limit. #, php-format msgid "Beyond the page limit (%s)." msgstr "Ultra le limite de pagina (%s)." +#. TRANS: Server error displayed when a public timeline cannot be retrieved. msgid "Could not retrieve public stream." msgstr "Non poteva recuperar le fluxo public." +#. TRANS: Title for all public timeline pages but the first. +#. TRANS: %d is the page number. #, php-format msgid "Public timeline, page %d" msgstr "Chronologia public, pagina %d" +#. TRANS: Title for the first public timeline page. msgid "Public timeline" msgstr "Chronologia public" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 1.0)" msgstr "Syndication del fluxo public (RSS 1.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 2.0)" msgstr "Syndication del fluxo public (RSS 2.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (Atom)" msgstr "Syndication del fluxo public (Atom)" +#. TRANS: Text displayed for public feed when there are no public notices. #, php-format msgid "" "This is the public timeline for %%site.name%% but no one has posted anything " @@ -3874,9 +3938,11 @@ msgstr "" "Isto es le chronologia public pro %%site.name%%, ma nulle persona ha ancora " "scribite alique." +#. TRANS: Additional text displayed for public feed when there are no public notices for a logged in user. msgid "Be the first to post!" msgstr "Sia le prime a publicar!" +#. TRANS: Additional text displayed for public feed when there are no public notices for a not logged in user. #, php-format msgid "" "Why not [register an account](%%action.register%%) and be the first to post!" @@ -3884,6 +3950,8 @@ msgstr "" "Proque non [registrar un conto](%%action.register%%) e devenir le prime a " "publicar?" +#. TRANS: Message for not logged in users at an invite-only site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -3896,6 +3964,8 @@ msgstr "" "[Inscribe te ora](%%action.register%%) pro condivider notas super te con " "amicos, familia e collegas! ([Leger plus](%%doc.help%%))" +#. TRANS: Message for not logged in users at a closed site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -5588,6 +5658,10 @@ msgstr "" "Un copia del GNU Affero General Public License deberea esser disponibile " "insimul con iste programma. Si non, vide %s." +#. TRANS: Menu item for site administration +msgid "Plugins" +msgstr "Plug-ins" + #. TRANS: Form input field label for application name. msgid "Name" msgstr "Nomine" @@ -5919,9 +5993,8 @@ msgstr "Responder" msgid "Write a reply..." msgstr "Scriber un responsa..." -#, fuzzy msgid "Status" -msgstr "StatusNet" +msgstr "Stato" #. TRANS: First sentence of the StatusNet site license. Used if 'broughtby' is set. #. TRANS: Text between [] is a link description, text between () is the link itself. @@ -6088,6 +6161,9 @@ msgstr "saveSettings() non implementate." msgid "Unable to delete design setting." msgstr "Impossibile deler configuration de apparentia." +msgid "Home" +msgstr "Initio" + #. TRANS: Menu item title/tooltip msgid "Basic site configuration" msgstr "Configuration basic del sito" @@ -6715,9 +6791,6 @@ msgstr "Ir al installator." msgid "Database error" msgstr "Error de base de datos" -msgid "Home" -msgstr "Initio" - msgid "Public" msgstr "Public" @@ -7486,18 +7559,16 @@ msgid "from" msgstr "via" msgid "Can't get author for activity." -msgstr "" +msgstr "Non pote determinar le autor pro le activitate." -#, fuzzy msgid "Bookmark not posted to this group." -msgstr "Tu non ha le permission de deler iste gruppo." +msgstr "Le marcapaginas non es publicate in iste gruppo." -#, fuzzy msgid "Object not posted to this user." -msgstr "Non deler iste usator." +msgstr "Le objecto non es inviate a iste usator." msgid "Don't know how to handle this kind of target." -msgstr "" +msgstr "Non sape manear iste typo de destination." #. TRANS: Validation error in form for registration, profile and group settings, etc. msgid "Nickname cannot be empty." @@ -7519,7 +7590,6 @@ msgstr "Inviar un nota" msgid "What's up, %s?" msgstr "Como sta, %s?" -#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Annexar" @@ -7587,6 +7657,9 @@ msgstr "Deler iste nota" msgid "Notice repeated" msgstr "Nota repetite" +msgid "Update your status..." +msgstr "" + msgid "Nudge this user" msgstr "Pulsar iste usator" @@ -8093,9 +8166,3 @@ msgstr "XML invalide, radice XRD mancante." #, php-format msgid "Getting backup from file '%s'." msgstr "Obtene copia de reserva ex file '%s'." - -#~ msgid "Friends timeline" -#~ msgstr "Chronologia de amicos" - -#~ msgid "Everyone on this site" -#~ msgstr "Omnes in iste sito" diff --git a/locale/it/LC_MESSAGES/statusnet.po b/locale/it/LC_MESSAGES/statusnet.po index 472a3eb844..78b07bbdfc 100644 --- a/locale/it/LC_MESSAGES/statusnet.po +++ b/locale/it/LC_MESSAGES/statusnet.po @@ -11,17 +11,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-08 01:03+0000\n" -"PO-Revision-Date: 2011-03-08 01:05:18+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:17:13+0000\n" "Language-Team: Italian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83429); Translate extension (2011-03-07)\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: it\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-06 02:16:47+0000\n" +"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -1060,7 +1060,7 @@ msgstr "Trova contenuto dei messaggi" #. TRANS: Client exception thrown when trying favorite a notice without content. #, fuzzy -msgid "Unknown note." +msgid "Unknown notice." msgstr "Sconosciuto" #. TRANS: Client exception thrown when trying favorite an already favorited notice. @@ -1652,6 +1652,7 @@ msgstr "Elimina questo utente" #. TRANS: Client error displayed trying to create a new direct message while not logged in. #. TRANS: Client error displayed trying to send a notice while not logged in. #. TRANS: Client error displayed trying to nudge a user without being logged in. +#. TRANS: Client error displayed when trying to enable or disable a plugin while not logged in. #. TRANS: Client error displayed trying a change a subscription while not logged in. #. TRANS: Client error displayed trying to subscribe when not logged in. #. TRANS: Client error message thrown when trying to access the admin panel while not logged in. @@ -3173,6 +3174,10 @@ msgstr "L'URL sorgente è richiesto." msgid "Could not create application." msgstr "Impossibile creare l'applicazione." +#, fuzzy +msgid "Invalid image." +msgstr "Dimensione non valida." + #. TRANS: Title for form to create a group. msgid "New group" msgstr "Nuovo gruppo" @@ -3457,52 +3462,77 @@ msgstr "" "Questa è la casella della tua posta inviata, contiene i messaggi privati che " "hai inviato." +#. TRANS: Title for page where to change password. +#, fuzzy +msgctxt "TITLE" msgid "Change password" msgstr "Modifica password" +#. TRANS: Instructions for page where to change password. msgid "Change your password." msgstr "Modifica la tua password." +#. TRANS: Fieldset legend on page where to change password. #. TRANS: Fieldset legend for password reset form. msgid "Password change" msgstr "Modifica password" +#. TRANS: Field label on page where to change password. msgid "Old password" msgstr "Vecchia password" +#. TRANS: Field label on page where to change password. #. TRANS: Field label for password reset form. msgid "New password" msgstr "Nuova password" +#. TRANS: Field title on page where to change password. #, fuzzy msgid "6 or more characters." msgstr "6 o più caratteri" +#. TRANS: Field label on page where to change password. In this field the new password should be typed a second time. +#, fuzzy +msgctxt "LABEL" +msgid "Confirm" +msgstr "Conferma" + +#. TRANS: Field title on page where to change password. #. TRANS: Ttile for field label for password reset form where the password has to be typed again. #, fuzzy msgid "Same as password above." msgstr "Stessa password di sopra" +#. TRANS: Button text on page where to change password. +#, fuzzy +msgctxt "BUTTON" msgid "Change" msgstr "Modifica" +#. TRANS: Form validation error on page where to change password. msgid "Password must be 6 or more characters." msgstr "La password deve essere di 6 o più caratteri." msgid "Passwords don't match." msgstr "Le password non corrispondono." -msgid "Incorrect old password" +#. TRANS: Form validation error on page where to change password. +#, fuzzy +msgid "Incorrect old password." msgstr "Vecchia password non corretta" +#. TRANS: Form validation error on page where to change password. msgid "Error saving user; invalid." msgstr "Errore nel salvare l'utente; non valido." +#. TRANS: Server error displayed on page where to change password when password change +#. TRANS: could not be made because of a server error. #. TRANS: Reset password form validation error message. #, fuzzy msgid "Cannot save new password." msgstr "Impossibile salvare la nuova password." +#. TRANS: Form validation notice on page where to change password. msgid "Password saved." msgstr "Password salvata." @@ -3552,6 +3582,7 @@ msgstr "Sito" msgid "Server" msgstr "Server" +#. TRANS: Field title in Paths admin panel. msgid "Site's server hostname." msgstr "Nome host del server" @@ -3559,6 +3590,7 @@ msgstr "Nome host del server" msgid "Path" msgstr "Percorso" +#. TRANS: Field title in Paths admin panel. #, fuzzy msgid "Site path." msgstr "Percorso del sito" @@ -3568,6 +3600,7 @@ msgstr "Percorso del sito" msgid "Locale directory" msgstr "Directory del tema" +#. TRANS: Field title in Paths admin panel. #, fuzzy msgid "Directory path to locales." msgstr "Percorso della directory alle localizzazioni" @@ -3576,9 +3609,14 @@ msgstr "Percorso della directory alle localizzazioni" msgid "Fancy URLs" msgstr "URL semplici" -msgid "Use fancy (more readable and memorable) URLs?" +#. TRANS: Field title in Paths admin panel. +#, fuzzy +msgid "Use fancy URLs (more readable and memorable)?" msgstr "Usare gli URL semplici (più leggibili e facili da ricordare)?" +#. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "Theme" msgstr "Tema" @@ -3704,6 +3742,8 @@ msgid "Directory where attachments are located." msgstr "Percorso della directory alle localizzazioni" #. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "SSL" msgstr "SSL" @@ -3750,10 +3790,14 @@ msgstr "" msgid "People search" msgstr "Cerca persone" +#. TRANS: Client error displayed when trying to tag a profile with an invalid tag. +#. TRANS: %s is the invalid tag. #, php-format msgid "Not a valid people tag: %s." msgstr "Non è un'etichetta valida di persona: %s." +#. TRANS: Page title for users with a certain self-tag. +#. TRANS: %1$s is the tag, %2$s is the page number. #, php-format msgid "Users self-tagged with %1$s - page %2$d" msgstr "Utenti auto-etichettati con %1$s - pagina %2$d" @@ -3763,15 +3807,19 @@ msgctxt "plugin" msgid "Disabled" msgstr "" +#. TRANS: Client error displayed when trying to use another method than POST. +#. TRANS: Do not translate POST. #. TRANS: Client error displayed trying to perform any request method other than POST. #. TRANS: Do not translate POST. msgid "This action only accepts POST requests." msgstr "Quest'azione accetta solo richieste POST." +#. TRANS: Client error displayed when trying to enable or disable a plugin without access rights. #, fuzzy msgid "You cannot administer plugins." msgstr "Non puoi eliminare utenti." +#. TRANS: Client error displayed when trying to enable or disable a non-existing plugin. #, fuzzy msgid "No such plugin." msgstr "Pagina inesistente." @@ -3782,7 +3830,8 @@ msgid "Enabled" msgstr "" #. TRANS: Tab and title for plugins admin panel. -#. TRANS: Menu item for site administration +#, fuzzy +msgctxt "TITLE" msgid "Plugins" msgstr "Plugin" @@ -3798,15 +3847,19 @@ msgstr "" msgid "Default plugins" msgstr "Lingua predefinita" +#. TRANS: Text displayed on plugin admin page when no plugin are enabled. msgid "" "All default plugins have been disabled from the site's configuration file." msgstr "" +#. TRANS: Client error displayed if the notice posted has too many characters. msgid "Invalid notice content." msgstr "Contenuto del messaggio non valido." -#, php-format -msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’." +#. TRANS: Exception thrown if a notice's license is not compatible with the StatusNet site license. +#. TRANS: %1$s is the notice license, %2$s is the StatusNet site's license. +#, fuzzy, php-format +msgid "Notice license \"%1$s\" is not compatible with site license \"%2$s\"." msgstr "" "La licenza \"%1$s\" del messaggio non è compatibile con la licenza del sito " "\"%2$s\"." @@ -3963,29 +4016,39 @@ msgstr "Impostazioni salvate." msgid "Restore account" msgstr "Crea un account" +#. TRANS: Client error displayed when requesting a public timeline page beyond the page limit. +#. TRANS: %s is the page limit. #, php-format msgid "Beyond the page limit (%s)." msgstr "Oltre il limite della pagina (%s)." +#. TRANS: Server error displayed when a public timeline cannot be retrieved. msgid "Could not retrieve public stream." msgstr "Impossibile recuperare l'attività pubblica." +#. TRANS: Title for all public timeline pages but the first. +#. TRANS: %d is the page number. #, php-format msgid "Public timeline, page %d" msgstr "Attività pubblica, pagina %d" +#. TRANS: Title for the first public timeline page. msgid "Public timeline" msgstr "Attività pubblica" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 1.0)" msgstr "Feed dell'attività pubblica (RSS 1.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 2.0)" msgstr "Feed dell'attività pubblica (RSS 2.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (Atom)" msgstr "Feed dell'attività pubblica (Atom)" +#. TRANS: Text displayed for public feed when there are no public notices. #, php-format msgid "" "This is the public timeline for %%site.name%% but no one has posted anything " @@ -3994,15 +4057,19 @@ msgstr "" "Questa è l'attività pubblica di %%site.name%%, ma nessuno ha ancora scritto " "qualche cosa." +#. TRANS: Additional text displayed for public feed when there are no public notices for a logged in user. msgid "Be the first to post!" msgstr "Fallo tu!" +#. TRANS: Additional text displayed for public feed when there are no public notices for a not logged in user. #, php-format msgid "" "Why not [register an account](%%action.register%%) and be the first to post!" msgstr "" "Perché non [crei un account](%%action.register%%) e scrivi qualche cosa!" +#. TRANS: Message for not logged in users at an invite-only site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -4015,6 +4082,8 @@ msgstr "" "net/). [Registrati](%%action.register%%) per condividere messaggi con i tuoi " "amici, i tuoi familiari e colleghi! ([Maggiori informazioni](%%doc.help%%))" +#. TRANS: Message for not logged in users at a closed site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -5735,6 +5804,10 @@ msgstr "" "Una copia della GNU Affero General Plublic License dovrebbe essere " "disponibile assieme a questo programma. Se così non fosse, consultare %s." +#. TRANS: Menu item for site administration +msgid "Plugins" +msgstr "Plugin" + #. TRANS: Form input field label for application name. msgid "Name" msgstr "Nome" @@ -6245,6 +6318,9 @@ msgstr "saveSettings() non implementata." msgid "Unable to delete design setting." msgstr "Impossibile eliminare le impostazioni dell'aspetto." +msgid "Home" +msgstr "Pagina web" + #. TRANS: Menu item title/tooltip msgid "Basic site configuration" msgstr "Configurazione di base" @@ -6882,9 +6958,6 @@ msgstr "Vai al programma d'installazione." msgid "Database error" msgstr "Errore del database" -msgid "Home" -msgstr "Pagina web" - msgid "Public" msgstr "Pubblico" @@ -7694,7 +7767,6 @@ msgstr "Invia un messaggio" msgid "What's up, %s?" msgstr "Cosa succede, %s?" -#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Allega" @@ -7763,6 +7835,9 @@ msgstr "Elimina questo messaggio" msgid "Notice repeated" msgstr "Messaggio ripetuto" +msgid "Update your status..." +msgstr "" + msgid "Nudge this user" msgstr "Richiama questo utente" @@ -8274,11 +8349,3 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" - -#, fuzzy -#~ msgid "Friends timeline" -#~ msgstr "Attività di %s" - -#, fuzzy -#~ msgid "Everyone on this site" -#~ msgstr "Trova persone in questo sito" diff --git a/locale/ja/LC_MESSAGES/statusnet.po b/locale/ja/LC_MESSAGES/statusnet.po index 3eec1131ea..00de07045f 100644 --- a/locale/ja/LC_MESSAGES/statusnet.po +++ b/locale/ja/LC_MESSAGES/statusnet.po @@ -14,17 +14,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-08 01:03+0000\n" -"PO-Revision-Date: 2011-03-08 01:05:19+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:17:15+0000\n" "Language-Team: Japanese \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83429); Translate extension (2011-03-07)\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ja\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-POT-Import-Date: 2011-03-06 02:16:47+0000\n" +"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -1050,7 +1050,7 @@ msgstr "つぶやきの内容を探す" #. TRANS: Client exception thrown when trying favorite a notice without content. #, fuzzy -msgid "Unknown note." +msgid "Unknown notice." msgstr "不明" #. TRANS: Client exception thrown when trying favorite an already favorited notice. @@ -1645,6 +1645,7 @@ msgstr "このユーザを削除" #. TRANS: Client error displayed trying to create a new direct message while not logged in. #. TRANS: Client error displayed trying to send a notice while not logged in. #. TRANS: Client error displayed trying to nudge a user without being logged in. +#. TRANS: Client error displayed when trying to enable or disable a plugin while not logged in. #. TRANS: Client error displayed trying a change a subscription while not logged in. #. TRANS: Client error displayed trying to subscribe when not logged in. #. TRANS: Client error message thrown when trying to access the admin panel while not logged in. @@ -3168,6 +3169,10 @@ msgstr "ソースURLが必要です。" msgid "Could not create application." msgstr "アプリケーションを作成できません。" +#, fuzzy +msgid "Invalid image." +msgstr "不正なサイズ。" + #. TRANS: Title for form to create a group. msgid "New group" msgstr "新しいグループ" @@ -3453,52 +3458,77 @@ msgstr "" "これはあなたの送信箱です、あなたが送ったプライベート・メッセージをリストしま" "す。" +#. TRANS: Title for page where to change password. +#, fuzzy +msgctxt "TITLE" msgid "Change password" msgstr "パスワードの変更" +#. TRANS: Instructions for page where to change password. msgid "Change your password." msgstr "パスワードを変更します。" +#. TRANS: Fieldset legend on page where to change password. #. TRANS: Fieldset legend for password reset form. msgid "Password change" msgstr "パスワード変更" +#. TRANS: Field label on page where to change password. msgid "Old password" msgstr "古いパスワード" +#. TRANS: Field label on page where to change password. #. TRANS: Field label for password reset form. msgid "New password" msgstr "新しいパスワード" +#. TRANS: Field title on page where to change password. #, fuzzy msgid "6 or more characters." msgstr "6文字以上" +#. TRANS: Field label on page where to change password. In this field the new password should be typed a second time. +#, fuzzy +msgctxt "LABEL" +msgid "Confirm" +msgstr "パスワード確認" + +#. TRANS: Field title on page where to change password. #. TRANS: Ttile for field label for password reset form where the password has to be typed again. #, fuzzy msgid "Same as password above." msgstr "上と同じパスワード" +#. TRANS: Button text on page where to change password. +#, fuzzy +msgctxt "BUTTON" msgid "Change" msgstr "変更" +#. TRANS: Form validation error on page where to change password. msgid "Password must be 6 or more characters." msgstr "パスワードは6文字以上にする必要があります。" msgid "Passwords don't match." msgstr "パスワードが一致しません。" -msgid "Incorrect old password" +#. TRANS: Form validation error on page where to change password. +#, fuzzy +msgid "Incorrect old password." msgstr "古いパスワードが間違っています。" +#. TRANS: Form validation error on page where to change password. msgid "Error saving user; invalid." msgstr "ユーザ保存エラー; 不正なユーザ" +#. TRANS: Server error displayed on page where to change password when password change +#. TRANS: could not be made because of a server error. #. TRANS: Reset password form validation error message. #, fuzzy msgid "Cannot save new password." msgstr "新しいパスワードを保存できません。" +#. TRANS: Form validation notice on page where to change password. msgid "Password saved." msgstr "パスワードが保存されました。" @@ -3548,6 +3578,7 @@ msgstr "サイト" msgid "Server" msgstr "サーバー" +#. TRANS: Field title in Paths admin panel. msgid "Site's server hostname." msgstr "サイトのサーバーホスト名" @@ -3555,6 +3586,7 @@ msgstr "サイトのサーバーホスト名" msgid "Path" msgstr "パス" +#. TRANS: Field title in Paths admin panel. #, fuzzy msgid "Site path." msgstr "サイトパス" @@ -3564,6 +3596,7 @@ msgstr "サイトパス" msgid "Locale directory" msgstr "テーマディレクトリ" +#. TRANS: Field title in Paths admin panel. #, fuzzy msgid "Directory path to locales." msgstr "ロケールへのディレクトリパス" @@ -3572,9 +3605,14 @@ msgstr "ロケールへのディレクトリパス" msgid "Fancy URLs" msgstr "" -msgid "Use fancy (more readable and memorable) URLs?" +#. TRANS: Field title in Paths admin panel. +#, fuzzy +msgid "Use fancy URLs (more readable and memorable)?" msgstr "Fancy URL (読みやすく忘れにくい) を使用しますか?" +#. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "Theme" msgstr "テーマ" @@ -3700,6 +3738,8 @@ msgid "Directory where attachments are located." msgstr "ロケールへのディレクトリパス" #. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "SSL" msgstr "SSL" @@ -3746,10 +3786,14 @@ msgstr "" msgid "People search" msgstr "ピープルサーチ" +#. TRANS: Client error displayed when trying to tag a profile with an invalid tag. +#. TRANS: %s is the invalid tag. #, php-format msgid "Not a valid people tag: %s." msgstr "有効なメールアドレスではありません。" +#. TRANS: Page title for users with a certain self-tag. +#. TRANS: %1$s is the tag, %2$s is the page number. #, php-format msgid "Users self-tagged with %1$s - page %2$d" msgstr "ユーザ自身がつけたタグ %1$s - ページ %2$d" @@ -3759,15 +3803,19 @@ msgctxt "plugin" msgid "Disabled" msgstr "" +#. TRANS: Client error displayed when trying to use another method than POST. +#. TRANS: Do not translate POST. #. TRANS: Client error displayed trying to perform any request method other than POST. #. TRANS: Do not translate POST. msgid "This action only accepts POST requests." msgstr "" +#. TRANS: Client error displayed when trying to enable or disable a plugin without access rights. #, fuzzy msgid "You cannot administer plugins." msgstr "ユーザを削除できません" +#. TRANS: Client error displayed when trying to enable or disable a non-existing plugin. #, fuzzy msgid "No such plugin." msgstr "そのようなページはありません。" @@ -3778,7 +3826,8 @@ msgid "Enabled" msgstr "" #. TRANS: Tab and title for plugins admin panel. -#. TRANS: Menu item for site administration +#, fuzzy +msgctxt "TITLE" msgid "Plugins" msgstr "プラグイン" @@ -3794,15 +3843,19 @@ msgstr "" msgid "Default plugins" msgstr "ご希望の言語" +#. TRANS: Text displayed on plugin admin page when no plugin are enabled. msgid "" "All default plugins have been disabled from the site's configuration file." msgstr "" +#. TRANS: Client error displayed if the notice posted has too many characters. msgid "Invalid notice content." msgstr "不正なトークン。" -#, php-format -msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’." +#. TRANS: Exception thrown if a notice's license is not compatible with the StatusNet site license. +#. TRANS: %1$s is the notice license, %2$s is the StatusNet site's license. +#, fuzzy, php-format +msgid "Notice license \"%1$s\" is not compatible with site license \"%2$s\"." msgstr "" "つぶやきライセンス ‘%1$s’ はサイトライセンス ‘%2$s’ と互換性がありません。" @@ -3954,29 +4007,39 @@ msgstr "設定が保存されました。" msgid "Restore account" msgstr "新しいグループを作成" +#. TRANS: Client error displayed when requesting a public timeline page beyond the page limit. +#. TRANS: %s is the page limit. #, fuzzy, php-format msgid "Beyond the page limit (%s)." msgstr "ページ制限を超えました (%s)" +#. TRANS: Server error displayed when a public timeline cannot be retrieved. msgid "Could not retrieve public stream." msgstr "パブリックストリームを検索できません。" +#. TRANS: Title for all public timeline pages but the first. +#. TRANS: %d is the page number. #, php-format msgid "Public timeline, page %d" msgstr "パブリックタイムライン、ページ %d" +#. TRANS: Title for the first public timeline page. msgid "Public timeline" msgstr "パブリックタイムライン" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 1.0)" msgstr "パブリックストリームフィード (RSS 1.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 2.0)" msgstr "パブリックストリームフィード (RSS 2.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (Atom)" msgstr "パブリックストリームフィード (Atom)" +#. TRANS: Text displayed for public feed when there are no public notices. #, php-format msgid "" "This is the public timeline for %%site.name%% but no one has posted anything " @@ -3985,9 +4048,11 @@ msgstr "" "これは %%site.name%% のパブリックタイムラインです、しかしまだ誰も投稿していま" "せん。" +#. TRANS: Additional text displayed for public feed when there are no public notices for a logged in user. msgid "Be the first to post!" msgstr "投稿する1番目になってください!" +#. TRANS: Additional text displayed for public feed when there are no public notices for a not logged in user. #, php-format msgid "" "Why not [register an account](%%action.register%%) and be the first to post!" @@ -3995,6 +4060,8 @@ msgstr "" "なぜ [アカウント登録](%%action.register%%) しないのですか、そして最初の投稿を" "してください!" +#. TRANS: Message for not logged in users at an invite-only site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -4008,6 +4075,8 @@ msgstr "" "族そして同僚などについてのつぶやきを共有しましょう! ([もっと読む](%%doc.help%" "%))" +#. TRANS: Message for not logged in users at a closed site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -5730,6 +5799,10 @@ msgid "" "along with this program. If not, see %s." msgstr "" +#. TRANS: Menu item for site administration +msgid "Plugins" +msgstr "プラグイン" + #. TRANS: Form input field label for application name. msgid "Name" msgstr "名前" @@ -6228,6 +6301,9 @@ msgstr "saveSettings() は実装されていません。" msgid "Unable to delete design setting." msgstr "デザイン設定を削除できません。" +msgid "Home" +msgstr "ホームページ" + #. TRANS: Menu item title/tooltip msgid "Basic site configuration" msgstr "基本サイト設定" @@ -6827,9 +6903,6 @@ msgstr "インストーラへ。" msgid "Database error" msgstr "データベースエラー" -msgid "Home" -msgstr "ホームページ" - msgid "Public" msgstr "パブリック" @@ -7603,7 +7676,6 @@ msgstr "つぶやきを送る" msgid "What's up, %s?" msgstr "最近どう %s?" -#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "添付" @@ -7676,6 +7748,9 @@ msgstr "このつぶやきを削除" msgid "Notice repeated" msgstr "つぶやきを繰り返しました" +msgid "Update your status..." +msgstr "" + msgid "Nudge this user" msgstr "このユーザへ合図" @@ -8179,11 +8254,3 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" - -#, fuzzy -#~ msgid "Friends timeline" -#~ msgstr "%s のタイムライン" - -#, fuzzy -#~ msgid "Everyone on this site" -#~ msgstr "このサイトの人々を探す" diff --git a/locale/ka/LC_MESSAGES/statusnet.po b/locale/ka/LC_MESSAGES/statusnet.po index 2ee236d8e5..c282ae94ac 100644 --- a/locale/ka/LC_MESSAGES/statusnet.po +++ b/locale/ka/LC_MESSAGES/statusnet.po @@ -9,17 +9,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-08 01:03+0000\n" -"PO-Revision-Date: 2011-03-08 01:05:20+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:17:16+0000\n" "Language-Team: Georgian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83429); Translate extension (2011-03-07)\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ka\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-POT-Import-Date: 2011-03-06 02:16:47+0000\n" +"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -1034,7 +1034,7 @@ msgstr "მოძებნე შეტყობინებებში" #. TRANS: Client exception thrown when trying favorite a notice without content. #, fuzzy -msgid "Unknown note." +msgid "Unknown notice." msgstr "უცნობი" #. TRANS: Client exception thrown when trying favorite an already favorited notice. @@ -1622,6 +1622,7 @@ msgstr "ამ მომხმარებლის წაშლა" #. TRANS: Client error displayed trying to create a new direct message while not logged in. #. TRANS: Client error displayed trying to send a notice while not logged in. #. TRANS: Client error displayed trying to nudge a user without being logged in. +#. TRANS: Client error displayed when trying to enable or disable a plugin while not logged in. #. TRANS: Client error displayed trying a change a subscription while not logged in. #. TRANS: Client error displayed trying to subscribe when not logged in. #. TRANS: Client error message thrown when trying to access the admin panel while not logged in. @@ -3133,6 +3134,10 @@ msgstr "წყაროს URL სავალდებულოა." msgid "Could not create application." msgstr "აპლიკაციის შექმნა ვერ მოხერხდა." +#, fuzzy +msgid "Invalid image." +msgstr "ზომა არასწორია." + #. TRANS: Title for form to create a group. msgid "New group" msgstr "ახალი ჯგუფი" @@ -3413,52 +3418,77 @@ msgstr "" "ეს არის თქვენი გამავალი ფოსტა, რომელშიც ჩამოთვლილია პირადი შეტყობინებები " "რომლებიც თქვენ გააგზავნეთ." +#. TRANS: Title for page where to change password. +#, fuzzy +msgctxt "TITLE" msgid "Change password" msgstr "შეცვალეთ პაროლი" +#. TRANS: Instructions for page where to change password. msgid "Change your password." msgstr "შეცვალეთ თქვენი პაროლი." +#. TRANS: Fieldset legend on page where to change password. #. TRANS: Fieldset legend for password reset form. msgid "Password change" msgstr "პაროლის შეცვლა" +#. TRANS: Field label on page where to change password. msgid "Old password" msgstr "ძველი პაროლი" +#. TRANS: Field label on page where to change password. #. TRANS: Field label for password reset form. msgid "New password" msgstr "ახალი პაროლი" +#. TRANS: Field title on page where to change password. #, fuzzy msgid "6 or more characters." msgstr "6 ან მეტი სიმბოლო" +#. TRANS: Field label on page where to change password. In this field the new password should be typed a second time. +#, fuzzy +msgctxt "LABEL" +msgid "Confirm" +msgstr "ვადასტურებ" + +#. TRANS: Field title on page where to change password. #. TRANS: Ttile for field label for password reset form where the password has to be typed again. #, fuzzy msgid "Same as password above." msgstr "იგივე რაც ზედა პაროლი" +#. TRANS: Button text on page where to change password. +#, fuzzy +msgctxt "BUTTON" msgid "Change" msgstr "შეცვლა" +#. TRANS: Form validation error on page where to change password. msgid "Password must be 6 or more characters." msgstr "პაროლი უნდა შედგებოდეს 6 ან მეტი სიმბოლოსგან." msgid "Passwords don't match." msgstr "პაროლები არ ემთხვევა." -msgid "Incorrect old password" +#. TRANS: Form validation error on page where to change password. +#, fuzzy +msgid "Incorrect old password." msgstr "არასწორი ძველი პაროლი" +#. TRANS: Form validation error on page where to change password. msgid "Error saving user; invalid." msgstr "შეცდომა მომხმარებლის შენახვისას; არასწორი." +#. TRANS: Server error displayed on page where to change password when password change +#. TRANS: could not be made because of a server error. #. TRANS: Reset password form validation error message. #, fuzzy msgid "Cannot save new password." msgstr "ვერ ვინახავ ახალ პაროლს." +#. TRANS: Form validation notice on page where to change password. msgid "Password saved." msgstr "პაროლი შენახულია." @@ -3508,6 +3538,7 @@ msgstr "საიტი" msgid "Server" msgstr "სერვერი" +#. TRANS: Field title in Paths admin panel. msgid "Site's server hostname." msgstr "საიტის სერვერის ჰოსტის სახელი." @@ -3515,6 +3546,7 @@ msgstr "საიტის სერვერის ჰოსტის სახ msgid "Path" msgstr "გზა" +#. TRANS: Field title in Paths admin panel. #, fuzzy msgid "Site path." msgstr "საიტის გზა" @@ -3524,6 +3556,7 @@ msgstr "საიტის გზა" msgid "Locale directory" msgstr "იერსახის დირექტორია" +#. TRANS: Field title in Paths admin panel. msgid "Directory path to locales." msgstr "" @@ -3531,9 +3564,14 @@ msgstr "" msgid "Fancy URLs" msgstr "ლამაზი URL–ები" -msgid "Use fancy (more readable and memorable) URLs?" +#. TRANS: Field title in Paths admin panel. +#, fuzzy +msgid "Use fancy URLs (more readable and memorable)?" msgstr "გამოვიყენო ლამაზი (მეტად კითხვადი და დასამახსოვრებელი) URL–ები?" +#. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "Theme" msgstr "იერსახე" @@ -3655,6 +3693,8 @@ msgid "Directory where attachments are located." msgstr "" #. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "SSL" msgstr "SSL" @@ -3702,10 +3742,14 @@ msgstr "" msgid "People search" msgstr "პიროვნებების ძიება" +#. TRANS: Client error displayed when trying to tag a profile with an invalid tag. +#. TRANS: %s is the invalid tag. #, php-format msgid "Not a valid people tag: %s." msgstr "პიროვნებების არასწორი სანიშნე: %s." +#. TRANS: Page title for users with a certain self-tag. +#. TRANS: %1$s is the tag, %2$s is the page number. #, php-format msgid "Users self-tagged with %1$s - page %2$d" msgstr "" @@ -3716,15 +3760,19 @@ msgctxt "plugin" msgid "Disabled" msgstr "" +#. TRANS: Client error displayed when trying to use another method than POST. +#. TRANS: Do not translate POST. #. TRANS: Client error displayed trying to perform any request method other than POST. #. TRANS: Do not translate POST. msgid "This action only accepts POST requests." msgstr "ეს მოქმედება მხოლოდ POST მოთხოვნებს იღებს." +#. TRANS: Client error displayed when trying to enable or disable a plugin without access rights. #, fuzzy msgid "You cannot administer plugins." msgstr "თქვენ ვერ შეძლებთ მომხმარებლების წაშლას." +#. TRANS: Client error displayed when trying to enable or disable a non-existing plugin. #, fuzzy msgid "No such plugin." msgstr "ასეთი გვერდი არ არსებობს." @@ -3735,7 +3783,8 @@ msgid "Enabled" msgstr "" #. TRANS: Tab and title for plugins admin panel. -#. TRANS: Menu item for site administration +#, fuzzy +msgctxt "TITLE" msgid "Plugins" msgstr "დამატებები" @@ -3751,15 +3800,19 @@ msgstr "" msgid "Default plugins" msgstr "პირვანდელი ენა" +#. TRANS: Text displayed on plugin admin page when no plugin are enabled. msgid "" "All default plugins have been disabled from the site's configuration file." msgstr "" +#. TRANS: Client error displayed if the notice posted has too many characters. msgid "Invalid notice content." msgstr "შეტყობინების არასწორი შიგთავსი." -#, php-format -msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’." +#. TRANS: Exception thrown if a notice's license is not compatible with the StatusNet site license. +#. TRANS: %1$s is the notice license, %2$s is the StatusNet site's license. +#, fuzzy, php-format +msgid "Notice license \"%1$s\" is not compatible with site license \"%2$s\"." msgstr "შეტყობინების ლიცენზია ‘%1$s’ შეუთავსებელია საიტის ლიცენზიასთან ‘%2$s’." #. TRANS: Page title for profile settings. @@ -3911,29 +3964,39 @@ msgstr "პარამეტრები შენახულია." msgid "Restore account" msgstr "გახსენი ანგარიში" +#. TRANS: Client error displayed when requesting a public timeline page beyond the page limit. +#. TRANS: %s is the page limit. #, php-format msgid "Beyond the page limit (%s)." msgstr "გვერსიდ საზღვრის მიღმა (%s)." +#. TRANS: Server error displayed when a public timeline cannot be retrieved. msgid "Could not retrieve public stream." msgstr "საჯარო ნაკადის გამოთხოვნა ვერ ხერხდება." +#. TRANS: Title for all public timeline pages but the first. +#. TRANS: %d is the page number. #, php-format msgid "Public timeline, page %d" msgstr "საჯარო განახლებების ნაკადი, გვერდი %d" +#. TRANS: Title for the first public timeline page. msgid "Public timeline" msgstr "საჯარო განახლებების ნაკადი" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 1.0)" msgstr "" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 2.0)" msgstr "" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (Atom)" msgstr "" +#. TRANS: Text displayed for public feed when there are no public notices. #, php-format msgid "" "This is the public timeline for %%site.name%% but no one has posted anything " @@ -3941,14 +4004,18 @@ msgid "" msgstr "" "ეს არის საჯარო განახლებების ნაკადი, მაგრამ ჯერჯერობით არავის დაუპოსტავს." +#. TRANS: Additional text displayed for public feed when there are no public notices for a logged in user. msgid "Be the first to post!" msgstr "დაპოსტე პირველმა!" +#. TRANS: Additional text displayed for public feed when there are no public notices for a not logged in user. #, php-format msgid "" "Why not [register an account](%%action.register%%) and be the first to post!" msgstr "[დარეგისტრირდი](%%action.register%%) და დაპოსტე პირველმა!" +#. TRANS: Message for not logged in users at an invite-only site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -3961,6 +4028,8 @@ msgstr "" "[შემოგვიერთდი ახლავე](%%action.register%%) და გაუზიარე შეტყობინებები " "მეგობრებს, ოჯახის წევრებს და კოლეგებს! ([გაიგე მეტი](%%doc.help%%))" +#. TRANS: Message for not logged in users at a closed site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -5659,6 +5728,10 @@ msgstr "" "თქვენ უნდა მიგეღოთ GNU Affero ძირითადი საჯარო ლიცენზიის ასლი ამ პროგრამასთან " "ერთად. თუ არა, იხილეთ %s." +#. TRANS: Menu item for site administration +msgid "Plugins" +msgstr "დამატებები" + #. TRANS: Form input field label for application name. msgid "Name" msgstr "დასახელება" @@ -6159,6 +6232,10 @@ msgstr "saveSettings() არ არის განხორციელებ msgid "Unable to delete design setting." msgstr "დიზაინის პარამეტრების წაშლა ვერ ხერხდება." +#, fuzzy +msgid "Home" +msgstr "ვებ. გვერსი" + #. TRANS: Menu item title/tooltip msgid "Basic site configuration" msgstr "საიტის ძირითადი კონფიგურაცია" @@ -6750,10 +6827,6 @@ msgstr "გადადი ამ ინსტალატორზე." msgid "Database error" msgstr "მონაცემთა ბაზის შეცდომა" -#, fuzzy -msgid "Home" -msgstr "ვებ. გვერსი" - msgid "Public" msgstr "საჯარო" @@ -7534,7 +7607,6 @@ msgstr "შეტყობინების გაგზავნა" msgid "What's up, %s?" msgstr "რა არის ახალი %s?" -#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "ფაილის მიმაგრება" @@ -7603,6 +7675,9 @@ msgstr "შეტყობინების წაშლა" msgid "Notice repeated" msgstr "შეტყობინება გამეორებულია" +msgid "Update your status..." +msgstr "" + msgid "Nudge this user" msgstr "" @@ -8111,11 +8186,3 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" - -#, fuzzy -#~ msgid "Friends timeline" -#~ msgstr "%s-ის ნაკადი" - -#, fuzzy -#~ msgid "Everyone on this site" -#~ msgstr "მოძებნე ადამიანები ამ საიტზე" diff --git a/locale/ko/LC_MESSAGES/statusnet.po b/locale/ko/LC_MESSAGES/statusnet.po index 4a924d8d21..8d0a52c16f 100644 --- a/locale/ko/LC_MESSAGES/statusnet.po +++ b/locale/ko/LC_MESSAGES/statusnet.po @@ -11,17 +11,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-08 01:03+0000\n" -"PO-Revision-Date: 2011-03-08 01:05:21+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:17:17+0000\n" "Language-Team: Korean \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83429); Translate extension (2011-03-07)\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ko\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-POT-Import-Date: 2011-03-06 02:16:47+0000\n" +"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -1039,7 +1039,7 @@ msgstr "통지들의 내용 찾기" #. TRANS: Client exception thrown when trying favorite a notice without content. #, fuzzy -msgid "Unknown note." +msgid "Unknown notice." msgstr "알려지지 않은 행동" #. TRANS: Client exception thrown when trying favorite an already favorited notice. @@ -1626,6 +1626,7 @@ msgstr "이 사용자 삭제" #. TRANS: Client error displayed trying to create a new direct message while not logged in. #. TRANS: Client error displayed trying to send a notice while not logged in. #. TRANS: Client error displayed trying to nudge a user without being logged in. +#. TRANS: Client error displayed when trying to enable or disable a plugin while not logged in. #. TRANS: Client error displayed trying a change a subscription while not logged in. #. TRANS: Client error displayed trying to subscribe when not logged in. #. TRANS: Client error message thrown when trying to access the admin panel while not logged in. @@ -3116,6 +3117,10 @@ msgstr "소스 URL이 필요합니다." msgid "Could not create application." msgstr "관심소식을 생성할 수 없습니다." +#, fuzzy +msgid "Invalid image." +msgstr "옳지 않은 크기" + #. TRANS: Title for form to create a group. msgid "New group" msgstr "새로운 그룹" @@ -3396,52 +3401,77 @@ msgstr "%s의 보낸쪽지함" msgid "This is your outbox, which lists private messages you have sent." msgstr "당신의 보낸 쪽지함입니다. 이곳엔 당신이 보냈던 비밀 쪽지가 있습니다." +#. TRANS: Title for page where to change password. +#, fuzzy +msgctxt "TITLE" msgid "Change password" msgstr "비밀번호 바꾸기" +#. TRANS: Instructions for page where to change password. msgid "Change your password." msgstr "비밀번호를 변경하세요." +#. TRANS: Fieldset legend on page where to change password. #. TRANS: Fieldset legend for password reset form. msgid "Password change" msgstr "비밀번호 변경" +#. TRANS: Field label on page where to change password. msgid "Old password" msgstr "기존 비밀 번호" +#. TRANS: Field label on page where to change password. #. TRANS: Field label for password reset form. msgid "New password" msgstr "새로운 비밀 번호" +#. TRANS: Field title on page where to change password. #, fuzzy msgid "6 or more characters." msgstr "6글자 이상" +#. TRANS: Field label on page where to change password. In this field the new password should be typed a second time. +#, fuzzy +msgctxt "LABEL" +msgid "Confirm" +msgstr "인증" + +#. TRANS: Field title on page where to change password. #. TRANS: Ttile for field label for password reset form where the password has to be typed again. #, fuzzy msgid "Same as password above." msgstr "위와 같은 비밀 번호" +#. TRANS: Button text on page where to change password. +#, fuzzy +msgctxt "BUTTON" msgid "Change" msgstr "변경" +#. TRANS: Form validation error on page where to change password. msgid "Password must be 6 or more characters." msgstr "비밀번호는 6자리 이상이어야 합니다." msgid "Passwords don't match." msgstr "비밀 번호가 일치하지 않습니다." -msgid "Incorrect old password" +#. TRANS: Form validation error on page where to change password. +#, fuzzy +msgid "Incorrect old password." msgstr "기존 비밀 번호가 틀렸습니다" +#. TRANS: Form validation error on page where to change password. msgid "Error saving user; invalid." msgstr "사용자 저장 오류; 무효한 사용자" +#. TRANS: Server error displayed on page where to change password when password change +#. TRANS: could not be made because of a server error. #. TRANS: Reset password form validation error message. #, fuzzy msgid "Cannot save new password." msgstr "새 비밀번호를 저장 할 수 없습니다." +#. TRANS: Form validation notice on page where to change password. msgid "Password saved." msgstr "비밀 번호 저장" @@ -3491,6 +3521,7 @@ msgstr "사이트" msgid "Server" msgstr "SSL 서버" +#. TRANS: Field title in Paths admin panel. msgid "Site's server hostname." msgstr "" @@ -3498,6 +3529,7 @@ msgstr "" msgid "Path" msgstr "경로" +#. TRANS: Field title in Paths admin panel. #, fuzzy msgid "Site path." msgstr "사이트 테마" @@ -3507,6 +3539,7 @@ msgstr "사이트 테마" msgid "Locale directory" msgstr "테마 디렉터리" +#. TRANS: Field title in Paths admin panel. msgid "Directory path to locales." msgstr "" @@ -3514,9 +3547,13 @@ msgstr "" msgid "Fancy URLs" msgstr "" -msgid "Use fancy (more readable and memorable) URLs?" +#. TRANS: Field title in Paths admin panel. +msgid "Use fancy URLs (more readable and memorable)?" msgstr "" +#. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "Theme" msgstr "테마" @@ -3638,6 +3675,8 @@ msgid "Directory where attachments are located." msgstr "" #. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "SSL" msgstr "SSL" @@ -3683,10 +3722,14 @@ msgstr "" msgid "People search" msgstr "사람 찾기" +#. TRANS: Client error displayed when trying to tag a profile with an invalid tag. +#. TRANS: %s is the invalid tag. #, php-format msgid "Not a valid people tag: %s." msgstr "올바른 메일 주소가 아닙니다." +#. TRANS: Page title for users with a certain self-tag. +#. TRANS: %1$s is the tag, %2$s is the page number. #, php-format msgid "Users self-tagged with %1$s - page %2$d" msgstr "%s 태그된 통지" @@ -3696,15 +3739,19 @@ msgctxt "plugin" msgid "Disabled" msgstr "" +#. TRANS: Client error displayed when trying to use another method than POST. +#. TRANS: Do not translate POST. #. TRANS: Client error displayed trying to perform any request method other than POST. #. TRANS: Do not translate POST. msgid "This action only accepts POST requests." msgstr "" +#. TRANS: Client error displayed when trying to enable or disable a plugin without access rights. #, fuzzy msgid "You cannot administer plugins." msgstr "이용자를 업데이트 할 수 없습니다." +#. TRANS: Client error displayed when trying to enable or disable a non-existing plugin. #, fuzzy msgid "No such plugin." msgstr "해당하는 페이지 없음" @@ -3715,7 +3762,8 @@ msgid "Enabled" msgstr "" #. TRANS: Tab and title for plugins admin panel. -#. TRANS: Menu item for site administration +#, fuzzy +msgctxt "TITLE" msgid "Plugins" msgstr "플러그인" @@ -3731,15 +3779,19 @@ msgstr "" msgid "Default plugins" msgstr "기본 언어" +#. TRANS: Text displayed on plugin admin page when no plugin are enabled. msgid "" "All default plugins have been disabled from the site's configuration file." msgstr "" +#. TRANS: Client error displayed if the notice posted has too many characters. msgid "Invalid notice content." msgstr "옳지 않은 크기" +#. TRANS: Exception thrown if a notice's license is not compatible with the StatusNet site license. +#. TRANS: %1$s is the notice license, %2$s is the StatusNet site's license. #, php-format -msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’." +msgid "Notice license \"%1$s\" is not compatible with site license \"%2$s\"." msgstr "" #. TRANS: Page title for profile settings. @@ -3888,30 +3940,40 @@ msgstr "설정 저장" msgid "Restore account" msgstr "새 계정 만들기" +#. TRANS: Client error displayed when requesting a public timeline page beyond the page limit. +#. TRANS: %s is the page limit. #, php-format msgid "Beyond the page limit (%s)." msgstr "" +#. TRANS: Server error displayed when a public timeline cannot be retrieved. msgid "Could not retrieve public stream." msgstr "공개 stream을 불러올 수 없습니다." +#. TRANS: Title for all public timeline pages but the first. +#. TRANS: %d is the page number. #, php-format msgid "Public timeline, page %d" msgstr "공개 타임라인, %d 페이지" +#. TRANS: Title for the first public timeline page. msgid "Public timeline" msgstr "퍼블릭 타임라인" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 1.0)" msgstr "%s 그룹을 위한 공지피드 (RSS 1.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 2.0)" msgstr "%s 그룹을 위한 공지피드 (RSS 2.0)" +#. TRANS: Link description for public timeline feed. #, fuzzy msgid "Public Stream Feed (Atom)" msgstr "퍼블릭 스트림 피드" +#. TRANS: Text displayed for public feed when there are no public notices. #, php-format msgid "" "This is the public timeline for %%site.name%% but no one has posted anything " @@ -3919,15 +3981,19 @@ msgid "" msgstr "" "%%site.name%% 의 공개 타임라인이지만, 아직 아무도 글을 쓰지 않았습니다." +#. TRANS: Additional text displayed for public feed when there are no public notices for a logged in user. #, fuzzy msgid "Be the first to post!" msgstr "글을 올린 첫번째 사람이 되세요!" +#. TRANS: Additional text displayed for public feed when there are no public notices for a not logged in user. #, php-format msgid "" "Why not [register an account](%%action.register%%) and be the first to post!" msgstr "" +#. TRANS: Message for not logged in users at an invite-only site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -3936,6 +4002,8 @@ msgid "" "friends, family, and colleagues! ([Read more](%%doc.help%%))" msgstr "" +#. TRANS: Message for not logged in users at a closed site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, fuzzy, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -5604,6 +5672,10 @@ msgstr "" "GNU 일반 공중 사용 허가서는 이 프로그램과 함께 제공됩니다. 만약, 이 문서가 누" "락되어 있다면 %s 페이지를 보십시오." +#. TRANS: Menu item for site administration +msgid "Plugins" +msgstr "플러그인" + #. TRANS: Form input field label for application name. msgid "Name" msgstr "이름" @@ -6107,6 +6179,9 @@ msgstr "명령이 아직 실행되지 않았습니다." msgid "Unable to delete design setting." msgstr "디자인 설정을 저장할 수 없습니다." +msgid "Home" +msgstr "홈페이지" + #. TRANS: Menu item title/tooltip msgid "Basic site configuration" msgstr "메일 주소 확인" @@ -6697,9 +6772,6 @@ msgstr "이 사이트에 로그인" msgid "Database error" msgstr "데이터베이스 오류" -msgid "Home" -msgstr "홈페이지" - msgid "Public" msgstr "공개" @@ -7397,7 +7469,6 @@ msgstr "게시글 보내기" msgid "What's up, %s?" msgstr "뭐하세요 %s님?" -#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "첨부" @@ -7465,6 +7536,9 @@ msgstr "이 게시글 삭제하기" msgid "Notice repeated" msgstr "게시글이 등록되었습니다." +msgid "Update your status..." +msgstr "" + msgid "Nudge this user" msgstr "이 사용자 찔러 보기" @@ -7975,11 +8049,3 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" - -#, fuzzy -#~ msgid "Friends timeline" -#~ msgstr "%s 타임라인" - -#, fuzzy -#~ msgid "Everyone on this site" -#~ msgstr "이 사이트에 있는 사람 찾기" diff --git a/locale/mk/LC_MESSAGES/statusnet.po b/locale/mk/LC_MESSAGES/statusnet.po index 04eee7354c..330d0022dc 100644 --- a/locale/mk/LC_MESSAGES/statusnet.po +++ b/locale/mk/LC_MESSAGES/statusnet.po @@ -10,17 +10,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-08 01:03+0000\n" -"PO-Revision-Date: 2011-03-08 01:05:22+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:17:18+0000\n" "Language-Team: Macedonian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83429); Translate extension (2011-03-07)\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: mk\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n == 1 || n%10 == 1) ? 0 : 1;\n" -"X-POT-Import-Date: 2011-03-06 02:16:47+0000\n" +"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -1041,7 +1041,8 @@ msgid "Can only fave notices." msgstr "Може само да бендисува забелешки." #. TRANS: Client exception thrown when trying favorite a notice without content. -msgid "Unknown note." +#, fuzzy +msgid "Unknown notice." msgstr "Непозната белешка." #. TRANS: Client exception thrown when trying favorite an already favorited notice. @@ -1610,6 +1611,7 @@ msgstr "Избриши ја групава." #. TRANS: Client error displayed trying to create a new direct message while not logged in. #. TRANS: Client error displayed trying to send a notice while not logged in. #. TRANS: Client error displayed trying to nudge a user without being logged in. +#. TRANS: Client error displayed when trying to enable or disable a plugin while not logged in. #. TRANS: Client error displayed trying a change a subscription while not logged in. #. TRANS: Client error displayed trying to subscribe when not logged in. #. TRANS: Client error message thrown when trying to access the admin panel while not logged in. @@ -3088,6 +3090,10 @@ msgstr "Треба изворна URL-адреса." msgid "Could not create application." msgstr "Не можеше да се создаде програмот." +#, fuzzy +msgid "Invalid image." +msgstr "Погрешна големина." + #. TRANS: Title for form to create a group. msgid "New group" msgstr "Нова група" @@ -3374,49 +3380,74 @@ msgstr "" "Ова е Вашето излезно сандче, во кое се наведени приватните пораки кои ги " "имате испратено." +#. TRANS: Title for page where to change password. +#, fuzzy +msgctxt "TITLE" msgid "Change password" msgstr "Промени ја лозинката" +#. TRANS: Instructions for page where to change password. msgid "Change your password." msgstr "Променете си ја лозинката." +#. TRANS: Fieldset legend on page where to change password. #. TRANS: Fieldset legend for password reset form. msgid "Password change" msgstr "Промена на лозинка" +#. TRANS: Field label on page where to change password. msgid "Old password" msgstr "Стара лозинка" +#. TRANS: Field label on page where to change password. #. TRANS: Field label for password reset form. msgid "New password" msgstr "Нова лозинка" +#. TRANS: Field title on page where to change password. msgid "6 or more characters." msgstr "6 или повеќе знаци." +#. TRANS: Field label on page where to change password. In this field the new password should be typed a second time. +#, fuzzy +msgctxt "LABEL" +msgid "Confirm" +msgstr "Потврди" + +#. TRANS: Field title on page where to change password. #. TRANS: Ttile for field label for password reset form where the password has to be typed again. msgid "Same as password above." msgstr "Исто како лозинката погоре." +#. TRANS: Button text on page where to change password. +#, fuzzy +msgctxt "BUTTON" msgid "Change" msgstr "Промени" +#. TRANS: Form validation error on page where to change password. msgid "Password must be 6 or more characters." msgstr "Лозинката мора да содржи барем 6 знаци." msgid "Passwords don't match." msgstr "Лозинките не се совпаѓаат." -msgid "Incorrect old password" +#. TRANS: Form validation error on page where to change password. +#, fuzzy +msgid "Incorrect old password." msgstr "Неточна стара лозинка" +#. TRANS: Form validation error on page where to change password. msgid "Error saving user; invalid." msgstr "Грешка во зачувувањето на корисникот; неправилен." +#. TRANS: Server error displayed on page where to change password when password change +#. TRANS: could not be made because of a server error. #. TRANS: Reset password form validation error message. msgid "Cannot save new password." msgstr "Не можам да ја зачувам новата лозинка." +#. TRANS: Form validation notice on page where to change password. msgid "Password saved." msgstr "Лозинката е зачувана." @@ -3466,6 +3497,7 @@ msgstr "Мреж. место" msgid "Server" msgstr "Опслужувач" +#. TRANS: Field title in Paths admin panel. msgid "Site's server hostname." msgstr "Назив на домаќинот на опслужувачот на мрежното место" @@ -3473,6 +3505,7 @@ msgstr "Назив на домаќинот на опслужувачот на м msgid "Path" msgstr "Патека" +#. TRANS: Field title in Paths admin panel. msgid "Site path." msgstr "Патека на мреж. место." @@ -3480,6 +3513,7 @@ msgstr "Патека на мреж. место." msgid "Locale directory" msgstr "Директориум на места" +#. TRANS: Field title in Paths admin panel. msgid "Directory path to locales." msgstr "Патека на директориумот на местата." @@ -3487,9 +3521,14 @@ msgstr "Патека на директориумот на местата." msgid "Fancy URLs" msgstr "Интересни URL-адреси" -msgid "Use fancy (more readable and memorable) URLs?" +#. TRANS: Field title in Paths admin panel. +#, fuzzy +msgid "Use fancy URLs (more readable and memorable)?" msgstr "Да користам интересни (почитливи и повпечатливи) URL-адреси?" +#. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "Theme" msgstr "Изглед" @@ -3602,6 +3641,8 @@ msgid "Directory where attachments are located." msgstr "Директориумот кадешто се сместени прилозите." #. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "SSL" msgstr "SSL" @@ -3647,10 +3688,14 @@ msgstr "" msgid "People search" msgstr "Пребарување на луѓе" +#. TRANS: Client error displayed when trying to tag a profile with an invalid tag. +#. TRANS: %s is the invalid tag. #, php-format msgid "Not a valid people tag: %s." msgstr "Не е важечка ознака за луѓе: %s." +#. TRANS: Page title for users with a certain self-tag. +#. TRANS: %1$s is the tag, %2$s is the page number. #, php-format msgid "Users self-tagged with %1$s - page %2$d" msgstr "Користници самоозначени со %1$s - стр. %2$d" @@ -3660,14 +3705,18 @@ msgctxt "plugin" msgid "Disabled" msgstr "Оневозможено" +#. TRANS: Client error displayed when trying to use another method than POST. +#. TRANS: Do not translate POST. #. TRANS: Client error displayed trying to perform any request method other than POST. #. TRANS: Do not translate POST. msgid "This action only accepts POST requests." msgstr "Ова дејство прифаќа само POST-барања" +#. TRANS: Client error displayed when trying to enable or disable a plugin without access rights. msgid "You cannot administer plugins." msgstr "Не можете да раководите со приклучоци." +#. TRANS: Client error displayed when trying to enable or disable a non-existing plugin. msgid "No such plugin." msgstr "Нема таков приклучок." @@ -3677,7 +3726,8 @@ msgid "Enabled" msgstr "Овозможено" #. TRANS: Tab and title for plugins admin panel. -#. TRANS: Menu item for site administration +#, fuzzy +msgctxt "TITLE" msgid "Plugins" msgstr "Приклучоци" @@ -3695,16 +3745,20 @@ msgstr "" msgid "Default plugins" msgstr "Основни приклучоци" +#. TRANS: Text displayed on plugin admin page when no plugin are enabled. msgid "" "All default plugins have been disabled from the site's configuration file." msgstr "" "Сите основни приклучоци се оневозможени во поставките на мрежното место." +#. TRANS: Client error displayed if the notice posted has too many characters. msgid "Invalid notice content." msgstr "Неважечка содржина на забелешката." -#, php-format -msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’." +#. TRANS: Exception thrown if a notice's license is not compatible with the StatusNet site license. +#. TRANS: %1$s is the notice license, %2$s is the StatusNet site's license. +#, fuzzy, php-format +msgid "Notice license \"%1$s\" is not compatible with site license \"%2$s\"." msgstr "" "Лиценцата на забелешката „%1$s“ не е соодветна на лиценцата на мрежното " "место „%2$s“." @@ -3854,29 +3908,39 @@ msgstr "Нагодувањата се зачувани" msgid "Restore account" msgstr "Врати сметка" +#. TRANS: Client error displayed when requesting a public timeline page beyond the page limit. +#. TRANS: %s is the page limit. #, php-format msgid "Beyond the page limit (%s)." msgstr "Надминато е ограничувањето на страницата (%s)." +#. TRANS: Server error displayed when a public timeline cannot be retrieved. msgid "Could not retrieve public stream." msgstr "Не можам да го вратам јавниот поток." +#. TRANS: Title for all public timeline pages but the first. +#. TRANS: %d is the page number. #, php-format msgid "Public timeline, page %d" msgstr "Јавна историја, стр. %d" +#. TRANS: Title for the first public timeline page. msgid "Public timeline" msgstr "Јавна историја" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 1.0)" msgstr "Канал на јавниот поток (RSS 1.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 2.0)" msgstr "Канал на јавниот поток (RSS 2.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (Atom)" msgstr "Канал на јавниот поток (Atom)" +#. TRANS: Text displayed for public feed when there are no public notices. #, php-format msgid "" "This is the public timeline for %%site.name%% but no one has posted anything " @@ -3884,9 +3948,11 @@ msgid "" msgstr "" "Ова е јавната историја за %%site.name%%, но досега никој ништо нема објавено." +#. TRANS: Additional text displayed for public feed when there are no public notices for a logged in user. msgid "Be the first to post!" msgstr "Создајте ја првата забелешка!" +#. TRANS: Additional text displayed for public feed when there are no public notices for a not logged in user. #, php-format msgid "" "Why not [register an account](%%action.register%%) and be the first to post!" @@ -3894,6 +3960,8 @@ msgstr "" "Зошто не [регистрирате сметка](%%action.register%%) и станете првиот " "објавувач!" +#. TRANS: Message for not logged in users at an invite-only site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -3907,6 +3975,8 @@ msgstr "" "си споделувате забелешки за себе со приајтелите, семејството и колегите! " "([Прочитајте повеќе](%%doc.help%%))" +#. TRANS: Message for not logged in users at a closed site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -5610,6 +5680,10 @@ msgstr "" "Треба да имате добиено примерок од Општата јавна лиценца ГНУ Аферо заедно со " "овој програм. Ако ја немате, погледајте %s." +#. TRANS: Menu item for site administration +msgid "Plugins" +msgstr "Приклучоци" + #. TRANS: Form input field label for application name. msgid "Name" msgstr "Име" @@ -5948,9 +6022,8 @@ msgstr "Одговори" msgid "Write a reply..." msgstr "Напишете одговор..." -#, fuzzy msgid "Status" -msgstr "StatusNet" +msgstr "Статус" #. TRANS: First sentence of the StatusNet site license. Used if 'broughtby' is set. #. TRANS: Text between [] is a link description, text between () is the link itself. @@ -6116,6 +6189,9 @@ msgstr "saveSettings() не е имплементирано." msgid "Unable to delete design setting." msgstr "Не можам да ги избришам нагодувањата за изглед." +msgid "Home" +msgstr "Домашна страница" + #. TRANS: Menu item title/tooltip msgid "Basic site configuration" msgstr "Основни нагодувања на мрежното место" @@ -6742,9 +6818,6 @@ msgstr "Оди на инсталаторот." msgid "Database error" msgstr "Грешка во базата на податоци" -msgid "Home" -msgstr "Домашна страница" - msgid "Public" msgstr "Јавен" @@ -7517,18 +7590,16 @@ msgid "from" msgstr "од" msgid "Can't get author for activity." -msgstr "" +msgstr "Не можам да го добијам авторот за активноста." -#, fuzzy msgid "Bookmark not posted to this group." -msgstr "Не Ви е дозволено да ја избришете оваа група." +msgstr "На оваа група не е објавен одбележувач." -#, fuzzy msgid "Object not posted to this user." -msgstr "Не го бриши корисников." +msgstr "Објектот не му е испратен на овој корисник." msgid "Don't know how to handle this kind of target." -msgstr "" +msgstr "Не знам како да работам со ваква одредница." #. TRANS: Validation error in form for registration, profile and group settings, etc. msgid "Nickname cannot be empty." @@ -7550,7 +7621,6 @@ msgstr "Испрати забелешка" msgid "What's up, %s?" msgstr "Што има ново, %s?" -#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Приложи" @@ -7618,6 +7688,9 @@ msgstr "Избриши ја оваа забелешка" msgid "Notice repeated" msgstr "Забелешката е повторена" +msgid "Update your status..." +msgstr "" + msgid "Nudge this user" msgstr "Подбуцни го корисников" @@ -8120,9 +8193,3 @@ msgstr "Неважечки XML. Нема XRD-корен." #, php-format msgid "Getting backup from file '%s'." msgstr "Земам резерва на податотеката „%s“." - -#~ msgid "Friends timeline" -#~ msgstr "Историја на пријатели" - -#~ msgid "Everyone on this site" -#~ msgstr "Сите на ова мрежно место" diff --git a/locale/ml/LC_MESSAGES/statusnet.po b/locale/ml/LC_MESSAGES/statusnet.po index 84a9210ef5..11c70d96e5 100644 --- a/locale/ml/LC_MESSAGES/statusnet.po +++ b/locale/ml/LC_MESSAGES/statusnet.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-08 01:03+0000\n" -"PO-Revision-Date: 2011-03-08 01:05:23+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:17:19+0000\n" "Language-Team: Malayalam \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-06 02:16:47+0000\n" -"X-Generator: MediaWiki 1.18alpha (r83429); Translate extension (2011-03-07)\n" +"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ml\n" "X-Message-Group: #out-statusnet-core\n" @@ -1010,7 +1010,8 @@ msgid "Can only fave notices." msgstr "അറിയിപ്പുകൾ മാത്രമേ പ്രിയങ്കരമാണെന്ന് കുറിക്കാനാവൂ." #. TRANS: Client exception thrown when trying favorite a notice without content. -msgid "Unknown note." +#, fuzzy +msgid "Unknown notice." msgstr "അജ്ഞാതമായ കുറിപ്പ്." #. TRANS: Client exception thrown when trying favorite an already favorited notice. @@ -1565,6 +1566,7 @@ msgstr "ഈ സംഘത്തെ മായ്ക്കുക." #. TRANS: Client error displayed trying to create a new direct message while not logged in. #. TRANS: Client error displayed trying to send a notice while not logged in. #. TRANS: Client error displayed trying to nudge a user without being logged in. +#. TRANS: Client error displayed when trying to enable or disable a plugin while not logged in. #. TRANS: Client error displayed trying a change a subscription while not logged in. #. TRANS: Client error displayed trying to subscribe when not logged in. #. TRANS: Client error message thrown when trying to access the admin panel while not logged in. @@ -3015,6 +3017,10 @@ msgstr "സ്രോതസ്സ് യു.ആർ.എൽ. ആവശ്യമാ msgid "Could not create application." msgstr "" +#, fuzzy +msgid "Invalid image." +msgstr "അസാധുവായ വലിപ്പം." + #. TRANS: Title for form to create a group. msgid "New group" msgstr "പുതിയ സംഘം" @@ -3289,49 +3295,74 @@ msgstr "%s എന്ന ഉപയോക്താവിന്റെ ഔട്ട msgid "This is your outbox, which lists private messages you have sent." msgstr "ഇത് താങ്കളുടെ ഔട്ട്ബോക്സ് ആണ്, താങ്കൾ അയച്ച സ്വകാര്യ സന്ദേശങ്ങൾ ഇവിടെ കാണാം." +#. TRANS: Title for page where to change password. +#, fuzzy +msgctxt "TITLE" msgid "Change password" msgstr "രഹസ്യവാക്ക് മാറ്റുക" +#. TRANS: Instructions for page where to change password. msgid "Change your password." msgstr "താങ്കളുടെ രഹസ്യവാക്ക് മാറ്റുക." +#. TRANS: Fieldset legend on page where to change password. #. TRANS: Fieldset legend for password reset form. msgid "Password change" msgstr "രഹസ്യവാക്ക് മാറ്റൽ" +#. TRANS: Field label on page where to change password. msgid "Old password" msgstr "പഴയ രഹസ്യവാക്ക്" +#. TRANS: Field label on page where to change password. #. TRANS: Field label for password reset form. msgid "New password" msgstr "പുതിയ രഹസ്യവാക്ക്" +#. TRANS: Field title on page where to change password. msgid "6 or more characters." msgstr "ആറോ അതിലധികമോ അക്ഷരങ്ങൾ." +#. TRANS: Field label on page where to change password. In this field the new password should be typed a second time. +#, fuzzy +msgctxt "LABEL" +msgid "Confirm" +msgstr "സ്ഥിരീകരിക്കുക" + +#. TRANS: Field title on page where to change password. #. TRANS: Ttile for field label for password reset form where the password has to be typed again. msgid "Same as password above." msgstr "മുകളിൽ നൽകിയ അതേ രഹസ്യവാക്ക്." +#. TRANS: Button text on page where to change password. +#, fuzzy +msgctxt "BUTTON" msgid "Change" msgstr "മാറ്റുക" +#. TRANS: Form validation error on page where to change password. msgid "Password must be 6 or more characters." msgstr "രഹസ്യവാക്കിന് ആറോ അതിലധികമോ അക്ഷരങ്ങളുണ്ടായിരിക്കണം." msgid "Passwords don't match." msgstr "രഹസ്യവാക്കുകൾ തമ്മിൽ യോജിക്കുന്നില്ല" -msgid "Incorrect old password" +#. TRANS: Form validation error on page where to change password. +#, fuzzy +msgid "Incorrect old password." msgstr "പഴയ രഹസ്യവാക്ക് തെറ്റാണ്" +#. TRANS: Form validation error on page where to change password. msgid "Error saving user; invalid." msgstr "ഉപയോക്താവിനെ സേവ് ചെയ്യുന്നതിൽ പിഴവുണ്ടായി; അസാധുവാണ്." +#. TRANS: Server error displayed on page where to change password when password change +#. TRANS: could not be made because of a server error. #. TRANS: Reset password form validation error message. msgid "Cannot save new password." msgstr "പുതിയ രഹസ്യവാക്ക് സേവ് ചെയ്യാനാവില്ല." +#. TRANS: Form validation notice on page where to change password. msgid "Password saved." msgstr "രഹസ്യവാക്ക് സേവ് ചെയ്തിരിക്കുന്നു." @@ -3381,6 +3412,7 @@ msgstr "സൈറ്റ്" msgid "Server" msgstr "സെർവർ" +#. TRANS: Field title in Paths admin panel. msgid "Site's server hostname." msgstr "" @@ -3388,6 +3420,7 @@ msgstr "" msgid "Path" msgstr "" +#. TRANS: Field title in Paths admin panel. msgid "Site path." msgstr "" @@ -3395,6 +3428,7 @@ msgstr "" msgid "Locale directory" msgstr "" +#. TRANS: Field title in Paths admin panel. msgid "Directory path to locales." msgstr "" @@ -3402,9 +3436,14 @@ msgstr "" msgid "Fancy URLs" msgstr "അലങ്കൃത യൂ.ആർ.എല്ലുകൾ" -msgid "Use fancy (more readable and memorable) URLs?" +#. TRANS: Field title in Paths admin panel. +#, fuzzy +msgid "Use fancy URLs (more readable and memorable)?" msgstr "അലങ്കൃത (വായിക്കാനും ഓർത്തിരിക്കാനും എളുപ്പമായവ) യൂ.ആർ.എല്ലുകൾ ഉപയോഗിക്കണോ?" +#. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "Theme" msgstr "ദൃശ്യരൂപം" @@ -3517,6 +3556,8 @@ msgid "Directory where attachments are located." msgstr "" #. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "SSL" msgstr "എസ്.എസ്.എൽ." @@ -3559,10 +3600,14 @@ msgstr "" msgid "People search" msgstr "ആൾക്കാരെ തിരയുക" +#. TRANS: Client error displayed when trying to tag a profile with an invalid tag. +#. TRANS: %s is the invalid tag. #, php-format msgid "Not a valid people tag: %s." msgstr "" +#. TRANS: Page title for users with a certain self-tag. +#. TRANS: %1$s is the tag, %2$s is the page number. #, php-format msgid "Users self-tagged with %1$s - page %2$d" msgstr "" @@ -3572,15 +3617,19 @@ msgctxt "plugin" msgid "Disabled" msgstr "" +#. TRANS: Client error displayed when trying to use another method than POST. +#. TRANS: Do not translate POST. #. TRANS: Client error displayed trying to perform any request method other than POST. #. TRANS: Do not translate POST. msgid "This action only accepts POST requests." msgstr "" +#. TRANS: Client error displayed when trying to enable or disable a plugin without access rights. #, fuzzy msgid "You cannot administer plugins." msgstr "താങ്കൾക്ക് ഉപയോക്താക്കളെ നീക്കം ചെയ്യാൻ കഴിയില്ല." +#. TRANS: Client error displayed when trying to enable or disable a non-existing plugin. #, fuzzy msgid "No such plugin." msgstr "അത്തരത്തിൽ ഒരു താളില്ല." @@ -3591,7 +3640,8 @@ msgid "Enabled" msgstr "" #. TRANS: Tab and title for plugins admin panel. -#. TRANS: Menu item for site administration +#, fuzzy +msgctxt "TITLE" msgid "Plugins" msgstr "പ്ലഗിനുകൾ" @@ -3607,15 +3657,19 @@ msgstr "" msgid "Default plugins" msgstr "സ്വതേ വേണ്ട ഭാഷ" +#. TRANS: Text displayed on plugin admin page when no plugin are enabled. msgid "" "All default plugins have been disabled from the site's configuration file." msgstr "" +#. TRANS: Client error displayed if the notice posted has too many characters. msgid "Invalid notice content." msgstr "അറിയിപ്പിന്റെ ഉള്ളടക്കം അസാധുവാണ്." -#, php-format -msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’." +#. TRANS: Exception thrown if a notice's license is not compatible with the StatusNet site license. +#. TRANS: %1$s is the notice license, %2$s is the StatusNet site's license. +#, fuzzy, php-format +msgid "Notice license \"%1$s\" is not compatible with site license \"%2$s\"." msgstr "" "അറിയിപ്പിന്റെ ഉപയോഗാനുമതിയായ് ‘%1$s’ സൈറ്റിന്റെ ഉപയോഗാനുമതിയായ ‘%2$s’ എന്നതുമായി " "ചേർന്നു പോകുന്നില്ല." @@ -3760,38 +3814,50 @@ msgstr "സജ്ജീകരണങ്ങൾ സേവ് ചെയ്തിര msgid "Restore account" msgstr "അംഗത്വം പുനഃക്രമീകരിക്കുക" +#. TRANS: Client error displayed when requesting a public timeline page beyond the page limit. +#. TRANS: %s is the page limit. #, php-format msgid "Beyond the page limit (%s)." msgstr "താളിന്റെ പരിധിയ്ക്ക് (%s) പുറത്താണ്." +#. TRANS: Server error displayed when a public timeline cannot be retrieved. msgid "Could not retrieve public stream." msgstr "" +#. TRANS: Title for all public timeline pages but the first. +#. TRANS: %d is the page number. #, php-format msgid "Public timeline, page %d" msgstr "സാർവ്വജനിക സമയരേഖ, താൾ %d" +#. TRANS: Title for the first public timeline page. msgid "Public timeline" msgstr "സാർവ്വജനിക സമയരേഖ" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 1.0)" msgstr "" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 2.0)" msgstr "" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (Atom)" msgstr "" +#. TRANS: Text displayed for public feed when there are no public notices. #, php-format msgid "" "This is the public timeline for %%site.name%% but no one has posted anything " "yet." msgstr "" +#. TRANS: Additional text displayed for public feed when there are no public notices for a logged in user. msgid "Be the first to post!" msgstr "പ്രസിദ്ധീകരിക്കുന്ന ആദ്യ വ്യക്തിയാകുക!" +#. TRANS: Additional text displayed for public feed when there are no public notices for a not logged in user. #, php-format msgid "" "Why not [register an account](%%action.register%%) and be the first to post!" @@ -3799,6 +3865,8 @@ msgstr "" "എന്തുകൊണ്ട് [അംഗത്വമെടുക്കുകയും](%%action.register%%) പ്രസിദ്ധീകരിക്കുന്ന ആദ്യ വ്യക്തിയാകുകയും " "ചെയ്തുകൂട!" +#. TRANS: Message for not logged in users at an invite-only site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -3812,6 +3880,8 @@ msgstr "" "സഹപ്രവർത്തകരുമായും പങ്ക് വെയ്ക്കുവാൻ [ഇപ്പോൾ തന്നെ ചേരുക](%%action.register%%)! (കൂടുതൽ " "അറിയുക](%%doc.help%%))" +#. TRANS: Message for not logged in users at a closed site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -5408,6 +5478,10 @@ msgid "" "along with this program. If not, see %s." msgstr "" +#. TRANS: Menu item for site administration +msgid "Plugins" +msgstr "പ്ലഗിനുകൾ" + #. TRANS: Form input field label for application name. msgid "Name" msgstr "പേര്" @@ -5894,6 +5968,10 @@ msgstr "" msgid "Unable to delete design setting." msgstr "രൂപകല്പനാ സജ്ജീകരണങ്ങൾ മായ്ക്കാൻ കഴിഞ്ഞില്ല." +#, fuzzy +msgid "Home" +msgstr "ഹോംപേജ്" + #. TRANS: Menu item title/tooltip msgid "Basic site configuration" msgstr "സൈറ്റിന്റെ അടിസ്ഥാന ക്രമീകരണം" @@ -6473,10 +6551,6 @@ msgstr "" msgid "Database error" msgstr "ഡാറ്റാബേസ് പിഴവ്" -#, fuzzy -msgid "Home" -msgstr "ഹോംപേജ്" - msgid "Public" msgstr "സാർവ്വജനികം" @@ -7174,7 +7248,6 @@ msgstr "അറിയിപ്പ് അയയ്ക്കുക" msgid "What's up, %s?" msgstr "എന്തൊക്കെയുണ്ട്, %s?" -#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "ചേർത്തുവെയ്ക്കുക" @@ -7243,6 +7316,9 @@ msgstr "ഈ അറിയിപ്പ് മായ്ക്കുക" msgid "Notice repeated" msgstr "അറിയിപ്പ് ആവർത്തിച്ചിരിക്കുന്നു" +msgid "Update your status..." +msgstr "" + msgid "Nudge this user" msgstr "" @@ -7751,11 +7827,3 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" - -#, fuzzy -#~ msgid "Friends timeline" -#~ msgstr "%s എന്ന ഉപയോക്താവിന്റെ സമയരേഖ" - -#, fuzzy -#~ msgid "Everyone on this site" -#~ msgstr "ഈ സൈറ്റിലെ ആൾക്കാരെ കണ്ടെത്തുക" diff --git a/locale/nb/LC_MESSAGES/statusnet.po b/locale/nb/LC_MESSAGES/statusnet.po index 1fa8ea3e77..9898feb7be 100644 --- a/locale/nb/LC_MESSAGES/statusnet.po +++ b/locale/nb/LC_MESSAGES/statusnet.po @@ -12,17 +12,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-08 01:03+0000\n" -"PO-Revision-Date: 2011-03-08 01:05:26+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:17:21+0000\n" "Language-Team: Norwegian (bokmål)‬ \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83429); Translate extension (2011-03-07)\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: no\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-06 02:16:47+0000\n" +"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -1041,7 +1041,8 @@ msgid "Can only fave notices." msgstr "Finn innhold i notiser" #. TRANS: Client exception thrown when trying favorite a notice without content. -msgid "Unknown note." +#, fuzzy +msgid "Unknown notice." msgstr "Ukjent notat." #. TRANS: Client exception thrown when trying favorite an already favorited notice. @@ -1626,6 +1627,7 @@ msgstr "Slett denne gruppen" #. TRANS: Client error displayed trying to create a new direct message while not logged in. #. TRANS: Client error displayed trying to send a notice while not logged in. #. TRANS: Client error displayed trying to nudge a user without being logged in. +#. TRANS: Client error displayed when trying to enable or disable a plugin while not logged in. #. TRANS: Client error displayed trying a change a subscription while not logged in. #. TRANS: Client error displayed trying to subscribe when not logged in. #. TRANS: Client error message thrown when trying to access the admin panel while not logged in. @@ -3120,6 +3122,10 @@ msgstr "Nettadresse til kilde kreves." msgid "Could not create application." msgstr "Kunne ikke opprette program." +#, fuzzy +msgid "Invalid image." +msgstr "Ugyldig størrelse" + #. TRANS: Title for form to create a group. msgid "New group" msgstr "Ny gruppe" @@ -3404,52 +3410,77 @@ msgstr "Utboks for %s" msgid "This is your outbox, which lists private messages you have sent." msgstr "Dette er utboksen din som viser alle private meldinger du har sendt." +#. TRANS: Title for page where to change password. +#, fuzzy +msgctxt "TITLE" msgid "Change password" msgstr "Endre passord" +#. TRANS: Instructions for page where to change password. msgid "Change your password." msgstr "Endre passordet ditt." +#. TRANS: Fieldset legend on page where to change password. #. TRANS: Fieldset legend for password reset form. msgid "Password change" msgstr "Endre passord" +#. TRANS: Field label on page where to change password. msgid "Old password" msgstr "Gammelt passord" +#. TRANS: Field label on page where to change password. #. TRANS: Field label for password reset form. msgid "New password" msgstr "Nytt passord" +#. TRANS: Field title on page where to change password. #, fuzzy msgid "6 or more characters." msgstr "6 eller flere tegn" +#. TRANS: Field label on page where to change password. In this field the new password should be typed a second time. +#, fuzzy +msgctxt "LABEL" +msgid "Confirm" +msgstr "Bekreft" + +#. TRANS: Field title on page where to change password. #. TRANS: Ttile for field label for password reset form where the password has to be typed again. #, fuzzy msgid "Same as password above." msgstr "Samme som passord ovenfor" +#. TRANS: Button text on page where to change password. +#, fuzzy +msgctxt "BUTTON" msgid "Change" msgstr "Endre" +#. TRANS: Form validation error on page where to change password. msgid "Password must be 6 or more characters." msgstr "Passord må være minst 6 tegn." msgid "Passwords don't match." msgstr "Passordene var ikke like." -msgid "Incorrect old password" +#. TRANS: Form validation error on page where to change password. +#, fuzzy +msgid "Incorrect old password." msgstr "Feil gammelt passord" +#. TRANS: Form validation error on page where to change password. msgid "Error saving user; invalid." msgstr "Feil ved lagring av bruker; ugyldig." +#. TRANS: Server error displayed on page where to change password when password change +#. TRANS: could not be made because of a server error. #. TRANS: Reset password form validation error message. #, fuzzy msgid "Cannot save new password." msgstr "Klarer ikke å lagre nytt passord." +#. TRANS: Form validation notice on page where to change password. msgid "Password saved." msgstr "Passordet ble lagret" @@ -3499,6 +3530,7 @@ msgstr "Nettsted" msgid "Server" msgstr "Tjener" +#. TRANS: Field title in Paths admin panel. msgid "Site's server hostname." msgstr "Vertsnavn for nettstedets tjener." @@ -3506,6 +3538,7 @@ msgstr "Vertsnavn for nettstedets tjener." msgid "Path" msgstr "Sti" +#. TRANS: Field title in Paths admin panel. msgid "Site path." msgstr "Nettstedssti." @@ -3514,6 +3547,7 @@ msgstr "Nettstedssti." msgid "Locale directory" msgstr "Temamappe" +#. TRANS: Field title in Paths admin panel. #, fuzzy msgid "Directory path to locales." msgstr "Lokaliseringsmappesti" @@ -3522,9 +3556,14 @@ msgstr "Lokaliseringsmappesti" msgid "Fancy URLs" msgstr "Pyntede nettadresser" -msgid "Use fancy (more readable and memorable) URLs?" +#. TRANS: Field title in Paths admin panel. +#, fuzzy +msgid "Use fancy URLs (more readable and memorable)?" msgstr "Bruk pyntede (mer lesbare og lettere å huske) nettadresser?" +#. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "Theme" msgstr "Tema" @@ -3637,6 +3676,8 @@ msgid "Directory where attachments are located." msgstr "Mappen vedlegg er plassert i." #. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "SSL" msgstr "SSL" @@ -3681,10 +3722,14 @@ msgstr "" msgid "People search" msgstr "Personsøk" +#. TRANS: Client error displayed when trying to tag a profile with an invalid tag. +#. TRANS: %s is the invalid tag. #, php-format msgid "Not a valid people tag: %s." msgstr "Ikke en gyldig personmerkelapp: %s." +#. TRANS: Page title for users with a certain self-tag. +#. TRANS: %1$s is the tag, %2$s is the page number. #, php-format msgid "Users self-tagged with %1$s - page %2$d" msgstr "Brukere som har merket seg selv med %1$s - side %2$d" @@ -3694,15 +3739,19 @@ msgctxt "plugin" msgid "Disabled" msgstr "" +#. TRANS: Client error displayed when trying to use another method than POST. +#. TRANS: Do not translate POST. #. TRANS: Client error displayed trying to perform any request method other than POST. #. TRANS: Do not translate POST. msgid "This action only accepts POST requests." msgstr "" +#. TRANS: Client error displayed when trying to enable or disable a plugin without access rights. #, fuzzy msgid "You cannot administer plugins." msgstr "Du kan ikke slette brukere." +#. TRANS: Client error displayed when trying to enable or disable a non-existing plugin. #, fuzzy msgid "No such plugin." msgstr "Ingen slik side." @@ -3713,7 +3762,8 @@ msgid "Enabled" msgstr "" #. TRANS: Tab and title for plugins admin panel. -#. TRANS: Menu item for site administration +#, fuzzy +msgctxt "TITLE" msgid "Plugins" msgstr "Programtillegg" @@ -3729,15 +3779,19 @@ msgstr "" msgid "Default plugins" msgstr "Standardspråk" +#. TRANS: Text displayed on plugin admin page when no plugin are enabled. msgid "" "All default plugins have been disabled from the site's configuration file." msgstr "" +#. TRANS: Client error displayed if the notice posted has too many characters. msgid "Invalid notice content." msgstr "Ugyldig notisinnhold." -#, php-format -msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’." +#. TRANS: Exception thrown if a notice's license is not compatible with the StatusNet site license. +#. TRANS: %1$s is the notice license, %2$s is the StatusNet site's license. +#, fuzzy, php-format +msgid "Notice license \"%1$s\" is not compatible with site license \"%2$s\"." msgstr "Notislisensen ‘%1$s’ er ikke kompatibel med nettstedslisensen ‘%2$s’." #. TRANS: Page title for profile settings. @@ -3888,29 +3942,39 @@ msgstr "Innstillinger lagret." msgid "Restore account" msgstr "Opprett en konto" +#. TRANS: Client error displayed when requesting a public timeline page beyond the page limit. +#. TRANS: %s is the page limit. #, php-format msgid "Beyond the page limit (%s)." msgstr "Over sidegrensen (%s)." +#. TRANS: Server error displayed when a public timeline cannot be retrieved. msgid "Could not retrieve public stream." msgstr "Kunne ikke hente offentlig strøm." +#. TRANS: Title for all public timeline pages but the first. +#. TRANS: %d is the page number. #, php-format msgid "Public timeline, page %d" msgstr "Offentlig tidslinje, side %d" +#. TRANS: Title for the first public timeline page. msgid "Public timeline" msgstr "Offentlig tidslinje" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 1.0)" msgstr "Offentlig strømmating (RSS 1.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 2.0)" msgstr "Offentlig strømmating (RSS 2.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (Atom)" msgstr "Offentlig strømmating (Atom)" +#. TRANS: Text displayed for public feed when there are no public notices. #, php-format msgid "" "This is the public timeline for %%site.name%% but no one has posted anything " @@ -3919,9 +3983,11 @@ msgstr "" "Dette er den offentlige tidslinjen for %%site.name%% men ingen har postet " "noe ennå." +#. TRANS: Additional text displayed for public feed when there are no public notices for a logged in user. msgid "Be the first to post!" msgstr "Vær den første til å poste!" +#. TRANS: Additional text displayed for public feed when there are no public notices for a not logged in user. #, php-format msgid "" "Why not [register an account](%%action.register%%) and be the first to post!" @@ -3929,6 +3995,8 @@ msgstr "" "Hvorfor ikke [registrere en konto](%%action.register%%) og vær den første " "til å poste!" +#. TRANS: Message for not logged in users at an invite-only site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -3941,6 +4009,8 @@ msgstr "" "(http://status.net). [Bli med nå](%%action.register%%) for å dele notiser om " "degselv med venner, familie og kollegaer! ([Les mer](%%doc.help%%))" +#. TRANS: Message for not logged in users at a closed site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -5632,6 +5702,10 @@ msgid "" "along with this program. If not, see %s." msgstr "" +#. TRANS: Menu item for site administration +msgid "Plugins" +msgstr "Programtillegg" + #. TRANS: Form input field label for application name. msgid "Name" msgstr "Navn" @@ -6127,6 +6201,9 @@ msgstr "saveSettings() ikke implementert." msgid "Unable to delete design setting." msgstr "Kunne ikke lagre dine innstillinger for utseende." +msgid "Home" +msgstr "Hjemmesiden" + #. TRANS: Menu item title/tooltip #, fuzzy msgid "Basic site configuration" @@ -6730,9 +6807,6 @@ msgstr "Log inn på nettstedet" msgid "Database error" msgstr "Databasefeil" -msgid "Home" -msgstr "Hjemmesiden" - msgid "Public" msgstr "Offentlig" @@ -7535,7 +7609,6 @@ msgstr "Send en notis" msgid "What's up, %s?" msgstr "Hva skjer %s?" -#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Legg ved" @@ -7605,6 +7678,9 @@ msgstr "Slett denne notisen" msgid "Notice repeated" msgstr "Notis repetert" +msgid "Update your status..." +msgstr "" + msgid "Nudge this user" msgstr "Knuff denne brukeren" @@ -8129,11 +8205,3 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" - -#, fuzzy -#~ msgid "Friends timeline" -#~ msgstr "%s tidslinje" - -#, fuzzy -#~ msgid "Everyone on this site" -#~ msgstr "Finn personer på dette nettstedet" diff --git a/locale/nl/LC_MESSAGES/statusnet.po b/locale/nl/LC_MESSAGES/statusnet.po index a7d99e5410..e8907c1baf 100644 --- a/locale/nl/LC_MESSAGES/statusnet.po +++ b/locale/nl/LC_MESSAGES/statusnet.po @@ -12,17 +12,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-08 01:03+0000\n" -"PO-Revision-Date: 2011-03-08 01:05:24+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:17:20+0000\n" "Language-Team: Dutch \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83429); Translate extension (2011-03-07)\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: nl\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-06 02:16:47+0000\n" +"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -1054,7 +1054,8 @@ msgid "Can only fave notices." msgstr "Het is alleen mogelijk om mededelingen als favoriet aan te merken." #. TRANS: Client exception thrown when trying favorite a notice without content. -msgid "Unknown note." +#, fuzzy +msgid "Unknown notice." msgstr "Onbekend mededeling." #. TRANS: Client exception thrown when trying favorite an already favorited notice. @@ -1632,6 +1633,7 @@ msgstr "Deze groep verwijderen." #. TRANS: Client error displayed trying to create a new direct message while not logged in. #. TRANS: Client error displayed trying to send a notice while not logged in. #. TRANS: Client error displayed trying to nudge a user without being logged in. +#. TRANS: Client error displayed when trying to enable or disable a plugin while not logged in. #. TRANS: Client error displayed trying a change a subscription while not logged in. #. TRANS: Client error displayed trying to subscribe when not logged in. #. TRANS: Client error message thrown when trying to access the admin panel while not logged in. @@ -3114,6 +3116,10 @@ msgstr "Een bron-URL is verplicht." msgid "Could not create application." msgstr "Het was niet mogelijk de applicatie aan te maken." +#, fuzzy +msgid "Invalid image." +msgstr "Ongeldige afmetingen." + #. TRANS: Title for form to create a group. msgid "New group" msgstr "Nieuwe groep" @@ -3402,49 +3408,74 @@ msgstr "Postvak UIT voor %s" msgid "This is your outbox, which lists private messages you have sent." msgstr "Dit is uw Postvak UIT waarin de door u verzonden privéberichten staan." +#. TRANS: Title for page where to change password. +#, fuzzy +msgctxt "TITLE" msgid "Change password" msgstr "Wachtwoord wijzigen" +#. TRANS: Instructions for page where to change password. msgid "Change your password." msgstr "Wachtwoord wijzigen" +#. TRANS: Fieldset legend on page where to change password. #. TRANS: Fieldset legend for password reset form. msgid "Password change" msgstr "Wachtwoord wijzigen" +#. TRANS: Field label on page where to change password. msgid "Old password" msgstr "Huidige wachtwoord" +#. TRANS: Field label on page where to change password. #. TRANS: Field label for password reset form. msgid "New password" msgstr "Nieuw wachtwoord" +#. TRANS: Field title on page where to change password. msgid "6 or more characters." msgstr "Zes of meer tekens" +#. TRANS: Field label on page where to change password. In this field the new password should be typed a second time. +#, fuzzy +msgctxt "LABEL" +msgid "Confirm" +msgstr "Bevestigen" + +#. TRANS: Field title on page where to change password. #. TRANS: Ttile for field label for password reset form where the password has to be typed again. msgid "Same as password above." msgstr "Gelijk aan het wachtwoord hierboven." +#. TRANS: Button text on page where to change password. +#, fuzzy +msgctxt "BUTTON" msgid "Change" msgstr "Wijzigen" +#. TRANS: Form validation error on page where to change password. msgid "Password must be 6 or more characters." msgstr "Het wachtwoord moet zes of meer tekens bevatten." msgid "Passwords don't match." msgstr "De wachtwoorden komen niet overeen." -msgid "Incorrect old password" +#. TRANS: Form validation error on page where to change password. +#, fuzzy +msgid "Incorrect old password." msgstr "Het oude wachtwoord is onjuist" +#. TRANS: Form validation error on page where to change password. msgid "Error saving user; invalid." msgstr "Fout bij opslaan gebruiker; ongeldig." +#. TRANS: Server error displayed on page where to change password when password change +#. TRANS: could not be made because of a server error. #. TRANS: Reset password form validation error message. msgid "Cannot save new password." msgstr "Het was niet mogelijk het nieuwe wachtwoord op te slaan." +#. TRANS: Form validation notice on page where to change password. msgid "Password saved." msgstr "Het wachtwoord is opgeslagen." @@ -3494,6 +3525,7 @@ msgstr "Website" msgid "Server" msgstr "Server" +#. TRANS: Field title in Paths admin panel. msgid "Site's server hostname." msgstr "Hostnaam van de website server." @@ -3501,6 +3533,7 @@ msgstr "Hostnaam van de website server." msgid "Path" msgstr "Pad" +#. TRANS: Field title in Paths admin panel. msgid "Site path." msgstr "Websitepad." @@ -3508,6 +3541,7 @@ msgstr "Websitepad." msgid "Locale directory" msgstr "Map voor taalondersteuning" +#. TRANS: Field title in Paths admin panel. msgid "Directory path to locales." msgstr "Map voor taalondersteuning." @@ -3515,9 +3549,14 @@ msgstr "Map voor taalondersteuning." msgid "Fancy URLs" msgstr "Nette URL's" -msgid "Use fancy (more readable and memorable) URLs?" +#. TRANS: Field title in Paths admin panel. +#, fuzzy +msgid "Use fancy URLs (more readable and memorable)?" msgstr "Nette URL's (meer leesbaar en beter te onthouden) gebruiken?" +#. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "Theme" msgstr "Vormgeving" @@ -3630,6 +3669,8 @@ msgid "Directory where attachments are located." msgstr "Map waar bijlagen worden opgeslagen." #. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "SSL" msgstr "SSL" @@ -3675,10 +3716,14 @@ msgstr "" msgid "People search" msgstr "Gebruikers zoeken" +#. TRANS: Client error displayed when trying to tag a profile with an invalid tag. +#. TRANS: %s is the invalid tag. #, php-format msgid "Not a valid people tag: %s." msgstr "Geen geldig gebruikerslabel: %s." +#. TRANS: Page title for users with a certain self-tag. +#. TRANS: %1$s is the tag, %2$s is the page number. #, php-format msgid "Users self-tagged with %1$s - page %2$d" msgstr "Gebruikers die zichzelf met %1$s hebben gelabeld - pagina %2$d" @@ -3688,14 +3733,18 @@ msgctxt "plugin" msgid "Disabled" msgstr "Uitgeschakeld" +#. TRANS: Client error displayed when trying to use another method than POST. +#. TRANS: Do not translate POST. #. TRANS: Client error displayed trying to perform any request method other than POST. #. TRANS: Do not translate POST. msgid "This action only accepts POST requests." msgstr "Deze handeling accepteert alleen POST-verzoeken." +#. TRANS: Client error displayed when trying to enable or disable a plugin without access rights. msgid "You cannot administer plugins." msgstr "U kunt plug-ins niet beheren." +#. TRANS: Client error displayed when trying to enable or disable a non-existing plugin. msgid "No such plugin." msgstr "Deze plug-in bestaat niet." @@ -3705,7 +3754,8 @@ msgid "Enabled" msgstr "Ingeschakeld" #. TRANS: Tab and title for plugins admin panel. -#. TRANS: Menu item for site administration +#, fuzzy +msgctxt "TITLE" msgid "Plugins" msgstr "Plug-ins" @@ -3723,17 +3773,21 @@ msgstr "" msgid "Default plugins" msgstr "Standaard plug-ins" +#. TRANS: Text displayed on plugin admin page when no plugin are enabled. msgid "" "All default plugins have been disabled from the site's configuration file." msgstr "" "Alle standaard plug-ins zijn uitgeschakeld in het bestand met " "siteinstellingen." +#. TRANS: Client error displayed if the notice posted has too many characters. msgid "Invalid notice content." msgstr "Ongeldige mededelinginhoud." -#, php-format -msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’." +#. TRANS: Exception thrown if a notice's license is not compatible with the StatusNet site license. +#. TRANS: %1$s is the notice license, %2$s is the StatusNet site's license. +#, fuzzy, php-format +msgid "Notice license \"%1$s\" is not compatible with site license \"%2$s\"." msgstr "" "De mededelingenlicentie \"%1$s\" is niet compatibel met de licentie \"%2$s\" " "van deze site." @@ -3883,29 +3937,39 @@ msgstr "De instellingen zijn opgeslagen." msgid "Restore account" msgstr "Gebruiker terugladen van back-up" +#. TRANS: Client error displayed when requesting a public timeline page beyond the page limit. +#. TRANS: %s is the page limit. #, php-format msgid "Beyond the page limit (%s)." msgstr "Meer dan de paginalimiet (%s)." +#. TRANS: Server error displayed when a public timeline cannot be retrieved. msgid "Could not retrieve public stream." msgstr "Het was niet mogelijk de publieke stream op te halen." +#. TRANS: Title for all public timeline pages but the first. +#. TRANS: %d is the page number. #, php-format msgid "Public timeline, page %d" msgstr "Openbare tijdlijn, pagina %d" +#. TRANS: Title for the first public timeline page. msgid "Public timeline" msgstr "Openbare tijdlijn" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 1.0)" msgstr "Publieke streamfeed (RSS 1.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 2.0)" msgstr "Publieke streamfeed (RSS 1.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (Atom)" msgstr "Publieke streamfeed (Atom)" +#. TRANS: Text displayed for public feed when there are no public notices. #, php-format msgid "" "This is the public timeline for %%site.name%% but no one has posted anything " @@ -3914,9 +3978,11 @@ msgstr "" "Dit is de publieke tijdlijn voor %%site.name%%, maar niemand heeft nog " "berichten geplaatst." +#. TRANS: Additional text displayed for public feed when there are no public notices for a logged in user. msgid "Be the first to post!" msgstr "U kunt de eerste zijn die een bericht plaatst!" +#. TRANS: Additional text displayed for public feed when there are no public notices for a not logged in user. #, php-format msgid "" "Why not [register an account](%%action.register%%) and be the first to post!" @@ -3924,6 +3990,8 @@ msgstr "" "Waarom [registreert u geen gebruiker](%%action.register%%) en plaatst u als " "eerste een bericht?" +#. TRANS: Message for not logged in users at an invite-only site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -3936,6 +4004,8 @@ msgstr "" "net/). [Registreer nu](%%action.register%%) om mededelingen over uzelf te " "delen met vrienden, familie en collega's! [Meer lezen...](%%doc.help%%)" +#. TRANS: Message for not logged in users at a closed site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -5646,6 +5716,10 @@ msgstr "" "Samen met dit programma hoort u een kopie van de GNU Affero General Public " "License te hebben ontvangen. Zo niet, zie dan %s." +#. TRANS: Menu item for site administration +msgid "Plugins" +msgstr "Plug-ins" + #. TRANS: Form input field label for application name. msgid "Name" msgstr "Naam" @@ -5991,9 +6065,8 @@ msgstr "Antwoorden" msgid "Write a reply..." msgstr "Schrijf een antwoord..." -#, fuzzy msgid "Status" -msgstr "StatusNet" +msgstr "Status" #. TRANS: First sentence of the StatusNet site license. Used if 'broughtby' is set. #. TRANS: Text between [] is a link description, text between () is the link itself. @@ -6165,6 +6238,9 @@ msgstr "saveSettings() is nog niet geïmplementeerd." msgid "Unable to delete design setting." msgstr "Het was niet mogelijk om de ontwerpinstellingen te verwijderen." +msgid "Home" +msgstr "Start" + #. TRANS: Menu item title/tooltip msgid "Basic site configuration" msgstr "Basisinstellingen voor de website" @@ -6805,9 +6881,6 @@ msgstr "Naar het installatieprogramma gaan." msgid "Database error" msgstr "Databasefout" -msgid "Home" -msgstr "Start" - msgid "Public" msgstr "Openbaar" @@ -7579,18 +7652,16 @@ msgid "from" msgstr "van" msgid "Can't get author for activity." -msgstr "" +msgstr "Het was niet mogelijk de auteur te achterhalen voor de activiteit." -#, fuzzy msgid "Bookmark not posted to this group." -msgstr "U mag deze groep niet verwijderen." +msgstr "De bladwijzer is niet aan deze groep verzonden." -#, fuzzy msgid "Object not posted to this user." -msgstr "Deze gebruiker niet verwijderen." +msgstr "Het object is niet aan deze gebruiker verzonden." msgid "Don't know how to handle this kind of target." -msgstr "" +msgstr "Het is niet bekend hoe dit doel afgehandeld moet worden." #. TRANS: Validation error in form for registration, profile and group settings, etc. msgid "Nickname cannot be empty." @@ -7612,7 +7683,6 @@ msgstr "Mededeling verzenden" msgid "What's up, %s?" msgstr "Hallo, %s." -#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Toevoegen" @@ -7680,6 +7750,9 @@ msgstr "Deze mededeling verwijderen" msgid "Notice repeated" msgstr "Mededeling herhaald" +msgid "Update your status..." +msgstr "" + msgid "Nudge this user" msgstr "Deze gebruiker porren" @@ -8188,9 +8261,3 @@ msgstr "Ongeldige XML. De XRD-root mist." #, php-format msgid "Getting backup from file '%s'." msgstr "De back-up wordt uit het bestand \"%s\" geladen." - -#~ msgid "Friends timeline" -#~ msgstr "Tijdlijn van vrienden" - -#~ msgid "Everyone on this site" -#~ msgstr "Iedereen op deze site" diff --git a/locale/pl/LC_MESSAGES/statusnet.po b/locale/pl/LC_MESSAGES/statusnet.po index f2f776d44e..b874633a6e 100644 --- a/locale/pl/LC_MESSAGES/statusnet.po +++ b/locale/pl/LC_MESSAGES/statusnet.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-08 01:03+0000\n" -"PO-Revision-Date: 2011-03-08 01:05:27+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:17:23+0000\n" "Last-Translator: Piotr Drąg \n" "Language-Team: Polish \n" "MIME-Version: 1.0\n" @@ -20,11 +20,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ( (n%10 >= 2 && n%10 <= 4 && " "(n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n" -"X-Generator: MediaWiki 1.18alpha (r83429); Translate extension (2011-03-07)\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: pl\n" "X-Message-Group: #out-statusnet-core\n" -"X-POT-Import-Date: 2011-03-06 02:16:47+0000\n" +"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -1050,7 +1050,8 @@ msgid "Can only fave notices." msgstr "Można tylko dodawać wpisy do ulubionych." #. TRANS: Client exception thrown when trying favorite a notice without content. -msgid "Unknown note." +#, fuzzy +msgid "Unknown notice." msgstr "Nieznany wpis." #. TRANS: Client exception thrown when trying favorite an already favorited notice. @@ -1627,6 +1628,7 @@ msgstr "Usuń tę grupę" #. TRANS: Client error displayed trying to create a new direct message while not logged in. #. TRANS: Client error displayed trying to send a notice while not logged in. #. TRANS: Client error displayed trying to nudge a user without being logged in. +#. TRANS: Client error displayed when trying to enable or disable a plugin while not logged in. #. TRANS: Client error displayed trying a change a subscription while not logged in. #. TRANS: Client error displayed trying to subscribe when not logged in. #. TRANS: Client error message thrown when trying to access the admin panel while not logged in. @@ -3132,6 +3134,10 @@ msgstr "Źródłowy adres URL jest wymagany." msgid "Could not create application." msgstr "Nie można utworzyć aplikacji." +#, fuzzy +msgid "Invalid image." +msgstr "Nieprawidłowy rozmiar." + #. TRANS: Title for form to create a group. msgid "New group" msgstr "Nowa grupa" @@ -3416,49 +3422,74 @@ msgstr "Wysłane wiadomości użytkownika %s" msgid "This is your outbox, which lists private messages you have sent." msgstr "To są wiadomości wysłane, czyli prywatne wiadomości, które wysłałeś." +#. TRANS: Title for page where to change password. +#, fuzzy +msgctxt "TITLE" msgid "Change password" msgstr "Zmień hasło" +#. TRANS: Instructions for page where to change password. msgid "Change your password." msgstr "Zmień hasło." +#. TRANS: Fieldset legend on page where to change password. #. TRANS: Fieldset legend for password reset form. msgid "Password change" msgstr "Zmiana hasła" +#. TRANS: Field label on page where to change password. msgid "Old password" msgstr "Poprzednie hasło" +#. TRANS: Field label on page where to change password. #. TRANS: Field label for password reset form. msgid "New password" msgstr "Nowe hasło" +#. TRANS: Field title on page where to change password. msgid "6 or more characters." msgstr "6 lub więcej znaków." +#. TRANS: Field label on page where to change password. In this field the new password should be typed a second time. +#, fuzzy +msgctxt "LABEL" +msgid "Confirm" +msgstr "Potwierdź" + +#. TRANS: Field title on page where to change password. #. TRANS: Ttile for field label for password reset form where the password has to be typed again. msgid "Same as password above." msgstr "Takie samo jak powyższe hasło." +#. TRANS: Button text on page where to change password. +#, fuzzy +msgctxt "BUTTON" msgid "Change" msgstr "Zmień" +#. TRANS: Form validation error on page where to change password. msgid "Password must be 6 or more characters." msgstr "Hasło musi mieć sześć lub więcej znaków." msgid "Passwords don't match." msgstr "Hasła nie pasują do siebie." -msgid "Incorrect old password" +#. TRANS: Form validation error on page where to change password. +#, fuzzy +msgid "Incorrect old password." msgstr "Niepoprawne poprzednie hasło" +#. TRANS: Form validation error on page where to change password. msgid "Error saving user; invalid." msgstr "Błąd podczas zapisywania użytkownika; nieprawidłowy." +#. TRANS: Server error displayed on page where to change password when password change +#. TRANS: could not be made because of a server error. #. TRANS: Reset password form validation error message. msgid "Cannot save new password." msgstr "Nie można zapisać nowego hasła." +#. TRANS: Form validation notice on page where to change password. msgid "Password saved." msgstr "Zapisano hasło." @@ -3508,6 +3539,7 @@ msgstr "Witryny" msgid "Server" msgstr "Serwer" +#. TRANS: Field title in Paths admin panel. msgid "Site's server hostname." msgstr "Nazwa komputera serwera strony." @@ -3515,6 +3547,7 @@ msgstr "Nazwa komputera serwera strony." msgid "Path" msgstr "Ścieżka" +#. TRANS: Field title in Paths admin panel. msgid "Site path." msgstr "Ścieżka do witryny." @@ -3522,6 +3555,7 @@ msgstr "Ścieżka do witryny." msgid "Locale directory" msgstr "Katalog lokalizacji" +#. TRANS: Field title in Paths admin panel. msgid "Directory path to locales." msgstr "Ścieżka do katalogu lokalizacji." @@ -3529,11 +3563,16 @@ msgstr "Ścieżka do katalogu lokalizacji." msgid "Fancy URLs" msgstr "Eleganckie adresu URL" -msgid "Use fancy (more readable and memorable) URLs?" +#. TRANS: Field title in Paths admin panel. +#, fuzzy +msgid "Use fancy URLs (more readable and memorable)?" msgstr "" "Używać eleganckich (bardziej czytelnych i łatwiejszych do zapamiętania) " "adresów URL?" +#. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "Theme" msgstr "Motyw" @@ -3646,6 +3685,8 @@ msgid "Directory where attachments are located." msgstr "Katalog, w którym położone są załączniki." #. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "SSL" msgstr "SSL" @@ -3691,10 +3732,14 @@ msgstr "" msgid "People search" msgstr "Wyszukiwanie osób" +#. TRANS: Client error displayed when trying to tag a profile with an invalid tag. +#. TRANS: %s is the invalid tag. #, php-format msgid "Not a valid people tag: %s." msgstr "Nieprawidłowy znacznik osób: %s." +#. TRANS: Page title for users with a certain self-tag. +#. TRANS: %1$s is the tag, %2$s is the page number. #, php-format msgid "Users self-tagged with %1$s - page %2$d" msgstr "Użytkownicy używający znacznika %1$s - strona %2$d" @@ -3704,15 +3749,19 @@ msgctxt "plugin" msgid "Disabled" msgstr "" +#. TRANS: Client error displayed when trying to use another method than POST. +#. TRANS: Do not translate POST. #. TRANS: Client error displayed trying to perform any request method other than POST. #. TRANS: Do not translate POST. msgid "This action only accepts POST requests." msgstr "Ta czynność przyjmuje tylko żądania POST." +#. TRANS: Client error displayed when trying to enable or disable a plugin without access rights. #, fuzzy msgid "You cannot administer plugins." msgstr "Nie można usuwać użytkowników." +#. TRANS: Client error displayed when trying to enable or disable a non-existing plugin. #, fuzzy msgid "No such plugin." msgstr "Nie ma takiej strony." @@ -3723,7 +3772,8 @@ msgid "Enabled" msgstr "" #. TRANS: Tab and title for plugins admin panel. -#. TRANS: Menu item for site administration +#, fuzzy +msgctxt "TITLE" msgid "Plugins" msgstr "Wtyczki" @@ -3739,15 +3789,19 @@ msgstr "" msgid "Default plugins" msgstr "Domyślny język" +#. TRANS: Text displayed on plugin admin page when no plugin are enabled. msgid "" "All default plugins have been disabled from the site's configuration file." msgstr "" +#. TRANS: Client error displayed if the notice posted has too many characters. msgid "Invalid notice content." msgstr "Nieprawidłowa treść wpisu." -#, php-format -msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’." +#. TRANS: Exception thrown if a notice's license is not compatible with the StatusNet site license. +#. TRANS: %1$s is the notice license, %2$s is the StatusNet site's license. +#, fuzzy, php-format +msgid "Notice license \"%1$s\" is not compatible with site license \"%2$s\"." msgstr "Licencja wpisu \"%1$s\" nie jest zgodna z licencją witryny \"%2$s\"." #. TRANS: Page title for profile settings. @@ -3897,29 +3951,39 @@ msgstr "Zapisano ustawienia." msgid "Restore account" msgstr "Przywróć konto" +#. TRANS: Client error displayed when requesting a public timeline page beyond the page limit. +#. TRANS: %s is the page limit. #, php-format msgid "Beyond the page limit (%s)." msgstr "Poza ograniczeniem strony (%s)." +#. TRANS: Server error displayed when a public timeline cannot be retrieved. msgid "Could not retrieve public stream." msgstr "Nie można pobrać publicznego strumienia." +#. TRANS: Title for all public timeline pages but the first. +#. TRANS: %d is the page number. #, php-format msgid "Public timeline, page %d" msgstr "Publiczna oś czasu, strona %d" +#. TRANS: Title for the first public timeline page. msgid "Public timeline" msgstr "Publiczna oś czasu" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 1.0)" msgstr "Kanał publicznego strumienia (RSS 1.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 2.0)" msgstr "Kanał publicznego strumienia (RSS 2.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (Atom)" msgstr "Kanał publicznego strumienia (Atom)" +#. TRANS: Text displayed for public feed when there are no public notices. #, php-format msgid "" "This is the public timeline for %%site.name%% but no one has posted anything " @@ -3928,9 +3992,11 @@ msgstr "" "To jest publiczna oś czasu dla %%site.name%%, ale nikt jeszcze nic nie " "wysłał." +#. TRANS: Additional text displayed for public feed when there are no public notices for a logged in user. msgid "Be the first to post!" msgstr "Zostań pierwszym, który coś wyśle." +#. TRANS: Additional text displayed for public feed when there are no public notices for a not logged in user. #, php-format msgid "" "Why not [register an account](%%action.register%%) and be the first to post!" @@ -3938,6 +4004,8 @@ msgstr "" "Dlaczego nie [zarejestrujesz konta](%%action.register%%) i zostaniesz " "pierwszym, który coś wyśle." +#. TRANS: Message for not logged in users at an invite-only site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -3950,6 +4018,8 @@ msgstr "" "[Dołącz teraz](%%action.register%%), aby dzielić się wpisami o sobie z " "przyjaciółmi, rodziną i kolegami. ([Przeczytaj więcej](%%doc.help%%))" +#. TRANS: Message for not logged in users at a closed site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -5658,6 +5728,10 @@ msgstr "" "Powszechnej Licencji Publicznej Affero GNU (GNU Affero General Public " "License); jeśli nie - proszę odwiedzić stronę internetową %s." +#. TRANS: Menu item for site administration +msgid "Plugins" +msgstr "Wtyczki" + #. TRANS: Form input field label for application name. msgid "Name" msgstr "Nazwa" @@ -6175,6 +6249,9 @@ msgstr "saveSettings() nie jest zaimplementowane." msgid "Unable to delete design setting." msgstr "Nie można usunąć ustawienia wyglądu." +msgid "Home" +msgstr "Strona domowa" + #. TRANS: Menu item title/tooltip msgid "Basic site configuration" msgstr "Podstawowa konfiguracja witryny" @@ -6804,9 +6881,6 @@ msgstr "Przejdź do instalatora." msgid "Database error" msgstr "Błąd bazy danych" -msgid "Home" -msgstr "Strona domowa" - msgid "Public" msgstr "Publiczny" @@ -7615,7 +7689,6 @@ msgstr "Wyślij wpis" msgid "What's up, %s?" msgstr "Co słychać, %s?" -#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Załącz" @@ -7684,6 +7757,9 @@ msgstr "Usuń ten wpis" msgid "Notice repeated" msgstr "Powtórzono wpis" +msgid "Update your status..." +msgstr "" + msgid "Nudge this user" msgstr "Szturchnij tego użytkownika" @@ -8203,11 +8279,3 @@ msgstr "Nieprawidłowy kod XML, brak głównego XRD." #, php-format msgid "Getting backup from file '%s'." msgstr "Pobieranie kopii zapasowej z pliku \"%s\"." - -#, fuzzy -#~ msgid "Friends timeline" -#~ msgstr "Oś czasu użytkownika %s" - -#, fuzzy -#~ msgid "Everyone on this site" -#~ msgstr "Znajdź osoby na tej witrynie" diff --git a/locale/pt/LC_MESSAGES/statusnet.po b/locale/pt/LC_MESSAGES/statusnet.po index 715f73afa7..8cba1b643c 100644 --- a/locale/pt/LC_MESSAGES/statusnet.po +++ b/locale/pt/LC_MESSAGES/statusnet.po @@ -17,17 +17,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-08 01:03+0000\n" -"PO-Revision-Date: 2011-03-08 01:05:28+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:17:24+0000\n" "Language-Team: Portuguese \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83429); Translate extension (2011-03-07)\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: pt\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-06 02:16:47+0000\n" +"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -1035,7 +1035,8 @@ msgid "Can only fave notices." msgstr "Só pode por actualizações nos favoritos." #. TRANS: Client exception thrown when trying favorite a notice without content. -msgid "Unknown note." +#, fuzzy +msgid "Unknown notice." msgstr "Nota desconhecida." #. TRANS: Client exception thrown when trying favorite an already favorited notice. @@ -1597,6 +1598,7 @@ msgstr "Apagar este grupo." #. TRANS: Client error displayed trying to create a new direct message while not logged in. #. TRANS: Client error displayed trying to send a notice while not logged in. #. TRANS: Client error displayed trying to nudge a user without being logged in. +#. TRANS: Client error displayed when trying to enable or disable a plugin while not logged in. #. TRANS: Client error displayed trying a change a subscription while not logged in. #. TRANS: Client error displayed trying to subscribe when not logged in. #. TRANS: Client error message thrown when trying to access the admin panel while not logged in. @@ -3094,6 +3096,10 @@ msgstr "É necessária a URL de origem." msgid "Could not create application." msgstr "Não foi possível criar a aplicação." +#, fuzzy +msgid "Invalid image." +msgstr "Tamanho inválido." + #. TRANS: Title for form to create a group. msgid "New group" msgstr "Grupo novo" @@ -3376,49 +3382,74 @@ msgid "This is your outbox, which lists private messages you have sent." msgstr "" "Esta é a sua caixa de saída, que apresenta as mensagens privadas que enviou." +#. TRANS: Title for page where to change password. +#, fuzzy +msgctxt "TITLE" msgid "Change password" msgstr "Modificar senha" +#. TRANS: Instructions for page where to change password. msgid "Change your password." msgstr "Modificar a sua senha." +#. TRANS: Fieldset legend on page where to change password. #. TRANS: Fieldset legend for password reset form. msgid "Password change" msgstr "Mudança da senha" +#. TRANS: Field label on page where to change password. msgid "Old password" msgstr "Antiga" +#. TRANS: Field label on page where to change password. #. TRANS: Field label for password reset form. msgid "New password" msgstr "Nova" +#. TRANS: Field title on page where to change password. msgid "6 or more characters." msgstr "6 ou mais caracteres." +#. TRANS: Field label on page where to change password. In this field the new password should be typed a second time. +#, fuzzy +msgctxt "LABEL" +msgid "Confirm" +msgstr "Confirmação" + +#. TRANS: Field title on page where to change password. #. TRANS: Ttile for field label for password reset form where the password has to be typed again. msgid "Same as password above." msgstr "Repita a nova senha." +#. TRANS: Button text on page where to change password. +#, fuzzy +msgctxt "BUTTON" msgid "Change" msgstr "Modificar" +#. TRANS: Form validation error on page where to change password. msgid "Password must be 6 or more characters." msgstr "Senha tem de ter 6 ou mais caracteres." msgid "Passwords don't match." msgstr "Senhas não coincidem." -msgid "Incorrect old password" +#. TRANS: Form validation error on page where to change password. +#, fuzzy +msgid "Incorrect old password." msgstr "Senha antiga incorrecta." +#. TRANS: Form validation error on page where to change password. msgid "Error saving user; invalid." msgstr "Erro ao guardar utilizador; inválido." +#. TRANS: Server error displayed on page where to change password when password change +#. TRANS: could not be made because of a server error. #. TRANS: Reset password form validation error message. msgid "Cannot save new password." msgstr "Não é possível salvar a nova senha." +#. TRANS: Form validation notice on page where to change password. msgid "Password saved." msgstr "Senha gravada." @@ -3468,6 +3499,7 @@ msgstr "Site" msgid "Server" msgstr "Servidor" +#. TRANS: Field title in Paths admin panel. msgid "Site's server hostname." msgstr "Nome do servidor do site." @@ -3475,6 +3507,7 @@ msgstr "Nome do servidor do site." msgid "Path" msgstr "Localização" +#. TRANS: Field title in Paths admin panel. msgid "Site path." msgstr "Localização do site." @@ -3482,6 +3515,7 @@ msgstr "Localização do site." msgid "Locale directory" msgstr "Directório local" +#. TRANS: Field title in Paths admin panel. #, fuzzy msgid "Directory path to locales." msgstr "Localização do directório das línguas" @@ -3490,9 +3524,14 @@ msgstr "Localização do directório das línguas" msgid "Fancy URLs" msgstr "URLs bonitas" -msgid "Use fancy (more readable and memorable) URLs?" +#. TRANS: Field title in Paths admin panel. +#, fuzzy +msgid "Use fancy URLs (more readable and memorable)?" msgstr "Usar URLs bonitas (mais legíveis e memoráveis)" +#. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "Theme" msgstr "Tema" @@ -3613,6 +3652,8 @@ msgid "Directory where attachments are located." msgstr "Localização do directório das línguas" #. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "SSL" msgstr "SSL" @@ -3660,10 +3701,14 @@ msgstr "" msgid "People search" msgstr "Pesquisa de pessoas" +#. TRANS: Client error displayed when trying to tag a profile with an invalid tag. +#. TRANS: %s is the invalid tag. #, php-format msgid "Not a valid people tag: %s." msgstr "Categoria de pessoas inválida: %s." +#. TRANS: Page title for users with a certain self-tag. +#. TRANS: %1$s is the tag, %2$s is the page number. #, php-format msgid "Users self-tagged with %1$s - page %2$d" msgstr "Utilizadores auto-categorizados com %1$s - página %2$d" @@ -3673,15 +3718,19 @@ msgctxt "plugin" msgid "Disabled" msgstr "Desabilitado" +#. TRANS: Client error displayed when trying to use another method than POST. +#. TRANS: Do not translate POST. #. TRANS: Client error displayed trying to perform any request method other than POST. #. TRANS: Do not translate POST. msgid "This action only accepts POST requests." msgstr "Esta operação só aceita pedidos POST." +#. TRANS: Client error displayed when trying to enable or disable a plugin without access rights. #, fuzzy msgid "You cannot administer plugins." msgstr "Não pode apagar utilizadores." +#. TRANS: Client error displayed when trying to enable or disable a non-existing plugin. #, fuzzy msgid "No such plugin." msgstr "Página não foi encontrada." @@ -3692,7 +3741,8 @@ msgid "Enabled" msgstr "Habilitado" #. TRANS: Tab and title for plugins admin panel. -#. TRANS: Menu item for site administration +#, fuzzy +msgctxt "TITLE" msgid "Plugins" msgstr "Plugins" @@ -3707,15 +3757,19 @@ msgstr "" msgid "Default plugins" msgstr "Plugins padrão" +#. TRANS: Text displayed on plugin admin page when no plugin are enabled. msgid "" "All default plugins have been disabled from the site's configuration file." msgstr "" +#. TRANS: Client error displayed if the notice posted has too many characters. msgid "Invalid notice content." msgstr "Conteúdo da nota é inválido." -#, php-format -msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’." +#. TRANS: Exception thrown if a notice's license is not compatible with the StatusNet site license. +#. TRANS: %1$s is the notice license, %2$s is the StatusNet site's license. +#, fuzzy, php-format +msgid "Notice license \"%1$s\" is not compatible with site license \"%2$s\"." msgstr "" "A licença ‘%1$s’ da nota não é compatível com a licença ‘%2$s’ do site." @@ -3868,29 +3922,39 @@ msgstr "Configurações gravadas." msgid "Restore account" msgstr "Criar uma conta" +#. TRANS: Client error displayed when requesting a public timeline page beyond the page limit. +#. TRANS: %s is the page limit. #, php-format msgid "Beyond the page limit (%s)." msgstr "Além do limite de página (%s)." +#. TRANS: Server error displayed when a public timeline cannot be retrieved. msgid "Could not retrieve public stream." msgstr "Não foi possível importar as notas públicas." +#. TRANS: Title for all public timeline pages but the first. +#. TRANS: %d is the page number. #, php-format msgid "Public timeline, page %d" msgstr "Notas públicas, página %d" +#. TRANS: Title for the first public timeline page. msgid "Public timeline" msgstr "Notas públicas" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 1.0)" msgstr "Fonte de Notas Públicas (RSS 1.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 2.0)" msgstr "Fonte de Notas Públicas (RSS 2.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (Atom)" msgstr "Fonte de Notas Públicas (Atom)" +#. TRANS: Text displayed for public feed when there are no public notices. #, php-format msgid "" "This is the public timeline for %%site.name%% but no one has posted anything " @@ -3899,9 +3963,11 @@ msgstr "" "Estas são as notas públicas do site %%site.name%% mas ninguém publicou nada " "ainda." +#. TRANS: Additional text displayed for public feed when there are no public notices for a logged in user. msgid "Be the first to post!" msgstr "Seja a primeira pessoa a publicar!" +#. TRANS: Additional text displayed for public feed when there are no public notices for a not logged in user. #, php-format msgid "" "Why not [register an account](%%action.register%%) and be the first to post!" @@ -3909,6 +3975,8 @@ msgstr "" "Podia [registar uma conta](%%action.register%%) e ser a primeira pessoa a " "publicar!" +#. TRANS: Message for not logged in users at an invite-only site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -3921,6 +3989,8 @@ msgstr "" "[StatusNet](http://status.net/). [Registe-se agora](%%action.register%%) " "para partilhar notas sobre si, família e amigos! ([Saber mais](%%doc.help%%))" +#. TRANS: Message for not logged in users at a closed site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -5640,6 +5710,10 @@ msgstr "" "Juntamente com este programa deve ter recebido uma cópia da GNU Affero " "General Public License. Se não a tiver recebido, consulte %s." +#. TRANS: Menu item for site administration +msgid "Plugins" +msgstr "Plugins" + #. TRANS: Form input field label for application name. msgid "Name" msgstr "Nome" @@ -6152,6 +6226,9 @@ msgstr "saveSettings() não implementado." msgid "Unable to delete design setting." msgstr "Não foi possível apagar a configuração do estilo." +msgid "Home" +msgstr "Página pessoal" + #. TRANS: Menu item title/tooltip msgid "Basic site configuration" msgstr "Configuração básica do site" @@ -6778,9 +6855,6 @@ msgstr "Ir para o instalador." msgid "Database error" msgstr "Erro de base de dados" -msgid "Home" -msgstr "Página pessoal" - msgid "Public" msgstr "Público" @@ -7587,7 +7661,6 @@ msgstr "Enviar uma nota" msgid "What's up, %s?" msgstr "Novidades, %s?" -#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Anexar" @@ -7656,6 +7729,9 @@ msgstr "Apagar esta nota" msgid "Notice repeated" msgstr "Nota repetida" +msgid "Update your status..." +msgstr "" + msgid "Nudge this user" msgstr "Tocar este utilizador" @@ -8167,10 +8243,3 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" - -#, fuzzy -#~ msgid "Friends timeline" -#~ msgstr "Notas de %s" - -#~ msgid "Everyone on this site" -#~ msgstr "Todos neste site" diff --git a/locale/pt_BR/LC_MESSAGES/statusnet.po b/locale/pt_BR/LC_MESSAGES/statusnet.po index ade9fcc57c..66957c90c9 100644 --- a/locale/pt_BR/LC_MESSAGES/statusnet.po +++ b/locale/pt_BR/LC_MESSAGES/statusnet.po @@ -15,18 +15,18 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-08 01:03+0000\n" -"PO-Revision-Date: 2011-03-08 01:05:29+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:17:25+0000\n" "Language-Team: Brazilian Portuguese \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83429); Translate extension (2011-03-07)\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: pt-br\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-POT-Import-Date: 2011-03-06 02:16:47+0000\n" +"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -1051,7 +1051,8 @@ msgid "Can only fave notices." msgstr "Só é possível tornar favoritas as mensagens." #. TRANS: Client exception thrown when trying favorite a notice without content. -msgid "Unknown note." +#, fuzzy +msgid "Unknown notice." msgstr "Mensagem desconhecida." #. TRANS: Client exception thrown when trying favorite an already favorited notice. @@ -1639,6 +1640,7 @@ msgstr "Excluir este grupo" #. TRANS: Client error displayed trying to create a new direct message while not logged in. #. TRANS: Client error displayed trying to send a notice while not logged in. #. TRANS: Client error displayed trying to nudge a user without being logged in. +#. TRANS: Client error displayed when trying to enable or disable a plugin while not logged in. #. TRANS: Client error displayed trying a change a subscription while not logged in. #. TRANS: Client error displayed trying to subscribe when not logged in. #. TRANS: Client error message thrown when trying to access the admin panel while not logged in. @@ -3163,6 +3165,10 @@ msgstr "A URL da fonte é obrigatória." msgid "Could not create application." msgstr "Não foi possível criar a aplicação." +#, fuzzy +msgid "Invalid image." +msgstr "Tamanho inválido." + #. TRANS: Title for form to create a group. msgid "New group" msgstr "Novo grupo" @@ -3451,52 +3457,77 @@ msgstr "" "Essa é a sua caixa de mensagens enviadas, que lista as mensagens " "particulares que você enviou." +#. TRANS: Title for page where to change password. +#, fuzzy +msgctxt "TITLE" msgid "Change password" msgstr "Alterar a senha" +#. TRANS: Instructions for page where to change password. msgid "Change your password." msgstr "Altere a sua senha" +#. TRANS: Fieldset legend on page where to change password. #. TRANS: Fieldset legend for password reset form. msgid "Password change" msgstr "Alterar a senha" +#. TRANS: Field label on page where to change password. msgid "Old password" msgstr "Senha anterior" +#. TRANS: Field label on page where to change password. #. TRANS: Field label for password reset form. msgid "New password" msgstr "Senha nova" +#. TRANS: Field title on page where to change password. #, fuzzy msgid "6 or more characters." msgstr "No mínimo 6 caracteres" +#. TRANS: Field label on page where to change password. In this field the new password should be typed a second time. +#, fuzzy +msgctxt "LABEL" +msgid "Confirm" +msgstr "Confirmar" + +#. TRANS: Field title on page where to change password. #. TRANS: Ttile for field label for password reset form where the password has to be typed again. #, fuzzy msgid "Same as password above." msgstr "Igual à senha acima" +#. TRANS: Button text on page where to change password. +#, fuzzy +msgctxt "BUTTON" msgid "Change" msgstr "Alterar" +#. TRANS: Form validation error on page where to change password. msgid "Password must be 6 or more characters." msgstr "A senha deve ter, no mínimo, 6 caracteres." msgid "Passwords don't match." msgstr "As senhas não coincidem." -msgid "Incorrect old password" +#. TRANS: Form validation error on page where to change password. +#, fuzzy +msgid "Incorrect old password." msgstr "A senha anterior está errada" +#. TRANS: Form validation error on page where to change password. msgid "Error saving user; invalid." msgstr "Erro ao salvar usuário; inválido." +#. TRANS: Server error displayed on page where to change password when password change +#. TRANS: could not be made because of a server error. #. TRANS: Reset password form validation error message. #, fuzzy msgid "Cannot save new password." msgstr "Não é possível salvar a nova senha." +#. TRANS: Form validation notice on page where to change password. msgid "Password saved." msgstr "A senha foi salva." @@ -3547,6 +3578,7 @@ msgstr "Site" msgid "Server" msgstr "Servidor" +#. TRANS: Field title in Paths admin panel. msgid "Site's server hostname." msgstr "Nome de host do servidor do site." @@ -3554,6 +3586,7 @@ msgstr "Nome de host do servidor do site." msgid "Path" msgstr "Caminho" +#. TRANS: Field title in Paths admin panel. msgid "Site path." msgstr "Caminho do site." @@ -3561,6 +3594,7 @@ msgstr "Caminho do site." msgid "Locale directory" msgstr "Diretório dos locales" +#. TRANS: Field title in Paths admin panel. msgid "Directory path to locales." msgstr "Caminho do diretório de locales" @@ -3568,9 +3602,14 @@ msgstr "Caminho do diretório de locales" msgid "Fancy URLs" msgstr "URLs limpas" -msgid "Use fancy (more readable and memorable) URLs?" +#. TRANS: Field title in Paths admin panel. +#, fuzzy +msgid "Use fancy URLs (more readable and memorable)?" msgstr "Utilizar URLs limpas (mais legíveis e memorizáveis)?" +#. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "Theme" msgstr "Tema" @@ -3683,6 +3722,8 @@ msgid "Directory where attachments are located." msgstr "Diretório onde os anexos estão localizados." #. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "SSL" msgstr "SSL" @@ -3727,10 +3768,14 @@ msgstr "" msgid "People search" msgstr "Procurar pessoas" +#. TRANS: Client error displayed when trying to tag a profile with an invalid tag. +#. TRANS: %s is the invalid tag. #, php-format msgid "Not a valid people tag: %s." msgstr "Não é uma etiqueta de pessoa válida: %s." +#. TRANS: Page title for users with a certain self-tag. +#. TRANS: %1$s is the tag, %2$s is the page number. #, php-format msgid "Users self-tagged with %1$s - page %2$d" msgstr "Usuários auto-etiquetados com %1$s - pág. %2$d" @@ -3740,15 +3785,19 @@ msgctxt "plugin" msgid "Disabled" msgstr "" +#. TRANS: Client error displayed when trying to use another method than POST. +#. TRANS: Do not translate POST. #. TRANS: Client error displayed trying to perform any request method other than POST. #. TRANS: Do not translate POST. msgid "This action only accepts POST requests." msgstr "Esta ação aceita somente requisições POST." +#. TRANS: Client error displayed when trying to enable or disable a plugin without access rights. #, fuzzy msgid "You cannot administer plugins." msgstr "Você não pode excluir usuários." +#. TRANS: Client error displayed when trying to enable or disable a non-existing plugin. #, fuzzy msgid "No such plugin." msgstr "Esta página não existe." @@ -3759,7 +3808,8 @@ msgid "Enabled" msgstr "" #. TRANS: Tab and title for plugins admin panel. -#. TRANS: Menu item for site administration +#, fuzzy +msgctxt "TITLE" msgid "Plugins" msgstr "Plugins" @@ -3775,15 +3825,19 @@ msgstr "" msgid "Default plugins" msgstr "Idioma padrão" +#. TRANS: Text displayed on plugin admin page when no plugin are enabled. msgid "" "All default plugins have been disabled from the site's configuration file." msgstr "" +#. TRANS: Client error displayed if the notice posted has too many characters. msgid "Invalid notice content." msgstr "O conteúdo da mensagem é inválido." -#, php-format -msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’." +#. TRANS: Exception thrown if a notice's license is not compatible with the StatusNet site license. +#. TRANS: %1$s is the notice license, %2$s is the StatusNet site's license. +#, fuzzy, php-format +msgid "Notice license \"%1$s\" is not compatible with site license \"%2$s\"." msgstr "" "A licença ‘%1$s’ da mensagem não é compatível com a licença ‘%2$s’ do site." @@ -3935,29 +3989,39 @@ msgstr "As configurações foram salvas." msgid "Restore account" msgstr "Criar uma conta" +#. TRANS: Client error displayed when requesting a public timeline page beyond the page limit. +#. TRANS: %s is the page limit. #, php-format msgid "Beyond the page limit (%s)." msgstr "Além do limite da página (%s)." +#. TRANS: Server error displayed when a public timeline cannot be retrieved. msgid "Could not retrieve public stream." msgstr "Não foi possível recuperar o fluxo público." +#. TRANS: Title for all public timeline pages but the first. +#. TRANS: %d is the page number. #, php-format msgid "Public timeline, page %d" msgstr "Mensagens públicas, pág. %d" +#. TRANS: Title for the first public timeline page. msgid "Public timeline" msgstr "Mensagens públicas" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 1.0)" msgstr "Fonte de mensagens públicas (RSS 1.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 2.0)" msgstr "Fonte de mensagens públicas (RSS 2.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (Atom)" msgstr "Fonte de mensagens públicas (Atom)" +#. TRANS: Text displayed for public feed when there are no public notices. #, php-format msgid "" "This is the public timeline for %%site.name%% but no one has posted anything " @@ -3966,9 +4030,11 @@ msgstr "" "Esse é o fluxo de mensagens públicas de %%site.name%%, mas ninguém publicou " "nada ainda." +#. TRANS: Additional text displayed for public feed when there are no public notices for a logged in user. msgid "Be the first to post!" msgstr "Seja o primeiro a publicar!" +#. TRANS: Additional text displayed for public feed when there are no public notices for a not logged in user. #, php-format msgid "" "Why not [register an account](%%action.register%%) and be the first to post!" @@ -3976,6 +4042,8 @@ msgstr "" "Por que você não [registra uma conta](%%action.register%%) pra ser o " "primeiro a publicar?" +#. TRANS: Message for not logged in users at an invite-only site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -3988,6 +4056,8 @@ msgstr "" "[Cadastre-se agora](%%action.register%%) para compartilhar notícias sobre " "você com seus amigos, família e colegas! ([Saiba mais](%%doc.help%%))" +#. TRANS: Message for not logged in users at a closed site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -5712,6 +5782,10 @@ msgstr "" "Você deve ter recebido uma cópia da GNU Affero General Public License com " "este programa. Caso contrário, veja %s." +#. TRANS: Menu item for site administration +msgid "Plugins" +msgstr "Plugins" + #. TRANS: Form input field label for application name. msgid "Name" msgstr "Nome" @@ -6216,6 +6290,9 @@ msgstr "saveSettings() não implementado." msgid "Unable to delete design setting." msgstr "Não foi possível excluir as configurações da aparência." +msgid "Home" +msgstr "Site" + #. TRANS: Menu item title/tooltip msgid "Basic site configuration" msgstr "Configuração básica do site" @@ -6856,9 +6933,6 @@ msgstr "Ir para o instalador." msgid "Database error" msgstr "Erro no banco de dados" -msgid "Home" -msgstr "Site" - msgid "Public" msgstr "Público" @@ -7669,7 +7743,6 @@ msgstr "Enviar uma mensagem" msgid "What's up, %s?" msgstr "E aí, %s?" -#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Anexo" @@ -7738,6 +7811,9 @@ msgstr "Excluir esta mensagem" msgid "Notice repeated" msgstr "Mensagem repetida" +msgid "Update your status..." +msgstr "" + msgid "Nudge this user" msgstr "Chamar a atenção deste usuário" @@ -8247,11 +8323,3 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" - -#, fuzzy -#~ msgid "Friends timeline" -#~ msgstr "Mensagens de %s" - -#, fuzzy -#~ msgid "Everyone on this site" -#~ msgstr "Encontre pessoas neste site" diff --git a/locale/ru/LC_MESSAGES/statusnet.po b/locale/ru/LC_MESSAGES/statusnet.po index e3319efb95..69cfbaaae3 100644 --- a/locale/ru/LC_MESSAGES/statusnet.po +++ b/locale/ru/LC_MESSAGES/statusnet.po @@ -18,18 +18,18 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-08 01:03+0000\n" -"PO-Revision-Date: 2011-03-08 01:05:30+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:17:26+0000\n" "Language-Team: Russian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83429); Translate extension (2011-03-07)\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ru\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= " "2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n" -"X-POT-Import-Date: 2011-03-06 02:16:47+0000\n" +"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -1056,7 +1056,8 @@ msgid "Can only fave notices." msgstr "Возможно только добавление записей в число любимых." #. TRANS: Client exception thrown when trying favorite a notice without content. -msgid "Unknown note." +#, fuzzy +msgid "Unknown notice." msgstr "Неизвестная запись" #. TRANS: Client exception thrown when trying favorite an already favorited notice. @@ -1641,6 +1642,7 @@ msgstr "Удалить эту группу" #. TRANS: Client error displayed trying to create a new direct message while not logged in. #. TRANS: Client error displayed trying to send a notice while not logged in. #. TRANS: Client error displayed trying to nudge a user without being logged in. +#. TRANS: Client error displayed when trying to enable or disable a plugin while not logged in. #. TRANS: Client error displayed trying a change a subscription while not logged in. #. TRANS: Client error displayed trying to subscribe when not logged in. #. TRANS: Client error message thrown when trying to access the admin panel while not logged in. @@ -3166,6 +3168,10 @@ msgstr "URL источника обязателен." msgid "Could not create application." msgstr "Не удаётся создать приложение." +#, fuzzy +msgid "Invalid image." +msgstr "Неверный размер." + #. TRANS: Title for form to create a group. msgid "New group" msgstr "Новая группа" @@ -3451,52 +3457,77 @@ msgstr "" "Это список исходящих писем, в котором перечислены отправленные вами личные " "сообщения." +#. TRANS: Title for page where to change password. +#, fuzzy +msgctxt "TITLE" msgid "Change password" msgstr "Изменение пароля" +#. TRANS: Instructions for page where to change password. msgid "Change your password." msgstr "Измените ваш пароль." +#. TRANS: Fieldset legend on page where to change password. #. TRANS: Fieldset legend for password reset form. msgid "Password change" msgstr "Пароль сохранён." +#. TRANS: Field label on page where to change password. msgid "Old password" msgstr "Старый пароль" +#. TRANS: Field label on page where to change password. #. TRANS: Field label for password reset form. msgid "New password" msgstr "Новый пароль" +#. TRANS: Field title on page where to change password. #, fuzzy msgid "6 or more characters." msgstr "6 или больше знаков" +#. TRANS: Field label on page where to change password. In this field the new password should be typed a second time. +#, fuzzy +msgctxt "LABEL" +msgid "Confirm" +msgstr "Подтверждение" + +#. TRANS: Field title on page where to change password. #. TRANS: Ttile for field label for password reset form where the password has to be typed again. #, fuzzy msgid "Same as password above." msgstr "Тот же пароль, что и выше" +#. TRANS: Button text on page where to change password. +#, fuzzy +msgctxt "BUTTON" msgid "Change" msgstr "Изменить" +#. TRANS: Form validation error on page where to change password. msgid "Password must be 6 or more characters." msgstr "Пароль должен быть длиной не менее 6 символов." msgid "Passwords don't match." msgstr "Пароли не совпадают." -msgid "Incorrect old password" +#. TRANS: Form validation error on page where to change password. +#, fuzzy +msgid "Incorrect old password." msgstr "Некорректный старый пароль" +#. TRANS: Form validation error on page where to change password. msgid "Error saving user; invalid." msgstr "Ошибка сохранения пользователя; неверное имя." +#. TRANS: Server error displayed on page where to change password when password change +#. TRANS: could not be made because of a server error. #. TRANS: Reset password form validation error message. #, fuzzy msgid "Cannot save new password." msgstr "Не удаётся сохранить новый пароль." +#. TRANS: Form validation notice on page where to change password. msgid "Password saved." msgstr "Пароль сохранён." @@ -3546,6 +3577,7 @@ msgstr "Сайт" msgid "Server" msgstr "Сервер" +#. TRANS: Field title in Paths admin panel. msgid "Site's server hostname." msgstr "Имя хоста сервера сайта." @@ -3553,6 +3585,7 @@ msgstr "Имя хоста сервера сайта." msgid "Path" msgstr "Путь" +#. TRANS: Field title in Paths admin panel. msgid "Site path." msgstr "Путь к сайту." @@ -3560,6 +3593,7 @@ msgstr "Путь к сайту." msgid "Locale directory" msgstr "Директория локализации" +#. TRANS: Field title in Paths admin panel. msgid "Directory path to locales." msgstr "Путь к директории локализаций" @@ -3567,9 +3601,14 @@ msgstr "Путь к директории локализаций" msgid "Fancy URLs" msgstr "Короткие URL" -msgid "Use fancy (more readable and memorable) URLs?" +#. TRANS: Field title in Paths admin panel. +#, fuzzy +msgid "Use fancy URLs (more readable and memorable)?" msgstr "Использовать ли короткие (более читаемые и запоминаемые) URL-адреса?" +#. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "Theme" msgstr "Тема" @@ -3682,6 +3721,8 @@ msgid "Directory where attachments are located." msgstr "Директория, в которой расположены вложения." #. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "SSL" msgstr "SSL" @@ -3726,10 +3767,14 @@ msgstr "" msgid "People search" msgstr "Поиск людей" +#. TRANS: Client error displayed when trying to tag a profile with an invalid tag. +#. TRANS: %s is the invalid tag. #, php-format msgid "Not a valid people tag: %s." msgstr "Неверный тег человека: %s." +#. TRANS: Page title for users with a certain self-tag. +#. TRANS: %1$s is the tag, %2$s is the page number. #, php-format msgid "Users self-tagged with %1$s - page %2$d" msgstr "Пользователи, установившие себе тег %1$s — страница %2$d" @@ -3739,15 +3784,19 @@ msgctxt "plugin" msgid "Disabled" msgstr "" +#. TRANS: Client error displayed when trying to use another method than POST. +#. TRANS: Do not translate POST. #. TRANS: Client error displayed trying to perform any request method other than POST. #. TRANS: Do not translate POST. msgid "This action only accepts POST requests." msgstr "Это действие принимает только POST-запросы." +#. TRANS: Client error displayed when trying to enable or disable a plugin without access rights. #, fuzzy msgid "You cannot administer plugins." msgstr "Вы не можете удалять пользователей." +#. TRANS: Client error displayed when trying to enable or disable a non-existing plugin. #, fuzzy msgid "No such plugin." msgstr "Нет такой страницы." @@ -3758,7 +3807,8 @@ msgid "Enabled" msgstr "" #. TRANS: Tab and title for plugins admin panel. -#. TRANS: Menu item for site administration +#, fuzzy +msgctxt "TITLE" msgid "Plugins" msgstr "Плагины" @@ -3774,15 +3824,19 @@ msgstr "" msgid "Default plugins" msgstr "Язык по умолчанию" +#. TRANS: Text displayed on plugin admin page when no plugin are enabled. msgid "" "All default plugins have been disabled from the site's configuration file." msgstr "" +#. TRANS: Client error displayed if the notice posted has too many characters. msgid "Invalid notice content." msgstr "Ошибочное содержание записи." -#, php-format -msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’." +#. TRANS: Exception thrown if a notice's license is not compatible with the StatusNet site license. +#. TRANS: %1$s is the notice license, %2$s is the StatusNet site's license. +#, fuzzy, php-format +msgid "Notice license \"%1$s\" is not compatible with site license \"%2$s\"." msgstr "Лицензия записи «%1$s» не совместима с лицензией сайта «%2$s»." #. TRANS: Page title for profile settings. @@ -3935,38 +3989,50 @@ msgstr "Настройки сохранены." msgid "Restore account" msgstr "Создать новый аккаунт" +#. TRANS: Client error displayed when requesting a public timeline page beyond the page limit. +#. TRANS: %s is the page limit. #, php-format msgid "Beyond the page limit (%s)." msgstr "Превышен предел страницы (%s)." +#. TRANS: Server error displayed when a public timeline cannot be retrieved. msgid "Could not retrieve public stream." msgstr "Не удаётся вернуть публичный поток." +#. TRANS: Title for all public timeline pages but the first. +#. TRANS: %d is the page number. #, php-format msgid "Public timeline, page %d" msgstr "Общая лента, страница %d" +#. TRANS: Title for the first public timeline page. msgid "Public timeline" msgstr "Общая лента" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 1.0)" msgstr "Лента публичного потока (RSS 1.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 2.0)" msgstr "Лента публичного потока (RSS 2.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (Atom)" msgstr "Лента публичного потока (Atom)" +#. TRANS: Text displayed for public feed when there are no public notices. #, php-format msgid "" "This is the public timeline for %%site.name%% but no one has posted anything " "yet." msgstr "Это общая лента %%site.name%%, однако пока никто ничего не отправил." +#. TRANS: Additional text displayed for public feed when there are no public notices for a logged in user. msgid "Be the first to post!" msgstr "Создайте первую запись!" +#. TRANS: Additional text displayed for public feed when there are no public notices for a not logged in user. #, php-format msgid "" "Why not [register an account](%%action.register%%) and be the first to post!" @@ -3974,6 +4040,8 @@ msgstr "" "Почему бы не [зарегистрироваться](%%action.register%%), чтобы стать первым " "отправителем?" +#. TRANS: Message for not logged in users at an invite-only site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -3987,6 +4055,8 @@ msgstr "" "register%%), чтобы держать в курсе своих событий поклонников, друзей, " "родственников и коллег! ([Читать далее](%%doc.help%%))" +#. TRANS: Message for not logged in users at a closed site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -5704,6 +5774,10 @@ msgstr "" "Вы должны были получить копию GNU Affero General Public License вместе с " "этой программой. Если нет, см. %s." +#. TRANS: Menu item for site administration +msgid "Plugins" +msgstr "Плагины" + #. TRANS: Form input field label for application name. msgid "Name" msgstr "Имя" @@ -6214,6 +6288,9 @@ msgstr "saveSettings() не реализована." msgid "Unable to delete design setting." msgstr "Не удаётся удалить настройки оформления." +msgid "Home" +msgstr "Главная" + #. TRANS: Menu item title/tooltip msgid "Basic site configuration" msgstr "Основная конфигурация сайта" @@ -6850,9 +6927,6 @@ msgstr "Перейти к установщику" msgid "Database error" msgstr "Ошибка базы данных" -msgid "Home" -msgstr "Главная" - msgid "Public" msgstr "Общее" @@ -7665,7 +7739,6 @@ msgstr "Послать запись" msgid "What's up, %s?" msgstr "Что нового, %s?" -#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Прикрепить" @@ -7734,6 +7807,9 @@ msgstr "Удалить эту запись" msgid "Notice repeated" msgstr "Запись повторена" +msgid "Update your status..." +msgstr "" + msgid "Nudge this user" msgstr "«Подтолкнуть» этого пользователя" @@ -8251,11 +8327,3 @@ msgstr "Неверный XML, отсутствует корень XRD." #, php-format msgid "Getting backup from file '%s'." msgstr "Получение резервной копии из файла «%s»." - -#, fuzzy -#~ msgid "Friends timeline" -#~ msgstr "Лента %s" - -#, fuzzy -#~ msgid "Everyone on this site" -#~ msgstr "Найти человека на этом сайте" diff --git a/locale/statusnet.pot b/locale/statusnet.pot index 81cdbaba1e..8ffd6aab4d 100644 --- a/locale/statusnet.pot +++ b/locale/statusnet.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-08 01:03+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -19,7 +19,7 @@ msgstr "" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration -#: actions/accessadminpanel.php:53 lib/adminpanelnav.php:92 +#: actions/accessadminpanel.php:53 lib/adminpanelnav.php:110 msgid "Access" msgstr "" @@ -85,7 +85,7 @@ msgstr "" #. TRANS: Button text on profile design page to save settings. #: actions/accessadminpanel.php:193 actions/designadminpanel.php:732 #: actions/emailsettings.php:251 actions/imsettings.php:199 -#: actions/licenseadminpanel.php:335 actions/pathsadminpanel.php:512 +#: actions/licenseadminpanel.php:335 actions/pathsadminpanel.php:517 #: actions/profilesettings.php:198 actions/sitenoticeadminpanel.php:197 #: actions/smssettings.php:204 actions/subscriptions.php:261 #: actions/urlsettings.php:152 actions/useradminpanel.php:298 @@ -97,7 +97,7 @@ msgstr "" #. TRANS: Server error when page not found (404). #. TRANS: Server error when page not found (404) -#: actions/all.php:68 actions/public.php:98 actions/replies.php:93 +#: actions/all.php:68 actions/public.php:99 actions/replies.php:93 #: actions/showfavorites.php:140 actions/tag.php:52 msgid "No such page." msgstr "" @@ -176,7 +176,7 @@ msgstr "" #. TRANS: Timeline title for user and friends. %s is a user nickname. #: actions/all.php:94 actions/all.php:185 actions/allrss.php:117 #: actions/apitimelinefriends.php:207 actions/apitimelinehome.php:113 -#: lib/personalgroupnav.php:72 +#: lib/adminpanelnav.php:70 lib/personalgroupnav.php:72 lib/settingsnav.php:71 #, php-format msgid "%s and friends" msgstr "" @@ -853,8 +853,8 @@ msgstr "" #: actions/invite.php:60 actions/makeadmin.php:67 actions/newmessage.php:140 #: actions/newnotice.php:104 actions/nudge.php:81 #: actions/oauthappssettings.php:162 actions/oauthconnectionssettings.php:135 -#: actions/passwordsettings.php:137 actions/pluginenable.php:87 -#: actions/profilesettings.php:218 actions/recoverpassword.php:383 +#: actions/passwordsettings.php:146 actions/pluginenable.php:87 +#: actions/profilesettings.php:218 actions/recoverpassword.php:387 #: actions/register.php:157 actions/remotesubscribe.php:76 #: actions/repeat.php:82 actions/smssettings.php:249 actions/subedit.php:40 #: actions/subscribe.php:87 actions/tagother.php:145 @@ -943,7 +943,7 @@ msgstr "" #. TRANS: Field label on OAuth API authorisation form. #. TRANS: Field label on login page. #: actions/apioauthauthorize.php:463 actions/login.php:235 -#: actions/register.php:415 lib/settingsnav.php:74 +#: actions/register.php:415 lib/settingsnav.php:93 msgid "Password" msgstr "" @@ -1311,7 +1311,7 @@ msgstr "" #. TRANS: Client exception thrown when trying favorite a notice without content. #: actions/atompubfavoritefeed.php:259 -msgid "Unknown note." +msgid "Unknown notice." msgstr "" #. TRANS: Client exception thrown when trying favorite an already favorited notice. @@ -1505,7 +1505,7 @@ msgid "Invalid size." msgstr "" #. TRANS: Title for avatar upload page. -#: actions/avatarsettings.php:66 lib/settingsnav.php:69 +#: actions/avatarsettings.php:66 lib/settingsnav.php:88 msgid "Avatar" msgstr "" @@ -1865,8 +1865,8 @@ msgstr "" #. TRANS: Field label for delete account confirmation entry. #. TRANS: Field label for password reset form where the password has to be typed again. -#: actions/deleteaccount.php:300 actions/passwordsettings.php:112 -#: actions/recoverpassword.php:262 actions/register.php:419 +#: actions/deleteaccount.php:300 actions/recoverpassword.php:262 +#: actions/register.php:419 msgid "Confirm" msgstr "" @@ -1902,7 +1902,7 @@ msgstr "" #. TRANS: Client error text when there is a problem with the session token. #: actions/deleteapplication.php:102 actions/editapplication.php:131 #: actions/newapplication.php:112 actions/showapplication.php:113 -#: lib/action.php:1388 +#: lib/action.php:1409 msgid "There was a problem with your session token." msgstr "" @@ -1996,6 +1996,7 @@ msgstr "" #. TRANS: Client error displayed trying to create a new direct message while not logged in. #. TRANS: Client error displayed trying to send a notice while not logged in. #. TRANS: Client error displayed trying to nudge a user without being logged in. +#. TRANS: Client error displayed when trying to enable or disable a plugin while not logged in. #. TRANS: Client error displayed trying a change a subscription while not logged in. #. TRANS: Client error displayed trying to subscribe when not logged in. #. TRANS: Client error message thrown when trying to access the admin panel while not logged in. @@ -2003,7 +2004,7 @@ msgstr "" #: actions/deletenotice.php:52 actions/disfavor.php:61 actions/favor.php:62 #: actions/groupblock.php:60 actions/groupunblock.php:60 actions/logout.php:69 #: actions/makeadmin.php:62 actions/newmessage.php:89 actions/newnotice.php:87 -#: actions/nudge.php:64 actions/pluginenable.php:97 actions/subedit.php:33 +#: actions/nudge.php:64 actions/pluginenable.php:98 actions/subedit.php:33 #: actions/subscribe.php:98 actions/tagother.php:33 actions/unsubscribe.php:52 #: lib/adminpanelaction.php:71 lib/profileformaction.php:63 #: lib/settingsaction.php:72 @@ -2077,7 +2078,7 @@ msgid "Delete this user." msgstr "" #. TRANS: Message used as title for design settings for the site. -#: actions/designadminpanel.php:60 lib/settingsnav.php:84 +#: actions/designadminpanel.php:60 lib/settingsnav.php:103 msgid "Design" msgstr "" @@ -2969,7 +2970,7 @@ msgid "A list of the users in this group." msgstr "" #. TRANS: Indicator in group members list that this user is a group administrator. -#: actions/groupmembers.php:190 lib/primarynav.php:63 +#: actions/groupmembers.php:190 lib/adminpanelnav.php:77 lib/primarynav.php:63 msgid "Admin" msgstr "" @@ -3355,7 +3356,7 @@ msgstr "" #. TRANS: Send button for inviting friends #. TRANS: Button text for sending notice. -#: actions/invite.php:232 lib/noticeform.php:254 +#: actions/invite.php:232 lib/noticeform.php:256 msgctxt "BUTTON" msgid "Send" msgstr "" @@ -3688,6 +3689,10 @@ msgstr "" msgid "Could not create application." msgstr "" +#: actions/newapplication.php:297 +msgid "Invalid image." +msgstr "" + #. TRANS: Title for form to create a group. #: actions/newgroup.php:53 msgid "New group" @@ -4013,70 +4018,92 @@ msgstr "" msgid "This is your outbox, which lists private messages you have sent." msgstr "" -#: actions/passwordsettings.php:58 +#. TRANS: Title for page where to change password. +#: actions/passwordsettings.php:59 +msgctxt "TITLE" msgid "Change password" msgstr "" -#: actions/passwordsettings.php:69 +#. TRANS: Instructions for page where to change password. +#: actions/passwordsettings.php:71 msgid "Change your password." msgstr "" +#. TRANS: Fieldset legend on page where to change password. #. TRANS: Fieldset legend for password reset form. -#: actions/passwordsettings.php:96 actions/recoverpassword.php:251 +#: actions/passwordsettings.php:99 actions/recoverpassword.php:251 msgid "Password change" msgstr "" -#: actions/passwordsettings.php:104 +#. TRANS: Field label on page where to change password. +#: actions/passwordsettings.php:108 msgid "Old password" msgstr "" +#. TRANS: Field label on page where to change password. #. TRANS: Field label for password reset form. -#: actions/passwordsettings.php:108 actions/recoverpassword.php:256 +#: actions/passwordsettings.php:113 actions/recoverpassword.php:256 msgid "New password" msgstr "" -#: actions/passwordsettings.php:109 actions/register.php:416 +#. TRANS: Field title on page where to change password. +#: actions/passwordsettings.php:115 actions/register.php:416 msgid "6 or more characters." msgstr "" +#. TRANS: Field label on page where to change password. In this field the new password should be typed a second time. +#: actions/passwordsettings.php:119 +msgctxt "LABEL" +msgid "Confirm" +msgstr "" + +#. TRANS: Field title on page where to change password. #. TRANS: Ttile for field label for password reset form where the password has to be typed again. -#: actions/passwordsettings.php:113 actions/recoverpassword.php:264 +#: actions/passwordsettings.php:121 actions/recoverpassword.php:264 #: actions/register.php:420 msgid "Same as password above." msgstr "" -#: actions/passwordsettings.php:117 +#. TRANS: Button text on page where to change password. +#: actions/passwordsettings.php:126 +msgctxt "BUTTON" msgid "Change" msgstr "" -#: actions/passwordsettings.php:153 actions/register.php:223 +#. TRANS: Form validation error on page where to change password. +#: actions/passwordsettings.php:163 actions/register.php:223 msgid "Password must be 6 or more characters." msgstr "" -#: actions/passwordsettings.php:156 actions/register.php:226 +#: actions/passwordsettings.php:166 actions/register.php:226 msgid "Passwords don't match." msgstr "" -#: actions/passwordsettings.php:164 -msgid "Incorrect old password" +#. TRANS: Form validation error on page where to change password. +#: actions/passwordsettings.php:175 +msgid "Incorrect old password." msgstr "" -#: actions/passwordsettings.php:180 +#. TRANS: Form validation error on page where to change password. +#: actions/passwordsettings.php:192 msgid "Error saving user; invalid." msgstr "" +#. TRANS: Server error displayed on page where to change password when password change +#. TRANS: could not be made because of a server error. #. TRANS: Reset password form validation error message. -#: actions/passwordsettings.php:185 actions/recoverpassword.php:418 +#: actions/passwordsettings.php:199 actions/recoverpassword.php:422 msgid "Cannot save new password." msgstr "" -#: actions/passwordsettings.php:191 +#. TRANS: Form validation notice on page where to change password. +#: actions/passwordsettings.php:206 msgid "Password saved." msgstr "" #. TRANS: Title for Paths admin panel. #. TRANS: Menu item for site administration -#: actions/pathsadminpanel.php:58 lib/adminpanelnav.php:100 +#: actions/pathsadminpanel.php:58 lib/adminpanelnav.php:118 msgid "Paths" msgstr "" @@ -4125,221 +4152,228 @@ msgid "Site" msgstr "" #. TRANS: Field label in Paths admin panel. -#: actions/pathsadminpanel.php:241 actions/pathsadminpanel.php:279 -#: actions/pathsadminpanel.php:370 actions/pathsadminpanel.php:425 +#: actions/pathsadminpanel.php:241 actions/pathsadminpanel.php:284 +#: actions/pathsadminpanel.php:375 actions/pathsadminpanel.php:430 msgid "Server" msgstr "" -#: actions/pathsadminpanel.php:242 +#. TRANS: Field title in Paths admin panel. +#: actions/pathsadminpanel.php:243 msgid "Site's server hostname." msgstr "" #. TRANS: Field label in Paths admin panel. -#: actions/pathsadminpanel.php:248 actions/pathsadminpanel.php:288 -#: actions/pathsadminpanel.php:379 actions/pathsadminpanel.php:434 +#: actions/pathsadminpanel.php:249 actions/pathsadminpanel.php:293 +#: actions/pathsadminpanel.php:384 actions/pathsadminpanel.php:439 msgid "Path" msgstr "" -#: actions/pathsadminpanel.php:249 +#. TRANS: Field title in Paths admin panel. +#: actions/pathsadminpanel.php:251 msgid "Site path." msgstr "" #. TRANS: Field label in Paths admin panel. -#: actions/pathsadminpanel.php:255 +#: actions/pathsadminpanel.php:257 msgid "Locale directory" msgstr "" -#: actions/pathsadminpanel.php:256 +#. TRANS: Field title in Paths admin panel. +#: actions/pathsadminpanel.php:259 msgid "Directory path to locales." msgstr "" #. TRANS: Checkbox label in Paths admin panel. -#: actions/pathsadminpanel.php:263 +#: actions/pathsadminpanel.php:266 msgid "Fancy URLs" msgstr "" -#: actions/pathsadminpanel.php:265 -msgid "Use fancy (more readable and memorable) URLs?" +#. TRANS: Field title in Paths admin panel. +#: actions/pathsadminpanel.php:269 +msgid "Use fancy URLs (more readable and memorable)?" msgstr "" -#: actions/pathsadminpanel.php:272 +#. TRANS: Fieldset legend in Paths admin panel. +#: actions/pathsadminpanel.php:277 +msgctxt "LEGEND" msgid "Theme" msgstr "" #. TRANS: Tooltip for field label in Paths admin panel. -#: actions/pathsadminpanel.php:281 +#: actions/pathsadminpanel.php:286 msgid "Server for themes." msgstr "" #. TRANS: Tooltip for field label in Paths admin panel. -#: actions/pathsadminpanel.php:290 +#: actions/pathsadminpanel.php:295 msgid "Web path to themes." msgstr "" #. TRANS: Field label in Paths admin panel. -#: actions/pathsadminpanel.php:297 actions/pathsadminpanel.php:388 -#: actions/pathsadminpanel.php:443 actions/pathsadminpanel.php:495 +#: actions/pathsadminpanel.php:302 actions/pathsadminpanel.php:393 +#: actions/pathsadminpanel.php:448 actions/pathsadminpanel.php:500 msgid "SSL server" msgstr "" #. TRANS: Tooltip for field label in Paths admin panel. -#: actions/pathsadminpanel.php:299 +#: actions/pathsadminpanel.php:304 msgid "SSL server for themes (default: SSL server)." msgstr "" #. TRANS: Field label in Paths admin panel. -#: actions/pathsadminpanel.php:306 actions/pathsadminpanel.php:397 -#: actions/pathsadminpanel.php:452 +#: actions/pathsadminpanel.php:311 actions/pathsadminpanel.php:402 +#: actions/pathsadminpanel.php:457 msgid "SSL path" msgstr "" #. TRANS: Tooltip for field label in Paths admin panel. -#: actions/pathsadminpanel.php:308 +#: actions/pathsadminpanel.php:313 msgid "SSL path to themes (default: /theme/)." msgstr "" #. TRANS: Field label in Paths admin panel. -#: actions/pathsadminpanel.php:315 actions/pathsadminpanel.php:406 -#: actions/pathsadminpanel.php:461 +#: actions/pathsadminpanel.php:320 actions/pathsadminpanel.php:411 +#: actions/pathsadminpanel.php:466 msgid "Directory" msgstr "" #. TRANS: Tooltip for field label in Paths admin panel. -#: actions/pathsadminpanel.php:317 +#: actions/pathsadminpanel.php:322 msgid "Directory where themes are located." msgstr "" #. TRANS: Fieldset legend in Paths admin panel. -#: actions/pathsadminpanel.php:326 +#: actions/pathsadminpanel.php:331 msgid "Avatars" msgstr "" #. TRANS: Field label in Paths admin panel. -#: actions/pathsadminpanel.php:333 +#: actions/pathsadminpanel.php:338 msgid "Avatar server" msgstr "" #. TRANS: Tooltip for field label in Paths admin panel. -#: actions/pathsadminpanel.php:335 +#: actions/pathsadminpanel.php:340 msgid "Server for avatars." msgstr "" #. TRANS: Field label in Paths admin panel. -#: actions/pathsadminpanel.php:342 +#: actions/pathsadminpanel.php:347 msgid "Avatar path" msgstr "" #. TRANS: Tooltip for field label in Paths admin panel. -#: actions/pathsadminpanel.php:344 +#: actions/pathsadminpanel.php:349 msgid "Web path to avatars." msgstr "" #. TRANS: Field label in Paths admin panel. -#: actions/pathsadminpanel.php:351 +#: actions/pathsadminpanel.php:356 msgid "Avatar directory" msgstr "" #. TRANS: Tooltip for field label in Paths admin panel. -#: actions/pathsadminpanel.php:353 +#: actions/pathsadminpanel.php:358 msgid "Directory where avatars are located." msgstr "" #. TRANS: Fieldset legend in Paths admin panel. -#: actions/pathsadminpanel.php:364 +#: actions/pathsadminpanel.php:369 msgid "Backgrounds" msgstr "" #. TRANS: Tooltip for field label in Paths admin panel. -#: actions/pathsadminpanel.php:372 +#: actions/pathsadminpanel.php:377 msgid "Server for backgrounds." msgstr "" #. TRANS: Tooltip for field label in Paths admin panel. -#: actions/pathsadminpanel.php:381 +#: actions/pathsadminpanel.php:386 msgid "Web path to backgrounds." msgstr "" #. TRANS: Tooltip for field label in Paths admin panel. -#: actions/pathsadminpanel.php:390 +#: actions/pathsadminpanel.php:395 msgid "Server for backgrounds on SSL pages." msgstr "" #. TRANS: Tooltip for field label in Paths admin panel. -#: actions/pathsadminpanel.php:399 +#: actions/pathsadminpanel.php:404 msgid "Web path to backgrounds on SSL pages." msgstr "" #. TRANS: Tooltip for field label in Paths admin panel. -#: actions/pathsadminpanel.php:408 +#: actions/pathsadminpanel.php:413 msgid "Directory where backgrounds are located." msgstr "" #. TRANS: Fieldset legens in Paths admin panel. -#: actions/pathsadminpanel.php:419 +#: actions/pathsadminpanel.php:424 msgid "Attachments" msgstr "" #. TRANS: Tooltip for field label in Paths admin panel. -#: actions/pathsadminpanel.php:427 +#: actions/pathsadminpanel.php:432 msgid "Server for attachments." msgstr "" #. TRANS: Tooltip for field label in Paths admin panel. -#: actions/pathsadminpanel.php:436 +#: actions/pathsadminpanel.php:441 msgid "Web path to attachments." msgstr "" #. TRANS: Tooltip for field label in Paths admin panel. -#: actions/pathsadminpanel.php:445 +#: actions/pathsadminpanel.php:450 msgid "Server for attachments on SSL pages." msgstr "" #. TRANS: Tooltip for field label in Paths admin panel. -#: actions/pathsadminpanel.php:454 +#: actions/pathsadminpanel.php:459 msgid "Web path to attachments on SSL pages." msgstr "" #. TRANS: Tooltip for field label in Paths admin panel. -#: actions/pathsadminpanel.php:463 +#: actions/pathsadminpanel.php:468 msgid "Directory where attachments are located." msgstr "" #. TRANS: Fieldset legend in Paths admin panel. -#: actions/pathsadminpanel.php:472 +#: actions/pathsadminpanel.php:477 +msgctxt "LEGEND" msgid "SSL" msgstr "" #. TRANS: Drop down option in Paths admin panel (option for "When to use SSL"). -#: actions/pathsadminpanel.php:477 actions/snapshotadminpanel.php:202 +#: actions/pathsadminpanel.php:482 actions/snapshotadminpanel.php:202 msgid "Never" msgstr "" #. TRANS: Drop down option in Paths admin panel (option for "When to use SSL"). -#: actions/pathsadminpanel.php:479 +#: actions/pathsadminpanel.php:484 msgid "Sometimes" msgstr "" #. TRANS: Drop down option in Paths admin panel (option for "When to use SSL"). -#: actions/pathsadminpanel.php:481 +#: actions/pathsadminpanel.php:486 msgid "Always" msgstr "" -#: actions/pathsadminpanel.php:485 +#: actions/pathsadminpanel.php:490 msgid "Use SSL" msgstr "" #. TRANS: Tooltip for field label in Paths admin panel. -#: actions/pathsadminpanel.php:487 +#: actions/pathsadminpanel.php:492 msgid "When to use SSL." msgstr "" #. TRANS: Tooltip for field label in Paths admin panel. -#: actions/pathsadminpanel.php:497 +#: actions/pathsadminpanel.php:502 msgid "Server to direct SSL requests to." msgstr "" #. TRANS: Button title text to store form data in the Paths admin panel. -#: actions/pathsadminpanel.php:514 +#: actions/pathsadminpanel.php:519 msgid "Save paths" msgstr "" @@ -4357,51 +4391,58 @@ msgstr "" msgid "People search" msgstr "" -#: actions/peopletag.php:68 +#. TRANS: Client error displayed when trying to tag a profile with an invalid tag. +#. TRANS: %s is the invalid tag. +#: actions/peopletag.php:69 #, php-format msgid "Not a valid people tag: %s." msgstr "" -#: actions/peopletag.php:142 +#. TRANS: Page title for users with a certain self-tag. +#. TRANS: %1$s is the tag, %2$s is the page number. +#: actions/peopletag.php:145 #, php-format msgid "Users self-tagged with %1$s - page %2$d" msgstr "" #. TRANS: Page title for AJAX form return when a disabling a plugin. -#: actions/plugindisable.php:69 +#: actions/plugindisable.php:68 msgctxt "plugin" msgid "Disabled" msgstr "" +#. TRANS: Client error displayed when trying to use another method than POST. +#. TRANS: Do not translate POST. #. TRANS: Client error displayed trying to perform any request method other than POST. #. TRANS: Do not translate POST. #: actions/pluginenable.php:78 actions/subscribe.php:77 msgid "This action only accepts POST requests." msgstr "" -#: actions/pluginenable.php:102 +#. TRANS: Client error displayed when trying to enable or disable a plugin without access rights. +#: actions/pluginenable.php:104 msgid "You cannot administer plugins." msgstr "" -#: actions/pluginenable.php:109 +#. TRANS: Client error displayed when trying to enable or disable a non-existing plugin. +#: actions/pluginenable.php:112 msgid "No such plugin." msgstr "" #. TRANS: Page title for AJAX form return when enabling a plugin. -#: actions/pluginenable.php:159 +#: actions/pluginenable.php:161 msgctxt "plugin" msgid "Enabled" msgstr "" #. TRANS: Tab and title for plugins admin panel. -#. TRANS: Menu item for site administration -#: actions/pluginsadminpanel.php:56 actions/version.php:191 -#: lib/adminpanelnav.php:140 +#: actions/pluginsadminpanel.php:53 +msgctxt "TITLE" msgid "Plugins" msgstr "" #. TRANS: Instructions at top of plugin admin page. -#: actions/pluginsadminpanel.php:68 +#: actions/pluginsadminpanel.php:64 msgid "" "Additional plugins can be enabled and configured manually. See the online plugin documentation for more " @@ -4409,22 +4450,26 @@ msgid "" msgstr "" #. TRANS: Admin form section header -#: actions/pluginsadminpanel.php:84 +#: actions/pluginsadminpanel.php:79 msgid "Default plugins" msgstr "" -#: actions/pluginsadminpanel.php:106 +#. TRANS: Text displayed on plugin admin page when no plugin are enabled. +#: actions/pluginsadminpanel.php:102 msgid "" "All default plugins have been disabled from the site's configuration file." msgstr "" -#: actions/postnotice.php:95 +#. TRANS: Client error displayed if the notice posted has too many characters. +#: actions/postnotice.php:96 msgid "Invalid notice content." msgstr "" -#: actions/postnotice.php:101 +#. TRANS: Exception thrown if a notice's license is not compatible with the StatusNet site license. +#. TRANS: %1$s is the notice license, %2$s is the StatusNet site's license. +#: actions/postnotice.php:104 #, php-format -msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’." +msgid "Notice license \"%1$s\" is not compatible with site license \"%2$s\"." msgstr "" #. TRANS: Page title for profile settings. @@ -4598,54 +4643,68 @@ msgstr "" msgid "Restore account" msgstr "" +#. TRANS: Client error displayed when requesting a public timeline page beyond the page limit. +#. TRANS: %s is the page limit. #: actions/public.php:83 #, php-format msgid "Beyond the page limit (%s)." msgstr "" -#: actions/public.php:92 +#. TRANS: Server error displayed when a public timeline cannot be retrieved. +#: actions/public.php:93 msgid "Could not retrieve public stream." msgstr "" -#: actions/public.php:130 +#. TRANS: Title for all public timeline pages but the first. +#. TRANS: %d is the page number. +#: actions/public.php:131 #, php-format msgid "Public timeline, page %d" msgstr "" -#: actions/public.php:132 lib/publicgroupnav.php:65 +#. TRANS: Title for the first public timeline page. +#: actions/public.php:134 lib/publicgroupnav.php:65 msgid "Public timeline" msgstr "" -#: actions/public.php:160 +#. TRANS: Link description for public timeline feed. +#: actions/public.php:162 msgid "Public Stream Feed (RSS 1.0)" msgstr "" -#: actions/public.php:164 +#. TRANS: Link description for public timeline feed. +#: actions/public.php:167 msgid "Public Stream Feed (RSS 2.0)" msgstr "" -#: actions/public.php:168 +#. TRANS: Link description for public timeline feed. +#: actions/public.php:172 msgid "Public Stream Feed (Atom)" msgstr "" -#: actions/public.php:173 +#. TRANS: Text displayed for public feed when there are no public notices. +#: actions/public.php:178 #, php-format msgid "" "This is the public timeline for %%site.name%% but no one has posted anything " "yet." msgstr "" -#: actions/public.php:176 +#. TRANS: Additional text displayed for public feed when there are no public notices for a logged in user. +#: actions/public.php:182 msgid "Be the first to post!" msgstr "" -#: actions/public.php:180 +#. TRANS: Additional text displayed for public feed when there are no public notices for a not logged in user. +#: actions/public.php:187 #, php-format msgid "" "Why not [register an account](%%action.register%%) and be the first to post!" msgstr "" -#: actions/public.php:227 +#. TRANS: Message for not logged in users at an invite-only site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. +#: actions/public.php:235 #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -4654,7 +4713,9 @@ msgid "" "friends, family, and colleagues! ([Read more](%%doc.help%%))" msgstr "" -#: actions/public.php:232 +#. TRANS: Message for not logged in users at a closed site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. +#: actions/public.php:242 #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -4790,7 +4851,7 @@ msgstr "" #. TRANS: Title for password recovery page in email sent mode. #. TRANS: Subject for password recovery e-mail. -#: actions/recoverpassword.php:227 actions/recoverpassword.php:366 +#: actions/recoverpassword.php:227 actions/recoverpassword.php:370 msgid "Password recovery requested" msgstr "" @@ -4822,49 +4883,49 @@ msgid "Enter a nickname or email address." msgstr "" #. TRANS: Information on password recovery form if no known username or e-mail address was specified. -#: actions/recoverpassword.php:309 +#: actions/recoverpassword.php:313 msgid "No user with that email address or username." msgstr "" #. TRANS: Client error displayed on password recovery form if a user does not have a registered e-mail address. -#: actions/recoverpassword.php:327 +#: actions/recoverpassword.php:331 msgid "No registered email address for that user." msgstr "" #. TRANS: Server error displayed if e-mail address confirmation fails in the database on the password recovery form. -#: actions/recoverpassword.php:342 +#: actions/recoverpassword.php:346 msgid "Error saving address confirmation." msgstr "" #. TRANS: User notification after an e-mail with instructions was sent from the password recovery form. -#: actions/recoverpassword.php:370 +#: actions/recoverpassword.php:374 msgid "" "Instructions for recovering your password have been sent to the email " "address registered to your account." msgstr "" #. TRANS: Client error displayed when trying to reset as password without providing a user. -#: actions/recoverpassword.php:391 +#: actions/recoverpassword.php:395 msgid "Unexpected password reset." msgstr "" #. TRANS: Reset password form validation error message. -#: actions/recoverpassword.php:400 +#: actions/recoverpassword.php:404 msgid "Password must be 6 characters or more." msgstr "" #. TRANS: Reset password form validation error message. -#: actions/recoverpassword.php:405 +#: actions/recoverpassword.php:409 msgid "Password and confirmation do not match." msgstr "" #. TRANS: Server error displayed when something does wrong with the user object during password reset. -#: actions/recoverpassword.php:426 actions/register.php:241 +#: actions/recoverpassword.php:430 actions/register.php:241 msgid "Error setting user." msgstr "" #. TRANS: Success message for user after password reset. -#: actions/recoverpassword.php:434 +#: actions/recoverpassword.php:438 msgid "New password successfully saved. You are now logged in." msgstr "" @@ -4916,7 +4977,7 @@ msgid "" msgstr "" #: actions/register.php:424 actions/register.php:428 -#: actions/siteadminpanel.php:238 lib/settingsnav.php:79 +#: actions/siteadminpanel.php:238 lib/settingsnav.php:98 msgid "Email" msgstr "" @@ -5056,7 +5117,7 @@ msgstr "" msgid "You already repeated that notice." msgstr "" -#: actions/repeat.php:112 lib/noticelist.php:697 +#: actions/repeat.php:112 lib/noticelistitem.php:602 msgid "Repeated" msgstr "" @@ -5225,7 +5286,7 @@ msgstr "" #. TRANS: Menu item for site administration #: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170 -#: lib/adminpanelnav.php:108 +#: lib/adminpanelnav.php:126 msgid "Sessions" msgstr "" @@ -5283,7 +5344,7 @@ msgstr "" #. TRANS: Title of form for deleting a user. #: actions/showapplication.php:228 lib/deletegroupform.php:121 -#: lib/deleteuserform.php:64 lib/noticelist.php:678 +#: lib/deleteuserform.php:64 lib/noticelistitem.php:583 msgid "Delete" msgstr "" @@ -5902,7 +5963,7 @@ msgstr "" #. TRANS: Menu item for site administration #: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196 -#: lib/adminpanelnav.php:124 +#: lib/adminpanelnav.php:142 msgid "Snapshots" msgstr "" @@ -6082,12 +6143,12 @@ msgid "Subscription feed for %s (Atom)" msgstr "" #. TRANS: Checkbox label for enabling Jabber messages for a profile in a subscriptions list. -#: actions/subscriptions.php:241 lib/settingsnav.php:97 +#: actions/subscriptions.php:241 lib/settingsnav.php:116 msgid "IM" msgstr "" #. TRANS: Checkbox label for enabling SMS messages for a profile in a subscriptions list. -#: actions/subscriptions.php:256 lib/settingsnav.php:104 +#: actions/subscriptions.php:256 lib/settingsnav.php:123 msgid "SMS" msgstr "" @@ -6279,7 +6340,7 @@ msgid "Invalid default subscripton: \"%1$s\" is not a user." msgstr "" #: actions/useradminpanel.php:215 lib/personalgroupnav.php:76 -#: lib/settingsnav.php:64 lib/subgroupnav.php:79 +#: lib/settingsnav.php:83 lib/subgroupnav.php:79 msgid "Profile" msgstr "" @@ -6540,7 +6601,7 @@ msgid "Contributors" msgstr "" #. TRANS: Menu item for site administration -#: actions/version.php:167 lib/adminpanelnav.php:132 +#: actions/version.php:167 lib/adminpanelnav.php:150 msgid "License" msgstr "" @@ -6567,6 +6628,11 @@ msgid "" "along with this program. If not, see %s." msgstr "" +#. TRANS: Menu item for site administration +#: actions/version.php:191 lib/adminpanelnav.php:158 +msgid "Plugins" +msgstr "" + #. TRANS: Form input field label for application name. #: actions/version.php:197 lib/applicationeditform.php:190 msgid "Name" @@ -6939,23 +7005,23 @@ msgid "Untitled page" msgstr "" #. TRANS: Localized tooltip for '...' expansion button on overlong remote messages. -#: lib/action.php:331 +#: lib/action.php:338 msgctxt "TOOLTIP" msgid "Show more" msgstr "" #. TRANS: Inline reply form submit button: submits a reply comment. -#: lib/action.php:334 +#: lib/action.php:341 msgctxt "BUTTON" msgid "Reply" msgstr "" #. TRANS: Placeholder text for inline reply form. Clicking in this box will turn it into a mini notice form. -#: lib/action.php:337 +#: lib/action.php:344 msgid "Write a reply..." msgstr "" -#: lib/action.php:583 +#: lib/action.php:590 msgid "Status" msgstr "" @@ -6963,7 +7029,7 @@ msgstr "" #. TRANS: Text between [] is a link description, text between () is the link itself. #. TRANS: Make sure there is no whitespace between "]" and "(". #. TRANS: "%%site.broughtby%%" is the value of the variable site.broughtby -#: lib/action.php:918 +#: lib/action.php:939 #, php-format msgid "" "**%%site.name%%** is a microblogging service brought to you by [%%site." @@ -6971,7 +7037,7 @@ msgid "" msgstr "" #. TRANS: First sentence of the StatusNet site license. Used if 'broughtby' is not set. -#: lib/action.php:921 +#: lib/action.php:942 #, php-format msgid "**%%site.name%%** is a microblogging service." msgstr "" @@ -6980,7 +7046,7 @@ msgstr "" #. TRANS: Make sure there is no whitespace between "]" and "(". #. TRANS: Text between [] is a link description, text between () is the link itself. #. TRANS: %s is the version of StatusNet that is being used. -#: lib/action.php:928 +#: lib/action.php:949 #, php-format msgid "" "It runs the [StatusNet](http://status.net/) microblogging software, version %" @@ -6990,39 +7056,39 @@ msgstr "" #. TRANS: Content license displayed when license is set to 'private'. #. TRANS: %1$s is the site name. -#: lib/action.php:946 +#: lib/action.php:967 #, php-format msgid "Content and data of %1$s are private and confidential." msgstr "" #. TRANS: Content license displayed when license is set to 'allrightsreserved'. #. TRANS: %1$s is the copyright owner. -#: lib/action.php:953 +#: lib/action.php:974 #, php-format msgid "Content and data copyright by %1$s. All rights reserved." msgstr "" #. TRANS: Content license displayed when license is set to 'allrightsreserved' and no owner is set. -#: lib/action.php:957 +#: lib/action.php:978 msgid "Content and data copyright by contributors. All rights reserved." msgstr "" #. TRANS: license message in footer. #. TRANS: %1$s is the site name, %2$s is a link to the license URL, with a licence name set in configuration. -#: lib/action.php:989 +#: lib/action.php:1010 #, php-format msgid "All %1$s content and data are available under the %2$s license." msgstr "" #. TRANS: Pagination message to go to a page displaying information more in the #. TRANS: present than the currently displayed information. -#: lib/action.php:1332 +#: lib/action.php:1353 msgid "After" msgstr "" #. TRANS: Pagination message to go to a page displaying information more in the #. TRANS: past than the currently displayed information. -#: lib/action.php:1342 +#: lib/action.php:1363 msgid "Before" msgstr "" @@ -7144,76 +7210,82 @@ msgstr "" msgid "Unable to delete design setting." msgstr "" +#: lib/adminpanelnav.php:65 lib/adminpanelnav.php:69 +#: lib/defaultlocalnav.php:58 lib/personalgroupnav.php:71 +#: lib/settingsnav.php:66 lib/settingsnav.php:70 +msgid "Home" +msgstr "" + #. TRANS: Menu item title/tooltip -#: lib/adminpanelnav.php:66 +#: lib/adminpanelnav.php:84 msgid "Basic site configuration" msgstr "" #. TRANS: Menu item for site administration -#: lib/adminpanelnav.php:68 +#: lib/adminpanelnav.php:86 msgctxt "MENU" msgid "Site" msgstr "" #. TRANS: Menu item title/tooltip -#: lib/adminpanelnav.php:74 +#: lib/adminpanelnav.php:92 msgid "Design configuration" msgstr "" #. TRANS: Menu item for site administration #. TRANS: Menu item in the group navigation page. Only shown for group administrators. -#: lib/adminpanelnav.php:76 lib/groupnav.php:133 +#: lib/adminpanelnav.php:94 lib/groupnav.php:133 msgctxt "MENU" msgid "Design" msgstr "" #. TRANS: Menu item title/tooltip -#: lib/adminpanelnav.php:82 +#: lib/adminpanelnav.php:100 msgid "User configuration" msgstr "" #. TRANS: Menu item for site administration -#: lib/adminpanelnav.php:84 lib/personalgroupnav.php:88 +#: lib/adminpanelnav.php:102 lib/personalgroupnav.php:88 msgid "User" msgstr "" #. TRANS: Menu item title/tooltip -#: lib/adminpanelnav.php:90 +#: lib/adminpanelnav.php:108 msgid "Access configuration" msgstr "" #. TRANS: Menu item title/tooltip -#: lib/adminpanelnav.php:98 +#: lib/adminpanelnav.php:116 msgid "Paths configuration" msgstr "" #. TRANS: Menu item title/tooltip -#: lib/adminpanelnav.php:106 +#: lib/adminpanelnav.php:124 msgid "Sessions configuration" msgstr "" #. TRANS: Menu item title/tooltip -#: lib/adminpanelnav.php:114 +#: lib/adminpanelnav.php:132 msgid "Edit site notice" msgstr "" #. TRANS: Menu item for site administration -#: lib/adminpanelnav.php:116 +#: lib/adminpanelnav.php:134 msgid "Site notice" msgstr "" #. TRANS: Menu item title/tooltip -#: lib/adminpanelnav.php:122 +#: lib/adminpanelnav.php:140 msgid "Snapshots configuration" msgstr "" #. TRANS: Menu item title/tooltip -#: lib/adminpanelnav.php:130 +#: lib/adminpanelnav.php:148 msgid "Set site license" msgstr "" #. TRANS: Menu item title/tooltip -#: lib/adminpanelnav.php:138 +#: lib/adminpanelnav.php:156 msgid "Plugins configuration" msgstr "" @@ -7830,10 +7902,6 @@ msgstr "" msgid "Database error" msgstr "" -#: lib/defaultlocalnav.php:58 lib/personalgroupnav.php:71 -msgid "Home" -msgstr "" - #: lib/defaultlocalnav.php:62 lib/publicgroupnav.php:64 msgid "Public" msgstr "" @@ -8223,13 +8291,13 @@ msgid "Login with a username and password" msgstr "" #. TRANS: Menu item for registering with the StatusNet site. -#: lib/logingroupnav.php:72 +#: lib/logingroupnav.php:73 msgctxt "MENU" msgid "Register" msgstr "" #. TRANS: Title for menu item for registering with the StatusNet site. -#: lib/logingroupnav.php:74 +#: lib/logingroupnav.php:75 msgid "Sign up for a new account" msgstr "" @@ -8594,7 +8662,7 @@ msgstr "" msgid "Messages" msgstr "" -#: lib/messagelistitem.php:123 lib/noticelist.php:527 +#: lib/messagelistitem.php:123 lib/noticelistitem.php:432 msgid "from" msgstr "" @@ -8602,15 +8670,15 @@ msgstr "" msgid "Can't get author for activity." msgstr "" -#: lib/microappplugin.php:338 +#: lib/microappplugin.php:339 msgid "Bookmark not posted to this group." msgstr "" -#: lib/microappplugin.php:351 +#: lib/microappplugin.php:352 msgid "Object not posted to this user." msgstr "" -#: lib/microappplugin.php:355 +#: lib/microappplugin.php:356 msgid "Don't know how to handle this kind of target." msgstr "" @@ -8639,89 +8707,93 @@ msgid "What's up, %s?" msgstr "" #. TRANS: Input label in notice form for adding an attachment. -#: lib/noticeform.php:190 +#: lib/noticeform.php:191 msgid "Attach" msgstr "" #. TRANS: Title for input field to attach a file to a notice. -#: lib/noticeform.php:195 +#: lib/noticeform.php:196 msgid "Attach a file." msgstr "" #. TRANS: Field label to add location to a notice. -#: lib/noticeform.php:224 +#: lib/noticeform.php:225 msgid "Share my location" msgstr "" #. TRANS: Text to not share location for a notice in notice form. -#: lib/noticeform.php:228 +#: lib/noticeform.php:230 msgid "Do not share my location" msgstr "" #. TRANS: Timeout error text for location retrieval in notice form. -#: lib/noticeform.php:230 +#: lib/noticeform.php:232 msgid "" "Sorry, retrieving your geo location is taking longer than expected, please " "try again later" msgstr "" #. TRANS: Used in coordinates as abbreviation of north -#: lib/noticelist.php:457 +#: lib/noticelistitem.php:362 msgid "N" msgstr "" #. TRANS: Used in coordinates as abbreviation of south -#: lib/noticelist.php:459 +#: lib/noticelistitem.php:364 msgid "S" msgstr "" #. TRANS: Used in coordinates as abbreviation of east -#: lib/noticelist.php:461 +#: lib/noticelistitem.php:366 msgid "E" msgstr "" #. TRANS: Used in coordinates as abbreviation of west -#: lib/noticelist.php:463 +#: lib/noticelistitem.php:368 msgid "W" msgstr "" -#: lib/noticelist.php:465 +#: lib/noticelistitem.php:370 #, php-format msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s" msgstr "" -#: lib/noticelist.php:474 +#: lib/noticelistitem.php:379 msgid "at" msgstr "" -#: lib/noticelist.php:523 +#: lib/noticelistitem.php:428 msgid "web" msgstr "" -#: lib/noticelist.php:589 +#: lib/noticelistitem.php:494 msgid "in context" msgstr "" -#: lib/noticelist.php:624 +#: lib/noticelistitem.php:529 msgid "Repeated by" msgstr "" -#: lib/noticelist.php:651 +#: lib/noticelistitem.php:556 msgid "Reply to this notice" msgstr "" -#: lib/noticelist.php:652 +#: lib/noticelistitem.php:557 msgid "Reply" msgstr "" -#: lib/noticelist.php:678 +#: lib/noticelistitem.php:583 msgid "Delete this notice" msgstr "" -#: lib/noticelist.php:696 +#: lib/noticelistitem.php:601 msgid "Notice repeated" msgstr "" +#: lib/noticeplaceholderform.php:54 +msgid "Update your status..." +msgstr "" + #: lib/nudgeform.php:116 msgid "Nudge this user" msgstr "" @@ -8795,7 +8867,7 @@ msgctxt "plugin-description" msgid "(Plugin descriptions unavailable when disabled.)" msgstr "" -#: lib/primarynav.php:57 +#: lib/primarynav.php:57 lib/settingsnav.php:78 msgid "Settings" msgstr "" @@ -9014,47 +9086,47 @@ msgstr "" msgid "More..." msgstr "" -#: lib/settingsnav.php:65 +#: lib/settingsnav.php:84 msgid "Change your profile settings" msgstr "" -#: lib/settingsnav.php:70 +#: lib/settingsnav.php:89 msgid "Upload an avatar" msgstr "" -#: lib/settingsnav.php:75 +#: lib/settingsnav.php:94 msgid "Change your password" msgstr "" -#: lib/settingsnav.php:80 +#: lib/settingsnav.php:99 msgid "Change email handling" msgstr "" -#: lib/settingsnav.php:85 +#: lib/settingsnav.php:104 msgid "Design your profile" msgstr "" -#: lib/settingsnav.php:89 +#: lib/settingsnav.php:108 msgid "URL" msgstr "" -#: lib/settingsnav.php:90 +#: lib/settingsnav.php:109 msgid "URL shorteners" msgstr "" -#: lib/settingsnav.php:98 +#: lib/settingsnav.php:117 msgid "Updates by instant messenger (IM)" msgstr "" -#: lib/settingsnav.php:105 +#: lib/settingsnav.php:124 msgid "Updates by SMS" msgstr "" -#: lib/settingsnav.php:110 +#: lib/settingsnav.php:129 msgid "Connections" msgstr "" -#: lib/settingsnav.php:111 +#: lib/settingsnav.php:130 msgid "Authorized connected applications" msgstr "" @@ -9109,7 +9181,7 @@ msgid "None" msgstr "" #. TRANS: Server exception displayed if a theme name was invalid. -#: lib/theme.php:74 +#: lib/theme.php:77 msgid "Invalid theme name." msgstr "" diff --git a/locale/sv/LC_MESSAGES/statusnet.po b/locale/sv/LC_MESSAGES/statusnet.po index 54b5404f05..8550a1fdd8 100644 --- a/locale/sv/LC_MESSAGES/statusnet.po +++ b/locale/sv/LC_MESSAGES/statusnet.po @@ -13,17 +13,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-08 01:03+0000\n" -"PO-Revision-Date: 2011-03-08 01:05:31+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:17:27+0000\n" "Language-Team: Swedish \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83429); Translate extension (2011-03-07)\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: sv\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-06 02:16:47+0000\n" +"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -327,9 +327,9 @@ msgid "%s favorites" msgstr "%s favoriter" #. TRANS: Title for Atom feed with a user's memberships. %s is a user nickname. -#, fuzzy, php-format +#, php-format msgid "%s memberships" -msgstr "%s gruppmedlemmar" +msgstr "%s medlemskap" #. TRANS: Client error displayed when users try to block themselves. msgid "You cannot block yourself!" @@ -948,9 +948,9 @@ msgstr "%1$s uppdateringar med svar på uppdatering från %2$s / %3$s." msgid "Repeats of %s" msgstr "Upprepningar av %s" -#, fuzzy, php-format +#, php-format msgid "%1$s notices that %2$s / %3$s has repeated." -msgstr "%s (@%s) lade till din notis som en favorit" +msgstr "%1$s meddelanden som %2$s / %3$s har upprepat." #. TRANS: Title for timeline with lastest notices with a given tag. #. TRANS: %s is the tag. @@ -967,9 +967,8 @@ msgid "Updates tagged with %1$s on %2$s!" msgstr "Uppdateringar taggade med %1$s på %2$s!" #. TRANS: Client error displayed trying to add a notice to another user's timeline. -#, fuzzy msgid "Only the user can add to their own timeline." -msgstr "Bara användaren kan läsa sina egna brevlådor." +msgstr "Bara användaren kan lägga till sin egen tidslinje." #. TRANS: Client error displayed when using another format than AtomPub. msgid "Only accept AtomPub for Atom feeds." @@ -1047,7 +1046,7 @@ msgstr "Hitta innehåll i notiser" #. TRANS: Client exception thrown when trying favorite a notice without content. #, fuzzy -msgid "Unknown note." +msgid "Unknown notice." msgstr "Okänd" #. TRANS: Client exception thrown when trying favorite an already favorited notice. @@ -1079,28 +1078,24 @@ msgid "Can only handle join activities." msgstr "Hitta innehåll i notiser" #. TRANS: Client exception thrown when trying to subscribe to a non-existing group. -#, fuzzy msgid "Unknown group." -msgstr "Okänd" +msgstr "Okänd grupp." #. TRANS: Client exception thrown when trying to subscribe to an already subscribed group. -#, fuzzy msgid "Already a member." -msgstr "Alla medlemmar" +msgstr "Redan medlem." #. TRANS: Client exception thrown when trying to subscribe to group while blocked from that group. msgid "Blocked by admin." -msgstr "" +msgstr "Blockerad av admin." #. TRANS: Client exception thrown when referencing a non-existing favorite. -#, fuzzy msgid "No such favorite." -msgstr "Ingen sådan fil." +msgstr "Ingen sådan favorit." #. TRANS: Client exception thrown when trying to remove a favorite notice of another user. -#, fuzzy msgid "Cannot delete someone else's favorite." -msgstr "Kunde inte ta bort favoriten." +msgstr "Kan inte ta bort någon annans favoriter." #. TRANS: Client exception thrown when referencing a non-existing group. #. TRANS: Client error displayed when requesting a list of blocked users for a non-local group. @@ -1133,20 +1128,18 @@ msgid "No such group." msgstr "Ingen sådan grupp." #. TRANS: Client exception thrown when trying to show membership of a non-subscribed group -#, fuzzy msgid "Not a member." -msgstr "Alla medlemmar" +msgstr "Inte medlem." #. TRANS: Client exception thrown when deleting someone else's membership. -#, fuzzy msgid "Cannot delete someone else's membership." -msgstr "Kunde inte spara prenumeration." +msgstr "Kan inte ta bort någon annans medlemskap." #. TRANS: Client exception thrown when trying to display a subscription for a non-existing profile ID. #. TRANS: %d is the non-existing profile ID number. -#, fuzzy, php-format +#, php-format msgid "No such profile id: %d." -msgstr "Ingen sådan profil." +msgstr "Inget sådant profil-ID: %d." #. TRANS: Client exception thrown when trying to display a subscription for a non-subscribed profile ID. #. TRANS: %1$d is the non-existing subscriber ID number, $2$d is the ID of the profile that was not subscribed to. @@ -1481,24 +1474,22 @@ msgstr "Du kan inte ta bort användare." #. TRANS: Confirmation text for user deletion. The user has to type this exactly the same, including punctuation. msgid "I am sure." -msgstr "" +msgstr "Jag är säker." #. TRANS: Notification for user about the text that must be input to be able to delete a user account. #. TRANS: %s is the text that needs to be input. #, php-format msgid "You must write \"%s\" exactly in the box." -msgstr "" +msgstr "Du måste skriva precis \"%s\" i rutan." #. TRANS: Confirmation that a user account has been deleted. -#, fuzzy msgid "Account deleted." -msgstr "Avatar borttagen." +msgstr "Konto borttaget." #. TRANS: Page title for page on which a user account can be deleted. #. TRANS: Option in profile settings to delete the account of the currently logged in user. -#, fuzzy msgid "Delete account" -msgstr "Skapa ett konto" +msgstr "Ta bort konto" #. TRANS: Form text for user deletion form. msgid "" @@ -1633,6 +1624,7 @@ msgstr "Ta bort denna grupp" #. TRANS: Client error displayed trying to create a new direct message while not logged in. #. TRANS: Client error displayed trying to send a notice while not logged in. #. TRANS: Client error displayed trying to nudge a user without being logged in. +#. TRANS: Client error displayed when trying to enable or disable a plugin while not logged in. #. TRANS: Client error displayed trying a change a subscription while not logged in. #. TRANS: Client error displayed trying to subscribe when not logged in. #. TRANS: Client error message thrown when trying to access the admin panel while not logged in. @@ -1796,7 +1788,6 @@ msgid "Tile background image" msgstr "Upprepa bakgrundsbild" #. TRANS: Fieldset legend for theme colors. -#, fuzzy msgid "Change colors" msgstr "Byt färger" @@ -3142,6 +3133,10 @@ msgstr "Webbadress till källa krävs." msgid "Could not create application." msgstr "Kunde inte skapa applikation." +#, fuzzy +msgid "Invalid image." +msgstr "Ogiltig storlek." + #. TRANS: Title for form to create a group. msgid "New group" msgstr "Ny grupp" @@ -3425,52 +3420,77 @@ msgstr "Utkorg för %s" msgid "This is your outbox, which lists private messages you have sent." msgstr "Detta är din utkorg som innehåller privata meddelanden du har skickat." +#. TRANS: Title for page where to change password. +#, fuzzy +msgctxt "TITLE" msgid "Change password" msgstr "Byt lösenord" +#. TRANS: Instructions for page where to change password. msgid "Change your password." msgstr "Byt ditt lösenord." +#. TRANS: Fieldset legend on page where to change password. #. TRANS: Fieldset legend for password reset form. msgid "Password change" msgstr "Byte av lösenord" +#. TRANS: Field label on page where to change password. msgid "Old password" msgstr "Gammalt lösenord" +#. TRANS: Field label on page where to change password. #. TRANS: Field label for password reset form. msgid "New password" msgstr "Nytt lösenord" +#. TRANS: Field title on page where to change password. #, fuzzy msgid "6 or more characters." msgstr "Minst 6 tecken" +#. TRANS: Field label on page where to change password. In this field the new password should be typed a second time. +#, fuzzy +msgctxt "LABEL" +msgid "Confirm" +msgstr "Bekräfta" + +#. TRANS: Field title on page where to change password. #. TRANS: Ttile for field label for password reset form where the password has to be typed again. #, fuzzy msgid "Same as password above." msgstr "Samma som lösenordet ovan" +#. TRANS: Button text on page where to change password. +#, fuzzy +msgctxt "BUTTON" msgid "Change" msgstr "Ändra" +#. TRANS: Form validation error on page where to change password. msgid "Password must be 6 or more characters." msgstr "Lösenordet måste vara minst 6 tecken." msgid "Passwords don't match." msgstr "Lösenorden matchar inte." -msgid "Incorrect old password" +#. TRANS: Form validation error on page where to change password. +#, fuzzy +msgid "Incorrect old password." msgstr "Felaktigt gammalt lösenord" +#. TRANS: Form validation error on page where to change password. msgid "Error saving user; invalid." msgstr "Fel vid sparande av användare; ogiltig." +#. TRANS: Server error displayed on page where to change password when password change +#. TRANS: could not be made because of a server error. #. TRANS: Reset password form validation error message. #, fuzzy msgid "Cannot save new password." msgstr "Kan inte spara nytt lösenord." +#. TRANS: Form validation notice on page where to change password. msgid "Password saved." msgstr "Lösenord sparat." @@ -3520,6 +3540,7 @@ msgstr "Webbplats" msgid "Server" msgstr "Server" +#. TRANS: Field title in Paths admin panel. msgid "Site's server hostname." msgstr "Värdnamn för webbplatsens server." @@ -3527,6 +3548,7 @@ msgstr "Värdnamn för webbplatsens server." msgid "Path" msgstr "Sökväg" +#. TRANS: Field title in Paths admin panel. msgid "Site path." msgstr "Sökväg till webbplats." @@ -3534,6 +3556,7 @@ msgstr "Sökväg till webbplats." msgid "Locale directory" msgstr "Katalog med lokaliseringsfiler (locales)" +#. TRANS: Field title in Paths admin panel. msgid "Directory path to locales." msgstr "Katalogsökväg till lokaliseringfiler (locales)." @@ -3541,10 +3564,15 @@ msgstr "Katalogsökväg till lokaliseringfiler (locales)." msgid "Fancy URLs" msgstr "Utsmyckade URL:er" -msgid "Use fancy (more readable and memorable) URLs?" +#. TRANS: Field title in Paths admin panel. +#, fuzzy +msgid "Use fancy URLs (more readable and memorable)?" msgstr "" "Skall utsmyckade URL:er användas (mer läsbara och lättare att komma ihåg)?" +#. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "Theme" msgstr "Teman" @@ -3667,6 +3695,8 @@ msgid "Directory where attachments are located." msgstr "Katalogsökväg till lokaliseringfiler (locales)" #. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "SSL" msgstr "SSL" @@ -3711,10 +3741,14 @@ msgstr "" msgid "People search" msgstr "Personsökning" +#. TRANS: Client error displayed when trying to tag a profile with an invalid tag. +#. TRANS: %s is the invalid tag. #, php-format msgid "Not a valid people tag: %s." msgstr "Inte en giltig persontagg: %s." +#. TRANS: Page title for users with a certain self-tag. +#. TRANS: %1$s is the tag, %2$s is the page number. #, php-format msgid "Users self-tagged with %1$s - page %2$d" msgstr "Användare som taggat sig själv med %1$s - sida %2$d" @@ -3724,15 +3758,19 @@ msgctxt "plugin" msgid "Disabled" msgstr "" +#. TRANS: Client error displayed when trying to use another method than POST. +#. TRANS: Do not translate POST. #. TRANS: Client error displayed trying to perform any request method other than POST. #. TRANS: Do not translate POST. msgid "This action only accepts POST requests." msgstr "Denna åtgärd accepterar endast POST-begäran." +#. TRANS: Client error displayed when trying to enable or disable a plugin without access rights. #, fuzzy msgid "You cannot administer plugins." msgstr "Du kan inte ta bort användare." +#. TRANS: Client error displayed when trying to enable or disable a non-existing plugin. #, fuzzy msgid "No such plugin." msgstr "Ingen sådan sida" @@ -3743,7 +3781,8 @@ msgid "Enabled" msgstr "" #. TRANS: Tab and title for plugins admin panel. -#. TRANS: Menu item for site administration +#, fuzzy +msgctxt "TITLE" msgid "Plugins" msgstr "Insticksmoduler" @@ -3759,15 +3798,19 @@ msgstr "" msgid "Default plugins" msgstr "Standardspråk" +#. TRANS: Text displayed on plugin admin page when no plugin are enabled. msgid "" "All default plugins have been disabled from the site's configuration file." msgstr "" +#. TRANS: Client error displayed if the notice posted has too many characters. msgid "Invalid notice content." msgstr "Ogiltigt notisinnehåll." -#, php-format -msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’." +#. TRANS: Exception thrown if a notice's license is not compatible with the StatusNet site license. +#. TRANS: %1$s is the notice license, %2$s is the StatusNet site's license. +#, fuzzy, php-format +msgid "Notice license \"%1$s\" is not compatible with site license \"%2$s\"." msgstr "Licensen för notiser ‘%1$s’ är inte förenlig webbplatslicensen ‘%2$s’." #. TRANS: Page title for profile settings. @@ -3922,29 +3965,39 @@ msgstr "Inställningar sparade." msgid "Restore account" msgstr "Skapa ett konto" +#. TRANS: Client error displayed when requesting a public timeline page beyond the page limit. +#. TRANS: %s is the page limit. #, php-format msgid "Beyond the page limit (%s)." msgstr "Bortom sidbegränsningen (%s)." +#. TRANS: Server error displayed when a public timeline cannot be retrieved. msgid "Could not retrieve public stream." msgstr "Kunde inte hämta publik ström." +#. TRANS: Title for all public timeline pages but the first. +#. TRANS: %d is the page number. #, php-format msgid "Public timeline, page %d" msgstr "Publik tidslinje, sida %d" +#. TRANS: Title for the first public timeline page. msgid "Public timeline" msgstr "Publik tidslinje" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 1.0)" msgstr "Publikt flöde av ström (RSS 1.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 2.0)" msgstr "Publikt flöde av ström (RSS 2.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (Atom)" msgstr "Publikt flöde av ström (Atom)" +#. TRANS: Text displayed for public feed when there are no public notices. #, php-format msgid "" "This is the public timeline for %%site.name%% but no one has posted anything " @@ -3953,9 +4006,11 @@ msgstr "" "Detta är den publika tidslinjen för %%site.name%% men ingen har postat något " "än." +#. TRANS: Additional text displayed for public feed when there are no public notices for a logged in user. msgid "Be the first to post!" msgstr "Bli först att posta!" +#. TRANS: Additional text displayed for public feed when there are no public notices for a not logged in user. #, php-format msgid "" "Why not [register an account](%%action.register%%) and be the first to post!" @@ -3963,6 +4018,8 @@ msgstr "" "Varför inte [registrera ett konto](%%action.register%%) och bli först att " "posta!" +#. TRANS: Message for not logged in users at an invite-only site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -3975,6 +4032,8 @@ msgstr "" "net/). [Gå med nu](%%action.register%%) för att dela notiser om dig själv " "med vänner, familj och kollegor! ([Läs mer](%%doc.help%%))" +#. TRANS: Message for not logged in users at a closed site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -5695,6 +5754,10 @@ msgstr "" "Du bör ha fått en kopia av GNU Affero General Public License tillsammans med " "detta program. Om inte, se %s." +#. TRANS: Menu item for site administration +msgid "Plugins" +msgstr "Insticksmoduler" + #. TRANS: Form input field label for application name. msgid "Name" msgstr "Namn" @@ -6196,6 +6259,9 @@ msgstr "saveSetting() är inte implementerat." msgid "Unable to delete design setting." msgstr "Kunde inte ta bort utseendeinställning." +msgid "Home" +msgstr "Hemsida" + #. TRANS: Menu item title/tooltip msgid "Basic site configuration" msgstr "Grundläggande webbplatskonfiguration" @@ -6823,9 +6889,6 @@ msgstr "Gå till installeraren." msgid "Database error" msgstr "Databasfel" -msgid "Home" -msgstr "Hemsida" - msgid "Public" msgstr "Publikt" @@ -7628,7 +7691,6 @@ msgstr "Skicka en notis" msgid "What's up, %s?" msgstr "Vad är på gång, %s?" -#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Bifoga" @@ -7697,6 +7759,9 @@ msgstr "Ta bort denna notis" msgid "Notice repeated" msgstr "Notis upprepad" +msgid "Update your status..." +msgstr "" + msgid "Nudge this user" msgstr "Knuffa denna användare" @@ -8204,11 +8269,3 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" - -#, fuzzy -#~ msgid "Friends timeline" -#~ msgstr "%s tidslinje" - -#, fuzzy -#~ msgid "Everyone on this site" -#~ msgstr "Hitta personer på denna webbplats" diff --git a/locale/te/LC_MESSAGES/statusnet.po b/locale/te/LC_MESSAGES/statusnet.po index a79be5da68..a9718f4c01 100644 --- a/locale/te/LC_MESSAGES/statusnet.po +++ b/locale/te/LC_MESSAGES/statusnet.po @@ -10,17 +10,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-08 01:03+0000\n" -"PO-Revision-Date: 2011-03-08 01:05:32+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:17:29+0000\n" "Language-Team: Telugu \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83429); Translate extension (2011-03-07)\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: te\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-06 02:16:47+0000\n" +"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -482,7 +482,7 @@ msgstr "పూర్తి పేరు చాలా పెద్దగా ఉ #. TRANS: %d is the maximum number of characters for the description. #. TRANS: Group create form validation error. #. TRANS: %d is the maximum number of allowed characters. -#, fuzzy, php-format +#, php-format msgid "Description is too long (maximum %d character)." msgid_plural "Description is too long (maximum %d characters)." msgstr[0] "వివరణ చాలా పెద్దగా ఉంది (%d అక్షరాలు గరిష్ఠం)." @@ -493,7 +493,6 @@ msgstr[1] "వివరణ చాలా పెద్దగా ఉంది (%d #. TRANS: Group edit form validation error. #. TRANS: Group create form validation error. #. TRANS: Validation error in form for profile settings. -#, fuzzy msgid "Location is too long (maximum 255 characters)." msgstr "ప్రాంతం పేరు మరీ పెద్దగా ఉంది (255 అక్షరాలు గరిష్ఠం)." @@ -505,7 +504,7 @@ msgstr "ప్రాంతం పేరు మరీ పెద్దగా ఉ #. TRANS: %d is the maximum number of allowed aliases. #. TRANS: Group create form validation error. #. TRANS: %d is the maximum number of allowed aliases. -#, fuzzy, php-format +#, php-format msgid "Too many aliases! Maximum %d allowed." msgid_plural "Too many aliases! Maximum %d allowed." msgstr[0] "చాలా మారుపేర్లు! %d గరిష్ఠం." @@ -1030,25 +1029,24 @@ msgstr "సైటు గమనికని భద్రపరచు" #. TRANS: Client exception thrown when trying favorite a notice without content. #, fuzzy -msgid "Unknown note." +msgid "Unknown notice." msgstr "తెలియని చర్య" #. TRANS: Client exception thrown when trying favorite an already favorited notice. -#, fuzzy msgid "Already a favorite." -msgstr "ఇష్టాంశాలకు చేర్చు" +msgstr "అది ఇప్పటికే ఇష్టాంశం." #. TRANS: Title for group membership feed. #. TRANS: %s is a username. -#, fuzzy, php-format +#, php-format msgid "%s group memberships" -msgstr "%s గుంపు సభ్యులు" +msgstr "%s గుంపు సభ్యత్వాలు" #. TRANS: Subtitle for group membership feed. #. TRANS: %1$s is a username, %2$s is the StatusNet sitename. -#, fuzzy, php-format +#, php-format msgid "Groups %1$s is a member of on %2$s" -msgstr "%s సభ్యులుగా ఉన్న గుంపులు" +msgstr "%2$sలో %1$s సభ్యులుగా ఉన్న గుంపులు" #. TRANS: Client exception thrown when trying subscribe someone else to a group. #, fuzzy @@ -1062,9 +1060,8 @@ msgid "Can only handle join activities." msgstr "సైటు గమనికని భద్రపరచు" #. TRANS: Client exception thrown when trying to subscribe to a non-existing group. -#, fuzzy msgid "Unknown group." -msgstr "తెలియని చర్య" +msgstr "గుర్తుతెలియని గుంపు." #. TRANS: Client exception thrown when trying to subscribe to an already subscribed group. msgid "Already a member." @@ -1072,17 +1069,15 @@ msgstr "ఇప్పటికే సభ్యులు." #. TRANS: Client exception thrown when trying to subscribe to group while blocked from that group. msgid "Blocked by admin." -msgstr "" +msgstr "నిర్వాహకులు నిరోధించారు." #. TRANS: Client exception thrown when referencing a non-existing favorite. -#, fuzzy msgid "No such favorite." -msgstr "అటువంటి ఫైలు లేదు." +msgstr "అటువంటి ఇష్టాంశం లేదు." #. TRANS: Client exception thrown when trying to remove a favorite notice of another user. -#, fuzzy msgid "Cannot delete someone else's favorite." -msgstr "ఇష్టాంశాన్ని తొలగించలేకపోయాం." +msgstr "మరొకరి ఇష్టాంశాన్ని తొలగించలేరు." #. TRANS: Client exception thrown when referencing a non-existing group. #. TRANS: Client error displayed when requesting a list of blocked users for a non-local group. @@ -1142,9 +1137,9 @@ msgstr "కొత్త చందాని చేర్చలేకపోయా #. TRANS: Subtitle for Atom subscription feed. #. TRANS: %1$s is a user nickname, %s$s is the StatusNet sitename. -#, fuzzy, php-format +#, php-format msgid "People %1$s has subscribed to on %2$s" -msgstr "%sకి చందాచేరిన వ్యక్తులు" +msgstr "%2$sలో %1$s చందాచేరిన వ్యక్తులు" #. TRANS: Client error displayed when not using the follow verb. msgid "Can only handle Follow activities." @@ -1333,9 +1328,8 @@ msgid "No" msgstr "కాదు" #. TRANS: Submit button title for 'No' when blocking a user. -#, fuzzy msgid "Do not block this user." -msgstr "ఈ వాడుకరిని నిరోధించకు" +msgstr "ఈ వాడుకరిని నిరోధించవద్దు." #. TRANS: Button label on the user block form. #. TRANS: Button label on the delete application form. @@ -1474,9 +1468,8 @@ msgstr "ఖాతాని తొలగించాం." #. TRANS: Page title for page on which a user account can be deleted. #. TRANS: Option in profile settings to delete the account of the currently logged in user. -#, fuzzy msgid "Delete account" -msgstr "ఖాతాని సృష్టించుకోండి" +msgstr "ఖాతా తొలగింపు" #. TRANS: Form text for user deletion form. msgid "" @@ -1539,14 +1532,12 @@ msgstr "" "వాడుకరుల అనుసంధానాలతో సహా, డాటాబేసు నుండి తొలగిస్తుంది." #. TRANS: Submit button title for 'No' when deleting an application. -#, fuzzy msgid "Do not delete this application." -msgstr "ఈ ఉపకరణాన్ని తొలగించకు" +msgstr "ఈ ఉపకరణాన్ని తొలగించవద్దు." #. TRANS: Submit button title for 'Yes' when deleting an application. -#, fuzzy msgid "Delete this application." -msgstr "ఈ ఉపకరణాన్ని తొలగించు" +msgstr "ఈ ఉపకరణాన్ని తొలగించు." #. TRANS: Client error when trying to delete group while not logged in. msgid "You must be logged in to delete a group." @@ -1590,14 +1581,12 @@ msgstr "" "వెనక్కి తేలేకుండా." #. TRANS: Submit button title for 'No' when deleting a group. -#, fuzzy msgid "Do not delete this group." -msgstr "ఈ గుంపును తొలగించకు" +msgstr "ఈ గుంపును తొలగించవద్దు." #. TRANS: Submit button title for 'Yes' when deleting a group. -#, fuzzy msgid "Delete this group." -msgstr "ఈ గుంపుని తొలగించు" +msgstr "ఈ గుంపుని తొలగించు." #. TRANS: Error message displayed trying to delete a notice while not logged in. #. TRANS: Client error displayed when trying to remove a favorite while not logged in. @@ -1609,6 +1598,7 @@ msgstr "ఈ గుంపుని తొలగించు" #. TRANS: Client error displayed trying to create a new direct message while not logged in. #. TRANS: Client error displayed trying to send a notice while not logged in. #. TRANS: Client error displayed trying to nudge a user without being logged in. +#. TRANS: Client error displayed when trying to enable or disable a plugin while not logged in. #. TRANS: Client error displayed trying a change a subscription while not logged in. #. TRANS: Client error displayed trying to subscribe when not logged in. #. TRANS: Client error message thrown when trying to access the admin panel while not logged in. @@ -1632,14 +1622,12 @@ msgid "Are you sure you want to delete this notice?" msgstr "మీరు నిజంగానే ఈ నోటీసుని తొలగించాలనుకుంటున్నారా?" #. TRANS: Submit button title for 'No' when deleting a notice. -#, fuzzy msgid "Do not delete this notice." -msgstr "ఈ నోటీసుని తొలగించకు" +msgstr "ఈ నోటీసుని తొలగించవద్దు." #. TRANS: Submit button title for 'Yes' when deleting a notice. -#, fuzzy msgid "Delete this notice." -msgstr "ఈ నోటీసుని తొలగించు" +msgstr "ఈ నోటీసుని తొలగించు." #. TRANS: Client error displayed when trying to delete a user without having the right to delete users. msgid "You cannot delete users." @@ -1650,10 +1638,9 @@ msgid "You can only delete local users." msgstr "మీరు స్థానిక వాడుకరులను మాత్రమే తొలగించగలరు." #. TRANS: Title of delete user page. -#, fuzzy msgctxt "TITLE" msgid "Delete user" -msgstr "వాడుకరిని తొలగించు" +msgstr "వాడుకరి తొలగింపు" #. TRANS: Fieldset legend on delete user page. msgid "Delete user" @@ -1722,9 +1709,8 @@ msgid "Theme for the site." msgstr "సైటుకి అలంకారం." #. TRANS: Field label for uploading a cutom theme. -#, fuzzy msgid "Custom theme" -msgstr "సైటు అలంకారం" +msgstr "అభిమత అలంకారం" #. TRANS: Form instructions for uploading a cutom StatusNet theme. msgid "You can upload a custom StatusNet theme as a .ZIP archive." @@ -1831,9 +1817,9 @@ msgstr "ఇష్టాంశాలకు చేర్చు" #. TRANS: Client exception thrown when requesting a document from the documentation that does not exist. #. TRANS: %s is the non-existing document. -#, fuzzy, php-format +#, php-format msgid "No such document \"%s\"." -msgstr "అటువంటి జోడింపు లేదు." +msgstr "\"%s\" అనే పత్రం లేదు." #. TRANS: Title for "Edit application" form. #. TRANS: Form legend. @@ -1859,7 +1845,6 @@ msgstr "పేరు తప్పనిసరి." #. TRANS: Validation error shown when providing too long a name in the "Edit application" form. #. TRANS: Validation error shown when providing too long a name in the "New application" form. -#, fuzzy msgid "Name is too long (maximum 255 characters)." msgstr "పేరు చాలా పెద్దగా ఉంది (గరిష్ఠంగా 255 అక్షరాలు)." @@ -1889,7 +1874,6 @@ msgid "Organization is required." msgstr "సంస్థ తప్పనిసరి." #. TRANS: Validation error shown when providing too long an arganisation name in the "Edit application" form. -#, fuzzy msgid "Organization is too long (maximum 255 characters)." msgstr "సంస్థ పేరు మరీ పెద్దగా ఉంది (255 అక్షరాలు గరిష్ఠం)." @@ -2344,9 +2328,8 @@ msgstr "" "తొలగిస్తాం, ఇక భవిష్యత్తులో వారు గుంపులో ప్రచురించలేరు, మరియు గుంపుకి చందాచేరలేరు." #. TRANS: Submit button title for 'No' when blocking a user from a group. -#, fuzzy msgid "Do not block this user from this group." -msgstr "ఈ వాడుకరిని ఈ గుంపు నుండి నిరోధించకు" +msgstr "ఈ వాడుకరిని ఈ గుంపు నుండి నిరోధించవద్దు." #. TRANS: Submit button title for 'Yes' when blocking a user from a group. msgid "Block this user from this group." @@ -2481,7 +2464,7 @@ msgstr "గుంపులు, పుట %d" #. TRANS: Page notice of group list. %%%%site.name%%%% is the StatusNet site name, #. TRANS: %%%%action.groupsearch%%%% and %%%%action.newgroup%%%% are URLs. Do not change them. #. TRANS: This message contains Markdown links in the form [link text](link). -#, fuzzy, php-format +#, php-format msgid "" "%%%%site.name%%%% groups let you find and talk with people of similar " "interests. After you join a group you can send messages to all other members " @@ -2491,8 +2474,8 @@ msgid "" msgstr "" "ఒకే రకమైన ఆసక్తులు ఉన్న వ్యక్తులు కలుసుకోడానికి మరియు మాట్లాడుకోడానికి %%%%site.name%%%% " "గుంపులు వీలుకల్పిస్తాయి. ఒక గుంపులో చేరిన తర్వాత మీరు \"!groupname\" అన్న సంకేతం ద్వారా ఆ " -"గుంపు లోని సభ్యులందరికీ సందేశాలని పంపించవచ్చు. మీకు నచ్చిన గుంపు కనబడలేదా? [దాని కోసం వెతకండి](%%" -"%%action.groupsearch%%%%) లేదా [మీరే కొత్తది సృష్టించండి!](%%%%action.newgroup%%%%)" +"గుంపు లోని సభ్యులందరికీ సందేశాలను పంపించవచ్చు. మీకు నచ్చిన గుంపు కనబడలేదా? [దాని కోసం వెతకండి](%" +"%%%action.groupsearch%%%%) లేదా [మీరే కొత్తది సృష్టించండి!](%%%%action.newgroup%%%%)" #. TRANS: Link to create a new group on the group list page. msgid "Create a new group" @@ -2940,9 +2923,8 @@ msgid "Type" msgstr "రకం" #. TRANS: Dropdown field instructions in the license admin panel. -#, fuzzy msgid "Select a license." -msgstr "లైసెన్సును ఎంచుకోండి" +msgstr "లైసెన్సును ఎంచుకోండి." #. TRANS: Form legend in the license admin panel. msgid "License details" @@ -3016,7 +2998,6 @@ msgid "Automatically login in the future; not for shared computers!" msgstr "భవిష్యత్తులో ఆటోమెటిగ్గా లోనికి ప్రవేశించు; బయటి కంప్యూర్ల కొరకు కాదు!" #. TRANS: Button text for log in on login page. -#, fuzzy msgctxt "BUTTON" msgid "Login" msgstr "ప్రవేశించండి" @@ -3092,14 +3073,17 @@ msgstr "పేరు తప్పనిసరి." msgid "Could not create application." msgstr "ఉపకరణాన్ని సృష్టించలేకపోయాం." +#, fuzzy +msgid "Invalid image." +msgstr "తప్పుడు పరిమాణం." + #. TRANS: Title for form to create a group. msgid "New group" msgstr "కొత్త గుంపు" #. TRANS: Client exception thrown when a user tries to create a group while banned. -#, fuzzy msgid "You are not allowed to create groups on this site." -msgstr "ఈ గుంపును తొలగించడానికి మీకు అనుమతి లేదు." +msgstr "ఈ సైటులో గుంపులను సృష్టించడానికి మీకు అనుమతి లేదు." #. TRANS: Form instructions for group create form. msgid "Use this form to create a new group." @@ -3374,51 +3358,74 @@ msgstr "%sకి వచ్చినవి" msgid "This is your outbox, which lists private messages you have sent." msgstr "ఇవి మీరు పంపివున్న అంతరంగిక సందేశాలు." +#. TRANS: Title for page where to change password. +#, fuzzy +msgctxt "TITLE" msgid "Change password" msgstr "సంకేతపదం మార్చుకోండి" +#. TRANS: Instructions for page where to change password. msgid "Change your password." msgstr "మీ సంకేతపదం మార్చుకోండి." +#. TRANS: Fieldset legend on page where to change password. #. TRANS: Fieldset legend for password reset form. msgid "Password change" msgstr "సంకేతపదం మార్పు" +#. TRANS: Field label on page where to change password. msgid "Old password" msgstr "పాత సంకేతపదం" +#. TRANS: Field label on page where to change password. #. TRANS: Field label for password reset form. msgid "New password" msgstr "కొత్త సంకేతపదం" +#. TRANS: Field title on page where to change password. msgid "6 or more characters." msgstr "6 లేదా అంతకంటే ఎక్కువ అక్షరాలు." -#. TRANS: Ttile for field label for password reset form where the password has to be typed again. +#. TRANS: Field label on page where to change password. In this field the new password should be typed a second time. #, fuzzy -msgid "Same as password above." -msgstr "పై సంకేతపదం వలెనే" +msgctxt "LABEL" +msgid "Confirm" +msgstr "నిర్థారించు" +#. TRANS: Field title on page where to change password. +#. TRANS: Ttile for field label for password reset form where the password has to be typed again. +msgid "Same as password above." +msgstr "పై సంకేతపదం వలెనే." + +#. TRANS: Button text on page where to change password. +#, fuzzy +msgctxt "BUTTON" msgid "Change" msgstr "మార్చు" +#. TRANS: Form validation error on page where to change password. msgid "Password must be 6 or more characters." msgstr "సంకేతపదం తప్పనిసరిగా 6 లేదా అంతకంటే ఎక్కువ అక్షరాలుండాలి." msgid "Passwords don't match." msgstr "సంకేతపదాలు సరిపోలలేదు." -msgid "Incorrect old password" +#. TRANS: Form validation error on page where to change password. +#, fuzzy +msgid "Incorrect old password." msgstr "పాత సంకేతపదం తప్పు" +#. TRANS: Form validation error on page where to change password. msgid "Error saving user; invalid." msgstr "వాడుకరిని భద్రపరచడంలో పొరపాటు: సరికాదు." +#. TRANS: Server error displayed on page where to change password when password change +#. TRANS: could not be made because of a server error. #. TRANS: Reset password form validation error message. -#, fuzzy msgid "Cannot save new password." -msgstr "కొత్త సంకేతపదాన్ని భద్రపరచలేము." +msgstr "కొత్త సంకేతపదాన్ని భద్రపరచలేకున్నాం." +#. TRANS: Form validation notice on page where to change password. msgid "Password saved." msgstr "సంకేతపదం భద్రమయ్యింది." @@ -3469,6 +3476,7 @@ msgstr "సైటు" msgid "Server" msgstr "సేవకి" +#. TRANS: Field title in Paths admin panel. msgid "Site's server hostname." msgstr "" @@ -3476,6 +3484,7 @@ msgstr "" msgid "Path" msgstr "త్రోవ" +#. TRANS: Field title in Paths admin panel. #, fuzzy msgid "Site path." msgstr "సైటు అలంకారం" @@ -3485,6 +3494,7 @@ msgstr "సైటు అలంకారం" msgid "Locale directory" msgstr "అలంకార సంచయం" +#. TRANS: Field title in Paths admin panel. msgid "Directory path to locales." msgstr "" @@ -3492,9 +3502,13 @@ msgstr "" msgid "Fancy URLs" msgstr "" -msgid "Use fancy (more readable and memorable) URLs?" +#. TRANS: Field title in Paths admin panel. +msgid "Use fancy URLs (more readable and memorable)?" msgstr "" +#. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "Theme" msgstr "అలంకారం" @@ -3618,6 +3632,7 @@ msgstr "" #. TRANS: Fieldset legend in Paths admin panel. #, fuzzy +msgctxt "LEGEND" msgid "SSL" msgstr "SSLని ఉపయోగించు" @@ -3664,10 +3679,14 @@ msgstr "" msgid "People search" msgstr "వ్యక్తుల అన్వేషణ" +#. TRANS: Client error displayed when trying to tag a profile with an invalid tag. +#. TRANS: %s is the invalid tag. #, fuzzy, php-format msgid "Not a valid people tag: %s." msgstr "సరైన ఈమెయిల్ చిరునామా కాదు:" +#. TRANS: Page title for users with a certain self-tag. +#. TRANS: %1$s is the tag, %2$s is the page number. #, php-format msgid "Users self-tagged with %1$s - page %2$d" msgstr "%2$sలో %1$s అనే ట్యాగుతో ఉన్న నోటీసులు!" @@ -3677,15 +3696,19 @@ msgctxt "plugin" msgid "Disabled" msgstr "" +#. TRANS: Client error displayed when trying to use another method than POST. +#. TRANS: Do not translate POST. #. TRANS: Client error displayed trying to perform any request method other than POST. #. TRANS: Do not translate POST. msgid "This action only accepts POST requests." msgstr "" +#. TRANS: Client error displayed when trying to enable or disable a plugin without access rights. #, fuzzy msgid "You cannot administer plugins." msgstr "మీరు వాడుకరులని తొలగించలేరు." +#. TRANS: Client error displayed when trying to enable or disable a non-existing plugin. #, fuzzy msgid "No such plugin." msgstr "అటువంటి పేజీ లేదు." @@ -3696,7 +3719,8 @@ msgid "Enabled" msgstr "" #. TRANS: Tab and title for plugins admin panel. -#. TRANS: Menu item for site administration +#, fuzzy +msgctxt "TITLE" msgid "Plugins" msgstr "ప్లగిన్లు" @@ -3712,15 +3736,19 @@ msgstr "" msgid "Default plugins" msgstr "అప్రమేయ భాష" +#. TRANS: Text displayed on plugin admin page when no plugin are enabled. msgid "" "All default plugins have been disabled from the site's configuration file." msgstr "" +#. TRANS: Client error displayed if the notice posted has too many characters. msgid "Invalid notice content." msgstr "తప్పుడు దస్త్రపుపేరు.." +#. TRANS: Exception thrown if a notice's license is not compatible with the StatusNet site license. +#. TRANS: %1$s is the notice license, %2$s is the StatusNet site's license. #, php-format -msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’." +msgid "Notice license \"%1$s\" is not compatible with site license \"%2$s\"." msgstr "" #. TRANS: Page title for profile settings. @@ -3839,9 +3867,9 @@ msgstr "భాష మరీ పెద్దగా ఉంది (50 అక్ష #. TRANS: Validation error in form for profile settings. #. TRANS: %s is an invalid tag. -#, fuzzy, php-format +#, php-format msgid "Invalid tag: \"%s\"." -msgstr "తప్పుడు మారుపేరు: \"%s\"" +msgstr "చెల్లని ట్యాగు: \"%s\"" #. TRANS: Server error thrown when user profile settings could not be updated to #. TRANS: automatically subscribe to any subscriber. @@ -3869,58 +3897,72 @@ msgstr "అమరికలు భద్రమయ్యాయి." msgid "Restore account" msgstr "ఖాతాని సృష్టించుకోండి" +#. TRANS: Client error displayed when requesting a public timeline page beyond the page limit. +#. TRANS: %s is the page limit. #, php-format msgid "Beyond the page limit (%s)." msgstr "" +#. TRANS: Server error displayed when a public timeline cannot be retrieved. #, fuzzy msgid "Could not retrieve public stream." msgstr "మారుపేర్లని సృష్టించలేకపోయాం." +#. TRANS: Title for all public timeline pages but the first. +#. TRANS: %d is the page number. #, php-format msgid "Public timeline, page %d" msgstr "ప్రజా కాలరేఖ, పేజీ %d" +#. TRANS: Title for the first public timeline page. msgid "Public timeline" msgstr "ప్రజా కాలరేఖ" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 1.0)" msgstr "ప్రజా వాహిని ఫీడు (RSS 1.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 2.0)" msgstr "ప్రజా వాహిని ఫీడు (RSS 2.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (Atom)" msgstr "ప్రజా వాహిని ఫీడు (ఆటమ్)" +#. TRANS: Text displayed for public feed when there are no public notices. #, fuzzy, php-format msgid "" "This is the public timeline for %%site.name%% but no one has posted anything " "yet." msgstr "ఇది %s మరియు మిత్రుల కాలరేఖ కానీ ఇంకా ఎవరూ ఏమీ రాయలేదు." +#. TRANS: Additional text displayed for public feed when there are no public notices for a logged in user. msgid "Be the first to post!" msgstr "" +#. TRANS: Additional text displayed for public feed when there are no public notices for a not logged in user. #, php-format msgid "" "Why not [register an account](%%action.register%%) and be the first to post!" msgstr "[ఖాతా నమోదు చేసుకుని](%%action.register%%) మొదటగా వ్రాసేది మీరే ఎందుకు కాకూడదు!" -#, fuzzy, php-format +#. TRANS: Message for not logged in users at an invite-only site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. +#, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" "blogging) service based on the Free Software [StatusNet](http://status.net/) " "tool. [Join now](%%action.register%%) to share notices about yourself with " "friends, family, and colleagues! ([Read more](%%doc.help%%))" msgstr "" -"**%s** అనేది [స్టేటస్‌నెట్](http://status.net/) అనే స్వేచ్ఛా ఉపకరణ అధారిత [సూక్ష్మ-బ్లాగింగు]" -"(http://en.wikipedia.org/wiki/Micro-blogging) సేవ అయిన %%%%site.name%%%%లో ఒక " -"వాడుకరి గుంపు.\n" -"దీని సభ్యులు వారి జీవితం మరియు ఆసక్తుల గురించి చిన్న సందేశాలని పంచుకుంటారు. ఈ గుంపు మరియు ఇంకా " -"చాల వాటిలో భాగస్తులవ్వడానికి [ఇప్పుడే చేరండి](%%%%action.register%%%%)! ([మరింత చదవండి](%%%%" -"doc.help%%%%))" +"ఇది %%site.name%%, [స్టేటస్‌నెట్](http://status.net/) అనే స్వేచ్ఛా ఉపకరణ అధారిత [సూక్ష్మ-" +"బ్లాగింగు](http://en.wikipedia.org/wiki/Micro-blogging) సేవ. మీ సంగతులను మీ " +"మిత్రులతో, కుటుంబంతో మరియు సహోద్యోగులతో పంచుకోడానికి [ఇప్పుడే చేరండి](%%action.register%%)! " +"([మరింత తెలుసుకోండి](%%doc.help%%))" +#. TRANS: Message for not logged in users at a closed site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -3931,9 +3973,9 @@ msgstr "" "ఆధారపడిన ఒక [మైక్రో-బ్లాగింగు](http://en.wikipedia.org/wiki/Micro-blogging) సేవ." #. TRANS: Public RSS feed description. %s is the StatusNet site name. -#, fuzzy, php-format +#, php-format msgid "%s updates from everyone." -msgstr "అందరి నుండి %s తాజాకరణలు!" +msgstr "అందరి నుండి %s తాజాకరణలు." #. TRANS: Title for public tag cloud. msgid "Public tag cloud" @@ -4115,9 +4157,9 @@ msgstr "మీ కొత్త సంకేతపదం భద్రమైంద msgid "No id parameter" msgstr "జోడింపులు లేవు." -#, fuzzy, php-format +#, php-format msgid "No such file \"%d\"" -msgstr "అటువంటి ఫైలు లేదు." +msgstr "\"%d\" అనే దస్త్రం లేదు" msgid "Sorry, only invited people can register." msgstr "క్షమించండి, ఆహ్వానితులు మాత్రమే నమోదుకాగలరు." @@ -4160,9 +4202,8 @@ msgstr "తాజా విశేషాలు, ప్రకటనలు, మర msgid "Longer name, preferably your \"real\" name." msgstr "పొడుగాటి పేరు, మీ \"అసలు\" పేరైతే మంచిది" -#, fuzzy msgid "Where you are, like \"City, State (or Region), Country\"." -msgstr "మీరు ఎక్కడ నుండి, \"నగరం, రాష్ట్రం (లేదా ప్రాంతం), దేశం\"" +msgstr "మీరు ఎక్కడివారు, \"నగరం, రాష్ట్రం (లేదా ప్రాంతం), దేశం\"." #, php-format msgid "" @@ -4260,9 +4301,8 @@ msgstr "" msgid "Subscribe" msgstr "చందాచేరు" -#, fuzzy msgid "Invalid profile URL (bad format)." -msgstr "ప్రొపైల్ URL తప్పు (చెడు ఫార్మాట్)" +msgstr "ప్రొపైల్ URL తప్పు (చెల్లని ఫార్మాట్)." msgid "Not a valid profile URL (no YADIS document or invalid XRDS defined)." msgstr "" @@ -4288,9 +4328,8 @@ msgstr "మీ నోటీసుని మీరే పునరావృతి msgid "You already repeated that notice." msgstr "మీరు ఇప్పటికే ఆ నోటీసుని పునరావృతించారు." -#, fuzzy msgid "Repeated" -msgstr "సృష్టితం" +msgstr "పునరావృతం" msgid "Repeated!" msgstr "పునరావృతించారు!" @@ -4413,9 +4452,8 @@ msgid "" msgstr "" #. TRANS: Title for submit button to confirm upload of a user backup file for account restore. -#, fuzzy msgid "Upload the file" -msgstr "ఫైలుని ఎక్కించు" +msgstr "ఈ దస్త్రాన్ని ఎక్కించండి" msgid "You cannot revoke user roles on this site." msgstr "ఈ సైటులో మీరు వాడుకరలకి పాత్రలను ఇవ్వలేరు." @@ -5265,9 +5303,8 @@ msgid "" "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’." msgstr "" -#, fuzzy msgid "URL settings" -msgstr "IM అమరికలు" +msgstr "URL అమరికలు" #. TRANS: Instructions for tab "Other" in user profile settings. msgid "Manage various other options." @@ -5391,9 +5428,8 @@ msgid "Whether to allow users to invite new users." msgstr "వాడుకరులను కొత్త వారిని ఆహ్వానించడానికి అనుమతించాలా వద్దా." #. TRANS: Title for button to save user settings in user admin panel. -#, fuzzy msgid "Save user settings." -msgstr "వాడుకరి అమరికలను భద్రపరచు" +msgstr "వాడుకరి అమరికలను భద్రపరచు." #. TRANS: Page title. msgid "Authorize subscription" @@ -5512,9 +5548,8 @@ msgstr "నేపథ్య చిత్రం మరియు రంగుల msgid "Enjoy your hotdog!" msgstr "" -#, fuzzy msgid "Design settings" -msgstr "సైటు అమరికలను భద్రపరచు" +msgstr "రూపురేఖల అమరికలు" msgid "View profile designs" msgstr "ఫ్రొఫైలు రూపురేఖలు" @@ -5590,6 +5625,10 @@ msgid "" "along with this program. If not, see %s." msgstr "" +#. TRANS: Menu item for site administration +msgid "Plugins" +msgstr "ప్లగిన్లు" + #. TRANS: Form input field label for application name. msgid "Name" msgstr "పేరు" @@ -5909,18 +5948,16 @@ msgid "Show more" msgstr "మరింత చూపించు" #. TRANS: Inline reply form submit button: submits a reply comment. -#, fuzzy msgctxt "BUTTON" msgid "Reply" msgstr "స్పందించండి" #. TRANS: Placeholder text for inline reply form. Clicking in this box will turn it into a mini notice form. msgid "Write a reply..." -msgstr "" +msgstr "మీ స్పందనని వ్రాయండి..." -#, fuzzy msgid "Status" -msgstr "స్టేటస్‌నెట్" +msgstr "స్థితి" #. TRANS: First sentence of the StatusNet site license. Used if 'broughtby' is set. #. TRANS: Text between [] is a link description, text between () is the link itself. @@ -6086,6 +6123,9 @@ msgstr "" msgid "Unable to delete design setting." msgstr "మీ రూపురేఖల అమరికలని భద్రపరచలేకున్నాం." +msgid "Home" +msgstr "ముంగిలి" + #. TRANS: Menu item title/tooltip msgid "Basic site configuration" msgstr "ప్రాథమిక సైటు స్వరూపణం" @@ -6321,14 +6361,12 @@ msgid "Notices where this attachment appears" msgstr "" #. TRANS: Title. -#, fuzzy msgid "Tags for this attachment" -msgstr "అటువంటి జోడింపు లేదు." +msgstr "ఈ జోడింపుకి ట్యాగులు" #. TRANS: Exception thrown when a password change fails. -#, fuzzy msgid "Password changing failed." -msgstr "సంకేతపదం మార్పు విఫలమైంది" +msgstr "సంకేతపదపు మార్పు విఫలమైంది." #. TRANS: Exception thrown when a password change attempt fails because it is not allowed. msgid "Password changing is not allowed." @@ -6685,9 +6723,6 @@ msgstr "సైటు లోనికి ప్రవేశించండి" msgid "Database error" msgstr "" -msgid "Home" -msgstr "ముంగిలి" - msgid "Public" msgstr "ప్రజా" @@ -6810,9 +6845,8 @@ msgstr "అన్నీ" msgid "Select tag to filter" msgstr "" -#, fuzzy msgid "Tag" -msgstr "ట్యాగులు" +msgstr "ట్యాగు" msgid "Choose a tag to narrow list" msgstr "" @@ -7476,7 +7510,6 @@ msgstr "సైటు గమనిక" msgid "What's up, %s?" msgstr "%s, ఏమిటి సంగతులు?" -#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "జోడించు" @@ -7545,6 +7578,9 @@ msgstr "ఈ నోటీసుని తొలగించు" msgid "Notice repeated" msgstr "నోటీసుని పునరావృతించారు" +msgid "Update your status..." +msgstr "" + #, fuzzy msgid "Nudge this user" msgstr "ఈ వాడుకరిని తొలగించు" @@ -7613,9 +7649,8 @@ msgstr "SMS అమరికలు" msgid "Change your personal settings" msgstr "ఫ్రొఫైలు అమరికలని మార్చు" -#, fuzzy msgid "Site configuration" -msgstr "వాడుకరి స్వరూపణం" +msgstr "సైటు స్వరూపణం" msgid "Logout" msgstr "నిష్క్రమించు" @@ -7854,9 +7889,8 @@ msgid "None" msgstr "ఏమీలేదు" #. TRANS: Server exception displayed if a theme name was invalid. -#, fuzzy msgid "Invalid theme name." -msgstr "తప్పుడు దస్త్రపుపేరు.." +msgstr "చెల్లని అలంకారపు పేరు." msgid "This server cannot handle theme uploads without ZIP support." msgstr "" @@ -7864,9 +7898,8 @@ msgstr "" msgid "The theme file is missing or the upload failed." msgstr "" -#, fuzzy msgid "Failed saving theme." -msgstr "అవతారపు తాజాకరణ విఫలమైంది." +msgstr "అలంకారాన్ని భద్రపరచడం విఫలమైంది." msgid "Invalid theme: bad directory structure." msgstr "" @@ -7981,9 +8014,8 @@ msgctxt "role" msgid "Moderator" msgstr "సమన్వయకర్త" -#, fuzzy msgid "Not allowed to log in." -msgstr "లోనికి ప్రవేశించలేదు." +msgstr "ప్రవేశించడానికి అనుమతి లేదు." #. TRANS: Used in notices to indicate when the notice was made compared to now. msgid "a few seconds ago" @@ -8039,14 +8071,13 @@ msgstr "ఒక సంవత్సరం క్రితం" #. TRANS: Web color exception thrown when a hexadecimal color code does not validate. #. TRANS: %s is the provided (invalid) color code. -#, fuzzy, php-format +#, php-format msgid "%s is not a valid color! Use 3 or 6 hex characters." msgstr "%s అనేది సరైన రంగు కాదు! 3 లేదా 6 హెక్స్ అక్షరాలను వాడండి." #. TRANS: Exception. -#, fuzzy msgid "Invalid XML." -msgstr "తప్పుడు పరిమాణం." +msgstr "చెల్లని XML." #. TRANS: Exception. msgid "Invalid XML, missing XRD root." @@ -8056,11 +8087,3 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" - -#, fuzzy -#~ msgid "Friends timeline" -#~ msgstr "%s కాలరేఖ" - -#, fuzzy -#~ msgid "Everyone on this site" -#~ msgstr "ఈ సైటులోని వ్యక్తులని కనుగొనండి" diff --git a/locale/tr/LC_MESSAGES/statusnet.po b/locale/tr/LC_MESSAGES/statusnet.po index a0278b8b99..89e5b94c84 100644 --- a/locale/tr/LC_MESSAGES/statusnet.po +++ b/locale/tr/LC_MESSAGES/statusnet.po @@ -12,17 +12,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-08 01:03+0000\n" -"PO-Revision-Date: 2011-03-08 01:05:33+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:17:30+0000\n" "Language-Team: Turkish \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83429); Translate extension (2011-03-07)\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: tr\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-POT-Import-Date: 2011-03-06 02:16:47+0000\n" +"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -1045,7 +1045,7 @@ msgstr "Durum mesajını kaydederken hata oluştu." #. TRANS: Client exception thrown when trying favorite a notice without content. #, fuzzy -msgid "Unknown note." +msgid "Unknown notice." msgstr "Böyle bir durum mesajı yok." #. TRANS: Client exception thrown when trying favorite an already favorited notice. @@ -1637,6 +1637,7 @@ msgstr "Bu kullanıcıyı sil" #. TRANS: Client error displayed trying to create a new direct message while not logged in. #. TRANS: Client error displayed trying to send a notice while not logged in. #. TRANS: Client error displayed trying to nudge a user without being logged in. +#. TRANS: Client error displayed when trying to enable or disable a plugin while not logged in. #. TRANS: Client error displayed trying a change a subscription while not logged in. #. TRANS: Client error displayed trying to subscribe when not logged in. #. TRANS: Client error message thrown when trying to access the admin panel while not logged in. @@ -3115,6 +3116,10 @@ msgstr "" msgid "Could not create application." msgstr "Eposta onayı silinemedi." +#, fuzzy +msgid "Invalid image." +msgstr "Geçersiz büyüklük." + #. TRANS: Title for form to create a group. msgid "New group" msgstr "Yeni grup" @@ -3393,52 +3398,77 @@ msgstr "" msgid "This is your outbox, which lists private messages you have sent." msgstr "" +#. TRANS: Title for page where to change password. +#, fuzzy +msgctxt "TITLE" msgid "Change password" msgstr "Parolayı değiştir" +#. TRANS: Instructions for page where to change password. msgid "Change your password." msgstr "Parolanızı değiştirin." +#. TRANS: Fieldset legend on page where to change password. #. TRANS: Fieldset legend for password reset form. msgid "Password change" msgstr "Parola değiştirildi" +#. TRANS: Field label on page where to change password. msgid "Old password" msgstr "Eski parola" +#. TRANS: Field label on page where to change password. #. TRANS: Field label for password reset form. msgid "New password" msgstr "Yeni parola" +#. TRANS: Field title on page where to change password. #, fuzzy msgid "6 or more characters." msgstr "6 veya daha fazla karakter" +#. TRANS: Field label on page where to change password. In this field the new password should be typed a second time. +#, fuzzy +msgctxt "LABEL" +msgid "Confirm" +msgstr "Onayla" + +#. TRANS: Field title on page where to change password. #. TRANS: Ttile for field label for password reset form where the password has to be typed again. #, fuzzy msgid "Same as password above." msgstr "yukarıdaki parolanın aynısı" +#. TRANS: Button text on page where to change password. +#, fuzzy +msgctxt "BUTTON" msgid "Change" msgstr "Değiştir" +#. TRANS: Form validation error on page where to change password. msgid "Password must be 6 or more characters." msgstr "Parola 6 veya daha fazla karakterden oluşmalıdır." msgid "Passwords don't match." msgstr "Parolalar birbirini tutmuyor." -msgid "Incorrect old password" +#. TRANS: Form validation error on page where to change password. +#, fuzzy +msgid "Incorrect old password." msgstr "Eski parola yanlış" +#. TRANS: Form validation error on page where to change password. msgid "Error saving user; invalid." msgstr "Kullanıcıyı kaydetmede hata oluştu; geçersiz." +#. TRANS: Server error displayed on page where to change password when password change +#. TRANS: could not be made because of a server error. #. TRANS: Reset password form validation error message. #, fuzzy msgid "Cannot save new password." msgstr "Yeni parola kaydedilemedi." +#. TRANS: Form validation notice on page where to change password. msgid "Password saved." msgstr "Parola kaydedildi." @@ -3488,6 +3518,7 @@ msgstr "Site" msgid "Server" msgstr "Sunucu" +#. TRANS: Field title in Paths admin panel. msgid "Site's server hostname." msgstr "" @@ -3495,6 +3526,7 @@ msgstr "" msgid "Path" msgstr "Yol" +#. TRANS: Field title in Paths admin panel. #, fuzzy msgid "Site path." msgstr "Site yolu" @@ -3504,6 +3536,7 @@ msgstr "Site yolu" msgid "Locale directory" msgstr "Avatar güncellendi." +#. TRANS: Field title in Paths admin panel. msgid "Directory path to locales." msgstr "" @@ -3511,9 +3544,12 @@ msgstr "" msgid "Fancy URLs" msgstr "" -msgid "Use fancy (more readable and memorable) URLs?" +#. TRANS: Field title in Paths admin panel. +msgid "Use fancy URLs (more readable and memorable)?" msgstr "" +#. TRANS: Fieldset legend in Paths admin panel. +msgctxt "LEGEND" msgid "Theme" msgstr "" @@ -3638,6 +3674,7 @@ msgid "Directory where attachments are located." msgstr "" #. TRANS: Fieldset legend in Paths admin panel. +msgctxt "LEGEND" msgid "SSL" msgstr "" @@ -3685,10 +3722,14 @@ msgstr "" msgid "People search" msgstr "Kişi Arama" +#. TRANS: Client error displayed when trying to tag a profile with an invalid tag. +#. TRANS: %s is the invalid tag. #, fuzzy, php-format msgid "Not a valid people tag: %s." msgstr "Geçersiz bir eposta adresi." +#. TRANS: Page title for users with a certain self-tag. +#. TRANS: %1$s is the tag, %2$s is the page number. #, fuzzy, php-format msgid "Users self-tagged with %1$s - page %2$d" msgstr "%s adli kullanicinin durum mesajlari" @@ -3698,15 +3739,19 @@ msgctxt "plugin" msgid "Disabled" msgstr "" +#. TRANS: Client error displayed when trying to use another method than POST. +#. TRANS: Do not translate POST. #. TRANS: Client error displayed trying to perform any request method other than POST. #. TRANS: Do not translate POST. msgid "This action only accepts POST requests." msgstr "" +#. TRANS: Client error displayed when trying to enable or disable a plugin without access rights. #, fuzzy msgid "You cannot administer plugins." msgstr "Kullanıcıları silemezsiniz." +#. TRANS: Client error displayed when trying to enable or disable a non-existing plugin. #, fuzzy msgid "No such plugin." msgstr "Böyle bir sayfa yok." @@ -3717,7 +3762,8 @@ msgid "Enabled" msgstr "" #. TRANS: Tab and title for plugins admin panel. -#. TRANS: Menu item for site administration +#, fuzzy +msgctxt "TITLE" msgid "Plugins" msgstr "Eklentiler" @@ -3733,15 +3779,19 @@ msgstr "" msgid "Default plugins" msgstr "Öntanımlı dil" +#. TRANS: Text displayed on plugin admin page when no plugin are enabled. msgid "" "All default plugins have been disabled from the site's configuration file." msgstr "" +#. TRANS: Client error displayed if the notice posted has too many characters. msgid "Invalid notice content." msgstr "Geçersiz büyüklük." +#. TRANS: Exception thrown if a notice's license is not compatible with the StatusNet site license. +#. TRANS: %1$s is the notice license, %2$s is the StatusNet site's license. #, php-format -msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’." +msgid "Notice license \"%1$s\" is not compatible with site license \"%2$s\"." msgstr "" #. TRANS: Page title for profile settings. @@ -3896,47 +3946,61 @@ msgstr "Ayarlar kaydedildi." msgid "Restore account" msgstr "Bir hesap oluştur" +#. TRANS: Client error displayed when requesting a public timeline page beyond the page limit. +#. TRANS: %s is the page limit. #, php-format msgid "Beyond the page limit (%s)." msgstr "" +#. TRANS: Server error displayed when a public timeline cannot be retrieved. #, fuzzy msgid "Could not retrieve public stream." msgstr "Kullanıcı güncellenemedi." +#. TRANS: Title for all public timeline pages but the first. +#. TRANS: %d is the page number. #, fuzzy, php-format msgid "Public timeline, page %d" msgstr "Genel zaman çizgisi" +#. TRANS: Title for the first public timeline page. msgid "Public timeline" msgstr "Genel zaman çizgisi" +#. TRANS: Link description for public timeline feed. #, fuzzy msgid "Public Stream Feed (RSS 1.0)" msgstr "Genel Durum Akış RSS Beslemesi" +#. TRANS: Link description for public timeline feed. #, fuzzy msgid "Public Stream Feed (RSS 2.0)" msgstr "Genel Durum Akış RSS Beslemesi" +#. TRANS: Link description for public timeline feed. #, fuzzy msgid "Public Stream Feed (Atom)" msgstr "Genel Durum Akış RSS Beslemesi" +#. TRANS: Text displayed for public feed when there are no public notices. #, php-format msgid "" "This is the public timeline for %%site.name%% but no one has posted anything " "yet." msgstr "" +#. TRANS: Additional text displayed for public feed when there are no public notices for a logged in user. msgid "Be the first to post!" msgstr "" +#. TRANS: Additional text displayed for public feed when there are no public notices for a not logged in user. #, php-format msgid "" "Why not [register an account](%%action.register%%) and be the first to post!" msgstr "" +#. TRANS: Message for not logged in users at an invite-only site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -3945,6 +4009,8 @@ msgid "" "friends, family, and colleagues! ([Read more](%%doc.help%%))" msgstr "" +#. TRANS: Message for not logged in users at a closed site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -5595,6 +5661,10 @@ msgid "" "along with this program. If not, see %s." msgstr "" +#. TRANS: Menu item for site administration +msgid "Plugins" +msgstr "Eklentiler" + #. TRANS: Form input field label for application name. #, fuzzy msgid "Name" @@ -6092,6 +6162,9 @@ msgstr "saveSettings() gerçeklenmemiş." msgid "Unable to delete design setting." msgstr "Dizayn ayarı silinemedi." +msgid "Home" +msgstr "Başlangıç Sayfası" + #. TRANS: Menu item title/tooltip msgid "Basic site configuration" msgstr "Temel site yapılandırması" @@ -6687,9 +6760,6 @@ msgstr "" msgid "Database error" msgstr "" -msgid "Home" -msgstr "Başlangıç Sayfası" - msgid "Public" msgstr "Genel" @@ -7399,7 +7469,6 @@ msgstr "Yeni durum mesajı" msgid "What's up, %s?" msgstr "N'aber %s?" -#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "" @@ -7470,6 +7539,9 @@ msgstr "Bu durum mesajını sil" msgid "Notice repeated" msgstr "Durum mesajları" +msgid "Update your status..." +msgstr "" + msgid "Nudge this user" msgstr "" @@ -7990,11 +8062,3 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" - -#, fuzzy -#~ msgid "Friends timeline" -#~ msgstr "%s zaman çizelgesi" - -#, fuzzy -#~ msgid "Everyone on this site" -#~ msgstr "Siteye giriş" diff --git a/locale/uk/LC_MESSAGES/statusnet.po b/locale/uk/LC_MESSAGES/statusnet.po index 3077a74597..f2f3cdd6df 100644 --- a/locale/uk/LC_MESSAGES/statusnet.po +++ b/locale/uk/LC_MESSAGES/statusnet.po @@ -12,18 +12,18 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-08 01:03+0000\n" -"PO-Revision-Date: 2011-03-08 01:05:34+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:17:31+0000\n" "Language-Team: Ukrainian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83429); Translate extension (2011-03-07)\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: uk\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= " "2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n" -"X-POT-Import-Date: 2011-03-06 02:16:47+0000\n" +"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -1060,7 +1060,8 @@ msgid "Can only fave notices." msgstr "Можна лише додавати дописи до обраних." #. TRANS: Client exception thrown when trying favorite a notice without content. -msgid "Unknown note." +#, fuzzy +msgid "Unknown notice." msgstr "Невідома примітка" #. TRANS: Client exception thrown when trying favorite an already favorited notice. @@ -1631,6 +1632,7 @@ msgstr "Видалити спільноту." #. TRANS: Client error displayed trying to create a new direct message while not logged in. #. TRANS: Client error displayed trying to send a notice while not logged in. #. TRANS: Client error displayed trying to nudge a user without being logged in. +#. TRANS: Client error displayed when trying to enable or disable a plugin while not logged in. #. TRANS: Client error displayed trying a change a subscription while not logged in. #. TRANS: Client error displayed trying to subscribe when not logged in. #. TRANS: Client error message thrown when trying to access the admin panel while not logged in. @@ -3108,6 +3110,10 @@ msgstr "Потрібна URL-адреса." msgid "Could not create application." msgstr "Не вдалося створити додаток." +#, fuzzy +msgid "Invalid image." +msgstr "Недійсний розмір." + #. TRANS: Title for form to create a group. msgid "New group" msgstr "Нова спільнота" @@ -3393,49 +3399,74 @@ msgstr "" "Це ваші вихідні повідомлення, тут містяться повідомлення, які ви надіслали " "приватно." +#. TRANS: Title for page where to change password. +#, fuzzy +msgctxt "TITLE" msgid "Change password" msgstr "Змінити пароль" +#. TRANS: Instructions for page where to change password. msgid "Change your password." msgstr "Змінити пароль." +#. TRANS: Fieldset legend on page where to change password. #. TRANS: Fieldset legend for password reset form. msgid "Password change" msgstr "Пароль замінено" +#. TRANS: Field label on page where to change password. msgid "Old password" msgstr "Старий пароль" +#. TRANS: Field label on page where to change password. #. TRANS: Field label for password reset form. msgid "New password" msgstr "Новий пароль" +#. TRANS: Field title on page where to change password. msgid "6 or more characters." msgstr "6 або більше знаків." +#. TRANS: Field label on page where to change password. In this field the new password should be typed a second time. +#, fuzzy +msgctxt "LABEL" +msgid "Confirm" +msgstr "Підтвердити" + +#. TRANS: Field title on page where to change password. #. TRANS: Ttile for field label for password reset form where the password has to be typed again. msgid "Same as password above." msgstr "Такий само, як і пароль вище." +#. TRANS: Button text on page where to change password. +#, fuzzy +msgctxt "BUTTON" msgid "Change" msgstr "Змінити" +#. TRANS: Form validation error on page where to change password. msgid "Password must be 6 or more characters." msgstr "Пароль має складатись з 6-ти або більше знаків." msgid "Passwords don't match." msgstr "Паролі не співпадають." -msgid "Incorrect old password" +#. TRANS: Form validation error on page where to change password. +#, fuzzy +msgid "Incorrect old password." msgstr "Старий пароль є неточним" +#. TRANS: Form validation error on page where to change password. msgid "Error saving user; invalid." msgstr "Помилка при збереженні користувача; недійсний." +#. TRANS: Server error displayed on page where to change password when password change +#. TRANS: could not be made because of a server error. #. TRANS: Reset password form validation error message. msgid "Cannot save new password." msgstr "Не вдається зберегти новий пароль." +#. TRANS: Form validation notice on page where to change password. msgid "Password saved." msgstr "Пароль збережено." @@ -3485,6 +3516,7 @@ msgstr "Сайт" msgid "Server" msgstr "Сервер" +#. TRANS: Field title in Paths admin panel. msgid "Site's server hostname." msgstr "Ім’я хосту сервера на якому знаходиться сайт." @@ -3492,6 +3524,7 @@ msgstr "Ім’я хосту сервера на якому знаходитьс msgid "Path" msgstr "Шлях" +#. TRANS: Field title in Paths admin panel. msgid "Site path." msgstr "Шлях до сайту." @@ -3499,6 +3532,7 @@ msgstr "Шлях до сайту." msgid "Locale directory" msgstr "Директорія локалі" +#. TRANS: Field title in Paths admin panel. msgid "Directory path to locales." msgstr "Шлях до директорії локалей." @@ -3506,9 +3540,14 @@ msgstr "Шлях до директорії локалей." msgid "Fancy URLs" msgstr "Надзвичайні URL-адреси" -msgid "Use fancy (more readable and memorable) URLs?" +#. TRANS: Field title in Paths admin panel. +#, fuzzy +msgid "Use fancy URLs (more readable and memorable)?" msgstr "Використовувати надзвичайні (найбільш пам’ятні і визначні) URL-адреси?" +#. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "Theme" msgstr "Тема" @@ -3621,6 +3660,8 @@ msgid "Directory where attachments are located." msgstr "Директорія, в якій знаходяться вкладення." #. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "SSL" msgstr "SSL-шифрування" @@ -3666,10 +3707,14 @@ msgstr "" msgid "People search" msgstr "Пошук людей" +#. TRANS: Client error displayed when trying to tag a profile with an invalid tag. +#. TRANS: %s is the invalid tag. #, php-format msgid "Not a valid people tag: %s." msgstr "Це недійсний особистий теґ: %s." +#. TRANS: Page title for users with a certain self-tag. +#. TRANS: %1$s is the tag, %2$s is the page number. #, php-format msgid "Users self-tagged with %1$s - page %2$d" msgstr "Користувачі з особистим теґом «%1$s» — сторінка %2$d" @@ -3679,14 +3724,18 @@ msgctxt "plugin" msgid "Disabled" msgstr "Вимкнений" +#. TRANS: Client error displayed when trying to use another method than POST. +#. TRANS: Do not translate POST. #. TRANS: Client error displayed trying to perform any request method other than POST. #. TRANS: Do not translate POST. msgid "This action only accepts POST requests." msgstr "Ця дія приймає лише запити POST." +#. TRANS: Client error displayed when trying to enable or disable a plugin without access rights. msgid "You cannot administer plugins." msgstr "Ви не можете керувати додатками." +#. TRANS: Client error displayed when trying to enable or disable a non-existing plugin. msgid "No such plugin." msgstr "Немає такого додатку." @@ -3696,7 +3745,8 @@ msgid "Enabled" msgstr "Увімкнений" #. TRANS: Tab and title for plugins admin panel. -#. TRANS: Menu item for site administration +#, fuzzy +msgctxt "TITLE" msgid "Plugins" msgstr "Додатки" @@ -3714,16 +3764,20 @@ msgstr "" msgid "Default plugins" msgstr "Додатки за замовчуванням" +#. TRANS: Text displayed on plugin admin page when no plugin are enabled. msgid "" "All default plugins have been disabled from the site's configuration file." msgstr "" "Всі додатки за замовчуванням було вимкнено у файлі конфігурації даного сайту." +#. TRANS: Client error displayed if the notice posted has too many characters. msgid "Invalid notice content." msgstr "Недійсний зміст допису." -#, php-format -msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’." +#. TRANS: Exception thrown if a notice's license is not compatible with the StatusNet site license. +#. TRANS: %1$s is the notice license, %2$s is the StatusNet site's license. +#, fuzzy, php-format +msgid "Notice license \"%1$s\" is not compatible with site license \"%2$s\"." msgstr "Ліцензія допису «%1$s» є несумісною з ліцензією сайту «%2$s»." #. TRANS: Page title for profile settings. @@ -3869,29 +3923,39 @@ msgstr "Налаштування збережено." msgid "Restore account" msgstr "Відновити акаунт" +#. TRANS: Client error displayed when requesting a public timeline page beyond the page limit. +#. TRANS: %s is the page limit. #, php-format msgid "Beyond the page limit (%s)." msgstr "Перевищено ліміт сторінки (%s)." +#. TRANS: Server error displayed when a public timeline cannot be retrieved. msgid "Could not retrieve public stream." msgstr "Не вдається відновити загальну стрічку." +#. TRANS: Title for all public timeline pages but the first. +#. TRANS: %d is the page number. #, php-format msgid "Public timeline, page %d" msgstr "Загальна стрічка, сторінка %d" +#. TRANS: Title for the first public timeline page. msgid "Public timeline" msgstr "Загальна стрічка" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 1.0)" msgstr "Стрічка публічних дописів (RSS 1.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 2.0)" msgstr "Стрічка публічних дописів (RSS 2.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (Atom)" msgstr "Стрічка публічних дописів (Atom)" +#. TRANS: Text displayed for public feed when there are no public notices. #, php-format msgid "" "This is the public timeline for %%site.name%% but no one has posted anything " @@ -3899,9 +3963,11 @@ msgid "" msgstr "" "Це публічна стрічка дописів сайту %%site.name%%, але вона поки що порожня." +#. TRANS: Additional text displayed for public feed when there are no public notices for a logged in user. msgid "Be the first to post!" msgstr "Станьте першим! Напишіть щось!" +#. TRANS: Additional text displayed for public feed when there are no public notices for a not logged in user. #, php-format msgid "" "Why not [register an account](%%action.register%%) and be the first to post!" @@ -3909,6 +3975,8 @@ msgstr "" "Чому б не [зареєструватись](%%action.register%%) і не зробити свій перший " "допис!" +#. TRANS: Message for not logged in users at an invite-only site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -3922,6 +3990,8 @@ msgstr "" "розділити своє життя з друзями, родиною і колегами! ([Дізнатися більше](%%" "doc.help%%))" +#. TRANS: Message for not logged in users at a closed site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -5610,6 +5680,10 @@ msgstr "" "Разом з програмою ви маєте отримати копію ліцензійних умов GNU Affero " "General Public License. Якщо ні, перейдіть на %s." +#. TRANS: Menu item for site administration +msgid "Plugins" +msgstr "Додатки" + #. TRANS: Form input field label for application name. msgid "Name" msgstr "Ім’я" @@ -5945,9 +6019,8 @@ msgstr "Відповісти" msgid "Write a reply..." msgstr "Пише відповідь..." -#, fuzzy msgid "Status" -msgstr "StatusNet" +msgstr "Статус" #. TRANS: First sentence of the StatusNet site license. Used if 'broughtby' is set. #. TRANS: Text between [] is a link description, text between () is the link itself. @@ -6112,6 +6185,9 @@ msgstr "saveSettings() не виконано." msgid "Unable to delete design setting." msgstr "Немає можливості видалити налаштування дизайну." +msgid "Home" +msgstr "Веб-сторінка" + #. TRANS: Menu item title/tooltip msgid "Basic site configuration" msgstr "Основна конфігурація сайту" @@ -6743,9 +6819,6 @@ msgstr "Іти до файлу інсталяції." msgid "Database error" msgstr "Помилка бази даних" -msgid "Home" -msgstr "Веб-сторінка" - msgid "Public" msgstr "Загал" @@ -7525,18 +7598,16 @@ msgid "from" msgstr "з" msgid "Can't get author for activity." -msgstr "" +msgstr "Не вдається отримати автора для діяльності." -#, fuzzy msgid "Bookmark not posted to this group." -msgstr "Вам не дозволено видаляти цю спільноту." +msgstr "Закладку не додано до цієї спільноти." -#, fuzzy msgid "Object not posted to this user." -msgstr "Не видаляти цього користувача." +msgstr "Об’єкт не додано до цього користувача." msgid "Don't know how to handle this kind of target." -msgstr "" +msgstr "Не знаю, як обробити такого роду мету." #. TRANS: Validation error in form for registration, profile and group settings, etc. msgid "Nickname cannot be empty." @@ -7559,7 +7630,6 @@ msgstr "Надіслати допис" msgid "What's up, %s?" msgstr "Що нового, %s?" -#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Вкласти" @@ -7627,6 +7697,9 @@ msgstr "Видалити допис" msgid "Notice repeated" msgstr "Допис повторили" +msgid "Update your status..." +msgstr "" + msgid "Nudge this user" msgstr "«Розштовхати» користувача" @@ -8139,9 +8212,3 @@ msgstr "Неправильний XML, корінь XRD відсутній." #, php-format msgid "Getting backup from file '%s'." msgstr "Отримання резервної копії файлу «%s»." - -#~ msgid "Friends timeline" -#~ msgstr "Стрічка друзів" - -#~ msgid "Everyone on this site" -#~ msgstr "Всі на цьому сайті" diff --git a/locale/zh_CN/LC_MESSAGES/statusnet.po b/locale/zh_CN/LC_MESSAGES/statusnet.po index c8367a9bd1..022e28922e 100644 --- a/locale/zh_CN/LC_MESSAGES/statusnet.po +++ b/locale/zh_CN/LC_MESSAGES/statusnet.po @@ -15,18 +15,18 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-08 01:03+0000\n" -"PO-Revision-Date: 2011-03-08 01:05:35+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:17:32+0000\n" "Language-Team: Simplified Chinese \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83429); Translate extension (2011-03-07)\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: zh-hans\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-POT-Import-Date: 2011-03-06 02:16:47+0000\n" +"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -1017,7 +1017,8 @@ msgid "Can only fave notices." msgstr "可以只为心目中的绝对通知书。" #. TRANS: Client exception thrown when trying favorite a notice without content. -msgid "Unknown note." +#, fuzzy +msgid "Unknown notice." msgstr "未知的注意。" #. TRANS: Client exception thrown when trying favorite an already favorited notice. @@ -1577,6 +1578,7 @@ msgstr "删除此组。" #. TRANS: Client error displayed trying to create a new direct message while not logged in. #. TRANS: Client error displayed trying to send a notice while not logged in. #. TRANS: Client error displayed trying to nudge a user without being logged in. +#. TRANS: Client error displayed when trying to enable or disable a plugin while not logged in. #. TRANS: Client error displayed trying a change a subscription while not logged in. #. TRANS: Client error displayed trying to subscribe when not logged in. #. TRANS: Client error message thrown when trying to access the admin panel while not logged in. @@ -3020,6 +3022,10 @@ msgstr "Source URL 必填。" msgid "Could not create application." msgstr "无法创建应用。" +#, fuzzy +msgid "Invalid image." +msgstr "大小不正确。" + #. TRANS: Title for form to create a group. msgid "New group" msgstr "新小组" @@ -3298,49 +3304,74 @@ msgstr "%s 的发件箱" msgid "This is your outbox, which lists private messages you have sent." msgstr "这是你的发件箱,包含你发送的私信。" +#. TRANS: Title for page where to change password. +#, fuzzy +msgctxt "TITLE" msgid "Change password" msgstr "修改密码" +#. TRANS: Instructions for page where to change password. msgid "Change your password." msgstr "修改你的密码" +#. TRANS: Fieldset legend on page where to change password. #. TRANS: Fieldset legend for password reset form. msgid "Password change" msgstr "修改密码" +#. TRANS: Field label on page where to change password. msgid "Old password" msgstr "旧密码" +#. TRANS: Field label on page where to change password. #. TRANS: Field label for password reset form. msgid "New password" msgstr "新密码" +#. TRANS: Field title on page where to change password. msgid "6 or more characters." msgstr "6 个或更多字符" +#. TRANS: Field label on page where to change password. In this field the new password should be typed a second time. +#, fuzzy +msgctxt "LABEL" +msgid "Confirm" +msgstr "密码确认" + +#. TRANS: Field title on page where to change password. #. TRANS: Ttile for field label for password reset form where the password has to be typed again. msgid "Same as password above." msgstr "与上面相同的密码" +#. TRANS: Button text on page where to change password. +#, fuzzy +msgctxt "BUTTON" msgid "Change" msgstr "修改" +#. TRANS: Form validation error on page where to change password. msgid "Password must be 6 or more characters." msgstr "密码必须包含 6 个或更多字符。" msgid "Passwords don't match." msgstr "密码不匹配。" -msgid "Incorrect old password" +#. TRANS: Form validation error on page where to change password. +#, fuzzy +msgid "Incorrect old password." msgstr "旧密码不正确" +#. TRANS: Form validation error on page where to change password. msgid "Error saving user; invalid." msgstr "保存用户时出错;无效。" +#. TRANS: Server error displayed on page where to change password when password change +#. TRANS: could not be made because of a server error. #. TRANS: Reset password form validation error message. msgid "Cannot save new password." msgstr "无法保存新密码。" +#. TRANS: Form validation notice on page where to change password. msgid "Password saved." msgstr "密码已保存。" @@ -3390,6 +3421,7 @@ msgstr "网站" msgid "Server" msgstr "服务器" +#. TRANS: Field title in Paths admin panel. msgid "Site's server hostname." msgstr "网站的服务器主机名。" @@ -3397,6 +3429,7 @@ msgstr "网站的服务器主机名。" msgid "Path" msgstr "路径" +#. TRANS: Field title in Paths admin panel. msgid "Site path." msgstr "网站路径" @@ -3404,6 +3437,7 @@ msgstr "网站路径" msgid "Locale directory" msgstr "本地化目录" +#. TRANS: Field title in Paths admin panel. msgid "Directory path to locales." msgstr "本地化文件的目录路径" @@ -3411,9 +3445,14 @@ msgstr "本地化文件的目录路径" msgid "Fancy URLs" msgstr "优化 URLs" -msgid "Use fancy (more readable and memorable) URLs?" +#. TRANS: Field title in Paths admin panel. +#, fuzzy +msgid "Use fancy URLs (more readable and memorable)?" msgstr "使用优化的 URLs(更简洁易记)?" +#. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "Theme" msgstr "主题" @@ -3526,6 +3565,8 @@ msgid "Directory where attachments are located." msgstr "附件文件的目录。" #. TRANS: Fieldset legend in Paths admin panel. +#, fuzzy +msgctxt "LEGEND" msgid "SSL" msgstr "SSL" @@ -3570,10 +3611,14 @@ msgstr "" msgid "People search" msgstr "搜索用户" +#. TRANS: Client error displayed when trying to tag a profile with an invalid tag. +#. TRANS: %s is the invalid tag. #, php-format msgid "Not a valid people tag: %s." msgstr "不是有效的标签:%s。" +#. TRANS: Page title for users with a certain self-tag. +#. TRANS: %1$s is the tag, %2$s is the page number. #, php-format msgid "Users self-tagged with %1$s - page %2$d" msgstr "用户自加标签%s - 第%d 页" @@ -3583,15 +3628,19 @@ msgctxt "plugin" msgid "Disabled" msgstr "" +#. TRANS: Client error displayed when trying to use another method than POST. +#. TRANS: Do not translate POST. #. TRANS: Client error displayed trying to perform any request method other than POST. #. TRANS: Do not translate POST. msgid "This action only accepts POST requests." msgstr "这个动作只接受 POST 请求" +#. TRANS: Client error displayed when trying to enable or disable a plugin without access rights. #, fuzzy msgid "You cannot administer plugins." msgstr "你不能删除用户。" +#. TRANS: Client error displayed when trying to enable or disable a non-existing plugin. #, fuzzy msgid "No such plugin." msgstr "没有这个页面。" @@ -3602,7 +3651,8 @@ msgid "Enabled" msgstr "" #. TRANS: Tab and title for plugins admin panel. -#. TRANS: Menu item for site administration +#, fuzzy +msgctxt "TITLE" msgid "Plugins" msgstr "插件" @@ -3618,15 +3668,19 @@ msgstr "" msgid "Default plugins" msgstr "默认语言" +#. TRANS: Text displayed on plugin admin page when no plugin are enabled. msgid "" "All default plugins have been disabled from the site's configuration file." msgstr "" +#. TRANS: Client error displayed if the notice posted has too many characters. msgid "Invalid notice content." msgstr "无效的消息内容。" -#, php-format -msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’." +#. TRANS: Exception thrown if a notice's license is not compatible with the StatusNet site license. +#. TRANS: %1$s is the notice license, %2$s is the StatusNet site's license. +#, fuzzy, php-format +msgid "Notice license \"%1$s\" is not compatible with site license \"%2$s\"." msgstr "消息许可证“%1$s”与这个网站的许可证“%2$s”不兼容。" #. TRANS: Page title for profile settings. @@ -3765,43 +3819,57 @@ msgstr "设置已保存。" msgid "Restore account" msgstr "还原账户" +#. TRANS: Client error displayed when requesting a public timeline page beyond the page limit. +#. TRANS: %s is the page limit. #, php-format msgid "Beyond the page limit (%s)." msgstr "超出页面限制(%s)。" +#. TRANS: Server error displayed when a public timeline cannot be retrieved. msgid "Could not retrieve public stream." msgstr "无法获取到公共的时间线。" +#. TRANS: Title for all public timeline pages but the first. +#. TRANS: %d is the page number. #, php-format msgid "Public timeline, page %d" msgstr "公共时间线,第%d页" +#. TRANS: Title for the first public timeline page. msgid "Public timeline" msgstr "公共时间线" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 1.0)" msgstr "公开的 RSS 聚合 (RSS 1.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (RSS 2.0)" msgstr "公开的 RSS 聚合 (RSS 2.0)" +#. TRANS: Link description for public timeline feed. msgid "Public Stream Feed (Atom)" msgstr "公开的 RSS 聚合 (Atom)" +#. TRANS: Text displayed for public feed when there are no public notices. #, php-format msgid "" "This is the public timeline for %%site.name%% but no one has posted anything " "yet." msgstr "这是%%site.name%%的公共时间线,但是还没有人发布任何内容。" +#. TRANS: Additional text displayed for public feed when there are no public notices for a logged in user. msgid "Be the first to post!" msgstr "成为第一个发布消息的人!" +#. TRANS: Additional text displayed for public feed when there are no public notices for a not logged in user. #, php-format msgid "" "Why not [register an account](%%action.register%%) and be the first to post!" msgstr "现在就 [注册](%%action.register%%) 并成为第一个发布消息的人!" +#. TRANS: Message for not logged in users at an invite-only site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -3814,6 +3882,8 @@ msgstr "" "务。[现在加入](%%action.register%%) 并与你的朋友、家人和同事们一起分享你的消" "息。([查看更多](%%doc.help%%))" +#. TRANS: Message for not logged in users at a closed site trying to view the public feed of notices. +#. TRANS: This message contains Markdown links. Please mind the formatting. #, php-format msgid "" "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-" @@ -5434,6 +5504,10 @@ msgid "" "along with this program. If not, see %s." msgstr "你应该在本程序中收到了一份 GNU Affero GPL 的副本,如果没有收到请看%s。" +#. TRANS: Menu item for site administration +msgid "Plugins" +msgstr "插件" + #. TRANS: Form input field label for application name. msgid "Name" msgstr "名称" @@ -5916,6 +5990,9 @@ msgstr "saveSettings() 尚未实现。" msgid "Unable to delete design setting." msgstr "无法删除外观设置。" +msgid "Home" +msgstr "主页" + #. TRANS: Menu item title/tooltip msgid "Basic site configuration" msgstr "基本网站配置" @@ -6525,9 +6602,6 @@ msgstr "去安装程序。" msgid "Database error" msgstr "数据库错误" -msgid "Home" -msgstr "主页" - msgid "Public" msgstr "公共" @@ -7307,7 +7381,6 @@ msgstr "发送一个通知" msgid "What's up, %s?" msgstr "%s,最近怎么样?" -#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "附件" @@ -7374,6 +7447,9 @@ msgstr "删除" msgid "Notice repeated" msgstr "消息已转发" +msgid "Update your status..." +msgstr "" + msgid "Nudge this user" msgstr "呼叫用户" @@ -7868,11 +7944,3 @@ msgstr "不合法的XML, 缺少XRD根" #, php-format msgid "Getting backup from file '%s'." msgstr "从文件'%s'获取备份。" - -#, fuzzy -#~ msgid "Friends timeline" -#~ msgstr "%s的时间线" - -#, fuzzy -#~ msgid "Everyone on this site" -#~ msgstr "搜索本站用户" diff --git a/plugins/AccountManager/locale/de/LC_MESSAGES/AccountManager.po b/plugins/AccountManager/locale/de/LC_MESSAGES/AccountManager.po new file mode 100644 index 0000000000..338a911f54 --- /dev/null +++ b/plugins/AccountManager/locale/de/LC_MESSAGES/AccountManager.po @@ -0,0 +1,27 @@ +# Translation of StatusNet - AccountManager to German (Deutsch) +# Exported from translatewiki.net +# +# Author: Habi +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - AccountManager\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:17:33+0000\n" +"Language-Team: German \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2011-03-08 01:21:58+0000\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: de\n" +"X-Message-Group: #out-statusnet-plugin-accountmanager\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "" +"The Account Manager plugin implements the Account Manager specification." +msgstr "" +"Das Account-Manager-Plugin implementiert die Account-Manager-Spezifikation." diff --git a/plugins/Aim/locale/sv/LC_MESSAGES/Aim.po b/plugins/Aim/locale/sv/LC_MESSAGES/Aim.po new file mode 100644 index 0000000000..d0799bcffb --- /dev/null +++ b/plugins/Aim/locale/sv/LC_MESSAGES/Aim.po @@ -0,0 +1,34 @@ +# Translation of StatusNet - Aim to Swedish (Svenska) +# Exported from translatewiki.net +# +# Author: WikiPhoenix +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - Aim\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:17:36+0000\n" +"Language-Team: Swedish \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2011-03-08 01:22:52+0000\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: sv\n" +"X-Message-Group: #out-statusnet-plugin-aim\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Send me a message to post a notice" +msgstr "" + +msgid "AIM" +msgstr "AIM" + +msgid "" +"The AIM plugin allows users to send and receive notices over the AIM network." +msgstr "" +"AIM-tillägget tillåter användare skicka och ta emot meddelanden över AIM-" +"nätverket." diff --git a/plugins/Autocomplete/locale/Autocomplete.pot b/plugins/Autocomplete/locale/Autocomplete.pot index cc028a1f72..1c4b44c399 100644 --- a/plugins/Autocomplete/locale/Autocomplete.pot +++ b/plugins/Autocomplete/locale/Autocomplete.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-06 02:34+0100\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: AutocompletePlugin.php:80 +#: AutocompletePlugin.php:82 msgid "" "The autocomplete plugin allows users to autocomplete screen names in @ " "replies. When an \"@\" is typed into the notice text area, an autocomplete " diff --git a/plugins/Bookmark/locale/Bookmark.pot b/plugins/Bookmark/locale/Bookmark.pot index c7fc76af60..34c2bf6121 100644 --- a/plugins/Bookmark/locale/Bookmark.pot +++ b/plugins/Bookmark/locale/Bookmark.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-08 01:03+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -20,7 +20,7 @@ msgstr "" msgid "Simple extension for supporting bookmarks." msgstr "" -#: BookmarkPlugin.php:639 +#: BookmarkPlugin.php:642 msgid "Bookmark" msgstr "" diff --git a/plugins/Bookmark/locale/ia/LC_MESSAGES/Bookmark.po b/plugins/Bookmark/locale/ia/LC_MESSAGES/Bookmark.po index 7513e1830e..1302863820 100644 --- a/plugins/Bookmark/locale/ia/LC_MESSAGES/Bookmark.po +++ b/plugins/Bookmark/locale/ia/LC_MESSAGES/Bookmark.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Bookmark\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-08 01:03+0000\n" -"PO-Revision-Date: 2011-03-08 01:05:50+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:17:50+0000\n" "Language-Team: Interlingua \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-06 02:12:57+0000\n" -"X-Generator: MediaWiki 1.18alpha (r83429); Translate extension (2011-03-07)\n" +"X-POT-Import-Date: 2011-03-08 01:22:22+0000\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ia\n" "X-Message-Group: #out-statusnet-plugin-bookmark\n" @@ -25,7 +25,7 @@ msgid "Simple extension for supporting bookmarks." msgstr "Extension simple pro supportar marcapaginas." msgid "Bookmark" -msgstr "" +msgstr "Marcapaginas" msgctxt "BUTTON" msgid "Upload" diff --git a/plugins/Bookmark/locale/mk/LC_MESSAGES/Bookmark.po b/plugins/Bookmark/locale/mk/LC_MESSAGES/Bookmark.po index 8621cf3093..7b4b0d7da8 100644 --- a/plugins/Bookmark/locale/mk/LC_MESSAGES/Bookmark.po +++ b/plugins/Bookmark/locale/mk/LC_MESSAGES/Bookmark.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Bookmark\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-08 01:03+0000\n" -"PO-Revision-Date: 2011-03-08 01:05:50+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:17:50+0000\n" "Language-Team: Macedonian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-06 02:12:57+0000\n" -"X-Generator: MediaWiki 1.18alpha (r83429); Translate extension (2011-03-07)\n" +"X-POT-Import-Date: 2011-03-08 01:22:22+0000\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: mk\n" "X-Message-Group: #out-statusnet-plugin-bookmark\n" @@ -25,7 +25,7 @@ msgid "Simple extension for supporting bookmarks." msgstr "Прост додаток за поддршка на обележувачи." msgid "Bookmark" -msgstr "" +msgstr "Одбележи" msgctxt "BUTTON" msgid "Upload" diff --git a/plugins/Bookmark/locale/nl/LC_MESSAGES/Bookmark.po b/plugins/Bookmark/locale/nl/LC_MESSAGES/Bookmark.po index ca207809ec..33bc7c28e1 100644 --- a/plugins/Bookmark/locale/nl/LC_MESSAGES/Bookmark.po +++ b/plugins/Bookmark/locale/nl/LC_MESSAGES/Bookmark.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Bookmark\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-08 01:03+0000\n" -"PO-Revision-Date: 2011-03-08 01:05:50+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:17:50+0000\n" "Language-Team: Dutch \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-06 02:12:57+0000\n" -"X-Generator: MediaWiki 1.18alpha (r83429); Translate extension (2011-03-07)\n" +"X-POT-Import-Date: 2011-03-08 01:22:22+0000\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: nl\n" "X-Message-Group: #out-statusnet-plugin-bookmark\n" @@ -25,7 +25,7 @@ msgid "Simple extension for supporting bookmarks." msgstr "Eenvoudige extensie voor de ondersteuning van bladwijzers." msgid "Bookmark" -msgstr "" +msgstr "Bladwijzer" msgctxt "BUTTON" msgid "Upload" diff --git a/plugins/Bookmark/locale/uk/LC_MESSAGES/Bookmark.po b/plugins/Bookmark/locale/uk/LC_MESSAGES/Bookmark.po index b23106c113..d46085720d 100644 --- a/plugins/Bookmark/locale/uk/LC_MESSAGES/Bookmark.po +++ b/plugins/Bookmark/locale/uk/LC_MESSAGES/Bookmark.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Bookmark\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-08 01:03+0000\n" -"PO-Revision-Date: 2011-03-08 01:05:50+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:17:50+0000\n" "Language-Team: Ukrainian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-06 02:12:57+0000\n" -"X-Generator: MediaWiki 1.18alpha (r83429); Translate extension (2011-03-07)\n" +"X-POT-Import-Date: 2011-03-08 01:22:22+0000\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: uk\n" "X-Message-Group: #out-statusnet-plugin-bookmark\n" @@ -26,7 +26,7 @@ msgid "Simple extension for supporting bookmarks." msgstr "Простий додаток, що підтримує додавання закладок." msgid "Bookmark" -msgstr "" +msgstr "Закладка" msgctxt "BUTTON" msgid "Upload" diff --git a/plugins/Directory/locale/Directory.pot b/plugins/Directory/locale/Directory.pot new file mode 100644 index 0000000000..6cc17de6c2 --- /dev/null +++ b/plugins/Directory/locale/Directory.pot @@ -0,0 +1,58 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: actions/userdirectory.php:94 +#, php-format +msgid "User Directory, page %d" +msgstr "" + +#: actions/userdirectory.php:96 +msgid "User directory" +msgstr "" + +#: actions/userdirectory.php:99 +#, php-format +msgid "User directory - %s" +msgstr "" + +#: actions/userdirectory.php:104 +#, php-format +msgid "User directory - %s, page %d" +msgstr "" + +#: actions/userdirectory.php:265 +msgctxt "BUTTON" +msgid "Search" +msgstr "" + +#: actions/userdirectory.php:370 +#, php-format +msgid "No users starting with %s" +msgstr "" + +#: DirectoryPlugin.php:187 +msgid "Add a user directory." +msgstr "" + +#: lib/sortablesubscriptionlist.php:66 +msgid "Nickname" +msgstr "" + +#: lib/sortablesubscriptionlist.php:67 +msgid "Created" +msgstr "" diff --git a/plugins/Event/locale/Event.pot b/plugins/Event/locale/Event.pot new file mode 100644 index 0000000000..5bc2222982 --- /dev/null +++ b/plugins/Event/locale/Event.pot @@ -0,0 +1,50 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: cancelrsvpform.php:126 +msgctxt "BUTTON" +msgid "Cancel" +msgstr "" + +#: rsvpform.php:116 +msgctxt "BUTTON" +msgid "Yes" +msgstr "" + +#: rsvpform.php:117 +msgctxt "BUTTON" +msgid "No" +msgstr "" + +#: rsvpform.php:118 +msgctxt "BUTTON" +msgid "Maybe" +msgstr "" + +#: eventform.php:162 +msgctxt "BUTTON" +msgid "Save" +msgstr "" + +#: EventPlugin.php:133 +msgid "Event invitations and RSVPs." +msgstr "" + +#: EventPlugin.php:138 +msgid "Event" +msgstr "" diff --git a/plugins/ExtendedProfile/locale/sv/LC_MESSAGES/ExtendedProfile.po b/plugins/ExtendedProfile/locale/sv/LC_MESSAGES/ExtendedProfile.po new file mode 100644 index 0000000000..98224ba955 --- /dev/null +++ b/plugins/ExtendedProfile/locale/sv/LC_MESSAGES/ExtendedProfile.po @@ -0,0 +1,97 @@ +# Translation of StatusNet - ExtendedProfile to Swedish (Svenska) +# Exported from translatewiki.net +# +# Author: WikiPhoenix +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - ExtendedProfile\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:18:04+0000\n" +"Language-Team: Swedish \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2011-03-08 01:22:06+0000\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: sv\n" +"X-Message-Group: #out-statusnet-plugin-extendedprofile\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "UI extensions for additional profile fields." +msgstr "" + +#. TRANS: Link description in user account settings menu. +msgid "Details" +msgstr "Detaljer" + +msgid "More details..." +msgstr "Mer detaljer..." + +msgid "Personal" +msgstr "Personlig" + +msgid "Full name" +msgstr "Fullt namn" + +msgid "Title" +msgstr "Titel" + +msgid "Manager" +msgstr "" + +msgid "Location" +msgstr "Ort" + +msgid "Bio" +msgstr "" + +msgid "Tags" +msgstr "Taggar" + +msgid "Contact" +msgstr "Kontakt" + +msgid "Phone" +msgstr "Telefon" + +msgid "IM" +msgstr "" + +msgid "Websites" +msgstr "Webbsidor" + +msgid "Birthday" +msgstr "Födelsedag" + +msgid "Spouse's name" +msgstr "Partnerns namn" + +msgid "Kids' names" +msgstr "Barnens namn" + +msgid "Work experience" +msgstr "Arbetserfarenhet" + +msgid "Employer" +msgstr "Arbetsgivare" + +msgid "Education" +msgstr "Utbildning" + +msgid "Institution" +msgstr "Institution" + +#. TRANS: Link title for link on user profile. +msgid "Edit extended profile settings" +msgstr "Redigera utökade profilinställningar" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "Redigera" + +msgid "Extended profile settings" +msgstr "Utökade profilinställningar" diff --git a/plugins/ExtendedProfile/locale/te/LC_MESSAGES/ExtendedProfile.po b/plugins/ExtendedProfile/locale/te/LC_MESSAGES/ExtendedProfile.po new file mode 100644 index 0000000000..cda6454eaf --- /dev/null +++ b/plugins/ExtendedProfile/locale/te/LC_MESSAGES/ExtendedProfile.po @@ -0,0 +1,97 @@ +# Translation of StatusNet - ExtendedProfile to Telugu (తెలుగు) +# Exported from translatewiki.net +# +# Author: Veeven +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - ExtendedProfile\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:18:04+0000\n" +"Language-Team: Telugu \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2011-03-08 01:22:06+0000\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: te\n" +"X-Message-Group: #out-statusnet-plugin-extendedprofile\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "UI extensions for additional profile fields." +msgstr "" + +#. TRANS: Link description in user account settings menu. +msgid "Details" +msgstr "వివరాలు" + +msgid "More details..." +msgstr "మరిన్ని వివరాలు..." + +msgid "Personal" +msgstr "వ్యక్తిగతం" + +msgid "Full name" +msgstr "పూర్తి పేరు" + +msgid "Title" +msgstr "శీర్షిక" + +msgid "Manager" +msgstr "" + +msgid "Location" +msgstr "ప్రాంతం" + +msgid "Bio" +msgstr "" + +msgid "Tags" +msgstr "ట్యాగులు" + +msgid "Contact" +msgstr "సంప్రదించండి" + +msgid "Phone" +msgstr "" + +msgid "IM" +msgstr "" + +msgid "Websites" +msgstr "జాలగూళ్ళు" + +msgid "Birthday" +msgstr "పుట్టినరోజు" + +msgid "Spouse's name" +msgstr "" + +msgid "Kids' names" +msgstr "పిల్లల పేర్లు" + +msgid "Work experience" +msgstr "ఉద్యోగ అనుభవం" + +msgid "Employer" +msgstr "" + +msgid "Education" +msgstr "చదువు" + +msgid "Institution" +msgstr "" + +#. TRANS: Link title for link on user profile. +msgid "Edit extended profile settings" +msgstr "" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "మార్చు" + +msgid "Extended profile settings" +msgstr "" diff --git a/plugins/Irc/locale/sv/LC_MESSAGES/Irc.po b/plugins/Irc/locale/sv/LC_MESSAGES/Irc.po new file mode 100644 index 0000000000..e554f17551 --- /dev/null +++ b/plugins/Irc/locale/sv/LC_MESSAGES/Irc.po @@ -0,0 +1,39 @@ +# Translation of StatusNet - Irc to Swedish (Svenska) +# Exported from translatewiki.net +# +# Author: WikiPhoenix +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - Irc\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:18:23+0000\n" +"Language-Team: Swedish \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2011-03-08 01:22:54+0000\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: sv\n" +"X-Message-Group: #out-statusnet-plugin-irc\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "IRC" +msgstr "IRC" + +msgid "" +"The IRC plugin allows users to send and receive notices over an IRC network." +msgstr "" +"IRC-tillägget tillåter användare skicka och ta emot meddelanden över IRC-" +"nätverket." + +#, php-format +msgid "Could not increment attempts count for %d" +msgstr "" + +msgid "Your nickname is not registered so IRC connectivity cannot be enabled" +msgstr "" +"Ditt smeknamn är inte registrerat, så IRC-anslutningar kan inte aktiveras" diff --git a/plugins/MobileProfile/locale/te/LC_MESSAGES/MobileProfile.po b/plugins/MobileProfile/locale/te/LC_MESSAGES/MobileProfile.po index 435688ea72..62b39f6ff9 100644 --- a/plugins/MobileProfile/locale/te/LC_MESSAGES/MobileProfile.po +++ b/plugins/MobileProfile/locale/te/LC_MESSAGES/MobileProfile.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - MobileProfile\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-06 02:34+0100\n" -"PO-Revision-Date: 2011-03-06 01:37:37+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:18:38+0000\n" "Language-Team: Telugu \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-03 17:49:34+0000\n" -"X-Generator: MediaWiki 1.18alpha (r83348); Translate extension (2011-03-04)\n" +"X-POT-Import-Date: 2011-03-08 01:22:09+0000\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: te\n" "X-Message-Group: #out-statusnet-plugin-mobileprofile\n" @@ -55,10 +55,10 @@ msgid "Search" msgstr "వెతుకు" msgid "Attach" -msgstr "" +msgstr "జోడించు" msgid "Attach a file" -msgstr "" +msgstr "ఒక దస్త్రాన్ని జోడించండి" #. TRANS: Link to switch site layout from mobile to desktop mode. Appears at very bottom of page. msgid "Switch to desktop site layout." diff --git a/plugins/Msn/locale/sv/LC_MESSAGES/Msn.po b/plugins/Msn/locale/sv/LC_MESSAGES/Msn.po new file mode 100644 index 0000000000..6077703e63 --- /dev/null +++ b/plugins/Msn/locale/sv/LC_MESSAGES/Msn.po @@ -0,0 +1,31 @@ +# Translation of StatusNet - Msn to Swedish (Svenska) +# Exported from translatewiki.net +# +# Author: WikiPhoenix +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - Msn\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:18:41+0000\n" +"Language-Team: Swedish \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2011-03-08 01:22:11+0000\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: sv\n" +"X-Message-Group: #out-statusnet-plugin-msn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "MSN" +msgstr "MSN" + +msgid "" +"The MSN plugin allows users to send and receive notices over the MSN network." +msgstr "" +"MSN-tillägget tillåter användare skicka och ta emot meddelanden över MSN-" +"nätverket." diff --git a/plugins/OpenX/locale/de/LC_MESSAGES/OpenX.po b/plugins/OpenX/locale/de/LC_MESSAGES/OpenX.po index 6fbf6cc977..11048a707a 100644 --- a/plugins/OpenX/locale/de/LC_MESSAGES/OpenX.po +++ b/plugins/OpenX/locale/de/LC_MESSAGES/OpenX.po @@ -2,6 +2,7 @@ # Exported from translatewiki.net # # Author: Fujnky +# Author: George Animal # Author: The Evil IP address # -- # This file is distributed under the same license as the StatusNet package. @@ -10,13 +11,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - OpenX\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-06 02:34+0100\n" -"PO-Revision-Date: 2011-03-06 01:37:51+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:18:54+0000\n" "Language-Team: German \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-03 17:45:43+0000\n" -"X-Generator: MediaWiki 1.18alpha (r83348); Translate extension (2011-03-04)\n" +"X-POT-Import-Date: 2011-03-06 02:18:35+0000\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: de\n" "X-Message-Group: #out-statusnet-plugin-openx\n" @@ -61,7 +62,7 @@ msgstr "" #. TRANS: Form label in OpenX admin panel. Refers to advertisement format. msgid "Rectangle" -msgstr "" +msgstr "Rechteck" #. TRANS: Tooltip for form label in OpenX admin panel. Refers to advertisement format. msgid "Rectangle zone" diff --git a/plugins/Poll/locale/Poll.pot b/plugins/Poll/locale/Poll.pot new file mode 100644 index 0000000000..85b1b74dc1 --- /dev/null +++ b/plugins/Poll/locale/Poll.pot @@ -0,0 +1,175 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#. TRANS: Client exception thrown trying to view a non-existing poll. +#: showpoll.php:68 +msgid "No such poll." +msgstr "" + +#. TRANS: Client exception thrown trying to view a non-existing poll notice. +#: showpoll.php:76 +msgid "No such poll notice." +msgstr "" + +#. TRANS: Client exception thrown trying to view a poll of a non-existing user. +#: showpoll.php:83 +msgid "No such user." +msgstr "" + +#. TRANS: Server exception thrown trying to view a poll for a user for which the profile could not be loaded. +#: showpoll.php:90 +msgid "User without a profile." +msgstr "" + +#. TRANS: Page title for a poll. +#. TRANS: %1$s is the nickname of the user that created the poll, %2$s is the poll question. +#: showpoll.php:109 +#, php-format +msgid "%1$s's poll: %2$s" +msgstr "" + +#. TRANS: Field label on the page to create a poll. +#: newpollform.php:107 +msgid "Question" +msgstr "" + +#. TRANS: Field title on the page to create a poll. +#: newpollform.php:110 +msgid "What question are people answering?" +msgstr "" + +#. TRANS: Field label for an answer option on the page to create a poll. +#. TRANS: %d is the option number. +#: newpollform.php:128 +#, php-format +msgid "Option %d" +msgstr "" + +#. TRANS: Button text for saving a new poll. +#: newpollform.php:145 +msgctxt "BUTTON" +msgid "Save" +msgstr "" + +#. TRANS: Plugin description. +#: PollPlugin.php:157 +msgid "Simple extension for supporting basic polls." +msgstr "" + +#. TRANS: Exception thrown trying to respond to a poll without a poll reference. +#: PollPlugin.php:234 +msgid "Invalid poll response: no poll reference." +msgstr "" + +#. TRANS: Exception thrown trying to respond to a non-existing poll. +#: PollPlugin.php:239 +msgid "Invalid poll response: poll is unknown." +msgstr "" + +#. TRANS: Exception thrown when performing an unexpected action on a poll. +#. TRANS: %s is the unpexpected object type. +#: PollPlugin.php:266 PollPlugin.php:371 +#, php-format +msgid "Unexpected type for poll plugin: %s." +msgstr "" + +#. TRANS: Application title. +#: PollPlugin.php:432 +msgctxt "APPTITLE" +msgid "Poll" +msgstr "" + +#. TRANS: Client exception thrown when responding to a poll with an invalid option. +#. TRANS: Client exception thrown responding to a poll with an invalid answer. +#: Poll_response.php:166 respondpoll.php:102 +msgid "Invalid poll selection." +msgstr "" + +#. TRANS: Notice content voting for a poll. +#. TRANS: %s is the chosen option in the poll. +#. TRANS: Rendered version of the notice content voting for a poll. +#. TRANS: %s a link to the poll with the chosen option as link description. +#: Poll_response.php:195 Poll_response.php:200 +#, php-format +msgid "voted for \"%s\"" +msgstr "" + +#. TRANS: Button text for submitting a poll response. +#: pollresponseform.php:127 +msgctxt "BUTTON" +msgid "Submit" +msgstr "" + +#. TRANS: Notice content creating a poll. +#. TRANS: %1$s is the poll question, %2$s is a link to the poll. +#: Poll.php:240 +#, php-format +msgid "Poll: %1$s %2$s" +msgstr "" + +#. TRANS: Rendered version of the notice content creating a poll. +#. TRANS: %s a link to the poll with the question as link description. +#: Poll.php:246 +#, php-format +msgid "Poll: %s" +msgstr "" + +#. TRANS: Title for poll page. +#: newpoll.php:63 +msgid "New poll" +msgstr "" + +#. TRANS: Client exception thrown trying to create a poll while not logged in. +#: newpoll.php:81 +msgid "You must be logged in to post a poll." +msgstr "" + +#. TRANS: Client exception thrown trying to create a poll without a question. +#: newpoll.php:133 +msgid "Poll must have a question." +msgstr "" + +#. TRANS: Client exception thrown trying to create a poll with fewer than two options. +#: newpoll.php:138 +msgid "Poll must have at least two options." +msgstr "" + +#. TRANS: Page title after sending a notice. +#: newpoll.php:157 +msgid "Notice posted" +msgstr "" + +#. TRANS: Page title for poll response. +#: respondpoll.php:63 +msgid "Poll response" +msgstr "" + +#. TRANS: Client exception thrown trying to respond to a poll while not logged in. +#: respondpoll.php:84 +msgid "You must be logged in to respond to a poll." +msgstr "" + +#. TRANS: Client exception thrown trying to respond to a non-existing poll. +#: respondpoll.php:96 +msgid "Invalid or missing poll." +msgstr "" + +#. TRANS: Page title after sending a poll response. +#: respondpoll.php:152 +msgid "Poll results" +msgstr "" diff --git a/plugins/ShareNotice/locale/te/LC_MESSAGES/ShareNotice.po b/plugins/ShareNotice/locale/te/LC_MESSAGES/ShareNotice.po index 779d511c03..abf9d8f211 100644 --- a/plugins/ShareNotice/locale/te/LC_MESSAGES/ShareNotice.po +++ b/plugins/ShareNotice/locale/te/LC_MESSAGES/ShareNotice.po @@ -1,5 +1,5 @@ # Translation of StatusNet - ShareNotice to Telugu (తెలుగు) -# Expored from translatewiki.net +# Exported from translatewiki.net # # Author: Veeven # -- @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - ShareNotice\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-12-16 15:08+0000\n" -"PO-Revision-Date: 2010-12-16 15:12:54+0000\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:19:17+0000\n" "Language-Team: Telugu \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2010-11-30 20:43:55+0000\n" -"X-Generator: MediaWiki 1.18alpha (r78478); Translate extension (2010-09-17)\n" +"X-POT-Import-Date: 2011-03-06 02:18:45+0000\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: te\n" "X-Message-Group: #out-statusnet-plugin-sharenotice\n" @@ -23,30 +23,25 @@ msgstr "" #. TRANS: Leave this message unchanged. #. TRANS: %s is notice content that is shared on Twitter, Facebook or another platform. -#: ShareNoticePlugin.php:106 ShareNoticePlugin.php:194 #, php-format msgid "\"%s\"" msgstr "\"%s\"" #. TRANS: Tooltip for image to share a notice on Twitter. -#: ShareNoticePlugin.php:130 msgid "Share on Twitter" -msgstr "" +msgstr "ట్విట్టర్లో పంచుకోండి" #. TRANS: Tooltip for image to share a notice on another platform (other than Twitter or Facebook). #. TRANS: %s is a host name. -#: ShareNoticePlugin.php:163 #, php-format msgid "Share on %s" msgstr "" #. TRANS: Tooltip for image to share a notice on Facebook. -#: ShareNoticePlugin.php:186 msgid "Share on Facebook" -msgstr "" +msgstr "ఫేస్‌బుక్‌లో పంచుకోండి" #. TRANS: Plugin description. -#: ShareNoticePlugin.php:219 msgid "" "This plugin allows sharing of notices to Twitter, Facebook and other " "platforms." diff --git a/plugins/SphinxSearch/locale/SphinxSearch.pot b/plugins/SphinxSearch/locale/SphinxSearch.pot index 2748722d23..b91e5ba5cf 100644 --- a/plugins/SphinxSearch/locale/SphinxSearch.pot +++ b/plugins/SphinxSearch/locale/SphinxSearch.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-06 02:34+0100\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #. TRANS: Server exception thrown when a database name cannot be identified. -#: sphinxsearch.php:96 +#: sphinxsearch.php:126 msgid "Sphinx search could not identify database name." msgstr "" diff --git a/plugins/UserFlag/locale/UserFlag.pot b/plugins/UserFlag/locale/UserFlag.pot index 8930e08c9e..0e06dd3a8a 100644 --- a/plugins/UserFlag/locale/UserFlag.pot +++ b/plugins/UserFlag/locale/UserFlag.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-06 02:34+0100\n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -29,7 +29,7 @@ msgid "Flagged" msgstr "" #. TRANS: Plugin description. -#: UserFlagPlugin.php:294 +#: UserFlagPlugin.php:279 msgid "" "This plugin allows flagging of profiles for review and reviewing flagged " "profiles." diff --git a/plugins/UserFlag/locale/de/LC_MESSAGES/UserFlag.po b/plugins/UserFlag/locale/de/LC_MESSAGES/UserFlag.po new file mode 100644 index 0000000000..49506be5f5 --- /dev/null +++ b/plugins/UserFlag/locale/de/LC_MESSAGES/UserFlag.po @@ -0,0 +1,95 @@ +# Translation of StatusNet - UserFlag to German (Deutsch) +# Exported from translatewiki.net +# +# Author: Habi +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - UserFlag\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:19:37+0000\n" +"Language-Team: German \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2011-03-06 02:19:38+0000\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: de\n" +"X-Message-Group: #out-statusnet-plugin-userflag\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. TRANS: AJAX form title for a flagged profile. +msgid "Flagged for review" +msgstr "Zum Überprüfen markiert" + +#. TRANS: Body text for AJAX form when a profile has been flagged for review. +#. TRANS: Message added to a profile if it has been flagged for review. +msgid "Flagged" +msgstr "Markiert" + +#. TRANS: Plugin description. +msgid "" +"This plugin allows flagging of profiles for review and reviewing flagged " +"profiles." +msgstr "" +"Dieser Plugin ermöglicht, Profile zur Überprüfung zu markieren und diese " +"markierten Profile zu überprüfen." + +#. TRANS: Form title for flagging a profile for review. +msgid "Flag" +msgstr "Markieren" + +#. TRANS: Form description. +msgid "Flag profile for review." +msgstr "Profil zur Überprüfung markieren." + +#. TRANS: Form title for action on a profile. +msgid "Clear" +msgstr "Löschen" + +msgid "Clear all flags" +msgstr "Alle Markierungen löschen" + +#. TRANS: Title for page with a list of profiles that were flagged for review. +msgid "Flagged profiles" +msgstr "Markierte Profile" + +#. TRANS: Header for moderation menu with action buttons for flagged profiles (like 'sandbox', 'silence', ...). +msgid "Moderate" +msgstr "Moderieren" + +#. TRANS: Message displayed on a profile if it has been flagged. +#. TRANS: %1$s is a comma separated list of at most 5 user nicknames that flagged. +#. TRANS: %2$d is a positive integer of additional flagging users. Also used for the plural. +#, php-format +msgid "Flagged by %1$s and %2$d other" +msgid_plural "Flagged by %1$s and %2$d others" +msgstr[0] "Markiert durch %1$s und %2$d weitere Konten" +msgstr[1] "Markiert durch %1$s und %2$d Andere" + +#. TRANS: Message displayed on a profile if it has been flagged. +#. TRANS: %s is a comma separated list of at most 5 user nicknames that flagged. +#, php-format +msgid "Flagged by %s" +msgstr "Durch %s markiert" + +#. TRANS: Server exception given when flags could not be cleared. +#, php-format +msgid "Couldn't clear flags for profile \"%s\"." +msgstr "Konnte Markierung für Profil \"%s\" nicht entfernen." + +#. TRANS: Title for AJAX form to indicated that flags were removed. +msgid "Flags cleared" +msgstr "" + +#. TRANS: Body element for "flags cleared" form. +msgid "Cleared" +msgstr "" + +#. TRANS: Server exception. +#, php-format +msgid "Couldn't flag profile \"%d\" for review." +msgstr "" diff --git a/plugins/Xmpp/locale/sv/LC_MESSAGES/Xmpp.po b/plugins/Xmpp/locale/sv/LC_MESSAGES/Xmpp.po new file mode 100644 index 0000000000..ae1791d60a --- /dev/null +++ b/plugins/Xmpp/locale/sv/LC_MESSAGES/Xmpp.po @@ -0,0 +1,35 @@ +# Translation of StatusNet - Xmpp to Swedish (Svenska) +# Exported from translatewiki.net +# +# Author: WikiPhoenix +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - Xmpp\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"PO-Revision-Date: 2011-03-11 18:19:44+0000\n" +"Language-Team: Swedish \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2011-03-08 01:22:14+0000\n" +"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: sv\n" +"X-Message-Group: #out-statusnet-plugin-xmpp\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Send me a message to post a notice" +msgstr "" + +msgid "XMPP/Jabber/GTalk" +msgstr "XMPP/Jabber/GTalk" + +msgid "" +"The XMPP plugin allows users to send and receive notices over the XMPP/" +"Jabber network." +msgstr "" +"XMPP-tillägget tillåter användare skicka och ta emot meddelanden över XMPP/" +"Jabber-nätverket." From 3146c9fae843a3f3ba0e840610b4a7607d29153e Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Fri, 11 Mar 2011 11:54:23 -0800 Subject: [PATCH 026/146] Add event hooks for customizing ActivityObject output to Atom and JSON, and helpers for MicroAppPlugin. New hooks: * StartActivityObjectOutputAtom * EndActivityObjectOutputAtom $obj ActivityObject $out XMLOutputter * StartActivityObjectOutputJson * EndActivityObjectOutputJson $obj ActivityObject &$out array --- EVENTS.txt | 16 +++ lib/activityobject.php | 290 +++++++++++++++++++++-------------------- lib/microappplugin.php | 78 +++++++++++ 3 files changed, 242 insertions(+), 142 deletions(-) diff --git a/EVENTS.txt b/EVENTS.txt index 6cc1a7fe1c..1443a94fbe 100644 --- a/EVENTS.txt +++ b/EVENTS.txt @@ -1115,3 +1115,19 @@ StartGroupProfileElements: Start showing stuff about the group on its profile pa EndGroupProfileElements: Start showing stuff about the group on its profile page - $action: action being executed (for output and params) - $group: group for the page + +StartActivityObjectOutputAtom: Called at start of Atom XML output generation for ActivityObject chunks, just inside the . Cancel the event to take over its output completely (you're responsible for calling the matching End event if so) +- $obj: ActivityObject +- $out: XMLOutputter to append custom output + +EndActivityObjectOutputAtom: Called at end of Atom XML output generation for ActivityObject chunks, just inside the +- $obj: ActivityObject +- $out: XMLOutputter to append custom output + +StartActivityObjectOutputJson: Called at start of JSON output generation for ActivityObject chunks: the array has not yet been filled out. Cancel the event to take over its output completely (you're responsible for calling the matching End event if so) +- $obj ActivityObject +- &$out: array to be serialized; you're free to modify it + +EndActivityObjectOutputJson: Called at end of JSON output generation for ActivityObject chunks: the array has not yet been filled out. +- $obj ActivityObject +- &$out: array to be serialized; you're free to modify it diff --git a/lib/activityobject.php b/lib/activityobject.php index d620bf27bb..241f99564f 100644 --- a/lib/activityobject.php +++ b/lib/activityobject.php @@ -533,91 +533,95 @@ class ActivityObject $xo->elementStart($tag); } - $xo->element('activity:object-type', null, $this->type); + if (Event::handle('StartActivityObjectOutputAtom', array($this, $xo))) { + $xo->element('activity:object-type', null, $this->type); - // uses URI + // uses URI - if ($tag == 'author') { - $xo->element(self::URI, null, $this->id); - } else { - $xo->element(self::ID, null, $this->id); - } - - if (!empty($this->title)) { - $name = common_xml_safe_str($this->title); if ($tag == 'author') { - // XXX: Backward compatibility hack -- atom:name should contain - // full name here, instead of nickname, i.e.: $name. Change - // this in the next version. - $xo->element(self::NAME, null, $this->poco->preferredUsername); + $xo->element(self::URI, null, $this->id); } else { - $xo->element(self::TITLE, null, $name); + $xo->element(self::ID, null, $this->id); } - } - if (!empty($this->summary)) { - $xo->element( - self::SUMMARY, - null, - common_xml_safe_str($this->summary) - ); - } + if (!empty($this->title)) { + $name = common_xml_safe_str($this->title); + if ($tag == 'author') { + // XXX: Backward compatibility hack -- atom:name should contain + // full name here, instead of nickname, i.e.: $name. Change + // this in the next version. + $xo->element(self::NAME, null, $this->poco->preferredUsername); + } else { + $xo->element(self::TITLE, null, $name); + } + } - if (!empty($this->content)) { - // XXX: assuming HTML content here - $xo->element( - ActivityUtils::CONTENT, - array('type' => 'html'), - common_xml_safe_str($this->content) - ); - } - - if (!empty($this->link)) { - $xo->element( - 'link', - array( - 'rel' => 'alternate', - 'type' => 'text/html', - 'href' => $this->link - ), - null - ); - } - - if ($this->type == ActivityObject::PERSON - || $this->type == ActivityObject::GROUP) { - - foreach ($this->avatarLinks as $avatar) { + if (!empty($this->summary)) { $xo->element( - 'link', array( - 'rel' => 'avatar', - 'type' => $avatar->type, - 'media:width' => $avatar->width, - 'media:height' => $avatar->height, - 'href' => $avatar->url + self::SUMMARY, + null, + common_xml_safe_str($this->summary) + ); + } + + if (!empty($this->content)) { + // XXX: assuming HTML content here + $xo->element( + ActivityUtils::CONTENT, + array('type' => 'html'), + common_xml_safe_str($this->content) + ); + } + + if (!empty($this->link)) { + $xo->element( + 'link', + array( + 'rel' => 'alternate', + 'type' => 'text/html', + 'href' => $this->link ), null ); } - } - if (!empty($this->geopoint)) { - $xo->element( - 'georss:point', - null, - $this->geopoint - ); - } + if ($this->type == ActivityObject::PERSON + || $this->type == ActivityObject::GROUP) { - if (!empty($this->poco)) { - $this->poco->outputTo($xo); - } + foreach ($this->avatarLinks as $avatar) { + $xo->element( + 'link', array( + 'rel' => 'avatar', + 'type' => $avatar->type, + 'media:width' => $avatar->width, + 'media:height' => $avatar->height, + 'href' => $avatar->url + ), + null + ); + } + } - // @fixme there's no way here to make a tree; elements can only contain plaintext - // @fixme these may collide with JSON extensions - foreach ($this->extra as $el) { - list($extraTag, $attrs, $content) = $el; - $xo->element($extraTag, $attrs, $content); + if (!empty($this->geopoint)) { + $xo->element( + 'georss:point', + null, + $this->geopoint + ); + } + + if (!empty($this->poco)) { + $this->poco->outputTo($xo); + } + + // @fixme there's no way here to make a tree; elements can only contain plaintext + // @fixme these may collide with JSON extensions + foreach ($this->extra as $el) { + list($extraTag, $attrs, $content) = $el; + $xo->element($extraTag, $attrs, $content); + } + + Event::handle('EndActivityObjectOutputAtom', array($this, $xo)); } if (!empty($tag)) { @@ -647,94 +651,96 @@ class ActivityObject { $object = array(); - // XXX: attachedObjects are added by Activity + if (Event::handle('StartActivityObjectOutputJson', array($this, &$object))) { + // XXX: attachedObjects are added by Activity - // displayName - $object['displayName'] = $this->title; + // displayName + $object['displayName'] = $this->title; - // TODO: downstreamDuplicates + // TODO: downstreamDuplicates - // embedCode (used for video) + // embedCode (used for video) - // id - // - // XXX: Should we use URL here? or a crazy tag URI? - $object['id'] = $this->id; + // id + // + // XXX: Should we use URL here? or a crazy tag URI? + $object['id'] = $this->id; - if ($this->type == ActivityObject::PERSON - || $this->type == ActivityObject::GROUP) { + if ($this->type == ActivityObject::PERSON + || $this->type == ActivityObject::GROUP) { - // XXX: Not sure what the best avatar is to use for the - // author's "image". For now, I'm using the large size. + // XXX: Not sure what the best avatar is to use for the + // author's "image". For now, I'm using the large size. - $avatarLarge = null; - $avatarMediaLinks = array(); + $avatarLarge = null; + $avatarMediaLinks = array(); - foreach ($this->avatarLinks as $a) { + foreach ($this->avatarLinks as $a) { - // Make a MediaLink for every other Avatar - $avatar = new ActivityStreamsMediaLink( - $a->url, - $a->width, - $a->height, - $a->type, - 'avatar' - ); + // Make a MediaLink for every other Avatar + $avatar = new ActivityStreamsMediaLink( + $a->url, + $a->width, + $a->height, + $a->type, + 'avatar' + ); - // Find the big avatar to use as the "image" - if ($a->height == AVATAR_PROFILE_SIZE) { - $imgLink = $avatar; + // Find the big avatar to use as the "image" + if ($a->height == AVATAR_PROFILE_SIZE) { + $imgLink = $avatar; + } + + $avatarMediaLinks[] = $avatar->asArray(); } - $avatarMediaLinks[] = $avatar->asArray(); + $object['avatarLinks'] = $avatarMediaLinks; // extension + + // image + $object['image'] = $imgLink->asArray(); } - $object['avatarLinks'] = $avatarMediaLinks; // extension + // objectType + // + // We can probably use the whole schema URL here but probably the + // relative simple name is easier to parse + // @fixme this breaks extension URIs + $object['type'] = substr($this->type, strrpos($this->type, '/') + 1); - // image - $object['image'] = $imgLink->asArray(); + // summary + $object['summary'] = $this->summary; + + // TODO: upstreamDuplicates + + // url (XXX: need to put the right thing here...) + $object['url'] = $this->id; + + /* Extensions */ + // @fixme these may collide with XML extensions + // @fixme multiple tags of same name will overwrite each other + // @fixme text content from XML extensions will be lost + foreach ($this->extra as $e) { + list($objectName, $props, $txt) = $e; + $object[$objectName] = $props; + } + + // GeoJSON + + if (!empty($this->geopoint)) { + + list($lat, $long) = explode(' ', $this->geopoint); + + $object['geopoint'] = array( + 'type' => 'Point', + 'coordinates' => array($lat, $long) + ); + } + + if (!empty($this->poco)) { + $object['contact'] = $this->poco->asArray(); + } + Event::handle('EndActivityObjectOutputJson', array($this, &$object)); } - - // objectType - // - // We can probably use the whole schema URL here but probably the - // relative simple name is easier to parse - // @fixme this breaks extension URIs - $object['type'] = substr($this->type, strrpos($this->type, '/') + 1); - - // summary - $object['summary'] = $this->summary; - - // TODO: upstreamDuplicates - - // url (XXX: need to put the right thing here...) - $object['url'] = $this->id; - - /* Extensions */ - // @fixme these may collide with XML extensions - // @fixme multiple tags of same name will overwrite each other - // @fixme text content from XML extensions will be lost - foreach ($this->extra as $e) { - list($objectName, $props, $txt) = $e; - $object[$objectName] = $props; - } - - // GeoJSON - - if (!empty($this->geopoint)) { - - list($lat, $long) = explode(' ', $this->geopoint); - - $object['geopoint'] = array( - 'type' => 'Point', - 'coordinates' => array($lat, $long) - ); - } - - if (!empty($this->poco)) { - $object['contact'] = $this->poco->asArray(); - } - return array_filter($object); } } diff --git a/lib/microappplugin.php b/lib/microappplugin.php index fbead58cc5..86803b8ae3 100644 --- a/lib/microappplugin.php +++ b/lib/microappplugin.php @@ -212,6 +212,44 @@ abstract class MicroAppPlugin extends Plugin in_array($activity->objects[0]->type, $types)); } + /** + * Called when generating Atom XML ActivityStreams output from an + * ActivityObject belonging to this plugin. Gives the plugin + * a chance to add custom output. + * + * Note that you can only add output of additional XML elements, + * not change existing stuff here. + * + * If output is already handled by the base Activity classes, + * you can leave this base implementation as a no-op. + * + * @param ActivityObject $obj + * @param XMLOutputter $out to add elements at end of object + */ + function activityObjectOutputAtom(ActivityObject $obj, XMLOutputter $out) + { + // default is a no-op + } + + /** + * Called when generating JSON ActivityStreams output from an + * ActivityObject belonging to this plugin. Gives the plugin + * a chance to add custom output. + * + * Modify the array contents to your heart's content, and it'll + * all get serialized out as JSON. + * + * If output is already handled by the base Activity classes, + * you can leave this base implementation as a no-op. + * + * @param ActivityObject $obj + * @param array &$out JSON-targeted array which can be modified + */ + public function activityObjectOutputJson(ActivityObject $obj, array &$out) + { + // default is a no-op + } + /** * When a notice is deleted, delete the related objects * by calling the overridable $this->deleteRelated(). @@ -439,6 +477,46 @@ abstract class MicroAppPlugin extends Plugin return true; } + /** + * Event handler gives the plugin a chance to add custom + * Atom XML ActivityStreams output from a previously filled-out + * ActivityObject. + * + * The atomOutput method is called if it's one of + * our matching types. + * + * @param ActivityObject $obj + * @param XMLOutputter $out to add elements at end of object + * @return boolean hook return value + */ + function onEndActivityObjectOutputAtom(ActivityObject $obj, XMLOutputter $out) + { + if (in_array($obj->type, $this->types())) { + $this->activityObjectOutputAtom($obj, $out); + } + return true; + } + + /** + * Event handler gives the plugin a chance to add custom + * JSON ActivityStreams output from a previously filled-out + * ActivityObject. + * + * The activityObjectOutputJson method is called if it's one of + * our matching types. + * + * @param ActivityObject $obj + * @param array &$out JSON-targeted array which can be modified + * @return boolean hook return value + */ + function onEndActivityObjectOutputJson(ActivityObject $obj, array &$out) + { + if (in_array($obj->type, $this->types())) { + $this->activityObjectOutputJson($obj, &$out); + } + return true; + } + function onStartShowEntryForms(&$tabs) { $tabs[$this->tag()] = $this->appTitle(); From a9d589dbdcd19169a6e1900bf578fba6c5c5ec4e Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Fri, 11 Mar 2011 12:28:15 -0800 Subject: [PATCH 027/146] Poll plugin: switching Atom & JSON output to use new hooks & methods, much nicer output. Also switched types, which may break old entries. Beware! Input not yet updated. --- plugins/Poll/PollPlugin.php | 171 +++++++++++++++++++++++------------- 1 file changed, 112 insertions(+), 59 deletions(-) diff --git a/plugins/Poll/PollPlugin.php b/plugins/Poll/PollPlugin.php index 34c37eb526..78357457a6 100644 --- a/plugins/Poll/PollPlugin.php +++ b/plugins/Poll/PollPlugin.php @@ -48,8 +48,8 @@ class PollPlugin extends MicroAppPlugin const VERSION = '0.1'; // @fixme which domain should we use for these namespaces? - const POLL_OBJECT = 'http://apinamespace.org/activitystreams/object/poll'; - const POLL_RESPONSE_OBJECT = 'http://apinamespace.org/activitystreams/object/poll-response'; + const POLL_OBJECT = 'http://activityschema.org/object/poll'; + const POLL_RESPONSE_OBJECT = 'http://activityschema.org/object/poll-response'; /** * Database schema setup @@ -277,33 +277,15 @@ class PollPlugin extends MicroAppPlugin $object->link = $notice->bestUrl(); $response = Poll_response::getByNotice($notice); - if (!$response) { - common_log(LOG_DEBUG, "QQQ notice uri: $notice->uri"); - } else { + if ($response) { $poll = $response->getPoll(); - /** - * For the moment, using a kind of icky-looking schema that happens to - * work with out code for generating both Atom and JSON forms, though - * I don't like it: - * - * - * - * "poll:response": { - * "xmlns:poll": http://apinamespace.org/activitystreams/object/poll - * "uri": "http://..../poll/...." - * "selection": 3 - * } - * - */ - // @fixme there's no way to specify an XML node tree here, like - // @fixme there's no way to specify a JSON array or multi-level tree unless you break the XML attribs - // @fixme XML node contents don't get shown in JSON - $data = array('xmlns:poll' => self::POLL_OBJECT, - 'poll' => $poll->uri, - 'selection' => intval($response->selection)); - $object->extra[] = array('poll:response', $data, ''); + if ($poll) { + // Stash data to be formatted later by + // $this->activityObjectOutputAtom() or + // $this->activityObjectOutputJson()... + $object->pollSelection = intval($response->selection); + $object->pollUri = $poll->uri; + } } return $object; } @@ -318,41 +300,112 @@ class PollPlugin extends MicroAppPlugin $object->link = $notice->bestUrl(); $poll = Poll::getByNotice($notice); - /** - * Adding the poll-specific data. There's no standard in AS for polls, - * so we're making stuff up. - * - * For the moment, using a kind of icky-looking schema that happens to - * work with out code for generating both Atom and JSON forms, though - * I don't like it: - * - * - * - * "poll:response": { - * "xmlns:poll": http://apinamespace.org/activitystreams/object/poll - * "question": "Who wants a poll question?" - * "option1": "Option one" - * "option2": "Option two" - * "option3": "Option three" - * } - * - */ - // @fixme there's no way to specify an XML node tree here, like - // @fixme there's no way to specify a JSON array or multi-level tree unless you break the XML attribs - // @fixme XML node contents don't get shown in JSON - $data = array('xmlns:poll' => self::POLL_OBJECT, - 'question' => $poll->question); - foreach ($poll->getOptions() as $i => $opt) { - $data['option' . ($i + 1)] = $opt; + if ($poll) { + // Stash data to be formatted later by + // $this->activityObjectOutputAtom() or + // $this->activityObjectOutputJson()... + $object->pollQuestion = $poll->question; + $object->pollOptions = $poll->getOptions(); } - $object->extra[] = array('poll:poll', $data, ''); + return $object; } + /** + * Called when generating Atom XML ActivityStreams output from an + * ActivityObject belonging to this plugin. Gives the plugin + * a chance to add custom output. + * + * Note that you can only add output of additional XML elements, + * not change existing stuff here. + * + * If output is already handled by the base Activity classes, + * you can leave this base implementation as a no-op. + * + * @param ActivityObject $obj + * @param XMLOutputter $out to add elements at end of object + */ + function activityObjectOutputAtom(ActivityObject $obj, XMLOutputter $out) + { + if (isset($obj->pollQuestion)) { + /** + * + * Who wants a poll question? + * Option one + * Option two + * Option three + * + */ + $data = array('xmlns:poll' => self::POLL_OBJECT); + $out->elementStart('poll:poll', $data); + $out->element('poll:question', array(), $obj->pollQuestion); + foreach ($obj->pollOptions as $opt) { + $out->element('poll:option', array(), $opt); + } + $out->elementEnd('poll:poll'); + } + if (isset($obj->pollSelection)) { + /** + * + * poll="http://..../poll/...." + * selection="3" /> + */ + $data = array('xmlns:poll' => self::POLL_OBJECT, + 'poll' => $obj->pollUri, + 'selection' => $obj->pollSelection); + $out->element('poll:response', $data, ''); + } + } + + /** + * Called when generating JSON ActivityStreams output from an + * ActivityObject belonging to this plugin. Gives the plugin + * a chance to add custom output. + * + * Modify the array contents to your heart's content, and it'll + * all get serialized out as JSON. + * + * If output is already handled by the base Activity classes, + * you can leave this base implementation as a no-op. + * + * @param ActivityObject $obj + * @param array &$out JSON-targeted array which can be modified + */ + public function activityObjectOutputJson(ActivityObject $obj, array &$out) + { + common_log(LOG_DEBUG, 'QQQ: ' . var_export($obj, true)); + if (isset($obj->pollQuestion)) { + /** + * "poll": { + * "question": "Who wants a poll question?", + * "options": [ + * "Option 1", + * "Option 2", + * "Option 3" + * ] + * } + */ + $data = array('question' => $obj->pollQuestion, + 'options' => array()); + foreach ($obj->pollOptions as $opt) { + $data['options'][] = $opt; + } + $out['poll'] = $data; + } + if (isset($obj->pollSelection)) { + /** + * "pollResponse": { + * "poll": "http://..../poll/....", + * "selection": 3 + * } + */ + $data = array('poll' => $obj->pollUri, + 'selection' => $obj->pollSelection); + $out['pollResponse'] = $data; + } + } + + /** * @fixme WARNING WARNING WARNING parent class closes the final div that we * open here, but we probably shouldn't open it here. Check parent class From e1136bacaec721c08b830f52e80069f89b7a45e2 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Fri, 11 Mar 2011 12:41:11 -0800 Subject: [PATCH 028/146] Update PollPlugin Atom input --- plugins/Poll/PollPlugin.php | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/plugins/Poll/PollPlugin.php b/plugins/Poll/PollPlugin.php index 78357457a6..490f39005f 100644 --- a/plugins/Poll/PollPlugin.php +++ b/plugins/Poll/PollPlugin.php @@ -203,26 +203,22 @@ class PollPlugin extends MicroAppPlugin $pollElements = $activity->entry->getElementsByTagNameNS(self::POLL_OBJECT, 'poll'); $responseElements = $activity->entry->getElementsByTagNameNS(self::POLL_OBJECT, 'response'); if ($pollElements->length) { - $data = $pollElements->item(0); - $question = $data->getAttribute('question'); + $question = ''; $opts = array(); - foreach ($data->attributes as $node) { - $name = $node->nodeName; - if (substr($name, 0, 6) == 'option') { - $n = intval(substr($name, 6)); - if ($n > 0) { - $opts[$n - 1] = $node->nodeValue; - } - } + + $data = $pollElements->item(0); + foreach ($data->getElementsByTagNameNS(self::POLL_OBJECT, 'question') as $node) { + $question = $node->textValue; // ? + } + foreach ($data->getElementsByTagNameNS(self::POLL_OBJECT, 'option') as $node) { + $opts[] = $node->textValue; } - common_log(LOG_DEBUG, "YYY question: $question"); - common_log(LOG_DEBUG, "YYY opts: " . var_export($opts, true)); try { $notice = Poll::saveNew($profile, $question, $opts, $options); - common_log(LOG_DEBUG, "YYY ok: " . $notice->id); + common_log(LOG_DEBUG, "Saved Poll from ActivityStream data ok: notice id " . $notice->id); return $notice; } catch (Exception $e) { - common_log(LOG_DEBUG, "YYY fail: " . $e->getMessage()); + common_log(LOG_DEBUG, "Poll save from ActivityStream data failed: " . $e->getMessage()); } } else if ($responseElements->length) { $data = $responseElements->item(0); @@ -240,10 +236,10 @@ class PollPlugin extends MicroAppPlugin } try { $notice = Poll_response::saveNew($profile, $poll, $selection, $options); - common_log(LOG_DEBUG, "YYY response ok: " . $notice->id); + common_log(LOG_DEBUG, "Saved Poll_response ok, notice id: " . $notice->id); return $notice; } catch (Exception $e) { - common_log(LOG_DEBUG, "YYY response fail: " . $e->getMessage()); + common_log(LOG_DEBUG, "Poll response save fail: " . $e->getMessage()); } } else { common_log(LOG_DEBUG, "YYY no poll data"); From d5f5f769479e6e97d23875eb0705bd5cda1a0c1b Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Fri, 11 Mar 2011 12:45:55 -0800 Subject: [PATCH 029/146] durrrr s/textValue/textContent/ --- plugins/Poll/PollPlugin.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/Poll/PollPlugin.php b/plugins/Poll/PollPlugin.php index 490f39005f..ea6ab9ecd9 100644 --- a/plugins/Poll/PollPlugin.php +++ b/plugins/Poll/PollPlugin.php @@ -208,10 +208,10 @@ class PollPlugin extends MicroAppPlugin $data = $pollElements->item(0); foreach ($data->getElementsByTagNameNS(self::POLL_OBJECT, 'question') as $node) { - $question = $node->textValue; // ? + $question = $node->textContent; } foreach ($data->getElementsByTagNameNS(self::POLL_OBJECT, 'option') as $node) { - $opts[] = $node->textValue; + $opts[] = $node->textContent; } try { $notice = Poll::saveNew($profile, $question, $opts, $options); From d393ac4bbbee1c4021cb928ea16781a294978242 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Fri, 11 Mar 2011 14:08:48 -0800 Subject: [PATCH 030/146] remove stray close div from empty search results doc bits --- lib/searchaction.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/searchaction.php b/lib/searchaction.php index 73c287eef3..7038424fab 100644 --- a/lib/searchaction.php +++ b/lib/searchaction.php @@ -168,7 +168,5 @@ E_O_T $this->elementStart('div', 'help instructions'); $this->raw(common_markup_to_html($message)); $this->elementEnd('div'); - - $this->elementEnd('div'); } } From 717fed785efca5f589a293a045907264cb1bc67e Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Fri, 11 Mar 2011 14:25:57 -0800 Subject: [PATCH 031/146] Update PersonalGroupNav with fixed highlighting checks. Couldn't use Menu::item() as its checks are only for the action name, so would have highlighted stuff for other users though it always links to self. --- lib/personalgroupnav.php | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/lib/personalgroupnav.php b/lib/personalgroupnav.php index 3d6bb98fc0..2e15ca5f6a 100644 --- a/lib/personalgroupnav.php +++ b/lib/personalgroupnav.php @@ -63,6 +63,9 @@ class PersonalGroupNav extends Menu $nickname = $user->nickname; $name = $user_profile->getBestName(); + $action = $this->actionName; + $mine = ($this->action->arg('nickname') == $nickname); // @fixme kinda vague + $this->out->elementStart('ul', array('class' => 'nav')); if (Event::handle('StartPersonalGroupNav', array($this))) { @@ -70,23 +73,23 @@ class PersonalGroupNav extends Menu $nickname)), _('Home'), sprintf(_('%s and friends'), $name), - $this->action == 'all', 'nav_timeline_personal'); + $mine && $action =='all', 'nav_timeline_personal'); $this->out->menuItem(common_local_url('showstream', array('nickname' => $nickname)), _('Profile'), _('Your profile'), - $this->action == 'showstream', + $mine && $action =='showstream', 'nav_profile'); $this->out->menuItem(common_local_url('replies', array('nickname' => $nickname)), _('Replies'), sprintf(_('Replies to %s'), $name), - $this->action == 'replies', 'nav_timeline_replies'); + $mine && $action =='replies', 'nav_timeline_replies'); $this->out->menuItem(common_local_url('showfavorites', array('nickname' => $nickname)), _('Favorites'), sprintf(_('%s\'s favorite notices'), ($user_profile) ? $name : _('User')), - $this->action == 'showfavorites', 'nav_timeline_favorites'); + $mine && $action =='showfavorites', 'nav_timeline_favorites'); $cur = common_current_user(); @@ -97,7 +100,7 @@ class PersonalGroupNav extends Menu $nickname)), _('Messages'), _('Your incoming messages'), - $this->action == 'inbox'); + $mine && $action =='inbox'); } Event::handle('EndPersonalGroupNav', array($this)); From 4e2a0e2fd0e3717541ed76e59631a0f4814eb311 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Fri, 11 Mar 2011 14:48:47 -0800 Subject: [PATCH 032/146] Use non-minified jQuery when $config['site']['minify'] is off; aids in debugging when something fails deep in jQuery-land. --- lib/action.php | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/lib/action.php b/lib/action.php index b1f16f5f16..233ac78567 100644 --- a/lib/action.php +++ b/lib/action.php @@ -293,11 +293,19 @@ class Action extends HTMLOutputter // lawsuit { if (Event::handle('StartShowScripts', array($this))) { if (Event::handle('StartShowJQueryScripts', array($this))) { - $this->script('jquery.min.js'); - $this->script('jquery.form.min.js'); - $this->script('jquery.cookie.min.js'); - $this->inlineScript('if (typeof window.JSON !== "object") { $.getScript("'.common_path('js/json2.min.js').'"); }'); - $this->script('jquery.joverlay.min.js'); + if (common_config('site', 'minify')) { + $this->script('jquery.min.js'); + $this->script('jquery.form.min.js'); + $this->script('jquery.cookie.min.js'); + $this->inlineScript('if (typeof window.JSON !== "object") { $.getScript("'.common_path('js/json2.min.js').'"); }'); + $this->script('jquery.joverlay.min.js'); + } else { + $this->script('jquery.js'); + $this->script('jquery.form.js'); + $this->script('jquery.cookie.js'); + $this->inlineScript('if (typeof window.JSON !== "object") { $.getScript("'.common_path('js/json2.js').'"); }'); + $this->script('jquery.joverlay.js'); + } Event::handle('EndShowJQueryScripts', array($this)); } if (Event::handle('StartShowStatusNetScripts', array($this)) && From 10e5cb482e8eefdc3dcbe5aa1983df336524c02d Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Fri, 11 Mar 2011 15:03:15 -0800 Subject: [PATCH 033/146] JS performance: speeding up initialization by consolidating event handlers for reply buttons Saved about 60ms on my test system during page setup by using a single global 'live' click handler for reply links. No longer need to seek out and attach event handlers on every notice, yay! --- js/util.js | 31 +++++++++---------------------- 1 file changed, 9 insertions(+), 22 deletions(-) diff --git a/js/util.js b/js/util.js index a244f1ecfb..d0d23d464d 100644 --- a/js/util.js +++ b/js/util.js @@ -423,7 +423,6 @@ var SN = { // StatusNet .css({display:'none'}) .fadeIn(2500); SN.U.NoticeWithAttachment($('#'+notice.id)); - SN.U.NoticeReplyTo($('#'+notice.id)); SN.U.switchInputFormTab("placeholder"); } } else { @@ -516,34 +515,22 @@ var SN = { // StatusNet * @access private */ NoticeReply: function() { - if ($('#content .notice_reply').length > 0) { - $('#content .notice').each(function() { SN.U.NoticeReplyTo($(this)); }); - } - }, - - /** - * Setup function -- DOES NOT trigger actions immediately. - * - * Sets up event handlers on the given notice's reply button to - * tweak the new-notice form with needed variables and focus it - * when pushed. - * - * (This replaces the default reply button behavior to submit - * directly to a form which comes back with a specialized page - * with the form data prefilled.) - * - * @param {jQuery} notice: jQuery object containing one or more notices - * @access private - */ - NoticeReplyTo: function(notice) { - notice.find('.notice_reply').live('click', function(e) { + $('#content .notice_reply').live('click', function(e) { e.preventDefault(); + var notice = $(this).closest('li.notice'); var nickname = ($('.author .nickname', notice).length > 0) ? $($('.author .nickname', notice)[0]) : $('.author .nickname.uid'); SN.U.NoticeInlineReplyTrigger(notice, '@' + nickname.text()); return false; }); }, + /** + * Stub -- kept for compat with plugins for now. + * @access private + */ + NoticeReplyTo: function(notice) { + }, + /** * Open up a notice's inline reply box. * From 2bccd18d9a4f1ed2b74b854a7c1cffc707f961af Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Fri, 11 Mar 2011 15:20:20 -0800 Subject: [PATCH 034/146] JS optimization: move creation of inline reply placeholders to server-side so we don't have to create them client-side (which causes reflows and takes about 25-30ms on my test system) Using live instead of bind for the event handling, we don't have to play any games on the ones that we do add at runtime. Yay! --- js/util.js | 19 +++++------ lib/threadednoticelist.php | 67 +++++++++++++++++++++++++++----------- 2 files changed, 56 insertions(+), 30 deletions(-) diff --git a/js/util.js b/js/util.js index d0d23d464d..966df4d93f 100644 --- a/js/util.js +++ b/js/util.js @@ -627,26 +627,23 @@ var SN = { // StatusNet '' + '
      • '); placeholder.find('input') - .val(SN.msg('reply_placeholder')) - .focus(function() { - SN.U.NoticeInlineReplyTrigger(notice); - return false; - }); + .val(SN.msg('reply_placeholder')); list.append(placeholder); }, /** * Setup function -- DOES NOT apply immediately. * - * Sets up event handlers for favor/disfavor forms to submit via XHR. + * Sets up event handlers for inline reply mini-form placeholders. * Uses 'live' rather than 'bind', so applies to future as well as present items. */ NoticeInlineReplySetup: function() { - $('.threaded-replies').each(function() { - var list = $(this); - var notice = list.closest('.notice'); - SN.U.NoticeInlineReplyPlaceholder(notice); - }); + $('li.notice-reply-placeholder input') + .live('focus', function() { + var notice = $(this).closest('li.notice'); + SN.U.NoticeInlineReplyTrigger(notice); + return false; + }); }, /** diff --git a/lib/threadednoticelist.php b/lib/threadednoticelist.php index 867ce28ed6..919c912831 100644 --- a/lib/threadednoticelist.php +++ b/lib/threadednoticelist.php @@ -191,6 +191,12 @@ class ThreadedNoticeListItem extends NoticeListItem $item = new ThreadedNoticeListSubItem($notice, $this->out); $item->show(); } + // @fixme do a proper can-post check that's consistent + // with the JS side + if (common_current_user()) { + $item = new ThreadedNoticeListReplyItem($notice, $this->out); + $item->show(); + } $this->out->elementEnd('ul'); } } @@ -253,10 +259,7 @@ class ThreadedNoticeListMoreItem extends NoticeListItem function showStart() { - if (Event::handle('StartOpenNoticeListItemElement', array($this))) { - $id = (empty($this->repeat)) ? $this->notice->id : $this->repeat->id; - $this->out->elementStart('li', array('class' => 'notice-reply-comments')); - } + $this->out->elementStart('li', array('class' => 'notice-reply-comments')); } function showMiniForm() @@ -270,21 +273,47 @@ class ThreadedNoticeListMoreItem extends NoticeListItem $msg = sprintf(_m('Show %d reply', 'Show all %d replies', $n), $n); $this->out->element('a', array('href' => $url), $msg); + } +} - // @fixme replace this with an ajax-friendly form pair? - /* - $this->out->elementStart('form', - array('id' => $id, - 'class' => 'replyform', - 'method' => 'post', - 'action' => $url)); - $this->out->hidden('token', common_session_token()); - $this->out->hidden("$id-inreplyto", $replyToId, "inreplyto"); - $this->out->element('textarea', array('name' => 'status_textarea')); - $this->out->elementStart('div', array('class' => 'controls')); - $this->out->submit("$id-submit", _m('Send reply')); - $this->out->elementEnd('div'); - $this->out->elementEnd('form'); - */ + +/** + * Placeholder for reply form... + * Same as get added at runtime via SN.U.NoticeInlineReplyPlaceholder + */ +class ThreadedNoticeListReplyItem extends NoticeListItem +{ + + /** + * recipe function for displaying a single notice. + * + * This uses all the other methods to correctly display a notice. Override + * it or one of the others to fine-tune the output. + * + * @return void + */ + + function show() + { + $this->showStart(); + $this->showMiniForm(); + $this->showEnd(); + } + + /** + * start a single notice. + * + * @return void + */ + + function showStart() + { + $this->out->elementStart('li', array('class' => 'notice-reply-placeholder')); + } + + function showMiniForm() + { + $this->out->element('input', array('class' => 'placeholder', + 'value' => _('Write a reply...'))); } } \ No newline at end of file From 096f99be1615ff3a6ac4a8ae3b9f283f4aad36ad Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Fri, 11 Mar 2011 15:31:58 -0800 Subject: [PATCH 035/146] (update util.min.js for recent changes) --- js/util.min.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/util.min.js b/js/util.min.js index efe3736e3e..26ae7494cb 100644 --- a/js/util.min.js +++ b/js/util.min.js @@ -1 +1 @@ -var SN={C:{I:{CounterBlackout:false,MaxLength:140,PatternUsername:/^[0-9a-zA-Z\-_.]*$/,HTTP20x30x:[200,201,202,203,204,205,206,300,301,302,303,304,305,306,307],NoticeFormMaster:null},S:{Disabled:"disabled",Warning:"warning",Error:"error",Success:"success",Processing:"processing",CommandResult:"command_result",FormNotice:"form_notice",NoticeDataGeo:"notice_data-geo",NoticeDataGeoCookie:"NoticeDataGeo",NoticeDataGeoSelected:"notice_data-geo_selected",StatusNetInstance:"StatusNetInstance"}},messages:{},msg:function(a){if(typeof SN.messages[a]=="undefined"){return"["+a+"]"}else{return SN.messages[a]}},U:{FormNoticeEnhancements:function(b){if(jQuery.data(b[0],"ElementData")===undefined){MaxLength=b.find(".count").text();if(typeof(MaxLength)=="undefined"){MaxLength=SN.C.I.MaxLength}jQuery.data(b[0],"ElementData",{MaxLength:MaxLength});SN.U.Counter(b);NDT=b.find(".notice_data-text:first");NDT.bind("keyup",function(c){SN.U.Counter(b)});var a=function(c){window.setTimeout(function(){SN.U.Counter(b)},50)};NDT.bind("cut",a).bind("paste",a)}else{b.find(".count").text(jQuery.data(b[0],"ElementData").MaxLength)}},Counter:function(d){SN.C.I.FormNoticeCurrent=d;var b=jQuery.data(d[0],"ElementData").MaxLength;if(b<=0){return}var c=b-SN.U.CharacterCount(d);var a=d.find(".count");if(c.toString()!=a.text()){if(!SN.C.I.CounterBlackout||c===0){if(a.text()!=String(c)){a.text(c)}if(c<0){d.addClass(SN.C.S.Warning)}else{d.removeClass(SN.C.S.Warning)}if(!SN.C.I.CounterBlackout){SN.C.I.CounterBlackout=true;SN.C.I.FormNoticeCurrent=d;window.setTimeout("SN.U.ClearCounterBlackout(SN.C.I.FormNoticeCurrent);",500)}}}},CharacterCount:function(a){return a.find(".notice_data-text:first").val().length},ClearCounterBlackout:function(a){SN.C.I.CounterBlackout=false;SN.U.Counter(a)},RewriteAjaxAction:function(a){if(document.location.protocol=="https:"&&a.substr(0,5)=="http:"){return a.replace(/^http:\/\/[^:\/]+/,"https://"+document.location.host)}else{return a}},FormXHR:function(a){$.ajax({type:"POST",dataType:"xml",url:SN.U.RewriteAjaxAction(a.attr("action")),data:a.serialize()+"&ajax=1",beforeSend:function(b){a.addClass(SN.C.S.Processing).find(".submit").addClass(SN.C.S.Disabled).attr(SN.C.S.Disabled,SN.C.S.Disabled)},error:function(c,d,b){alert(b||d)},success:function(b,c){if(typeof($("form",b)[0])!="undefined"){form_new=document._importNode($("form",b)[0],true);a.replaceWith(form_new)}else{a.replaceWith(document._importNode($("p",b)[0],true))}}})},FormNoticeXHR:function(b){SN.C.I.NoticeDataGeo={};b.append('');b.attr("action",SN.U.RewriteAjaxAction(b.attr("action")));var c=function(d,e){b.append($('

        ').addClass(d).text(e))};var a=function(){b.find(".form_response").remove()};b.ajaxForm({dataType:"xml",timeout:"60000",beforeSend:function(d){if(b.find(".notice_data-text:first").val()==""){b.addClass(SN.C.S.Warning);return false}b.addClass(SN.C.S.Processing).find(".submit").addClass(SN.C.S.Disabled).attr(SN.C.S.Disabled,SN.C.S.Disabled);SN.U.normalizeGeoData(b);return true},error:function(f,g,e){b.removeClass(SN.C.S.Processing).find(".submit").removeClass(SN.C.S.Disabled).removeAttr(SN.C.S.Disabled,SN.C.S.Disabled);a();if(g=="timeout"){c("error","Sorry! We had trouble sending your notice. The servers are overloaded. Please try again, and contact the site administrator if this problem persists.")}else{var d=SN.U.GetResponseXML(f);if($("."+SN.C.S.Error,d).length>0){b.append(document._importNode($("."+SN.C.S.Error,d)[0],true))}else{if(parseInt(f.status)===0||jQuery.inArray(parseInt(f.status),SN.C.I.HTTP20x30x)>=0){b.resetForm().find(".attach-status").remove();SN.U.FormNoticeEnhancements(b)}else{c("error","(Sorry! We had trouble sending your notice ("+f.status+" "+f.statusText+"). Please report the problem to the site administrator if this happens again.")}}}},success:function(i,f){a();var n=$("#"+SN.C.S.Error,i);if(n.length>0){c("error",n.text())}else{if($("body")[0].id=="bookmarklet"){self.close()}var d=$("#"+SN.C.S.CommandResult,i);if(d.length>0){c("success",d.text())}else{var m=document._importNode($("li",i)[0],true);var k=$("#notices_primary .notices:first");var l=b.closest("li.notice-reply");if(l.length>0){var e=$(m).attr("id");if($("#"+e).length==0){var j=l.closest("li.notice");l.replaceWith(m);SN.U.NoticeInlineReplyPlaceholder(j)}else{l.remove()}}else{if(k.length>0&&SN.U.belongsOnTimeline(m)){if($("#"+m.id).length===0){var h=b.find("[name=inreplyto]").val();var g="#notices_primary #notice-"+h;if($("body")[0].id=="conversation"){if(h.length>0&&$(g+" .notices").length<1){$(g).append('
          ')}$($(g+" .notices")[0]).append(m)}else{k.prepend(m)}$("#"+m.id).css({display:"none"}).fadeIn(2500);SN.U.NoticeWithAttachment($("#"+m.id));SN.U.NoticeReplyTo($("#"+m.id));SN.U.switchInputFormTab("placeholder")}}else{c("success",$("title",i).text())}}}b.resetForm();b.find("[name=inreplyto]").val("");b.find(".attach-status").remove();SN.U.FormNoticeEnhancements(b)}},complete:function(d,e){b.removeClass(SN.C.S.Processing).find(".submit").removeAttr(SN.C.S.Disabled).removeClass(SN.C.S.Disabled);b.find("[name=lat]").val(SN.C.I.NoticeDataGeo.NLat);b.find("[name=lon]").val(SN.C.I.NoticeDataGeo.NLon);b.find("[name=location_ns]").val(SN.C.I.NoticeDataGeo.NLNS);b.find("[name=location_id]").val(SN.C.I.NoticeDataGeo.NLID);b.find("[name=notice_data-geo]").attr("checked",SN.C.I.NoticeDataGeo.NDG)}})},normalizeGeoData:function(a){SN.C.I.NoticeDataGeo.NLat=a.find("[name=lat]").val();SN.C.I.NoticeDataGeo.NLon=a.find("[name=lon]").val();SN.C.I.NoticeDataGeo.NLNS=a.find("[name=location_ns]").val();SN.C.I.NoticeDataGeo.NLID=a.find("[name=location_id]").val();SN.C.I.NoticeDataGeo.NDG=a.find("[name=notice_data-geo]").attr("checked");var b=$.cookie(SN.C.S.NoticeDataGeoCookie);if(b!==null&&b!="disabled"){b=JSON.parse(b);SN.C.I.NoticeDataGeo.NLat=a.find("[name=lat]").val(b.NLat).val();SN.C.I.NoticeDataGeo.NLon=a.find("[name=lon]").val(b.NLon).val();if(b.NLNS){SN.C.I.NoticeDataGeo.NLNS=a.find("[name=location_ns]").val(b.NLNS).val();SN.C.I.NoticeDataGeo.NLID=a.find("[name=location_id]").val(b.NLID).val()}else{a.find("[name=location_ns]").val("");a.find("[name=location_id]").val("")}}if(b=="disabled"){SN.C.I.NoticeDataGeo.NDG=a.find("[name=notice_data-geo]").attr("checked",false).attr("checked")}else{SN.C.I.NoticeDataGeo.NDG=a.find("[name=notice_data-geo]").attr("checked",true).attr("checked")}},GetResponseXML:function(b){try{return b.responseXML}catch(a){return(new DOMParser()).parseFromString(b.responseText,"text/xml")}},NoticeReply:function(){if($("#content .notice_reply").length>0){$("#content .notice").each(function(){SN.U.NoticeReplyTo($(this))})}},NoticeReplyTo:function(a){a.find(".notice_reply").live("click",function(c){c.preventDefault();var b=($(".author .nickname",a).length>0)?$($(".author .nickname",a)[0]):$(".author .nickname.uid");SN.U.NoticeInlineReplyTrigger(a,"@"+b.text());return false})},NoticeInlineReplyTrigger:function(h,i){var b=$($(".notice_id",h)[0]).text();var e=h;var f=h.closest(".notices");if(f.hasClass("threaded-replies")){e=f.closest(".notice")}else{f=$("ul.threaded-replies",h);if(f.length==0){f=$('
            ');h.append(f)}}var j=$(".notice-reply-form",f);var d=function(){j.find("input[name=inreplyto]").val(b);var m=j.find("textarea");if(m.length==0){throw"No textarea"}var l="";if(i){l=i+" "}m.val(l+m.val().replace(RegExp(l,"i"),""));m.data("initialText",$.trim(i+""));m.focus();if(m[0].setSelectionRange){var k=m.val().length;m[0].setSelectionRange(k,k)}};if(j.length>0){d()}else{f.find("li.notice-reply-placeholder").remove();var g=$("li.notice-reply",f);if(g.length==0){g=$('
          • ');var c=function(k){var l=document._importNode(k,true);g.append(l);f.append(g);var m=j=$(l);SN.Init.NoticeFormSetup(m);d()};if(SN.C.I.NoticeFormMaster){c(SN.C.I.NoticeFormMaster)}else{var a=$("#form_notice").attr("action");$.get(a,{ajax:1},function(k,m,l){c($("form",k)[0])})}}}},NoticeInlineReplyPlaceholder:function(b){var a=b.find("ul.threaded-replies");var c=$('
          • ');c.find("input").val(SN.msg("reply_placeholder")).focus(function(){SN.U.NoticeInlineReplyTrigger(b);return false});a.append(c)},NoticeInlineReplySetup:function(){$(".threaded-replies").each(function(){var b=$(this);var a=b.closest(".notice");SN.U.NoticeInlineReplyPlaceholder(a)})},NoticeRepeat:function(){$(".form_repeat").live("click",function(a){a.preventDefault();SN.U.NoticeRepeatConfirmation($(this));return false})},NoticeRepeatConfirmation:function(a){var c=a.find(".submit");var b=c.clone();b.addClass("submit_dialogbox").removeClass("submit");a.append(b);b.bind("click",function(){SN.U.FormXHR(a);return false});c.hide();a.addClass("dialogbox").append('').closest(".notice-options").addClass("opaque");a.find("button.close").click(function(){$(this).remove();a.removeClass("dialogbox").closest(".notice-options").removeClass("opaque");a.find(".submit_dialogbox").remove();a.find(".submit").show();return false})},NoticeAttachments:function(){$(".notice a.attachment").each(function(){SN.U.NoticeWithAttachment($(this).closest(".notice"))})},NoticeWithAttachment:function(b){if(b.find(".attachment").length===0){return}var a=b.find(".attachment.more");if(a.length>0){$(a[0]).click(function(){var c=$(this);c.addClass(SN.C.S.Processing);$.get(c.attr("href")+"/ajax",null,function(d){c.parent(".entry-content").html($(d).find("#attachment_view .entry-content").html())});return false}).attr("title",SN.msg("showmore_tooltip"))}},NoticeDataAttach:function(b){var a=b.find("input[type=file]");a.change(function(f){b.find(".attach-status").remove();var d=$(this).val();if(!d){return false}var c=$('
            ');c.find("code").text(d);c.find("button").click(function(){c.remove();a.val("");return false});b.append(c);if(typeof this.files=="object"){for(var e=0;eg){f=false}if(f){h(c,function(j){var i=$("").attr("title",e).attr("alt",e).attr("src",j).attr("style","height: 120px");d.find(".attach-status").append(i)})}else{var b=$("
            ").text(e);d.find(".attach-status").append(b)}},NoticeLocationAttach:function(a){var e=a.find("[name=lat]");var k=a.find("[name=lon]");var g=a.find("[name=location_ns]").val();var l=a.find("[name=location_id]").val();var b="";var d=a.find("[name=notice_data-geo]");var c=a.find("[name=notice_data-geo]");var j=a.find("label.notice_data-geo");function f(n){j.attr("title",jQuery.trim(j.text())).removeClass("checked");a.find("[name=lat]").val("");a.find("[name=lon]").val("");a.find("[name=location_ns]").val("");a.find("[name=location_id]").val("");a.find("[name=notice_data-geo]").attr("checked",false);$.cookie(SN.C.S.NoticeDataGeoCookie,"disabled",{path:"/"});if(n){a.find(".geo_status_wrapper").removeClass("success").addClass("error");a.find(".geo_status_wrapper .geo_status").text(n)}else{a.find(".geo_status_wrapper").remove()}}function m(n,o){SN.U.NoticeGeoStatus(a,"Looking up place name...");$.getJSON(n,o,function(p){var q,r;if(typeof(p.location_ns)!="undefined"){a.find("[name=location_ns]").val(p.location_ns);q=p.location_ns}if(typeof(p.location_id)!="undefined"){a.find("[name=location_id]").val(p.location_id);r=p.location_id}if(typeof(p.name)=="undefined"){NLN_text=o.lat+";"+o.lon}else{NLN_text=p.name}SN.U.NoticeGeoStatus(a,NLN_text,o.lat,o.lon,p.url);j.attr("title",NoticeDataGeo_text.ShareDisable+" ("+NLN_text+")");a.find("[name=lat]").val(o.lat);a.find("[name=lon]").val(o.lon);a.find("[name=location_ns]").val(q);a.find("[name=location_id]").val(r);a.find("[name=notice_data-geo]").attr("checked",true);var s={NLat:o.lat,NLon:o.lon,NLNS:q,NLID:r,NLN:NLN_text,NLNU:p.url,NDG:true};$.cookie(SN.C.S.NoticeDataGeoCookie,JSON.stringify(s),{path:"/"})})}if(c.length>0){if($.cookie(SN.C.S.NoticeDataGeoCookie)=="disabled"){c.attr("checked",false)}else{c.attr("checked",true)}var h=a.find(".notice_data-geo_wrap");var i=h.attr("data-api");j.attr("title",j.text());c.change(function(){if(c.attr("checked")===true||$.cookie(SN.C.S.NoticeDataGeoCookie)===null){j.attr("title",NoticeDataGeo_text.ShareDisable).addClass("checked");if($.cookie(SN.C.S.NoticeDataGeoCookie)===null||$.cookie(SN.C.S.NoticeDataGeoCookie)=="disabled"){if(navigator.geolocation){SN.U.NoticeGeoStatus(a,"Requesting location from browser...");navigator.geolocation.getCurrentPosition(function(p){a.find("[name=lat]").val(p.coords.latitude);a.find("[name=lon]").val(p.coords.longitude);var q={lat:p.coords.latitude,lon:p.coords.longitude,token:$("#token").val()};m(i,q)},function(p){switch(p.code){case p.PERMISSION_DENIED:f("Location permission denied.");break;case p.TIMEOUT:f("Location lookup timeout.");break}},{timeout:10000})}else{if(e.length>0&&k.length>0){var n={lat:e,lon:k,token:$("#token").val()};m(i,n)}else{f();c.remove();j.remove()}}}else{var o=JSON.parse($.cookie(SN.C.S.NoticeDataGeoCookie));a.find("[name=lat]").val(o.NLat);a.find("[name=lon]").val(o.NLon);a.find("[name=location_ns]").val(o.NLNS);a.find("[name=location_id]").val(o.NLID);a.find("[name=notice_data-geo]").attr("checked",o.NDG);SN.U.NoticeGeoStatus(a,o.NLN,o.NLat,o.NLon,o.NLNU);j.attr("title",NoticeDataGeo_text.ShareDisable+" ("+o.NLN+")").addClass("checked")}}else{f()}}).change()}},NoticeGeoStatus:function(e,a,f,g,c){var h=e.find(".geo_status_wrapper");if(h.length==0){h=$('
            ');h.find("button.close").click(function(){e.find("[name=notice_data-geo]").removeAttr("checked").change();return false});e.append(h)}var b;if(c){b=$("").attr("href",c)}else{b=$("")}b.text(a);if(f||g){var d=f+";"+g;b.attr("title",d);if(!a){b.text(d)}}h.find(".geo_status").empty().append(b)},NewDirectMessage:function(){NDM=$(".entity_send-a-message a");NDM.attr({href:NDM.attr("href")+"&ajax=1"});NDM.bind("click",function(){var a=$(".entity_send-a-message form");if(a.length===0){$(this).addClass(SN.C.S.Processing);$.get(NDM.attr("href"),null,function(b){$(".entity_send-a-message").append(document._importNode($("form",b)[0],true));a=$(".entity_send-a-message .form_notice");SN.U.FormNoticeXHR(a);SN.U.FormNoticeEnhancements(a);a.append('');$(".entity_send-a-message button").click(function(){a.hide();return false});NDM.removeClass(SN.C.S.Processing)})}else{a.show();$(".entity_send-a-message textarea").focus()}return false})},GetFullYear:function(c,d,a){var b=new Date();b.setFullYear(c,d,a);return b},StatusNetInstance:{Set:function(b){var a=SN.U.StatusNetInstance.Get();if(a!==null){b=$.extend(a,b)}$.cookie(SN.C.S.StatusNetInstance,JSON.stringify(b),{path:"/",expires:SN.U.GetFullYear(2029,0,1)})},Get:function(){var a=$.cookie(SN.C.S.StatusNetInstance);if(a!==null){return JSON.parse(a)}return null},Delete:function(){$.cookie(SN.C.S.StatusNetInstance,null)}},belongsOnTimeline:function(b){var a=$("body").attr("id");if(a=="public"){return true}var c=$("#nav_profile a").attr("href");if(c){var d=$(b).find(".vcard.author a.url").attr("href");if(d==c){if(a=="all"||a=="showstream"){return true}}}return false},switchInputFormTab:function(a){$(".input_form_nav_tab.current").removeClass("current");if(a=="placeholder"){$("#input_form_nav_status").addClass("current")}else{$("#input_form_nav_"+a).addClass("current")}$(".input_form.current").removeClass("current");$("#input_form_"+a).addClass("current").find(".ajax-notice").each(function(){var b=$(this);SN.Init.NoticeFormSetup(b)}).find("textarea:first").focus()}},Init:{NoticeForm:function(){if($("body.user_in").length>0){$("#input_form_placeholder input.placeholder").focus(function(){SN.U.switchInputFormTab("status")});$("body").bind("click",function(g){var d=$("#content .input_forms div.current");if(d.length>0){if($("#content .input_forms").has(g.target).length==0){var a=d.find('textarea, input[type=text], input[type=""]');var c=false;a.each(function(){c=c||$(this).val()});if(!c){SN.U.switchInputFormTab("placeholder")}}}var b=$("li.notice-reply");if(b.length>0){var f=$(g.target);b.each(function(){var j=$(this);if(j.has(g.target).length==0){var h=j.find(".notice_data-text:first");var i=$.trim(h.val());if(i==""||i==h.data("initialText")){var e=j.closest("li.notice");j.remove();SN.U.NoticeInlineReplyPlaceholder(e)}}})}})}},NoticeFormSetup:function(a){if(!a.data("NoticeFormSetup")){SN.U.NoticeLocationAttach(a);SN.U.FormNoticeXHR(a);SN.U.FormNoticeEnhancements(a);SN.U.NoticeDataAttach(a);a.data("NoticeFormSetup",true)}},Notices:function(){if($("body.user_in").length>0){var a=$(".form_notice:first");if(a.length>0){SN.C.I.NoticeFormMaster=document._importNode(a[0],true)}SN.U.NoticeRepeat();SN.U.NoticeReply();SN.U.NoticeInlineReplySetup()}SN.U.NoticeAttachments()},EntityActions:function(){if($("body.user_in").length>0){SN.U.NewDirectMessage()}},Login:function(){if(SN.U.StatusNetInstance.Get()!==null){var a=SN.U.StatusNetInstance.Get().Nickname;if(a!==null){$("#form_login #nickname").val(a)}}$("#form_login").bind("submit",function(){SN.U.StatusNetInstance.Set({Nickname:$("#form_login #nickname").val()});return true})},AjaxForms:function(){$("form.ajax").live("submit",function(){SN.U.FormXHR($(this));return false})},UploadForms:function(){$("input[type=file]").change(function(d){if(typeof this.files=="object"&&this.files.length>0){var c=0;for(var b=0;b0&&c>a){var e="File too large: maximum upload size is %d bytes.";alert(e.replace("%d",a));$(this).val("");d.preventDefault();return false}}})}}};$(document).ready(function(){SN.Init.AjaxForms();SN.Init.UploadForms();if($("."+SN.C.S.FormNotice).length>0){SN.Init.NoticeForm()}if($("#content .notices").length>0){SN.Init.Notices()}if($("#content .entity_actions").length>0){SN.Init.EntityActions()}if($("#form_login").length>0){SN.Init.Login()}});if(!document.ELEMENT_NODE){document.ELEMENT_NODE=1;document.ATTRIBUTE_NODE=2;document.TEXT_NODE=3;document.CDATA_SECTION_NODE=4;document.ENTITY_REFERENCE_NODE=5;document.ENTITY_NODE=6;document.PROCESSING_INSTRUCTION_NODE=7;document.COMMENT_NODE=8;document.DOCUMENT_NODE=9;document.DOCUMENT_TYPE_NODE=10;document.DOCUMENT_FRAGMENT_NODE=11;document.NOTATION_NODE=12}document._importNode=function(e,a){switch(e.nodeType){case document.ELEMENT_NODE:var d=document.createElement(e.nodeName);if(e.attributes&&e.attributes.length>0){for(var c=0,b=e.attributes.length;c0){for(var c=0,b=e.childNodes.length;c0){var j=c.pop();j()}}};window._google_loader_apiLoaded=function(){f()};var d=function(){return(window.google&&google.loader)};var g=function(j){if(d()){return true}h(j);e();return false};e();return{shim:true,type:"ClientLocation",lastPosition:null,getCurrentPosition:function(k,n,o){var m=this;if(!g(function(){m.getCurrentPosition(k,n,o)})){return}if(google.loader.ClientLocation){var l=google.loader.ClientLocation;var j={coords:{latitude:l.latitude,longitude:l.longitude,altitude:null,accuracy:43000,altitudeAccuracy:null,heading:null,speed:null},address:{city:l.address.city,country:l.address.country,country_code:l.address.country_code,region:l.address.region},timestamp:new Date()};k(j);this.lastPosition=j}else{if(n==="function"){n({code:3,message:"Using the Google ClientLocation API and it is not able to calculate a location."})}}},watchPosition:function(j,l,m){this.getCurrentPosition(j,l,m);var k=this;var n=setInterval(function(){k.getCurrentPosition(j,l,m)},10000);return n},clearWatch:function(j){clearInterval(j)},getPermission:function(l,j,k){return true}}});navigator.geolocation=(window.google&&google.gears)?a():b()})()}; \ No newline at end of file +var SN={C:{I:{CounterBlackout:false,MaxLength:140,PatternUsername:/^[0-9a-zA-Z\-_.]*$/,HTTP20x30x:[200,201,202,203,204,205,206,300,301,302,303,304,305,306,307],NoticeFormMaster:null},S:{Disabled:"disabled",Warning:"warning",Error:"error",Success:"success",Processing:"processing",CommandResult:"command_result",FormNotice:"form_notice",NoticeDataGeo:"notice_data-geo",NoticeDataGeoCookie:"NoticeDataGeo",NoticeDataGeoSelected:"notice_data-geo_selected",StatusNetInstance:"StatusNetInstance"}},messages:{},msg:function(a){if(typeof SN.messages[a]=="undefined"){return"["+a+"]"}else{return SN.messages[a]}},U:{FormNoticeEnhancements:function(b){if(jQuery.data(b[0],"ElementData")===undefined){MaxLength=b.find(".count").text();if(typeof(MaxLength)=="undefined"){MaxLength=SN.C.I.MaxLength}jQuery.data(b[0],"ElementData",{MaxLength:MaxLength});SN.U.Counter(b);NDT=b.find(".notice_data-text:first");NDT.bind("keyup",function(c){SN.U.Counter(b)});var a=function(c){window.setTimeout(function(){SN.U.Counter(b)},50)};NDT.bind("cut",a).bind("paste",a)}else{b.find(".count").text(jQuery.data(b[0],"ElementData").MaxLength)}},Counter:function(d){SN.C.I.FormNoticeCurrent=d;var b=jQuery.data(d[0],"ElementData").MaxLength;if(b<=0){return}var c=b-SN.U.CharacterCount(d);var a=d.find(".count");if(c.toString()!=a.text()){if(!SN.C.I.CounterBlackout||c===0){if(a.text()!=String(c)){a.text(c)}if(c<0){d.addClass(SN.C.S.Warning)}else{d.removeClass(SN.C.S.Warning)}if(!SN.C.I.CounterBlackout){SN.C.I.CounterBlackout=true;SN.C.I.FormNoticeCurrent=d;window.setTimeout("SN.U.ClearCounterBlackout(SN.C.I.FormNoticeCurrent);",500)}}}},CharacterCount:function(a){return a.find(".notice_data-text:first").val().length},ClearCounterBlackout:function(a){SN.C.I.CounterBlackout=false;SN.U.Counter(a)},RewriteAjaxAction:function(a){if(document.location.protocol=="https:"&&a.substr(0,5)=="http:"){return a.replace(/^http:\/\/[^:\/]+/,"https://"+document.location.host)}else{return a}},FormXHR:function(a){$.ajax({type:"POST",dataType:"xml",url:SN.U.RewriteAjaxAction(a.attr("action")),data:a.serialize()+"&ajax=1",beforeSend:function(b){a.addClass(SN.C.S.Processing).find(".submit").addClass(SN.C.S.Disabled).attr(SN.C.S.Disabled,SN.C.S.Disabled)},error:function(c,d,b){alert(b||d)},success:function(b,c){if(typeof($("form",b)[0])!="undefined"){form_new=document._importNode($("form",b)[0],true);a.replaceWith(form_new)}else{a.replaceWith(document._importNode($("p",b)[0],true))}}})},FormNoticeXHR:function(b){SN.C.I.NoticeDataGeo={};b.append('');b.attr("action",SN.U.RewriteAjaxAction(b.attr("action")));var c=function(d,e){b.append($('

            ').addClass(d).text(e))};var a=function(){b.find(".form_response").remove()};b.ajaxForm({dataType:"xml",timeout:"60000",beforeSend:function(d){if(b.find(".notice_data-text:first").val()==""){b.addClass(SN.C.S.Warning);return false}b.addClass(SN.C.S.Processing).find(".submit").addClass(SN.C.S.Disabled).attr(SN.C.S.Disabled,SN.C.S.Disabled);SN.U.normalizeGeoData(b);return true},error:function(f,g,e){b.removeClass(SN.C.S.Processing).find(".submit").removeClass(SN.C.S.Disabled).removeAttr(SN.C.S.Disabled,SN.C.S.Disabled);a();if(g=="timeout"){c("error","Sorry! We had trouble sending your notice. The servers are overloaded. Please try again, and contact the site administrator if this problem persists.")}else{var d=SN.U.GetResponseXML(f);if($("."+SN.C.S.Error,d).length>0){b.append(document._importNode($("."+SN.C.S.Error,d)[0],true))}else{if(parseInt(f.status)===0||jQuery.inArray(parseInt(f.status),SN.C.I.HTTP20x30x)>=0){b.resetForm().find(".attach-status").remove();SN.U.FormNoticeEnhancements(b)}else{c("error","(Sorry! We had trouble sending your notice ("+f.status+" "+f.statusText+"). Please report the problem to the site administrator if this happens again.")}}}},success:function(i,f){a();var n=$("#"+SN.C.S.Error,i);if(n.length>0){c("error",n.text())}else{if($("body")[0].id=="bookmarklet"){self.close()}var d=$("#"+SN.C.S.CommandResult,i);if(d.length>0){c("success",d.text())}else{var m=document._importNode($("li",i)[0],true);var k=$("#notices_primary .notices:first");var l=b.closest("li.notice-reply");if(l.length>0){var e=$(m).attr("id");if($("#"+e).length==0){var j=l.closest("li.notice");l.replaceWith(m);SN.U.NoticeInlineReplyPlaceholder(j)}else{l.remove()}}else{if(k.length>0&&SN.U.belongsOnTimeline(m)){if($("#"+m.id).length===0){var h=b.find("[name=inreplyto]").val();var g="#notices_primary #notice-"+h;if($("body")[0].id=="conversation"){if(h.length>0&&$(g+" .notices").length<1){$(g).append('
              ')}$($(g+" .notices")[0]).append(m)}else{k.prepend(m)}$("#"+m.id).css({display:"none"}).fadeIn(2500);SN.U.NoticeWithAttachment($("#"+m.id));SN.U.switchInputFormTab("placeholder")}}else{c("success",$("title",i).text())}}}b.resetForm();b.find("[name=inreplyto]").val("");b.find(".attach-status").remove();SN.U.FormNoticeEnhancements(b)}},complete:function(d,e){b.removeClass(SN.C.S.Processing).find(".submit").removeAttr(SN.C.S.Disabled).removeClass(SN.C.S.Disabled);b.find("[name=lat]").val(SN.C.I.NoticeDataGeo.NLat);b.find("[name=lon]").val(SN.C.I.NoticeDataGeo.NLon);b.find("[name=location_ns]").val(SN.C.I.NoticeDataGeo.NLNS);b.find("[name=location_id]").val(SN.C.I.NoticeDataGeo.NLID);b.find("[name=notice_data-geo]").attr("checked",SN.C.I.NoticeDataGeo.NDG)}})},normalizeGeoData:function(a){SN.C.I.NoticeDataGeo.NLat=a.find("[name=lat]").val();SN.C.I.NoticeDataGeo.NLon=a.find("[name=lon]").val();SN.C.I.NoticeDataGeo.NLNS=a.find("[name=location_ns]").val();SN.C.I.NoticeDataGeo.NLID=a.find("[name=location_id]").val();SN.C.I.NoticeDataGeo.NDG=a.find("[name=notice_data-geo]").attr("checked");var b=$.cookie(SN.C.S.NoticeDataGeoCookie);if(b!==null&&b!="disabled"){b=JSON.parse(b);SN.C.I.NoticeDataGeo.NLat=a.find("[name=lat]").val(b.NLat).val();SN.C.I.NoticeDataGeo.NLon=a.find("[name=lon]").val(b.NLon).val();if(b.NLNS){SN.C.I.NoticeDataGeo.NLNS=a.find("[name=location_ns]").val(b.NLNS).val();SN.C.I.NoticeDataGeo.NLID=a.find("[name=location_id]").val(b.NLID).val()}else{a.find("[name=location_ns]").val("");a.find("[name=location_id]").val("")}}if(b=="disabled"){SN.C.I.NoticeDataGeo.NDG=a.find("[name=notice_data-geo]").attr("checked",false).attr("checked")}else{SN.C.I.NoticeDataGeo.NDG=a.find("[name=notice_data-geo]").attr("checked",true).attr("checked")}},GetResponseXML:function(b){try{return b.responseXML}catch(a){return(new DOMParser()).parseFromString(b.responseText,"text/xml")}},NoticeReply:function(){$("#content .notice_reply").live("click",function(c){c.preventDefault();var b=$(this).closest("li.notice");var a=($(".author .nickname",b).length>0)?$($(".author .nickname",b)[0]):$(".author .nickname.uid");SN.U.NoticeInlineReplyTrigger(b,"@"+a.text());return false})},NoticeReplyTo:function(a){},NoticeInlineReplyTrigger:function(h,i){var b=$($(".notice_id",h)[0]).text();var e=h;var f=h.closest(".notices");if(f.hasClass("threaded-replies")){e=f.closest(".notice")}else{f=$("ul.threaded-replies",h);if(f.length==0){f=$('
                ');h.append(f)}}var j=$(".notice-reply-form",f);var d=function(){j.find("input[name=inreplyto]").val(b);var m=j.find("textarea");if(m.length==0){throw"No textarea"}var l="";if(i){l=i+" "}m.val(l+m.val().replace(RegExp(l,"i"),""));m.data("initialText",$.trim(i+""));m.focus();if(m[0].setSelectionRange){var k=m.val().length;m[0].setSelectionRange(k,k)}};if(j.length>0){d()}else{f.find("li.notice-reply-placeholder").remove();var g=$("li.notice-reply",f);if(g.length==0){g=$('
              • ');var c=function(k){var l=document._importNode(k,true);g.append(l);f.append(g);var m=j=$(l);SN.Init.NoticeFormSetup(m);d()};if(SN.C.I.NoticeFormMaster){c(SN.C.I.NoticeFormMaster)}else{var a=$("#form_notice").attr("action");$.get(a,{ajax:1},function(k,m,l){c($("form",k)[0])})}}}},NoticeInlineReplyPlaceholder:function(b){var a=b.find("ul.threaded-replies");var c=$('
              • ');c.find("input").val(SN.msg("reply_placeholder"));a.append(c)},NoticeInlineReplySetup:function(){$("li.notice-reply-placeholder input").live("focus",function(){var a=$(this).closest("li.notice");SN.U.NoticeInlineReplyTrigger(a);return false})},NoticeRepeat:function(){$(".form_repeat").live("click",function(a){a.preventDefault();SN.U.NoticeRepeatConfirmation($(this));return false})},NoticeRepeatConfirmation:function(a){var c=a.find(".submit");var b=c.clone();b.addClass("submit_dialogbox").removeClass("submit");a.append(b);b.bind("click",function(){SN.U.FormXHR(a);return false});c.hide();a.addClass("dialogbox").append('').closest(".notice-options").addClass("opaque");a.find("button.close").click(function(){$(this).remove();a.removeClass("dialogbox").closest(".notice-options").removeClass("opaque");a.find(".submit_dialogbox").remove();a.find(".submit").show();return false})},NoticeAttachments:function(){$(".notice a.attachment").each(function(){SN.U.NoticeWithAttachment($(this).closest(".notice"))})},NoticeWithAttachment:function(b){if(b.find(".attachment").length===0){return}var a=b.find(".attachment.more");if(a.length>0){$(a[0]).click(function(){var c=$(this);c.addClass(SN.C.S.Processing);$.get(c.attr("href")+"/ajax",null,function(d){c.parent(".entry-content").html($(d).find("#attachment_view .entry-content").html())});return false}).attr("title",SN.msg("showmore_tooltip"))}},NoticeDataAttach:function(b){var a=b.find("input[type=file]");a.change(function(f){b.find(".attach-status").remove();var d=$(this).val();if(!d){return false}var c=$('
                ');c.find("code").text(d);c.find("button").click(function(){c.remove();a.val("");return false});b.append(c);if(typeof this.files=="object"){for(var e=0;eg){f=false}if(f){h(c,function(j){var i=$("").attr("title",e).attr("alt",e).attr("src",j).attr("style","height: 120px");d.find(".attach-status").append(i)})}else{var b=$("
                ").text(e);d.find(".attach-status").append(b)}},NoticeLocationAttach:function(a){var e=a.find("[name=lat]");var k=a.find("[name=lon]");var g=a.find("[name=location_ns]").val();var l=a.find("[name=location_id]").val();var b="";var d=a.find("[name=notice_data-geo]");var c=a.find("[name=notice_data-geo]");var j=a.find("label.notice_data-geo");function f(n){j.attr("title",jQuery.trim(j.text())).removeClass("checked");a.find("[name=lat]").val("");a.find("[name=lon]").val("");a.find("[name=location_ns]").val("");a.find("[name=location_id]").val("");a.find("[name=notice_data-geo]").attr("checked",false);$.cookie(SN.C.S.NoticeDataGeoCookie,"disabled",{path:"/"});if(n){a.find(".geo_status_wrapper").removeClass("success").addClass("error");a.find(".geo_status_wrapper .geo_status").text(n)}else{a.find(".geo_status_wrapper").remove()}}function m(n,o){SN.U.NoticeGeoStatus(a,"Looking up place name...");$.getJSON(n,o,function(p){var q,r;if(typeof(p.location_ns)!="undefined"){a.find("[name=location_ns]").val(p.location_ns);q=p.location_ns}if(typeof(p.location_id)!="undefined"){a.find("[name=location_id]").val(p.location_id);r=p.location_id}if(typeof(p.name)=="undefined"){NLN_text=o.lat+";"+o.lon}else{NLN_text=p.name}SN.U.NoticeGeoStatus(a,NLN_text,o.lat,o.lon,p.url);j.attr("title",NoticeDataGeo_text.ShareDisable+" ("+NLN_text+")");a.find("[name=lat]").val(o.lat);a.find("[name=lon]").val(o.lon);a.find("[name=location_ns]").val(q);a.find("[name=location_id]").val(r);a.find("[name=notice_data-geo]").attr("checked",true);var s={NLat:o.lat,NLon:o.lon,NLNS:q,NLID:r,NLN:NLN_text,NLNU:p.url,NDG:true};$.cookie(SN.C.S.NoticeDataGeoCookie,JSON.stringify(s),{path:"/"})})}if(c.length>0){if($.cookie(SN.C.S.NoticeDataGeoCookie)=="disabled"){c.attr("checked",false)}else{c.attr("checked",true)}var h=a.find(".notice_data-geo_wrap");var i=h.attr("data-api");j.attr("title",j.text());c.change(function(){if(c.attr("checked")===true||$.cookie(SN.C.S.NoticeDataGeoCookie)===null){j.attr("title",NoticeDataGeo_text.ShareDisable).addClass("checked");if($.cookie(SN.C.S.NoticeDataGeoCookie)===null||$.cookie(SN.C.S.NoticeDataGeoCookie)=="disabled"){if(navigator.geolocation){SN.U.NoticeGeoStatus(a,"Requesting location from browser...");navigator.geolocation.getCurrentPosition(function(p){a.find("[name=lat]").val(p.coords.latitude);a.find("[name=lon]").val(p.coords.longitude);var q={lat:p.coords.latitude,lon:p.coords.longitude,token:$("#token").val()};m(i,q)},function(p){switch(p.code){case p.PERMISSION_DENIED:f("Location permission denied.");break;case p.TIMEOUT:f("Location lookup timeout.");break}},{timeout:10000})}else{if(e.length>0&&k.length>0){var n={lat:e,lon:k,token:$("#token").val()};m(i,n)}else{f();c.remove();j.remove()}}}else{var o=JSON.parse($.cookie(SN.C.S.NoticeDataGeoCookie));a.find("[name=lat]").val(o.NLat);a.find("[name=lon]").val(o.NLon);a.find("[name=location_ns]").val(o.NLNS);a.find("[name=location_id]").val(o.NLID);a.find("[name=notice_data-geo]").attr("checked",o.NDG);SN.U.NoticeGeoStatus(a,o.NLN,o.NLat,o.NLon,o.NLNU);j.attr("title",NoticeDataGeo_text.ShareDisable+" ("+o.NLN+")").addClass("checked")}}else{f()}}).change()}},NoticeGeoStatus:function(e,a,f,g,c){var h=e.find(".geo_status_wrapper");if(h.length==0){h=$('
                ');h.find("button.close").click(function(){e.find("[name=notice_data-geo]").removeAttr("checked").change();return false});e.append(h)}var b;if(c){b=$("").attr("href",c)}else{b=$("")}b.text(a);if(f||g){var d=f+";"+g;b.attr("title",d);if(!a){b.text(d)}}h.find(".geo_status").empty().append(b)},NewDirectMessage:function(){NDM=$(".entity_send-a-message a");NDM.attr({href:NDM.attr("href")+"&ajax=1"});NDM.bind("click",function(){var a=$(".entity_send-a-message form");if(a.length===0){$(this).addClass(SN.C.S.Processing);$.get(NDM.attr("href"),null,function(b){$(".entity_send-a-message").append(document._importNode($("form",b)[0],true));a=$(".entity_send-a-message .form_notice");SN.U.FormNoticeXHR(a);SN.U.FormNoticeEnhancements(a);a.append('');$(".entity_send-a-message button").click(function(){a.hide();return false});NDM.removeClass(SN.C.S.Processing)})}else{a.show();$(".entity_send-a-message textarea").focus()}return false})},GetFullYear:function(c,d,a){var b=new Date();b.setFullYear(c,d,a);return b},StatusNetInstance:{Set:function(b){var a=SN.U.StatusNetInstance.Get();if(a!==null){b=$.extend(a,b)}$.cookie(SN.C.S.StatusNetInstance,JSON.stringify(b),{path:"/",expires:SN.U.GetFullYear(2029,0,1)})},Get:function(){var a=$.cookie(SN.C.S.StatusNetInstance);if(a!==null){return JSON.parse(a)}return null},Delete:function(){$.cookie(SN.C.S.StatusNetInstance,null)}},belongsOnTimeline:function(b){var a=$("body").attr("id");if(a=="public"){return true}var c=$("#nav_profile a").attr("href");if(c){var d=$(b).find(".vcard.author a.url").attr("href");if(d==c){if(a=="all"||a=="showstream"){return true}}}return false},switchInputFormTab:function(a){$(".input_form_nav_tab.current").removeClass("current");if(a=="placeholder"){$("#input_form_nav_status").addClass("current")}else{$("#input_form_nav_"+a).addClass("current")}$(".input_form.current").removeClass("current");$("#input_form_"+a).addClass("current").find(".ajax-notice").each(function(){var b=$(this);SN.Init.NoticeFormSetup(b)}).find("textarea:first").focus()}},Init:{NoticeForm:function(){if($("body.user_in").length>0){$("#input_form_placeholder input.placeholder").focus(function(){SN.U.switchInputFormTab("status")});$("body").bind("click",function(g){var d=$("#content .input_forms div.current");if(d.length>0){if($("#content .input_forms").has(g.target).length==0){var a=d.find('textarea, input[type=text], input[type=""]');var c=false;a.each(function(){c=c||$(this).val()});if(!c){SN.U.switchInputFormTab("placeholder")}}}var b=$("li.notice-reply");if(b.length>0){var f=$(g.target);b.each(function(){var j=$(this);if(j.has(g.target).length==0){var h=j.find(".notice_data-text:first");var i=$.trim(h.val());if(i==""||i==h.data("initialText")){var e=j.closest("li.notice");j.remove();SN.U.NoticeInlineReplyPlaceholder(e)}}})}})}},NoticeFormSetup:function(a){if(!a.data("NoticeFormSetup")){SN.U.NoticeLocationAttach(a);SN.U.FormNoticeXHR(a);SN.U.FormNoticeEnhancements(a);SN.U.NoticeDataAttach(a);a.data("NoticeFormSetup",true)}},Notices:function(){if($("body.user_in").length>0){var a=$(".form_notice:first");if(a.length>0){SN.C.I.NoticeFormMaster=document._importNode(a[0],true)}SN.U.NoticeRepeat();SN.U.NoticeReply();SN.U.NoticeInlineReplySetup()}SN.U.NoticeAttachments()},EntityActions:function(){if($("body.user_in").length>0){SN.U.NewDirectMessage()}},Login:function(){if(SN.U.StatusNetInstance.Get()!==null){var a=SN.U.StatusNetInstance.Get().Nickname;if(a!==null){$("#form_login #nickname").val(a)}}$("#form_login").bind("submit",function(){SN.U.StatusNetInstance.Set({Nickname:$("#form_login #nickname").val()});return true})},AjaxForms:function(){$("form.ajax").live("submit",function(){SN.U.FormXHR($(this));return false})},UploadForms:function(){$("input[type=file]").change(function(d){if(typeof this.files=="object"&&this.files.length>0){var c=0;for(var b=0;b0&&c>a){var e="File too large: maximum upload size is %d bytes.";alert(e.replace("%d",a));$(this).val("");d.preventDefault();return false}}})}}};$(document).ready(function(){SN.Init.AjaxForms();SN.Init.UploadForms();if($("."+SN.C.S.FormNotice).length>0){SN.Init.NoticeForm()}if($("#content .notices").length>0){SN.Init.Notices()}if($("#content .entity_actions").length>0){SN.Init.EntityActions()}if($("#form_login").length>0){SN.Init.Login()}});if(!document.ELEMENT_NODE){document.ELEMENT_NODE=1;document.ATTRIBUTE_NODE=2;document.TEXT_NODE=3;document.CDATA_SECTION_NODE=4;document.ENTITY_REFERENCE_NODE=5;document.ENTITY_NODE=6;document.PROCESSING_INSTRUCTION_NODE=7;document.COMMENT_NODE=8;document.DOCUMENT_NODE=9;document.DOCUMENT_TYPE_NODE=10;document.DOCUMENT_FRAGMENT_NODE=11;document.NOTATION_NODE=12}document._importNode=function(e,a){switch(e.nodeType){case document.ELEMENT_NODE:var d=document.createElement(e.nodeName);if(e.attributes&&e.attributes.length>0){for(var c=0,b=e.attributes.length;c0){for(var c=0,b=e.childNodes.length;c0){var j=c.pop();j()}}};window._google_loader_apiLoaded=function(){f()};var d=function(){return(window.google&&google.loader)};var g=function(j){if(d()){return true}h(j);e();return false};e();return{shim:true,type:"ClientLocation",lastPosition:null,getCurrentPosition:function(k,n,o){var m=this;if(!g(function(){m.getCurrentPosition(k,n,o)})){return}if(google.loader.ClientLocation){var l=google.loader.ClientLocation;var j={coords:{latitude:l.latitude,longitude:l.longitude,altitude:null,accuracy:43000,altitudeAccuracy:null,heading:null,speed:null},address:{city:l.address.city,country:l.address.country,country_code:l.address.country_code,region:l.address.region},timestamp:new Date()};k(j);this.lastPosition=j}else{if(n==="function"){n({code:3,message:"Using the Google ClientLocation API and it is not able to calculate a location."})}}},watchPosition:function(j,l,m){this.getCurrentPosition(j,l,m);var k=this;var n=setInterval(function(){k.getCurrentPosition(j,l,m)},10000);return n},clearWatch:function(j){clearInterval(j)},getPermission:function(l,j,k){return true}}});navigator.geolocation=(window.google&&google.gears)?a():b()})()}; \ No newline at end of file From deb40602d2bc61772eb0b2631f3f4d6c6b592aac Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Sun, 13 Mar 2011 16:32:13 -0700 Subject: [PATCH 036/146] Extended profile - more work on getting complex fields to save --- .../{ => css}/profiledetail.css | 0 plugins/ExtendedProfile/extendedprofile.php | 3 +- .../ExtendedProfile/extendedprofilewidget.php | 19 ++++- plugins/ExtendedProfile/js/profiledetail.js | 83 +++++++++++++++++++ .../profiledetailsettingsaction.php | 16 ++-- 5 files changed, 111 insertions(+), 10 deletions(-) rename plugins/ExtendedProfile/{ => css}/profiledetail.css (100%) create mode 100644 plugins/ExtendedProfile/js/profiledetail.js diff --git a/plugins/ExtendedProfile/profiledetail.css b/plugins/ExtendedProfile/css/profiledetail.css similarity index 100% rename from plugins/ExtendedProfile/profiledetail.css rename to plugins/ExtendedProfile/css/profiledetail.css diff --git a/plugins/ExtendedProfile/extendedprofile.php b/plugins/ExtendedProfile/extendedprofile.php index 2a10759d91..94a5ef4826 100644 --- a/plugins/ExtendedProfile/extendedprofile.php +++ b/plugins/ExtendedProfile/extendedprofile.php @@ -106,6 +106,7 @@ class ExtendedProfile if (empty($phones)) { $pArrays[] = array( 'label' => _m('Phone'), + 'index' => 0, 'type' => 'phone', 'vcard' => 'tel', 'multi' => true @@ -115,7 +116,7 @@ class ExtendedProfile $pa = array( 'label' => _m('Phone'), 'type' => 'phone', - 'index' => $phones[$i]->value_index, + 'index' => intva($phones[$i]->value_index), 'rel' => $phones[$i]->rel, 'value' => $phones[$i]->field_value, 'vcard' => 'tel' diff --git a/plugins/ExtendedProfile/extendedprofilewidget.php b/plugins/ExtendedProfile/extendedprofilewidget.php index d31a34b1e2..7eb195e369 100644 --- a/plugins/ExtendedProfile/extendedprofilewidget.php +++ b/plugins/ExtendedProfile/extendedprofilewidget.php @@ -184,8 +184,12 @@ class ExtendedProfileWidget extends Form $index = $field['index']; $id = "extprofile-$name-$index"; $rel = $id . '-rel'; - - $this->out->elementStart('div', array('class' => 'phone-edit')); + $this->out->elementStart( + 'div', array( + 'id' => $id . '-edit', + 'class' => 'phone-edit' + ) + ); $this->out->input($id, null, $field['value']); $this->out->dropdown( $id . '-rel', @@ -205,10 +209,19 @@ class ExtendedProfileWidget extends Form $this->out->element( 'a', array( - 'name' => $name, + 'class' => 'add_row', 'href' => 'javascript://'), '+' ); + $this->out->element( + 'a', + array( + 'class' => 'remove_row', + 'href' => 'javascript://', + 'style' => 'display: none; ' + ), + '-' + ); } $this->out->elementEnd('div'); } diff --git a/plugins/ExtendedProfile/js/profiledetail.js b/plugins/ExtendedProfile/js/profiledetail.js new file mode 100644 index 0000000000..a021a32645 --- /dev/null +++ b/plugins/ExtendedProfile/js/profiledetail.js @@ -0,0 +1,83 @@ +var removeRow = function() { + var cnt = rowCount(this); + var table = $(this).closest('table'); + console.log("row count = " + cnt); + if (cnt > 1) { + var target = $(this).closest('tr'); + target.remove(); + reorder(table); + } +}; + +var rowCount = function(row) { + var top = $(row).closest('table'); + var trs = $(top).find('tr'); + return trs.length - 1; // exclude th section header row +}; + +var reorder = function(table) { + var trs = $(table).find('tr').has('td'); + + $(trs).find('a').hide(); + + $(trs).each(function(i, tr) { + console.log("ROW " + i); + $(tr).find('a.remove_row').show(); + replaceIndex(rowIndex(tr), i); + }); + + $(trs).last().find('a.add_row').show(); + + if (trs.length == 1) { + $(trs).find('a.remove_row').hide(); + } + +}; + +var rowIndex = function(elem) { + var idStr = $(elem).find('div').attr('id'); + var id = idStr.match(/\d+/); + console.log("id = " + id); +}; + +var replaceIndex = function(elem, oldIndex, newIndex) { + $(elem).find('*').each(function() { + $.each(this.attributes, function(i, attrib) { + var regexp = /extprofile-.*-\d.*/; + var value = attrib.value; + var match = value.match(regexp); + if (match != null) { + attrib.value = value.replace("-" + oldIndex, "-" + newIndex); + console.log('match: oldIndex = ' + oldIndex + ' newIndex = ' + newIndex + ' name = ' + attrib.name + ' value = ' + attrib.value); + } + }); + }); +} + +var resetRow = function(elem) { + $(elem).find('input').attr('value', ''); + $(elem).find("select option[value='office']").attr("selected", true); +} + +var addRow = function() { + var divId = $(this).closest('div').attr('id'); + var index = divId.match(/\d+/); + console.log("Current row = " + index); + var tr = $(this).closest('tr'); + var newtr = $(tr).clone(); + var newIndex = parseInt(index) + 1; + replaceIndex(newtr, index, newIndex); + resetRow(newtr); + $(tr).after(newtr); + console.log("number of rows: " + rowCount(tr)); + reorder($(this).closest('table')); +}; + +$(document).ready( + +function() { + $('.add_row').live('click', addRow); + $('.remove_row').live('click', removeRow); +} + +); \ No newline at end of file diff --git a/plugins/ExtendedProfile/profiledetailsettingsaction.php b/plugins/ExtendedProfile/profiledetailsettingsaction.php index ec2c4935a2..ee450118c3 100644 --- a/plugins/ExtendedProfile/profiledetailsettingsaction.php +++ b/plugins/ExtendedProfile/profiledetailsettingsaction.php @@ -43,7 +43,13 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction function showStylesheets() { parent::showStylesheets(); - $this->cssLink('plugins/ExtendedProfile/profiledetail.css'); + $this->cssLink('plugins/ExtendedProfile/css/profiledetail.css'); + return true; + } + + function showScripts() { + parent::showScripts(); + $this->script('plugins/ExtendedProfile/js/profiledetail.js'); return true; } @@ -133,7 +139,7 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction $phoneTuples = array(); foreach($phones as $phone) { - $firstkey = array_shift(array_keys($phone)); + $firstkey = current(array_keys($phone)); $index = substr($firstkey, strrpos($firstkey, '-') + 1); list($number, $rel) = array_values($phone); @@ -142,11 +148,9 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction 'index' => $index, 'rel' => $rel ); - - return $phoneTuples; } - return $phones; + return $phoneTuples; } function arraySplit($array, $pieces) @@ -157,7 +161,7 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction $newCount = ceil(count($array) / $pieces); $a = array_slice($array, 0, $newCount); - $b = array_split(array_slice($array, $newCount), $pieces - 1); + $b = $this->arraySplit(array_slice($array, $newCount), $pieces - 1); return array_merge(array($a), $b); } From 04c8bf2743db51cd724449b4cbec1aaef531597c Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Mon, 14 Mar 2011 01:49:46 -0700 Subject: [PATCH 037/146] Extended profile - finished basic pattern for adding/removing/saving multiple complex fields --- plugins/ExtendedProfile/extendedprofile.php | 12 ++- .../ExtendedProfile/extendedprofilewidget.php | 53 ++++++------ plugins/ExtendedProfile/js/profiledetail.js | 80 +++++++++++-------- .../profiledetailsettingsaction.php | 36 ++++++--- 4 files changed, 107 insertions(+), 74 deletions(-) diff --git a/plugins/ExtendedProfile/extendedprofile.php b/plugins/ExtendedProfile/extendedprofile.php index 94a5ef4826..711fdcf1bb 100644 --- a/plugins/ExtendedProfile/extendedprofile.php +++ b/plugins/ExtendedProfile/extendedprofile.php @@ -100,7 +100,7 @@ class ExtendedProfile function getPhones() { - $phones = $this->fields['phone']; + $phones = (isset($this->fields['phone'])) ? $this->fields['phone'] : null; $pArrays = array(); if (empty($phones)) { @@ -109,22 +109,20 @@ class ExtendedProfile 'index' => 0, 'type' => 'phone', 'vcard' => 'tel', - 'multi' => true + 'rel' => 'office', + 'value' => null ); } else { for ($i = 0; $i < sizeof($phones); $i++) { $pa = array( 'label' => _m('Phone'), 'type' => 'phone', - 'index' => intva($phones[$i]->value_index), + 'index' => intval($phones[$i]->value_index), 'rel' => $phones[$i]->rel, 'value' => $phones[$i]->field_value, 'vcard' => 'tel' ); - // Last phone record should allow adding more - if ($i == sizeof($phones) - 1) { - $pa['multi'] = true; - } + $pArrays[] = $pa; } } diff --git a/plugins/ExtendedProfile/extendedprofilewidget.php b/plugins/ExtendedProfile/extendedprofilewidget.php index 7eb195e369..d8c42df6a3 100644 --- a/plugins/ExtendedProfile/extendedprofilewidget.php +++ b/plugins/ExtendedProfile/extendedprofilewidget.php @@ -156,7 +156,7 @@ class ExtendedProfileWidget extends Form $this->out->text($this->ext->getTags()); break; case 'phone': - $this->showPhone($field); + $this->showPhone($name, $field); break; default: $this->out->text("TYPE: $type"); @@ -169,7 +169,7 @@ class ExtendedProfileWidget extends Form } } - protected function showPhone($field) + protected function showPhone($name, $field) { $this->out->elementStart('div', array('class' => 'phone-display')); $this->out->text($field['value']); @@ -181,7 +181,7 @@ class ExtendedProfileWidget extends Form protected function showEditablePhone($name, $field) { - $index = $field['index']; + $index = isset($field['index']) ? $field['index'] : 0; $id = "extprofile-$name-$index"; $rel = $id . '-rel'; $this->out->elementStart( @@ -190,7 +190,11 @@ class ExtendedProfileWidget extends Form 'class' => 'phone-edit' ) ); - $this->out->input($id, null, $field['value']); + $this->out->input( + $id, + null, + isset($field['value']) ? $field['value'] : null + ); $this->out->dropdown( $id . '-rel', 'Type', @@ -203,26 +207,29 @@ class ExtendedProfileWidget extends Form ), null, false, - $field['rel'] + isset($field['rel']) ? $field['rel'] : null ); - if ($field['multi']) { - $this->out->element( - 'a', - array( - 'class' => 'add_row', - 'href' => 'javascript://'), - '+' - ); - $this->out->element( - 'a', - array( - 'class' => 'remove_row', - 'href' => 'javascript://', - 'style' => 'display: none; ' - ), - '-' - ); - } + + $this->out->element( + 'a', + array( + 'class' => 'add_row', + 'href' => 'javascript://', + 'style' => 'display: none; ' + ), + '+' + ); + + $this->out->element( + 'a', + array( + 'class' => 'remove_row', + 'href' => 'javascript://', + 'style' => 'display: none; ' + ), + '-' + ); + $this->out->elementEnd('div'); } diff --git a/plugins/ExtendedProfile/js/profiledetail.js b/plugins/ExtendedProfile/js/profiledetail.js index a021a32645..7d7eceddc1 100644 --- a/plugins/ExtendedProfile/js/profiledetail.js +++ b/plugins/ExtendedProfile/js/profiledetail.js @@ -1,43 +1,35 @@ -var removeRow = function() { - var cnt = rowCount(this); - var table = $(this).closest('table'); - console.log("row count = " + cnt); - if (cnt > 1) { - var target = $(this).closest('tr'); - target.remove(); - reorder(table); - } -}; +var reorder = function(class) { + console.log("QQQ Enter reorder"); -var rowCount = function(row) { - var top = $(row).closest('table'); - var trs = $(top).find('tr'); - return trs.length - 1; // exclude th section header row -}; + var divs = $.find('div[class=' + class + ']'); + console.log('divs length = ' + divs.length); -var reorder = function(table) { - var trs = $(table).find('tr').has('td'); + $(divs).find('a').hide(); - $(trs).find('a').hide(); - - $(trs).each(function(i, tr) { + $(divs).each(function(i, div) { console.log("ROW " + i); - $(tr).find('a.remove_row').show(); - replaceIndex(rowIndex(tr), i); + $(div).find('a.remove_row').show(); + replaceIndex(rowIndex(div), i); }); - $(trs).last().find('a.add_row').show(); + $(divs).last().find('a.add_row').show(); - if (trs.length == 1) { - $(trs).find('a.remove_row').hide(); + if (divs.length == 1) { + $(divs).find('a.remove_row').hide(); } }; -var rowIndex = function(elem) { - var idStr = $(elem).find('div').attr('id'); - var id = idStr.match(/\d+/); +var rowIndex = function(div) { + var idstr = $(div).attr('id'); + var id = idstr.match(/\d+/); console.log("id = " + id); + return id; +}; + +var rowCount = function(class) { + var divs = $.find('div[class=' + class + ']'); + return divs.length; }; var replaceIndex = function(elem, oldIndex, newIndex) { @@ -46,7 +38,7 @@ var replaceIndex = function(elem, oldIndex, newIndex) { var regexp = /extprofile-.*-\d.*/; var value = attrib.value; var match = value.match(regexp); - if (match != null) { + if (match !== null) { attrib.value = value.replace("-" + oldIndex, "-" + newIndex); console.log('match: oldIndex = ' + oldIndex + ' newIndex = ' + newIndex + ' name = ' + attrib.name + ' value = ' + attrib.value); } @@ -60,22 +52,42 @@ var resetRow = function(elem) { } var addRow = function() { - var divId = $(this).closest('div').attr('id'); - var index = divId.match(/\d+/); - console.log("Current row = " + index); + var div = $(this).closest('div'); + var id = $(div).attr('id'); + var class = $(div).attr('class'); + var index = id.match(/\d+/); + console.log("Current row = " + index + ', class = ' + class); var tr = $(this).closest('tr'); var newtr = $(tr).clone(); var newIndex = parseInt(index) + 1; replaceIndex(newtr, index, newIndex); resetRow(newtr); $(tr).after(newtr); - console.log("number of rows: " + rowCount(tr)); - reorder($(this).closest('table')); + reorder(class); }; +var removeRow = function() { + var div = $(this).closest('div'); + var id = $(div).attr('id'); + var class = $(div).attr('class'); + + cnt = rowCount(class); + console.debug("removeRow - cnt = " + cnt); + if (cnt > 1) { + var target = $(this).closest('tr'); + target.remove(); + reorder(class); + } +}; + +var init = function() { + reorder('phone-edit'); +} + $(document).ready( function() { + init(); $('.add_row').live('click', addRow); $('.remove_row').live('click', removeRow); } diff --git a/plugins/ExtendedProfile/profiledetailsettingsaction.php b/plugins/ExtendedProfile/profiledetailsettingsaction.php index ee450118c3..89b8d61cf9 100644 --- a/plugins/ExtendedProfile/profiledetailsettingsaction.php +++ b/plugins/ExtendedProfile/profiledetailsettingsaction.php @@ -107,7 +107,9 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction foreach ($simpleFieldNames as $name) { $value = $this->trimmed('extprofile-' . $name); - $this->saveField($user, $name, $value); + if (!empty($value)) { + $this->saveField($user, $name, $value); + } } $this->savePhoneNumbers($user); @@ -118,15 +120,19 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction function savePhoneNumbers($user) { $phones = $this->findPhoneNumbers(); - - foreach ($phones as $phone) { - $this->saveField( - $user, - 'phone', - $phone['value'], - $phone['rel'], - $phone['index'] - ); + $this->removeAll($user, 'phone'); + $i = 0; + foreach($phones as $phone) { + if (!empty($phone['value'])) { + ++$i; + $this->saveField( + $user, + 'phone', + $phone['value'], + $phone['rel'], + $i + ); + } } } @@ -223,6 +229,16 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction $detail->free(); } + function removeAll($user, $name) + { + $profile = $user->getProfile(); + $detail = new Profile_detail(); + $detail->profile_id = $profile->id; + $detail->field_name = $name; + $detail->delete(); + $detail->free(); + } + /** * Save fields that should be stored in the main profile object * From eaef01233a9b0d1bf3f21ae4a0065d078238973f Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Mon, 14 Mar 2011 18:01:22 +0100 Subject: [PATCH 038/146] Fix incorrect parameter documentation. Spotted by Nikerabbit. --- actions/apigrouplist.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/actions/apigrouplist.php b/actions/apigrouplist.php index 1f6d44363f..f80fbce932 100644 --- a/actions/apigrouplist.php +++ b/actions/apigrouplist.php @@ -100,7 +100,7 @@ class ApiGroupListAction extends ApiBareAuthAction ); $subtitle = sprintf( - // TRANS: Used as subtitle in check for group membership. %1$s is a user name, %2$s is the site name. + // TRANS: Used as subtitle in check for group membership. %1$s is the site name, %2$s is a user name. _('%1$s groups %2$s is a member of.'), $sitename, $this->user->nickname From ed2d224df5e52b2fe5ef5f076d147791e48c4dcf Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 14 Mar 2011 12:22:49 -0700 Subject: [PATCH 039/146] Check the site minifications etting for realtime plugin; debugging aid. --- plugins/Realtime/RealtimePlugin.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/plugins/Realtime/RealtimePlugin.php b/plugins/Realtime/RealtimePlugin.php index 246b1f9735..f617c39060 100644 --- a/plugins/Realtime/RealtimePlugin.php +++ b/plugins/Realtime/RealtimePlugin.php @@ -323,7 +323,12 @@ class RealtimePlugin extends Plugin function _getScripts() { - return array(Plugin::staticPath('Realtime', 'realtimeupdate.min.js')); + if (common_config('site', 'minify')) { + $js = 'realtimeupdate.min.js'; + } else { + $js = 'realtimeupdate.js'; + } + return array(Plugin::staticPath('Realtime', $js)); } /** From 4334bb71326d8b8bcc78c636942fa4bdec21bd60 Mon Sep 17 00:00:00 2001 From: Samantha Doherty Date: Mon, 14 Mar 2011 15:30:51 -0400 Subject: [PATCH 040/146] Adding wrapper divs for equal height columns. --- lib/action.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/action.php b/lib/action.php index 233ac78567..fce59ba8a0 100644 --- a/lib/action.php +++ b/lib/action.php @@ -681,6 +681,9 @@ class Action extends HTMLOutputter // lawsuit function showCore() { $this->elementStart('div', array('id' => 'core')); + $this->elementStart('div', array('id' => 'aside_primary_wrapper')); + $this->elementStart('div', array('id' => 'content_wrapper')); + $this->elementStart('div', array('id' => 'site_nav_local_views_wrapper')); if (Event::handle('StartShowLocalNavBlock', array($this))) { $this->showLocalNavBlock(); Event::handle('EndShowLocalNavBlock', array($this)); @@ -694,6 +697,9 @@ class Action extends HTMLOutputter // lawsuit Event::handle('EndShowAside', array($this)); } $this->elementEnd('div'); + $this->elementEnd('div'); + $this->elementEnd('div'); + $this->elementEnd('div'); } /** From 640a033f8b7d17352f19a30990c106522b0ccd7d Mon Sep 17 00:00:00 2001 From: Samantha Doherty Date: Mon, 14 Mar 2011 15:31:19 -0400 Subject: [PATCH 041/146] Style changes for equal column heights. --- theme/neo/css/display.css | 70 ++++++++++++++++++++++++++++----------- 1 file changed, 50 insertions(+), 20 deletions(-) diff --git a/theme/neo/css/display.css b/theme/neo/css/display.css index 22556bb891..682b6dd6dc 100644 --- a/theme/neo/css/display.css +++ b/theme/neo/css/display.css @@ -137,21 +137,46 @@ address { #core { clear: both; margin: 0px; - width: 960px; + width: 958px; border-top: 5px solid #FB6104; -} - -#site_nav_local_views { - display: block; - float: left; - width: 138px; - margin-top: 0px; - padding: 10px; - padding-top: 22px; - background-color: #ececf2; border-left: 1px solid #d8dae6; border-right: 1px solid #d8dae6; - min-height: 800px; /* XXX set up equal column heights! */ +} + +#aside_primary_wrapper { + width: 100%; + float: left; + overflow: hidden; + position: relative; + background-color: #ececf2; +} + +#content_wrapper { + width: 100%; + float: left; + position: relative; + right: 239px; + background-color: #fff; + border-right: 1px solid #d8dae6; +} + +#site_nav_local_views_wrapper { + width: 100%; + float: left; + position: relative; + right: 561px; + background-color: #ececf2; + border-right: 1px solid #d8dae6; +} + +#site_nav_local_views { + width: 138px; + float: left; + overflow: hidden; + position: relative; + left: 800px; + margin-top: 0px; + padding: 22px 10px 40px 10px; } #site_nav_local_views H3 { @@ -196,8 +221,12 @@ address { #content { width: 520px; - margin-right: 0px; - padding: 20px; + float: left; + overflow: hidden; + position: relative; + left: 801px; + margin: 0px; + padding: 20px 20px 40px 20px; } /* Input forms */ @@ -357,13 +386,12 @@ address { #aside_primary { width: 218px; - padding: 10px; - padding-top: 22px; + float: left; + overflow: hidden; + position: relative; + left: 802px; + padding: 22px 10px 40px 10px; margin-top: 0px; - background-color: #ececf2; - border-left: 1px solid #d8dae6; - border-right: 1px solid #d8dae6; - min-height: 800px; /* XXX set up equal column heights! */ } #aside_primary .section { @@ -665,6 +693,8 @@ div.entry-content a.response:after { } #footer { + position: relative; + top: -6px; color: #000; margin-left: 0px; margin-right: 0px; From 1e36593a23bd8e50e50d115c28a7f8fa024fb768 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 14 Mar 2011 12:32:39 -0700 Subject: [PATCH 042/146] Realtime work in progress: switch makeNoticeData to async -- next we'll load fresh copies from server, maintaining proper language and plugin enhancements. --- plugins/Realtime/realtimeupdate.js | 82 +++++++++++++++--------------- 1 file changed, 42 insertions(+), 40 deletions(-) diff --git a/plugins/Realtime/realtimeupdate.js b/plugins/Realtime/realtimeupdate.js index e615895cab..73516a8ed9 100644 --- a/plugins/Realtime/realtimeupdate.js +++ b/plugins/Realtime/realtimeupdate.js @@ -163,50 +163,51 @@ RealtimeUpdate = { return; } - var noticeItem = RealtimeUpdate.makeNoticeItem(data); - var noticeItemID = $(noticeItem).attr('id'); + RealtimeUpdate.makeNoticeItem(data, function(noticeItem) { + var noticeItemID = $(noticeItem).attr('id'); - var list = $("#notices_primary .notices:first") - var prepend = true; + var list = $("#notices_primary .notices:first") + var prepend = true; - var threaded = list.hasClass('threaded-notices'); - if (threaded && data.in_reply_to_status_id) { - // aho! - var parent = $('#notice-' + data.in_reply_to_status_id); - if (parent.length == 0) { - // @todo fetch the original, insert it, and finish the rest - } else { - // Check the parent notice to make sure it's not a reply itself. - // If so, use it's parent as the parent. - var parentList = parent.closest('.notices'); - if (parentList.hasClass('threaded-replies')) { - parent = parentList.closest('.notice'); + var threaded = list.hasClass('threaded-notices'); + if (threaded && data.in_reply_to_status_id) { + // aho! + var parent = $('#notice-' + data.in_reply_to_status_id); + if (parent.length == 0) { + // @todo fetch the original, insert it, and finish the rest + } else { + // Check the parent notice to make sure it's not a reply itself. + // If so, use it's parent as the parent. + var parentList = parent.closest('.notices'); + if (parentList.hasClass('threaded-replies')) { + parent = parentList.closest('.notice'); + } + list = parent.find('.threaded-replies'); + if (list.length == 0) { + list = $('
                  '); + parent.append(list); + } + prepend = false; } - list = parent.find('.threaded-replies'); - if (list.length == 0) { - list = $('
                    '); - parent.append(list); - } - prepend = false; } - } - var newNotice = $(noticeItem); - if (prepend) { - list.prepend(newNotice); - } else { - var placeholder = list.find('li.notice-reply-placeholder') - if (placeholder.length > 0) { - newNotice.insertBefore(placeholder) + var newNotice = $(noticeItem); + if (prepend) { + list.prepend(newNotice); } else { - newNotice.appendTo(list); - SN.U.NoticeInlineReplyPlaceholder(parent); + var placeholder = list.find('li.notice-reply-placeholder') + if (placeholder.length > 0) { + newNotice.insertBefore(placeholder) + } else { + newNotice.appendTo(list); + SN.U.NoticeInlineReplyPlaceholder(parent); + } } - } - newNotice.css({display:"none"}).fadeIn(1000); + newNotice.css({display:"none"}).fadeIn(1000); - SN.U.NoticeReplyTo($('#'+noticeItemID)); - SN.U.NoticeWithAttachment($('#'+noticeItemID)); + SN.U.NoticeReplyTo($('#'+noticeItemID)); + SN.U.NoticeWithAttachment($('#'+noticeItemID)); + }); }, /** @@ -263,10 +264,11 @@ RealtimeUpdate = { }, /** - * Builds a notice HTML block from JSON API-style data. + * Builds a notice HTML block from JSON API-style data; + * loads data from server, so runs async. * * @param {Object} data: extended JSON API-formatted notice - * @return {String} HTML fragment + * @param {function} callback: function(str) to receive HTML fragment * * @fixme this replicates core StatusNet code, making maintenance harder * @fixme sloppy HTML building (raw concat without escaping) @@ -275,7 +277,7 @@ RealtimeUpdate = { * * @access private */ - makeNoticeItem: function(data) + makeNoticeItem: function(data, callback) { if (data.hasOwnProperty('retweeted_status')) { original = data['retweeted_status']; @@ -342,7 +344,7 @@ RealtimeUpdate = { ni = ni+""; ni = ni+""; - return ni; + callback(ni); }, /** From 894bcd3bcddfec63544aa1f95a6e3b7fcb1a3f5d Mon Sep 17 00:00:00 2001 From: Samantha Doherty Date: Mon, 14 Mar 2011 15:36:00 -0400 Subject: [PATCH 043/146] Whoops, need to reset the background color on the aside. --- theme/neo/css/display.css | 1 + 1 file changed, 1 insertion(+) diff --git a/theme/neo/css/display.css b/theme/neo/css/display.css index 682b6dd6dc..7cb5e11911 100644 --- a/theme/neo/css/display.css +++ b/theme/neo/css/display.css @@ -392,6 +392,7 @@ address { left: 802px; padding: 22px 10px 40px 10px; margin-top: 0px; + background: none; } #aside_primary .section { From f11b788b5af29d325f17ebb77c321309a41e5e70 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Mon, 14 Mar 2011 12:53:49 -0700 Subject: [PATCH 044/146] Extended profile - add a date value for fields --- plugins/ExtendedProfile/Profile_detail.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/ExtendedProfile/Profile_detail.php b/plugins/ExtendedProfile/Profile_detail.php index f9f4d00098..96869b0e63 100644 --- a/plugins/ExtendedProfile/Profile_detail.php +++ b/plugins/ExtendedProfile/Profile_detail.php @@ -64,6 +64,7 @@ class Profile_detail extends Managed_DataObject public $field_name; // name public $field_value; // primary text value public $value_index; // relative ordering of multiple values in the same field + public $date; // related date public $ref_profile; // for people types, allows pointing to a known profile in the system public $created; public $modified; @@ -118,6 +119,7 @@ class Profile_detail extends Managed_DataObject ), 'value_index' => array('type' => 'int'), 'field_value' => array('type' => 'text'), + 'date' => array('type' => 'datetime'), 'rel' => array('type' => 'varchar', 'length' => 16), 'rel_profile' => array('type' => 'int'), 'created' => array( From c7e7cc79da4255c42dbc8500fc5d6db25d1f90c3 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 14 Mar 2011 13:05:30 -0700 Subject: [PATCH 045/146] 'ajax' param on shownotice action so we can pull items in full html version for realtime --- actions/shownotice.php | 48 ++++++++++++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 14 deletions(-) diff --git a/actions/shownotice.php b/actions/shownotice.php index 3978f03ea9..8d8ab326df 100644 --- a/actions/shownotice.php +++ b/actions/shownotice.php @@ -188,22 +188,27 @@ class ShownoticeAction extends OwnerDesignAction { parent::handle($args); - if ($this->notice->is_local == Notice::REMOTE_OMB) { - if (!empty($this->notice->url)) { - $target = $this->notice->url; - } else if (!empty($this->notice->uri) && preg_match('/^https?:/', $this->notice->uri)) { - // Old OMB posts saved the remote URL only into the URI field. - $target = $this->notice->uri; - } else { - // Shouldn't happen. - $target = false; - } - if ($target && $target != $this->selfUrl()) { - common_redirect($target, 301); - return false; + if ($this->boolean('ajax')) { + StatusNet::setApi(true); + $this->showAjax(); + } else { + if ($this->notice->is_local == Notice::REMOTE_OMB) { + if (!empty($this->notice->url)) { + $target = $this->notice->url; + } else if (!empty($this->notice->uri) && preg_match('/^https?:/', $this->notice->uri)) { + // Old OMB posts saved the remote URL only into the URI field. + $target = $this->notice->uri; + } else { + // Shouldn't happen. + $target = false; + } + if ($target && $target != $this->selfUrl()) { + common_redirect($target, 301); + return false; + } } + $this->showPage(); } - $this->showPage(); } /** @@ -232,6 +237,21 @@ class ShownoticeAction extends OwnerDesignAction $this->elementEnd('ol'); } + function showAjax() + { + header('Content-Type: text/xml;charset=utf-8'); + $this->xw->startDocument('1.0', 'UTF-8'); + $this->elementStart('html'); + $this->elementStart('head'); + $this->element('title', null, _('Notice')); + $this->elementEnd('head'); + $this->elementStart('body'); + $nli = new NoticeListItem($this->notice, $this); + $nli->show(); + $this->elementEnd('body'); + $this->elementEnd('html'); + } + /** * Don't show page notice * From 90d35885aeed68b11a80225ff255b6ac70a349b9 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 14 Mar 2011 13:29:35 -0700 Subject: [PATCH 046/146] Realtime plugin: fix i18n, thumbnails, location display, OStatus server display, micro-apps display. Switch from manual local formatting of notices (which lacks all the server-side goodness) to calling into the server-side with an AJAX variant of shownotice. --- plugins/Realtime/README | 7 +- plugins/Realtime/RealtimePlugin.php | 11 +-- plugins/Realtime/realtimeupdate.js | 98 ++++---------------------- plugins/Realtime/realtimeupdate.min.js | 2 +- 4 files changed, 22 insertions(+), 96 deletions(-) diff --git a/plugins/Realtime/README b/plugins/Realtime/README index 9b36d87f37..0c52427eb6 100644 --- a/plugins/Realtime/README +++ b/plugins/Realtime/README @@ -1,9 +1,12 @@ +As of StatusNet 1.0.x, actual formatting of the notices is done server-side, +loaded by AJAX after the real-time notification comes in. This has the drawback +that we may make extra HTTP requests and delay incoming notices a little, but +means that formatting and internationalization is consistent. + == TODO == -* i18n * Update mark behaviour (on notice send) * Pause, Send a notice ~ should not update counter * Pause ~ retain up to 50-100 most recent notices -* Add geo data * Make it work for Conversation page (perhaps a little tricky) * IE is updating the counter in document title all the time (Not sure if this is still an issue) diff --git a/plugins/Realtime/RealtimePlugin.php b/plugins/Realtime/RealtimePlugin.php index f617c39060..108a6c3b60 100644 --- a/plugins/Realtime/RealtimePlugin.php +++ b/plugins/Realtime/RealtimePlugin.php @@ -45,9 +45,7 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { */ class RealtimePlugin extends Plugin { - protected $replyurl = null; - protected $favorurl = null; - protected $deleteurl = null; + protected $showurl = null; /** * When it's time to initialize the plugin, calculate and @@ -56,11 +54,8 @@ class RealtimePlugin extends Plugin function onInitializePlugin() { - $this->replyurl = common_local_url('newnotice'); - $this->favorurl = common_local_url('favor'); - $this->repeaturl = common_local_url('repeat'); // FIXME: need to find a better way to pass this pattern in - $this->deleteurl = common_local_url('deletenotice', + $this->showurl = common_local_url('shownotice', array('notice' => '0000000000')); return true; } @@ -359,7 +354,7 @@ class RealtimePlugin extends Plugin function _updateInitialize($timeline, $user_id) { - return "RealtimeUpdate.init($user_id, \"$this->replyurl\", \"$this->favorurl\", \"$this->repeaturl\", \"$this->deleteurl\"); "; + return "RealtimeUpdate.init($user_id, \"$this->showurl\"); "; } function _connect() diff --git a/plugins/Realtime/realtimeupdate.js b/plugins/Realtime/realtimeupdate.js index 73516a8ed9..59e3fe72d7 100644 --- a/plugins/Realtime/realtimeupdate.js +++ b/plugins/Realtime/realtimeupdate.js @@ -44,10 +44,7 @@ */ RealtimeUpdate = { _userid: 0, - _replyurl: '', - _favorurl: '', - _repeaturl: '', - _deleteurl: '', + _showurl: '', _updatecounter: 0, _maxnotices: 50, _windowhasfocus: true, @@ -66,21 +63,15 @@ RealtimeUpdate = { * feed data into the RealtimeUpdate object! * * @param {int} userid: local profile ID of the currently logged-in user - * @param {String} replyurl: URL for newnotice action, used when generating reply buttons - * @param {String} favorurl: URL for favor action, used when generating fave buttons - * @param {String} repeaturl: URL for repeat action, used when generating repeat buttons - * @param {String} deleteurl: URL template for deletenotice action, used when generating delete buttons. + * @param {String} showurl: URL for shownotice action, used when fetching formatting notices. * This URL contains a stub value of 0000000000 which will be replaced with the notice ID. * * @access public */ - init: function(userid, replyurl, favorurl, repeaturl, deleteurl) + init: function(userid, showurl) { RealtimeUpdate._userid = userid; - RealtimeUpdate._replyurl = replyurl; - RealtimeUpdate._favorurl = favorurl; - RealtimeUpdate._repeaturl = repeaturl; - RealtimeUpdate._deleteurl = deleteurl; + RealtimeUpdate._showurl = showurl; RealtimeUpdate._documenttitle = document.title; @@ -268,83 +259,20 @@ RealtimeUpdate = { * loads data from server, so runs async. * * @param {Object} data: extended JSON API-formatted notice - * @param {function} callback: function(str) to receive HTML fragment - * - * @fixme this replicates core StatusNet code, making maintenance harder - * @fixme sloppy HTML building (raw concat without escaping) - * @fixme no i18n support - * @fixme local variables pollute global namespace + * @param {function} callback: function(DOMNode) to receive new code * * @access private */ makeNoticeItem: function(data, callback) { - if (data.hasOwnProperty('retweeted_status')) { - original = data['retweeted_status']; - repeat = data; - data = original; - unique = repeat['id']; - responsible = repeat['user']; - } else { - original = null; - repeat = null; - unique = data['id']; - responsible = data['user']; - } - - user = data['user']; - html = data['html'].replace(/</g,'<').replace(/>/g,'>').replace(/"/g,'"').replace(/&/g,'&'); - source = data['source'].replace(/</g,'<').replace(/>/g,'>').replace(/"/g,'"').replace(/&/g,'&'); - - ni = "
                  • "+ - "
                    "+ - ""+ - ""+ - "\""+user['screen_name']+"\"/"+ - ""+user['screen_name']+""+ - ""+ - ""+ - "

                    "+html+"

                    "+ - "
                    "+ - "
                    "+ - ""+ - "a few seconds ago"+ - " "+ - ""+ - "from "+ - ""+source+""+ // may have a link - ""; - if (data['conversation_url']) { - ni = ni+" in context"; - } - - if (repeat) { - ru = repeat['user']; - ni = ni + "Repeated by " + - "" + - ""+ ru['screen_name'] + ""; - } - - ni = ni+"
                    "; - - ni = ni + "
                    "; - - if (RealtimeUpdate._userid != 0) { - var input = $("form#form_notice fieldset input#token"); - var session_key = input.val(); - ni = ni+RealtimeUpdate.makeFavoriteForm(data['id'], session_key); - ni = ni+RealtimeUpdate.makeReplyLink(data['id'], data['user']['screen_name']); - if (RealtimeUpdate._userid == responsible['id']) { - ni = ni+RealtimeUpdate.makeDeleteLink(data['id']); - } else if (RealtimeUpdate._userid != user['id']) { - ni = ni+RealtimeUpdate.makeRepeatForm(data['id'], session_key); - } - } - - ni = ni+"
                    "; - - ni = ni+"
                  • "; - callback(ni); + var url = RealtimeUpdate._showurl.replace('0000000000', data.id); + $.get(url, {ajax: 1}, function(data, textStatus, xhr) { + var notice = $('li.notice:first', data); + if (notice.length) { + var node = document._importNode(notice[0], true); + callback(node); + } + }); }, /** diff --git a/plugins/Realtime/realtimeupdate.min.js b/plugins/Realtime/realtimeupdate.min.js index 931de982ef..7e77f90709 100644 --- a/plugins/Realtime/realtimeupdate.min.js +++ b/plugins/Realtime/realtimeupdate.min.js @@ -1 +1 @@ -RealtimeUpdate={_userid:0,_replyurl:"",_favorurl:"",_repeaturl:"",_deleteurl:"",_updatecounter:0,_maxnotices:50,_windowhasfocus:true,_documenttitle:"",_paused:false,_queuedNotices:[],init:function(c,b,d,e,a){RealtimeUpdate._userid=c;RealtimeUpdate._replyurl=b;RealtimeUpdate._favorurl=d;RealtimeUpdate._repeaturl=e;RealtimeUpdate._deleteurl=a;RealtimeUpdate._documenttitle=document.title;$(window).bind("focus",function(){RealtimeUpdate._windowhasfocus=true;RealtimeUpdate._updatecounter=0;RealtimeUpdate.removeWindowCounter()});$(window).bind("blur",function(){$("#notices_primary .notice").removeClass("mark-top");$("#notices_primary .notice:first").addClass("mark-top");RealtimeUpdate._windowhasfocus=false;return false})},receive:function(a){if(RealtimeUpdate.isNoticeVisible(a.id)){return}if(RealtimeUpdate._paused===false){RealtimeUpdate.purgeLastNoticeItem();RealtimeUpdate.insertNoticeItem(a)}else{RealtimeUpdate._queuedNotices.push(a);RealtimeUpdate.updateQueuedCounter()}RealtimeUpdate.updateWindowCounter()},insertNoticeItem:function(b){if(RealtimeUpdate.isNoticeVisible(b.id)){return}var a=RealtimeUpdate.makeNoticeItem(b);var c=$(a).attr("id");var d=$("#notices_primary .notices:first");var j=true;var e=d.hasClass("threaded-notices");if(e&&b.in_reply_to_status_id){var g=$("#notice-"+b.in_reply_to_status_id);if(g.length==0){}else{var h=g.closest(".notices");if(h.hasClass("threaded-replies")){g=h.closest(".notice")}d=g.find(".threaded-replies");if(d.length==0){d=$('
                      ');g.append(d)}j=false}}var i=$(a);if(j){d.prepend(i)}else{var f=d.find("li.notice-reply-placeholder");if(f.length>0){i.insertBefore(f)}else{i.appendTo(d);SN.U.NoticeInlineReplyPlaceholder(g)}}i.css({display:"none"}).fadeIn(1000);SN.U.NoticeReplyTo($("#"+c));SN.U.NoticeWithAttachment($("#"+c))},isNoticeVisible:function(a){return($("#notice-"+a).length>0)},purgeLastNoticeItem:function(){if($("#notices_primary .notice").length>RealtimeUpdate._maxnotices){$("#notices_primary .notice:last").remove()}},updateWindowCounter:function(){if(RealtimeUpdate._windowhasfocus===false){RealtimeUpdate._updatecounter+=1;document.title="("+RealtimeUpdate._updatecounter+") "+RealtimeUpdate._documenttitle}},removeWindowCounter:function(){document.title=RealtimeUpdate._documenttitle},makeNoticeItem:function(c){if(c.hasOwnProperty("retweeted_status")){original=c.retweeted_status;repeat=c;c=original;unique=repeat.id;responsible=repeat.user}else{original=null;repeat=null;unique=c.id;responsible=c.user}user=c.user;html=c.html.replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/&/g,"&");source=c.source.replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/&/g,"&");ni='
                    • '+user.screen_name+''+user.screen_name+'

                      '+html+'

                      a few seconds ago from '+source+"";if(c.conversation_url){ni=ni+' in context'}if(repeat){ru=repeat.user;ni=ni+'Repeated by '+ru.screen_name+""}ni=ni+"
                      ";ni=ni+'
                      ';if(RealtimeUpdate._userid!=0){var a=$("form#form_notice fieldset input#token");var b=a.val();ni=ni+RealtimeUpdate.makeFavoriteForm(c.id,b);ni=ni+RealtimeUpdate.makeReplyLink(c.id,c.user["screen_name"]);if(RealtimeUpdate._userid==responsible.id){ni=ni+RealtimeUpdate.makeDeleteLink(c.id)}else{if(RealtimeUpdate._userid!=user.id){ni=ni+RealtimeUpdate.makeRepeatForm(c.id,b)}}}ni=ni+"
                      ";ni=ni+"
                    • ";return ni},makeFavoriteForm:function(c,b){var a;a='
                      Favor this notice
                      ';return a},makeReplyLink:function(c,a){var b;b='Reply '+c+"";return b},makeRepeatForm:function(c,b){var a;a='
                      Repeat this notice?
                      ';return a},makeDeleteLink:function(c){var b,a;a=RealtimeUpdate._deleteurl.replace("0000000000",c);b='Delete';return b},initActions:function(a,b,c){$("#notices_primary").prepend('
                      ');RealtimeUpdate._pluginPath=c;RealtimeUpdate.initPlayPause();RealtimeUpdate.initAddPopup(a,b,RealtimeUpdate._pluginPath)},initPlayPause:function(){if(typeof(localStorage)=="undefined"){RealtimeUpdate.showPause()}else{if(localStorage.getItem("RealtimeUpdate_paused")==="true"){RealtimeUpdate.showPlay()}else{RealtimeUpdate.showPause()}}},showPause:function(){RealtimeUpdate.setPause(false);RealtimeUpdate.showQueuedNotices();RealtimeUpdate.addNoticesHover();$("#realtime_playpause").remove();$("#realtime_actions").prepend('
                    • ');$("#realtime_pause").text(SN.msg("realtime_pause")).attr("title",SN.msg("realtime_pause_tooltip")).bind("click",function(){RealtimeUpdate.removeNoticesHover();RealtimeUpdate.showPlay();return false})},showPlay:function(){RealtimeUpdate.setPause(true);$("#realtime_playpause").remove();$("#realtime_actions").prepend('
                    • ');$("#realtime_play").text(SN.msg("realtime_play")).attr("title",SN.msg("realtime_play_tooltip")).bind("click",function(){RealtimeUpdate.showPause();return false})},setPause:function(a){RealtimeUpdate._paused=a;if(typeof(localStorage)!="undefined"){localStorage.setItem("RealtimeUpdate_paused",RealtimeUpdate._paused)}},showQueuedNotices:function(){$.each(RealtimeUpdate._queuedNotices,function(a,b){RealtimeUpdate.insertNoticeItem(b)});RealtimeUpdate._queuedNotices=[];RealtimeUpdate.removeQueuedCounter()},updateQueuedCounter:function(){$("#realtime_playpause #queued_counter").html("("+RealtimeUpdate._queuedNotices.length+")")},removeQueuedCounter:function(){$("#realtime_playpause #queued_counter").empty()},addNoticesHover:function(){$("#notices_primary .notices").hover(function(){if(RealtimeUpdate._paused===false){RealtimeUpdate.showPlay()}},function(){if(RealtimeUpdate._paused===true){RealtimeUpdate.showPause()}})},removeNoticesHover:function(){$("#notices_primary .notices").unbind()},initAddPopup:function(a,b,c){$("#realtime_timeline").append('');$("#realtime_popup").text(SN.msg("realtime_popup")).attr("title",SN.msg("realtime_popup_tooltip")).bind("click",function(){window.open(a,"","toolbar=no,resizable=yes,scrollbars=yes,status=no,menubar=no,personalbar=no,location=no,width=500,height=550");return false})},initPopupWindow:function(){$(".notices .entry-title a, .notices .entry-content a").bind("click",function(){window.open(this.href,"");return false});$("#showstream .entity_profile").css({width:"69%"})}}; \ No newline at end of file +RealtimeUpdate={_userid:0,_showurl:"",_updatecounter:0,_maxnotices:50,_windowhasfocus:true,_documenttitle:"",_paused:false,_queuedNotices:[],init:function(a,b){RealtimeUpdate._userid=a;RealtimeUpdate._showurl=b;RealtimeUpdate._documenttitle=document.title;$(window).bind("focus",function(){RealtimeUpdate._windowhasfocus=true;RealtimeUpdate._updatecounter=0;RealtimeUpdate.removeWindowCounter()});$(window).bind("blur",function(){$("#notices_primary .notice").removeClass("mark-top");$("#notices_primary .notice:first").addClass("mark-top");RealtimeUpdate._windowhasfocus=false;return false})},receive:function(a){if(RealtimeUpdate.isNoticeVisible(a.id)){return}if(RealtimeUpdate._paused===false){RealtimeUpdate.purgeLastNoticeItem();RealtimeUpdate.insertNoticeItem(a)}else{RealtimeUpdate._queuedNotices.push(a);RealtimeUpdate.updateQueuedCounter()}RealtimeUpdate.updateWindowCounter()},insertNoticeItem:function(a){if(RealtimeUpdate.isNoticeVisible(a.id)){return}RealtimeUpdate.makeNoticeItem(a,function(b){var c=$(b).attr("id");var d=$("#notices_primary .notices:first");var j=true;var e=d.hasClass("threaded-notices");if(e&&a.in_reply_to_status_id){var g=$("#notice-"+a.in_reply_to_status_id);if(g.length==0){}else{var h=g.closest(".notices");if(h.hasClass("threaded-replies")){g=h.closest(".notice")}d=g.find(".threaded-replies");if(d.length==0){d=$('
                        ');g.append(d)}j=false}}var i=$(b);if(j){d.prepend(i)}else{var f=d.find("li.notice-reply-placeholder");if(f.length>0){i.insertBefore(f)}else{i.appendTo(d);SN.U.NoticeInlineReplyPlaceholder(g)}}i.css({display:"none"}).fadeIn(1000);SN.U.NoticeReplyTo($("#"+c));SN.U.NoticeWithAttachment($("#"+c))})},isNoticeVisible:function(a){return($("#notice-"+a).length>0)},purgeLastNoticeItem:function(){if($("#notices_primary .notice").length>RealtimeUpdate._maxnotices){$("#notices_primary .notice:last").remove()}},updateWindowCounter:function(){if(RealtimeUpdate._windowhasfocus===false){RealtimeUpdate._updatecounter+=1;document.title="("+RealtimeUpdate._updatecounter+") "+RealtimeUpdate._documenttitle}},removeWindowCounter:function(){document.title=RealtimeUpdate._documenttitle},makeNoticeItem:function(b,c){var a=RealtimeUpdate._showurl.replace("0000000000",b.id);$.get(a,{ajax:1},function(f,h,g){var e=$("li.notice:first",f);if(e.length){var d=document._importNode(e[0],true);c(d)}})},makeFavoriteForm:function(c,b){var a;a='
                        Favor this notice
                        ';return a},makeReplyLink:function(c,a){var b;b='Reply '+c+"";return b},makeRepeatForm:function(c,b){var a;a='
                        Repeat this notice?
                        ';return a},makeDeleteLink:function(c){var b,a;a=RealtimeUpdate._deleteurl.replace("0000000000",c);b='Delete';return b},initActions:function(a,b,c){$("#notices_primary").prepend('
                        ');RealtimeUpdate._pluginPath=c;RealtimeUpdate.initPlayPause();RealtimeUpdate.initAddPopup(a,b,RealtimeUpdate._pluginPath)},initPlayPause:function(){if(typeof(localStorage)=="undefined"){RealtimeUpdate.showPause()}else{if(localStorage.getItem("RealtimeUpdate_paused")==="true"){RealtimeUpdate.showPlay()}else{RealtimeUpdate.showPause()}}},showPause:function(){RealtimeUpdate.setPause(false);RealtimeUpdate.showQueuedNotices();RealtimeUpdate.addNoticesHover();$("#realtime_playpause").remove();$("#realtime_actions").prepend('
                      • ');$("#realtime_pause").text(SN.msg("realtime_pause")).attr("title",SN.msg("realtime_pause_tooltip")).bind("click",function(){RealtimeUpdate.removeNoticesHover();RealtimeUpdate.showPlay();return false})},showPlay:function(){RealtimeUpdate.setPause(true);$("#realtime_playpause").remove();$("#realtime_actions").prepend('
                      • ');$("#realtime_play").text(SN.msg("realtime_play")).attr("title",SN.msg("realtime_play_tooltip")).bind("click",function(){RealtimeUpdate.showPause();return false})},setPause:function(a){RealtimeUpdate._paused=a;if(typeof(localStorage)!="undefined"){localStorage.setItem("RealtimeUpdate_paused",RealtimeUpdate._paused)}},showQueuedNotices:function(){$.each(RealtimeUpdate._queuedNotices,function(a,b){RealtimeUpdate.insertNoticeItem(b)});RealtimeUpdate._queuedNotices=[];RealtimeUpdate.removeQueuedCounter()},updateQueuedCounter:function(){$("#realtime_playpause #queued_counter").html("("+RealtimeUpdate._queuedNotices.length+")")},removeQueuedCounter:function(){$("#realtime_playpause #queued_counter").empty()},addNoticesHover:function(){$("#notices_primary .notices").hover(function(){if(RealtimeUpdate._paused===false){RealtimeUpdate.showPlay()}},function(){if(RealtimeUpdate._paused===true){RealtimeUpdate.showPause()}})},removeNoticesHover:function(){$("#notices_primary .notices").unbind()},initAddPopup:function(a,b,c){$("#realtime_timeline").append('');$("#realtime_popup").text(SN.msg("realtime_popup")).attr("title",SN.msg("realtime_popup_tooltip")).bind("click",function(){window.open(a,"","toolbar=no,resizable=yes,scrollbars=yes,status=no,menubar=no,personalbar=no,location=no,width=500,height=550");return false})},initPopupWindow:function(){$(".notices .entry-title a, .notices .entry-content a").bind("click",function(){window.open(this.href,"");return false});$("#showstream .entity_profile").css({width:"69%"})}}; \ No newline at end of file From 34e7d8ddf2cc95de329789eb67513d77e6245b28 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 14 Mar 2011 13:44:39 -0700 Subject: [PATCH 047/146] For good measure; trip short error mode in earlier on ajax shownotice --- actions/shownotice.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/actions/shownotice.php b/actions/shownotice.php index 8d8ab326df..b8927372bb 100644 --- a/actions/shownotice.php +++ b/actions/shownotice.php @@ -78,6 +78,9 @@ class ShownoticeAction extends OwnerDesignAction function prepare($args) { parent::prepare($args); + if ($this->boolean('ajax')) { + StatusNet::setApi(true); + } $id = $this->arg('notice'); @@ -189,7 +192,6 @@ class ShownoticeAction extends OwnerDesignAction parent::handle($args); if ($this->boolean('ajax')) { - StatusNet::setApi(true); $this->showAjax(); } else { if ($this->notice->is_local == Notice::REMOTE_OMB) { From 27c75dd4bb1092199c1604700f6e5a5a6dbcb61b Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Mon, 14 Mar 2011 15:29:11 -0700 Subject: [PATCH 048/146] Extended profile - show and edit experience --- plugins/ExtendedProfile/extendedprofile.php | 28 +++- .../ExtendedProfile/extendedprofilewidget.php | 146 +++++++++++++----- plugins/ExtendedProfile/js/profiledetail.js | 1 + .../profiledetailsettingsaction.php | 93 ++++++++++- 4 files changed, 222 insertions(+), 46 deletions(-) diff --git a/plugins/ExtendedProfile/extendedprofile.php b/plugins/ExtendedProfile/extendedprofile.php index 711fdcf1bb..2277e4d769 100644 --- a/plugins/ExtendedProfile/extendedprofile.php +++ b/plugins/ExtendedProfile/extendedprofile.php @@ -129,6 +129,29 @@ class ExtendedProfile return $pArrays; } + function getExperiences() + { + $companies = (isset($this->fields['companies'])) ? $this->fields['company'] : null; + $start = (isset($this->fields['start'])) ? $this->fields['start'] : null; + $end = (isset($this->fields['end'])) ? $this->fields['end'] : null; + + $cArrays = array(); + + if (empty($experiences)) { + $eArrays[] = array( + 'label' => _m('Employer'), + 'type' => 'experience', + 'company' => "Bozotronix", + 'start' => '1/5/10', + 'end' => '2/3/11', + 'current' => true, + 'index' => 0 + ); + } + + return $eArrays; + } + /** * Return all the sections of the extended profile * @@ -206,10 +229,7 @@ class ExtendedProfile 'experience' => array( 'label' => _m('Work experience'), 'fields' => array( - 'experience' => array( - 'type' => 'experience', - 'label' => _m('Employer'), - ), + 'experience' => $this->getExperiences(), ), ), 'education' => array( diff --git a/plugins/ExtendedProfile/extendedprofilewidget.php b/plugins/ExtendedProfile/extendedprofilewidget.php index d8c42df6a3..9dfbaa716e 100644 --- a/plugins/ExtendedProfile/extendedprofilewidget.php +++ b/plugins/ExtendedProfile/extendedprofilewidget.php @@ -103,9 +103,13 @@ class ExtendedProfileWidget extends Form $this->out->elementStart('table', array('class' => 'extended-profile')); foreach ($section['fields'] as $fieldName => $field) { - if ($fieldName == 'phone') { - $this->showPhones($fieldName, $field); - } else { + + switch($fieldName) { + case 'phone': + case 'experience': + $this->showMultiple($fieldName, $field); + break; + default: $this->showExtendedProfileField($fieldName, $field); } } @@ -135,37 +139,9 @@ class ExtendedProfileWidget extends Form $this->out->elementEnd('tr'); } - /** - * Outputs the value of a field - * - * @param string $name name of the field - * @param array $field set of key/value pairs for the field - */ - protected function showFieldValue($name, $field) - { - $type = strval(@$field['type']); - - switch($type) - { - case '': - case 'text': - case 'textarea': - $this->out->text($this->ext->getTextValue($name)); - break; - case 'tags': - $this->out->text($this->ext->getTags()); - break; - case 'phone': - $this->showPhone($name, $field); - break; - default: - $this->out->text("TYPE: $type"); - } - } - - protected function showPhones($name, $field) { - foreach ($field as $phone) { - $this->showExtendedProfileField($name, $phone); + protected function showMultiple($name, $fields) { + foreach ($fields as $field) { + $this->showExtendedProfileField($name, $field); } } @@ -210,6 +186,74 @@ class ExtendedProfileWidget extends Form isset($field['rel']) ? $field['rel'] : null ); + $this->showMultiControls(); + $this->out->elementEnd('div'); + } + + protected function showExperience($name, $field) + { + $this->out->elementStart('div', array('class' => 'experience-display')); + $this->out->text($field['company']); + $this->out->elementStart('dl', 'experience-start-and-end'); + $this->out->element('dt', null, _m('Start')); + $this->out->element('dd', null, $field['start']); + $this->out->element('dt', null, _m('End')); + if ($field['current']) { + $this->out->element('dd', null, '(' . _m('Current') . ')'); + } else { + $this->out->element('dd', null, $field['end']); + } + $this->out->elementEnd('dl'); + $this->out->elementEnd('div'); + } + + protected function showEditableExperience($name, $field) + { + $index = isset($field['index']) ? $field['index'] : 0; + $id = "extprofile-$name-$index"; + $this->out->elementStart( + 'div', array( + 'id' => $id . '-edit', + 'class' => 'experience-edit' + ) + ); + + $this->out->input( + $id, + null, + isset($field['company']) ? $field['company'] : null + ); + + $this->out->elementStart('ul', 'experience-start-and-end'); + $this->out->elementStart('li'); + $this->out->input( + $id . '-start', + _m('Start'), + isset($field['start']) ? $field['start'] : null + ); + $this->out->elementEnd('li'); + + $this->out->elementStart('li'); + $this->out->input( + $id . '-end', + _m('End'), + isset($field['end']) ? $field['end'] : null + ); + $this->out->elementEnd('li'); + $this->out->elementStart('li'); + $this->out->checkbox( + $id . '-current', + _m('Current'), + $field['current'] + ); + $this->out->elementEnd('li'); + $this->out->elementEnd('ul'); + $this->showMultiControls(); + $this->out->elementEnd('div'); + } + + function showMultiControls() + { $this->out->element( 'a', array( @@ -229,8 +273,37 @@ class ExtendedProfileWidget extends Form ), '-' ); + } - $this->out->elementEnd('div'); + /** + * Outputs the value of a field + * + * @param string $name name of the field + * @param array $field set of key/value pairs for the field + */ + protected function showFieldValue($name, $field) + { + $type = strval(@$field['type']); + + switch($type) + { + case '': + case 'text': + case 'textarea': + $this->out->text($this->ext->getTextValue($name)); + break; + case 'tags': + $this->out->text($this->ext->getTags()); + break; + case 'phone': + $this->showPhone($name, $field); + break; + case 'experience': + $this->showExperience($name, $field); + break; + default: + $this->out->text("TYPE: $type"); + } } /** @@ -262,6 +335,9 @@ class ExtendedProfileWidget extends Form case 'phone': $this->showEditablePhone($name, $field); break; + case 'experience': + $this->showEditableExperience($name, $field); + break; default: $out->input($id, null, "TYPE: $type"); } diff --git a/plugins/ExtendedProfile/js/profiledetail.js b/plugins/ExtendedProfile/js/profiledetail.js index 7d7eceddc1..4dc2faf2aa 100644 --- a/plugins/ExtendedProfile/js/profiledetail.js +++ b/plugins/ExtendedProfile/js/profiledetail.js @@ -82,6 +82,7 @@ var removeRow = function() { var init = function() { reorder('phone-edit'); + reorder('experience-edit'); } $(document).ready( diff --git a/plugins/ExtendedProfile/profiledetailsettingsaction.php b/plugins/ExtendedProfile/profiledetailsettingsaction.php index 89b8d61cf9..5e505f6c28 100644 --- a/plugins/ExtendedProfile/profiledetailsettingsaction.php +++ b/plugins/ExtendedProfile/profiledetailsettingsaction.php @@ -113,6 +113,7 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction } $this->savePhoneNumbers($user); + $this->saveExperiences($user); $this->showForm(_('Details saved.'), true); @@ -141,17 +142,12 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction $phoneParams = $this->findMultiParams('phone'); ksort($phoneParams); // this sorts them into pairs $phones = $this->arraySplit($phoneParams, sizeof($phoneParams) / 2); - $phoneTuples = array(); - foreach($phones as $phone) { - $firstkey = current(array_keys($phone)); - $index = substr($firstkey, strrpos($firstkey, '-') + 1); + foreach ($phones as $phone) { list($number, $rel) = array_values($phone); - $phoneTuples[] = array( 'value' => $number, - 'index' => $index, 'rel' => $rel ); } @@ -159,6 +155,86 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction return $phoneTuples; } + function findExperiences() { + + // Form vals look like this: + // 'extprofile-experience-0' => 'Bozotronix', + // 'extprofile-experience-0-current' => 'true' + // 'extprofile-experience-0-start' => '1/5/10', + // 'extprofile-experience-0-end' => '2/3/11', + + $experiences = array(); + $expParams = $this->findMultiParams('experience'); + ksort($expParams); + $experiences = $this->arraySplit($expParams, sizeof($expParams) / 4); + $expArray = array(); + + foreach ($experiences as $exp) { + list($company, $current, $start, $end) = array_values($exp); + $expArray[] = array( + 'company' => $company, + 'start' => $start, + 'end' => $end, + 'current' => $current, + ); + } + + return $expArray; + } + + function saveExperiences($user) { + common_debug('save experiences'); + $experiences = $this->findExperiences(); + + $this->removeAll($user, 'company'); + $this->removeAll($user, 'start'); + $this->removeAll($user, 'end'); // also stores 'current' + + $i = 0; + foreach($experiences as $experience) { + if (!empty($experience['company'])) { + ++$i; + $this->saveField( + $user, + 'company', + $experience['company'], + null, + $i + ); + /* + $this->saveField( + $user, + 'start', + null, + null, + $i, + $experience['start'] + ); + + // Save "current" employer indicator in rel + if ($experience['current']) { + $this->saveField( + $user, + 'end', + null, + 'current', // rel + $i + ); + } else { + $this->saveField( + $user, + 'end', + null, + null, + $i, + $experience['end'] + ); + } + */ + } + } + } + function arraySplit($array, $pieces) { if ($pieces < 2) { @@ -191,8 +267,9 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction * @param string $value field value * @param string $rel field rel (type) * @param int $index index (fields can have multiple values) + * @param date $date related date */ - function saveField($user, $name, $value, $rel = null, $index = null) + function saveField($user, $name, $value, $rel = null, $index = null, $date = null) { $profile = $user->getProfile(); $detail = new Profile_detail(); @@ -207,6 +284,7 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction $detial->value_index = $index; $detail->rel = $rel; $detail->field_value = $value; + $detail->date = $date; $detail->created = common_sql_now(); $result = $detail->insert(); if (empty($result)) { @@ -218,6 +296,7 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction $detail->field_value = $value; $detail->rel = $rel; + $detail->date = $date; $result = $detail->update($orig); if (empty($result)) { From 07ccb6a9f839f39ab6c1763dc4f49e6d29b98147 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Mon, 14 Mar 2011 17:27:50 -0700 Subject: [PATCH 049/146] Extended profile - make experience save and display --- plugins/ExtendedProfile/extendedprofile.php | 28 ++++++--- .../ExtendedProfile/extendedprofilewidget.php | 4 ++ .../profiledetailsettingsaction.php | 61 +++++++++++++------ 3 files changed, 65 insertions(+), 28 deletions(-) diff --git a/plugins/ExtendedProfile/extendedprofile.php b/plugins/ExtendedProfile/extendedprofile.php index 2277e4d769..b6844e205f 100644 --- a/plugins/ExtendedProfile/extendedprofile.php +++ b/plugins/ExtendedProfile/extendedprofile.php @@ -131,24 +131,36 @@ class ExtendedProfile function getExperiences() { - $companies = (isset($this->fields['companies'])) ? $this->fields['company'] : null; + $companies = (isset($this->fields['company'])) ? $this->fields['company'] : null; $start = (isset($this->fields['start'])) ? $this->fields['start'] : null; $end = (isset($this->fields['end'])) ? $this->fields['end'] : null; - $cArrays = array(); + $eArrays = array(); - if (empty($experiences)) { + if (empty($companies)) { $eArrays[] = array( 'label' => _m('Employer'), 'type' => 'experience', - 'company' => "Bozotronix", - 'start' => '1/5/10', - 'end' => '2/3/11', - 'current' => true, + 'company' => null, + 'start' => null, + 'end' => null, + 'current' => false, 'index' => 0 ); + } else { + for ($i = 0; $i < sizeof($companies); $i++) { + $ea = array( + 'label' => _m('Employer'), + 'type' => 'experience', + 'company' => $companies[$i]->field_value, + 'index' => intval($companies[$i]->value_index), + 'current' => $end[$i]->rel, + 'start' => $start[$i]->date, + 'end' => $end[$i]->date + ); + $eArrays[] = $ea; + } } - return $eArrays; } diff --git a/plugins/ExtendedProfile/extendedprofilewidget.php b/plugins/ExtendedProfile/extendedprofilewidget.php index 9dfbaa716e..478990ac63 100644 --- a/plugins/ExtendedProfile/extendedprofilewidget.php +++ b/plugins/ExtendedProfile/extendedprofilewidget.php @@ -241,6 +241,10 @@ class ExtendedProfileWidget extends Form ); $this->out->elementEnd('li'); $this->out->elementStart('li'); + $this->out->hidden( + $id . '-current', + 'false' + ); $this->out->checkbox( $id . '-current', _m('Current'), diff --git a/plugins/ExtendedProfile/profiledetailsettingsaction.php b/plugins/ExtendedProfile/profiledetailsettingsaction.php index 5e505f6c28..56f81d7a2d 100644 --- a/plugins/ExtendedProfile/profiledetailsettingsaction.php +++ b/plugins/ExtendedProfile/profiledetailsettingsaction.php @@ -95,26 +95,27 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction $user = common_current_user(); try { - $this->saveStandardProfileDetails($user); + $this->saveStandardProfileDetails($user); + + $profile = $user->getProfile(); + + $simpleFieldNames = array('title', 'spouse', 'kids'); + + foreach ($simpleFieldNames as $name) { + $value = $this->trimmed('extprofile-' . $name); + if (!empty($value)) { + $this->saveField($user, $name, $value); + } + } + + $this->savePhoneNumbers($user); + $this->saveExperiences($user); + } catch (Exception $e) { $this->showForm($e->getMessage(), false); return; } - $profile = $user->getProfile(); - - $simpleFieldNames = array('title', 'spouse', 'kids'); - - foreach ($simpleFieldNames as $name) { - $value = $this->trimmed('extprofile-' . $name); - if (!empty($value)) { - $this->saveField($user, $name, $value); - } - } - - $this->savePhoneNumbers($user); - $this->saveExperiences($user); - $this->showForm(_('Details saved.'), true); } @@ -170,11 +171,31 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction $expArray = array(); foreach ($experiences as $exp) { - list($company, $current, $start, $end) = array_values($exp); + + common_debug('Experience: ' . var_export($exp, true)); + + list($company, $current, $end, $start) = array_values($exp); + + $startTs = strtotime($start); + + if ($startTs === false) { + throw new Exception( + sprintf(_m("Invalid start date: %s"), $start) + ); + } + + $endTs = strtotime($end); + + if ($current === 'false' && $endTs === false) { + throw new Exception( + sprintf(_m("Invalid end date: %s"), $start) + ); + } + $expArray[] = array( 'company' => $company, - 'start' => $start, - 'end' => $end, + 'start' => common_sql_date($startTs), + 'end' => common_sql_date($endTs), 'current' => $current, ); } @@ -201,7 +222,7 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction null, $i ); - /* + $this->saveField( $user, 'start', @@ -230,7 +251,7 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction $experience['end'] ); } - */ + } } } From 0fd4b84eb87b30fb2ab322225119c73195c144c2 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Mon, 14 Mar 2011 17:53:54 -0700 Subject: [PATCH 050/146] Extended profile - better error handling for bad dates --- .../profiledetailsettingsaction.php | 33 ++++++++++--------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/plugins/ExtendedProfile/profiledetailsettingsaction.php b/plugins/ExtendedProfile/profiledetailsettingsaction.php index 56f81d7a2d..74b2fa667b 100644 --- a/plugins/ExtendedProfile/profiledetailsettingsaction.php +++ b/plugins/ExtendedProfile/profiledetailsettingsaction.php @@ -139,10 +139,8 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction } function findPhoneNumbers() { - $phones = array(); - $phoneParams = $this->findMultiParams('phone'); - ksort($phoneParams); // this sorts them into pairs - $phones = $this->arraySplit($phoneParams, sizeof($phoneParams) / 2); + + $phones = $this->sliceParams('phone', 2); $phoneTuples = array(); foreach ($phones as $phone) { @@ -156,6 +154,14 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction return $phoneTuples; } + function sliceParams($key, $size) { + $slice = array(); + $params = $this->findMultiParams($key); + ksort($params); + $slice = $this->arraySplit($params, sizeof($params) / $size); + return $slice; + } + function findExperiences() { // Form vals look like this: @@ -164,10 +170,7 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction // 'extprofile-experience-0-start' => '1/5/10', // 'extprofile-experience-0-end' => '2/3/11', - $experiences = array(); - $expParams = $this->findMultiParams('experience'); - ksort($expParams); - $experiences = $this->arraySplit($expParams, sizeof($expParams) / 4); + $experiences = $this->sliceParams('experience', 4); $expArray = array(); foreach ($experiences as $exp) { @@ -179,24 +182,24 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction $startTs = strtotime($start); if ($startTs === false) { - throw new Exception( - sprintf(_m("Invalid start date: %s"), $start) - ); + $msg = empty($start) ? _m('You must supply a start date.') + : sprintf(_m("Invalid start date: %s"), $start); + throw new Exception($msg); } $endTs = strtotime($end); if ($current === 'false' && $endTs === false) { - throw new Exception( - sprintf(_m("Invalid end date: %s"), $start) - ); + $msg = empty($end) ? _m('You must supply an end date.') + : sprintf(_m("Invalid end date: %s"), $end); + throw new Exception($msg); } $expArray[] = array( 'company' => $company, 'start' => common_sql_date($startTs), 'end' => common_sql_date($endTs), - 'current' => $current, + 'current' => ($current == 'false') ? false : true ); } From c6a6d41dab2286caa387e6a8a5c3ffc46b773f22 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Tue, 15 Mar 2011 02:09:22 +0000 Subject: [PATCH 051/146] Extended profile - change HTML output for displaying work experience --- .../ExtendedProfile/extendedprofilewidget.php | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/plugins/ExtendedProfile/extendedprofilewidget.php b/plugins/ExtendedProfile/extendedprofilewidget.php index 478990ac63..4c47987406 100644 --- a/plugins/ExtendedProfile/extendedprofilewidget.php +++ b/plugins/ExtendedProfile/extendedprofilewidget.php @@ -192,18 +192,19 @@ class ExtendedProfileWidget extends Form protected function showExperience($name, $field) { - $this->out->elementStart('div', array('class' => 'experience-display')); - $this->out->text($field['company']); - $this->out->elementStart('dl', 'experience-start-and-end'); - $this->out->element('dt', null, _m('Start')); - $this->out->element('dd', null, $field['start']); - $this->out->element('dt', null, _m('End')); + $this->out->elementStart('div', 'experience-item'); + $this->out->element('div', 'field', $field['company']); + $this->out->element('div', 'label', _m('Start')); + $this->out->element('div', array('class' => 'field date'), $field['start']); + $this->out->element('div', 'label', _m('End')); + $this->out->element('div', array('class' => 'field date'), $field['end']); if ($field['current']) { - $this->out->element('dd', null, '(' . _m('Current') . ')'); - } else { - $this->out->element('dd', null, $field['end']); + $this->out->element( + 'div', + array('class' => 'field current'), + '(' . _m('Current') . ')' + ); } - $this->out->elementEnd('dl'); $this->out->elementEnd('div'); } From 0ff7bf77e4c208030ece6de13e8488d3845e224c Mon Sep 17 00:00:00 2001 From: Samantha Doherty Date: Mon, 14 Mar 2011 22:40:31 -0400 Subject: [PATCH 052/146] Couple quick fixes for profile view. --- plugins/ExtendedProfile/profiledetailaction.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/ExtendedProfile/profiledetailaction.php b/plugins/ExtendedProfile/profiledetailaction.php index beac7d6321..a777a28e03 100644 --- a/plugins/ExtendedProfile/profiledetailaction.php +++ b/plugins/ExtendedProfile/profiledetailaction.php @@ -36,7 +36,7 @@ class ProfileDetailAction extends ShowstreamAction function showStylesheets() { parent::showStylesheets(); - $this->cssLink('plugins/ExtendedProfile/profiledetail.css'); + $this->cssLink('plugins/ExtendedProfile/css/profiledetail.css'); return true; } @@ -45,6 +45,7 @@ class ProfileDetailAction extends ShowstreamAction $cur = common_current_user(); if ($cur && $cur->id == $this->profile->id) { // your own page $this->elementStart('div', 'entity_actions'); + $this->elementStart('ul'); $this->elementStart('li', 'entity_edit'); $this->element('a', array('href' => common_local_url('profiledetailsettings'), // TRANS: Link title for link on user profile. @@ -52,6 +53,7 @@ class ProfileDetailAction extends ShowstreamAction // TRANS: Link text for link on user profile. _m('Edit')); $this->elementEnd('li'); + $this->elementEnd('ul'); $this->elementEnd('div'); } From bd238e9a4de7aafbb9dd70307e965b2ba9bab6e9 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Mon, 14 Mar 2011 20:58:35 -0700 Subject: [PATCH 053/146] Extended profile - HTML layout for education entries --- plugins/ExtendedProfile/extendedprofile.php | 46 ++++++++++-- .../ExtendedProfile/extendedprofilewidget.php | 75 +++++++++++++++++++ .../profiledetailsettingsaction.php | 32 ++++---- 3 files changed, 132 insertions(+), 21 deletions(-) diff --git a/plugins/ExtendedProfile/extendedprofile.php b/plugins/ExtendedProfile/extendedprofile.php index b6844e205f..713d5c601a 100644 --- a/plugins/ExtendedProfile/extendedprofile.php +++ b/plugins/ExtendedProfile/extendedprofile.php @@ -164,6 +164,45 @@ class ExtendedProfile return $eArrays; } + function getEducation() + { + $schools = (isset($this->fields['school'])) ? $this->fields['school'] : null; + $degrees = (isset($this->fields['degree'])) ? $this->fields['degree'] : null; + $descs = (isset($this->fields['degree_description'])) ? $this->fields['degree_description'] : null; + $start = (isset($this->fields['school_start'])) ? $this->fields['school_start'] : null; + $end = (isset($this->fields['school_end'])) ? $this->fields['school_end'] : null; + $iArrays = array(); + + if (empty($schools)) { + $iArrays[] = array( + 'type' => 'education', + 'label' => _m('Institution'), + 'school' => null, + 'degree' => null, + 'description' => null, + 'start' => null, + 'end' => null, + 'index' => 0 + ); + } else { + for ($i = 0; $i < sizeof($schools); $i++) { + $ia = array( + 'type' => 'education', + 'label' => _m('Institution'), + 'school' => $schools[$i]->field_value, + 'degree' => $degrees[$i]->field_value, + 'description' => $descs[$i]->field_value, + 'index' => intval($schools[$i]->value_index), + 'start' => $start[$i]->date, + 'end' => $end[$i]->date + ); + $iArrays[] = $ia; + } + } + + return $iArrays; + } + /** * Return all the sections of the extended profile * @@ -241,16 +280,13 @@ class ExtendedProfile 'experience' => array( 'label' => _m('Work experience'), 'fields' => array( - 'experience' => $this->getExperiences(), + 'experience' => $this->getExperiences() ), ), 'education' => array( 'label' => _m('Education'), 'fields' => array( - 'education' => array( - 'type' => 'education', - 'label' => _m('Institution'), - ), + 'education' => $this->getEducation() ), ), ); diff --git a/plugins/ExtendedProfile/extendedprofilewidget.php b/plugins/ExtendedProfile/extendedprofilewidget.php index 4c47987406..967cf6dd20 100644 --- a/plugins/ExtendedProfile/extendedprofilewidget.php +++ b/plugins/ExtendedProfile/extendedprofilewidget.php @@ -107,6 +107,7 @@ class ExtendedProfileWidget extends Form switch($fieldName) { case 'phone': case 'experience': + case 'education': $this->showMultiple($fieldName, $field); break; default: @@ -257,6 +258,74 @@ class ExtendedProfileWidget extends Form $this->out->elementEnd('div'); } + protected function showEducation($name, $field) + { + $this->out->elementStart('div', 'education-item'); + $this->out->element('div', 'field', $field['school']); + $this->out->element('div', 'label', _m('Degree')); + $this->out->element('div', 'field', $field['degree']); + $this->out->element('div', 'label', _m('Description')); + $this->out->element('div', 'field', $field['description']); + $this->out->element('div', 'label', _m('Start')); + $this->out->element('div', array('class' => 'field date'), $field['start']); + $this->out->element('div', 'label', _m('End')); + $this->out->element('div', array('class' => 'field date'), $field['end']); + $this->out->elementEnd('div'); + } + + protected function showEditableEducation($name, $field) + { + $index = isset($field['index']) ? $field['index'] : 0; + $id = "extprofile-$name-$index"; + $this->out->elementStart( + 'div', array( + 'id' => $id . '-edit', + 'class' => 'education-edit' + ) + ); + $this->out->input( + $id, + null, + isset($field['school']) ? $field['school'] : null + ); + + $this->out->element('div', 'label', _m('Degree')); + $this->out->input( + $id, + null, + isset($field['degree']) ? $field['degree'] : null + ); + + $this->out->element('div', 'label', _m('Description')); + $this->out->element('div', 'field', $field['description']); + + $this->out->input( + $id, + null, + isset($field['description']) ? $field['description'] : null + ); + + $this->out->elementStart('ul', 'education-start-and-end'); + $this->out->elementStart('li'); + $this->out->input( + $id . '-start', + _m('Start'), + isset($field['start']) ? $field['start'] : null + ); + $this->out->elementEnd('li'); + + $this->out->elementStart('li'); + $this->out->input( + $id . '-end', + _m('End'), + isset($field['end']) ? $field['end'] : null + ); + $this->out->elementEnd('ul'); + + $this->showMultiControls(); + $this->out->elementEnd('div'); + } + function showMultiControls() { $this->out->element( @@ -306,6 +375,9 @@ class ExtendedProfileWidget extends Form case 'experience': $this->showExperience($name, $field); break; + case 'education': + $this->showEducation($name, $field); + break; default: $this->out->text("TYPE: $type"); } @@ -343,6 +415,9 @@ class ExtendedProfileWidget extends Form case 'experience': $this->showEditableExperience($name, $field); break; + case 'education': + $this->showEditableEducation($name, $field); + break; default: $out->input($id, null, "TYPE: $type"); } diff --git a/plugins/ExtendedProfile/profiledetailsettingsaction.php b/plugins/ExtendedProfile/profiledetailsettingsaction.php index 74b2fa667b..7870c273ba 100644 --- a/plugins/ExtendedProfile/profiledetailsettingsaction.php +++ b/plugins/ExtendedProfile/profiledetailsettingsaction.php @@ -140,26 +140,22 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction function findPhoneNumbers() { - $phones = $this->sliceParams('phone', 2); - $phoneTuples = array(); + // Form vals look like this: + // 'extprofile-phone-1' => '11332', + // 'extprofile-phone-1-rel' => 'mobile', + + $phones = $this->sliceParams('phone', 2); + $phoneArray = array(); foreach ($phones as $phone) { list($number, $rel) = array_values($phone); - $phoneTuples[] = array( + $phoneArray[] = array( 'value' => $number, 'rel' => $rel ); } - return $phoneTuples; - } - - function sliceParams($key, $size) { - $slice = array(); - $params = $this->findMultiParams($key); - ksort($params); - $slice = $this->arraySplit($params, sizeof($params) / $size); - return $slice; + return $phoneArray; } function findExperiences() { @@ -174,11 +170,7 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction $expArray = array(); foreach ($experiences as $exp) { - - common_debug('Experience: ' . var_export($exp, true)); - list($company, $current, $end, $start) = array_values($exp); - $startTs = strtotime($start); if ($startTs === false) { @@ -283,6 +275,14 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction return $formVals; } + function sliceParams($key, $size) { + $slice = array(); + $params = $this->findMultiParams($key); + ksort($params); + $slice = $this->arraySplit($params, sizeof($params) / $size); + return $slice; + } + /** * Save an extended profile field as a Profile_detail * From 79c4af6073ab7aca718ec797c43bba957380164f Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Mon, 14 Mar 2011 21:07:14 -0700 Subject: [PATCH 054/146] Add in missing --- plugins/ExtendedProfile/extendedprofilewidget.php | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/ExtendedProfile/extendedprofilewidget.php b/plugins/ExtendedProfile/extendedprofilewidget.php index 967cf6dd20..a4913eed12 100644 --- a/plugins/ExtendedProfile/extendedprofilewidget.php +++ b/plugins/ExtendedProfile/extendedprofilewidget.php @@ -320,6 +320,7 @@ class ExtendedProfileWidget extends Form _m('End'), isset($field['end']) ? $field['end'] : null ); + $this->out->elementEnd('li'); $this->out->elementEnd('ul'); $this->showMultiControls(); From 8559fbb2ca1f7f2e154be0ec0084a324d936f22c Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Mon, 14 Mar 2011 21:09:03 -0700 Subject: [PATCH 055/146] Extended profile - intialize controls for multiple education entries --- plugins/ExtendedProfile/js/profiledetail.js | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/ExtendedProfile/js/profiledetail.js b/plugins/ExtendedProfile/js/profiledetail.js index 4dc2faf2aa..d491b46ba6 100644 --- a/plugins/ExtendedProfile/js/profiledetail.js +++ b/plugins/ExtendedProfile/js/profiledetail.js @@ -83,6 +83,7 @@ var removeRow = function() { var init = function() { reorder('phone-edit'); reorder('experience-edit'); + reorder('education-edit'); } $(document).ready( From 6d34818b5d9ca72dc1dbc2a9e484b1f7c0a45940 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Mon, 14 Mar 2011 22:02:24 -0700 Subject: [PATCH 056/146] Extended profile - make education entries save --- plugins/ExtendedProfile/extendedprofile.php | 6 +- .../ExtendedProfile/extendedprofilewidget.php | 4 +- .../profiledetailsettingsaction.php | 147 +++++++++++++++--- 3 files changed, 132 insertions(+), 25 deletions(-) diff --git a/plugins/ExtendedProfile/extendedprofile.php b/plugins/ExtendedProfile/extendedprofile.php index 713d5c601a..09d010b090 100644 --- a/plugins/ExtendedProfile/extendedprofile.php +++ b/plugins/ExtendedProfile/extendedprofile.php @@ -168,7 +168,7 @@ class ExtendedProfile { $schools = (isset($this->fields['school'])) ? $this->fields['school'] : null; $degrees = (isset($this->fields['degree'])) ? $this->fields['degree'] : null; - $descs = (isset($this->fields['degree_description'])) ? $this->fields['degree_description'] : null; + $descs = (isset($this->fields['degree_descr'])) ? $this->fields['degree_descr'] : null; $start = (isset($this->fields['school_start'])) ? $this->fields['school_start'] : null; $end = (isset($this->fields['school_end'])) ? $this->fields['school_end'] : null; $iArrays = array(); @@ -190,8 +190,8 @@ class ExtendedProfile 'type' => 'education', 'label' => _m('Institution'), 'school' => $schools[$i]->field_value, - 'degree' => $degrees[$i]->field_value, - 'description' => $descs[$i]->field_value, + 'degree' => isset($degrees[$i]->field_value) ? $degrees[$i]->field_value : null, + 'description' => isset($descs[$i]->field_value) ? $descs[$i]->field_value : null, 'index' => intval($schools[$i]->value_index), 'start' => $start[$i]->date, 'end' => $end[$i]->date diff --git a/plugins/ExtendedProfile/extendedprofilewidget.php b/plugins/ExtendedProfile/extendedprofilewidget.php index a4913eed12..03f70592fc 100644 --- a/plugins/ExtendedProfile/extendedprofilewidget.php +++ b/plugins/ExtendedProfile/extendedprofilewidget.php @@ -291,7 +291,7 @@ class ExtendedProfileWidget extends Form $this->out->element('div', 'label', _m('Degree')); $this->out->input( - $id, + $id . '-degree', null, isset($field['degree']) ? $field['degree'] : null ); @@ -300,7 +300,7 @@ class ExtendedProfileWidget extends Form $this->out->element('div', 'field', $field['description']); $this->out->input( - $id, + $id . '-description', null, isset($field['description']) ? $field['description'] : null ); diff --git a/plugins/ExtendedProfile/profiledetailsettingsaction.php b/plugins/ExtendedProfile/profiledetailsettingsaction.php index 7870c273ba..3708f54d65 100644 --- a/plugins/ExtendedProfile/profiledetailsettingsaction.php +++ b/plugins/ExtendedProfile/profiledetailsettingsaction.php @@ -110,6 +110,7 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction $this->savePhoneNumbers($user); $this->saveExperiences($user); + $this->saveEducations($user); } catch (Exception $e) { $this->showForm($e->getMessage(), false); @@ -171,28 +172,30 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction foreach ($experiences as $exp) { list($company, $current, $end, $start) = array_values($exp); - $startTs = strtotime($start); + if (!empty($company)) { + $startTs = strtotime($start); - if ($startTs === false) { - $msg = empty($start) ? _m('You must supply a start date.') - : sprintf(_m("Invalid start date: %s"), $start); - throw new Exception($msg); + if ($startTs === false) { + $msg = empty($start) ? _m('You must supply a start date.') + : sprintf(_m("Invalid start date: %s"), $start); + throw new Exception($msg); + } + + $endTs = strtotime($end); + + if ($current === 'false' && $endTs === false) { + $msg = empty($end) ? _m('You must supply an end date.') + : sprintf(_m("Invalid end date: %s"), $end); + throw new Exception($msg); + } + + $expArray[] = array( + 'company' => $company, + 'start' => common_sql_date($startTs), + 'end' => common_sql_date($endTs), + 'current' => ($current == 'false') ? false : true + ); } - - $endTs = strtotime($end); - - if ($current === 'false' && $endTs === false) { - $msg = empty($end) ? _m('You must supply an end date.') - : sprintf(_m("Invalid end date: %s"), $end); - throw new Exception($msg); - } - - $expArray[] = array( - 'company' => $company, - 'start' => common_sql_date($startTs), - 'end' => common_sql_date($endTs), - 'current' => ($current == 'false') ? false : true - ); } return $expArray; @@ -251,6 +254,110 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction } } + function findEducations() { + + // Form vals look like this: + // 'extprofile-education-0-school' => 'Pigdog', + // 'extprofile-education-0-degree' => 'BA', + // 'extprofile-education-0-description' => 'Blar', + // 'extprofile-education-0-start' => '05/22/99', + // 'extprofile-education-0-end' => '05/22/05', + + $edus = $this->sliceParams('education', 5); + $eduArray = array(); + + foreach ($edus as $edu) { + list($school, $degree, $description, $end, $start) = array_values($edu); + + if (!empty($school)) { + + $startTs = strtotime($start); + + if ($startTs === false) { + $msg = empty($start) ? _m('You must supply a start date.') + : sprintf(_m("Invalid start date: %s"), $start); + throw new Exception($msg); + } + + $endTs = strtotime($end); + + if ($endTs === false) { + $msg = empty($end) ? _m('You must supply an end date.') + : sprintf(_m("Invalid end date: %s"), $end); + throw new Exception($msg); + } + + $eduArray[] = array( + 'school' => $school, + 'degree' => $degree, + 'description' => $description, + 'start' => common_sql_date($startTs), + 'end' => common_sql_date($endTs) + ); + } + } + + return $eduArray; + } + + + function saveEducations($user) { + common_debug('save education'); + $edus = $this->findEducations(); + common_debug(var_export($edus, true)); + + $this->removeAll($user, 'school'); + $this->removeAll($user, 'degree'); + $this->removeAll($user, 'degree_descr'); + $this->removeAll($user, 'school_start'); + $this->removeAll($user, 'school_end'); + + $i = 0; + foreach($edus as $edu) { + if (!empty($edu['school'])) { + ++$i; + $this->saveField( + $user, + 'school', + $edu['school'], + null, + $i + ); + $this->saveField( + $user, + 'degree', + $edu['degree'], + null, + $i + ); + $this->saveField( + $user, + 'degree_descr', + $edu['description'], + null, + $i + ); + $this->saveField( + $user, + 'school_start', + null, + null, + $i, + $edu['start'] + ); + + $this->saveField( + $user, + 'school_end', + null, + null, + $i, + $edu['end'] + ); + } + } + } + function arraySplit($array, $pieces) { if ($pieces < 2) { From cd82ff2dcf6a5c7f33778282c9840652829074c3 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Mon, 14 Mar 2011 22:38:34 -0700 Subject: [PATCH 057/146] Extended profile - make IMs display and save --- plugins/ExtendedProfile/extendedprofile.php | 32 +++++++++-- .../ExtendedProfile/extendedprofilewidget.php | 54 +++++++++++++++++++ plugins/ExtendedProfile/js/profiledetail.js | 1 + .../profiledetailsettingsaction.php | 39 ++++++++++++++ 4 files changed, 121 insertions(+), 5 deletions(-) diff --git a/plugins/ExtendedProfile/extendedprofile.php b/plugins/ExtendedProfile/extendedprofile.php index 09d010b090..6d78ddd3d8 100644 --- a/plugins/ExtendedProfile/extendedprofile.php +++ b/plugins/ExtendedProfile/extendedprofile.php @@ -129,6 +129,32 @@ class ExtendedProfile return $pArrays; } + function getIms() + { + $ims = (isset($this->fields['im'])) ? $this->fields['im'] : null; + $iArrays = array(); + + if (empty($ims)) { + $iArrays[] = array( + 'label' => _m('IM'), + 'type' => 'im' + ); + } else { + for ($i = 0; $i < sizeof($ims); $i++) { + $ia = array( + 'label' => _m('IM'), + 'type' => 'im', + 'index' => intval($ims[$i]->value_index), + 'rel' => $ims[$i]->rel, + 'value' => $ims[$i]->field_value, + ); + + $iArrays[] = $ia; + } + } + return $iArrays; + } + function getExperiences() { $companies = (isset($this->fields['company'])) ? $this->fields['company'] : null; @@ -248,11 +274,7 @@ class ExtendedProfile 'label' => _m('Contact'), 'fields' => array( 'phone' => $this->getPhones(), - 'im' => array( - 'label' => _m('IM'), - 'type' => 'im', - 'multi' => true, - ), + 'im' => $this->getIms(), 'website' => array( 'label' => _m('Websites'), 'type' => 'website', diff --git a/plugins/ExtendedProfile/extendedprofilewidget.php b/plugins/ExtendedProfile/extendedprofilewidget.php index 03f70592fc..5d5f1b7ab9 100644 --- a/plugins/ExtendedProfile/extendedprofilewidget.php +++ b/plugins/ExtendedProfile/extendedprofilewidget.php @@ -106,6 +106,7 @@ class ExtendedProfileWidget extends Form switch($fieldName) { case 'phone': + case 'im': case 'experience': case 'education': $this->showMultiple($fieldName, $field); @@ -156,6 +157,53 @@ class ExtendedProfileWidget extends Form $this->out->elementEnd('div'); } + protected function showIm($name, $field) + { + $this->out->elementStart('div', array('class' => 'im-display')); + $this->out->text($field['value']); + if (!empty($field['rel'])) { + $this->out->text(' (' . $field['rel'] . ')'); + } + $this->out->elementEnd('div'); + } + + protected function showEditableIm($name, $field) + { + $index = isset($field['index']) ? $field['index'] : 0; + $id = "extprofile-$name-$index"; + $rel = $id . '-rel'; + $this->out->elementStart( + 'div', array( + 'id' => $id . '-edit', + 'class' => 'im-edit' + ) + ); + $this->out->input( + $id, + null, + isset($field['value']) ? $field['value'] : null + ); + $this->out->dropdown( + $id . '-rel', + 'Type', + array( + 'jabber' => 'Jabber', + 'gtalk' => 'GTalk', + 'aim' => 'AIM', + 'yahoo' => 'Yahoo! Messenger', + 'msn' => 'MSN', + 'skype' => 'Skype', + 'other' => 'Other' + ), + null, + false, + isset($field['rel']) ? $field['rel'] : null + ); + + $this->showMultiControls(); + $this->out->elementEnd('div'); + } + protected function showEditablePhone($name, $field) { $index = isset($field['index']) ? $field['index'] : 0; @@ -373,6 +421,9 @@ class ExtendedProfileWidget extends Form case 'phone': $this->showPhone($name, $field); break; + case 'im': + $this->showIm($name, $field); + break; case 'experience': $this->showExperience($name, $field); break; @@ -413,6 +464,9 @@ class ExtendedProfileWidget extends Form case 'phone': $this->showEditablePhone($name, $field); break; + case 'im': + $this->showEditableIm($name, $field); + break; case 'experience': $this->showEditableExperience($name, $field); break; diff --git a/plugins/ExtendedProfile/js/profiledetail.js b/plugins/ExtendedProfile/js/profiledetail.js index d491b46ba6..cdd7467e93 100644 --- a/plugins/ExtendedProfile/js/profiledetail.js +++ b/plugins/ExtendedProfile/js/profiledetail.js @@ -84,6 +84,7 @@ var init = function() { reorder('phone-edit'); reorder('experience-edit'); reorder('education-edit'); + reorder('im-edit'); } $(document).ready( diff --git a/plugins/ExtendedProfile/profiledetailsettingsaction.php b/plugins/ExtendedProfile/profiledetailsettingsaction.php index 3708f54d65..baac80a482 100644 --- a/plugins/ExtendedProfile/profiledetailsettingsaction.php +++ b/plugins/ExtendedProfile/profiledetailsettingsaction.php @@ -109,6 +109,7 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction } $this->savePhoneNumbers($user); + $this->saveIms($user); $this->saveExperiences($user); $this->saveEducations($user); @@ -159,6 +160,44 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction return $phoneArray; } + function findIms() { + + // Form vals look like this: + // 'extprofile-im-0' => 'jed', + // 'extprofile-im-0-rel' => 'yahoo', + + $ims = $this->sliceParams('im', 2); + $imArray = array(); + + foreach ($ims as $im) { + list($id, $rel) = array_values($im); + $imArray[] = array( + 'value' => $id, + 'rel' => $rel + ); + } + + return $imArray; + } + + function saveIms($user) { + $ims = $this->findIms(); + $this->removeAll($user, 'im'); + $i = 0; + foreach($ims as $im) { + if (!empty($im['value'])) { + ++$i; + $this->saveField( + $user, + 'im', + $im['value'], + $im['rel'], + $i + ); + } + } + } + function findExperiences() { // Form vals look like this: From 7a7e0a2b69e9367c33e52e656c8e28cc9e78adaa Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Mon, 14 Mar 2011 22:47:20 -0700 Subject: [PATCH 058/146] Extended profile - change the name of divs used for sort order --- plugins/ExtendedProfile/js/profiledetail.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/ExtendedProfile/js/profiledetail.js b/plugins/ExtendedProfile/js/profiledetail.js index cdd7467e93..c198132399 100644 --- a/plugins/ExtendedProfile/js/profiledetail.js +++ b/plugins/ExtendedProfile/js/profiledetail.js @@ -81,10 +81,10 @@ var removeRow = function() { }; var init = function() { - reorder('phone-edit'); - reorder('experience-edit'); - reorder('education-edit'); - reorder('im-edit'); + reorder('phone-item'); + reorder('experience-item'); + reorder('education-item'); + reorder('im-item'); } $(document).ready( From b37c33dea2d151dcabf84357b2ea2a0b4f36be3c Mon Sep 17 00:00:00 2001 From: Samantha Doherty Date: Tue, 15 Mar 2011 13:08:41 -0400 Subject: [PATCH 059/146] Whole bunch of style-related changes, including some tasty hackery for the experience and education fields. --- plugins/ExtendedProfile/css/profiledetail.css | 137 ++++++++++++++++-- .../ExtendedProfile/extendedprofilewidget.php | 65 ++++----- plugins/ExtendedProfile/js/profiledetail.js | 8 +- 3 files changed, 164 insertions(+), 46 deletions(-) diff --git a/plugins/ExtendedProfile/css/profiledetail.css b/plugins/ExtendedProfile/css/profiledetail.css index 836b647a10..797d32d415 100644 --- a/plugins/ExtendedProfile/css/profiledetail.css +++ b/plugins/ExtendedProfile/css/profiledetail.css @@ -1,22 +1,139 @@ /* Note the #content is only needed to override weird crap in default styles */ +#profiledetail .entity_actions { + margin-top: 0px; + margin-bottom: 0px; +} + +#profiledetail #content h3 { + margin-bottom: 5px; +} + #content table.extended-profile { width: 100%; border-collapse: separate; - border-spacing: 8px; + border-spacing: 0px 8px; + margin-bottom: 10px; } + #content table.extended-profile th { color: #777; - background-color: #eee; + background-color: #ECECF2; width: 150px; - - padding-top: 0; /* override bizarre theme defaults */ - text-align: right; - padding-right: 8px; + padding: 2px 8px 2px 0px; } -#content table.extended-profile td { - padding: 0; /* override bizarre theme defaults */ - padding-left: 8px; -} \ No newline at end of file +#content table.extended-profile th.employer, #content table.extended-profile th.institution { + display: none; +} + +#content table.extended-profile td { + padding: 2px 0px 2px 8px; +} + +.experience-item, .education-item { + float: left; + padding-bottom: 4px; +} + +.experience-item .label, .education-item .label { + float: left; + clear: left; + position: relative; + left: -8px; + margin-right: 2px; + margin-bottom: 8px; + color: #777; + background-color: #ECECF2; + width: 150px; + text-align: right; + padding: 2px 8px 2px 0px; +} + +.experience-item .field, .education-item .field { + float: left; + padding-top: 2px; + padding-bottom: 2px; +} + +#profiledetailsettings #content table.extended-profile td { + padding: 0px 0px 0px 8px; +} + +#profiledetailsettings input { + margin-right: 8px; +} + +.experience-item input[type=text], .education-item input[type=text] { + float: left; +} + +.extended-profile .current-checkbox { + float: left; + position: relative; + top: 2px; +} + +.form_settings .extended-profile input.checkbox { + margin-left: 0px; + left: 0px; + top: 2px; +} + +.form_settings .extended-profile label.checkbox { + max-width: 100%; + float: none; + left: -20px; +} + +.phone-item label, .im-item label { + display: none; +} + +.extended-profile select { + padding-right: 2px; + font-size: 0.88em; +} + +.extended-profile a.add_row, .extended-profile a.remove_row { + display: block; + height: 16px; + width: 16px; + line-height: 4em; + overflow: hidden; + background-image: url('../../../theme/rebase/images/icons/icons-01.gif'); + background-repeat: no-repeat; +} + +.extended-profile a.remove_row { + background-position: 0px -1252px; + float: right; + position: relative; + top: 6px; +} + +.extended-profile a.add_row { + clear: both; + position: relative; + top: 6px; + left: 2px; + background-position: 0px -1186px; +} + +#content table.extended-profile .supersizeme th { + border-bottom: 28px solid #fff; +} + +#profiledetailsettings .experience-item, #profiledetailsettings .education-item { + margin-bottom: 10px; + width: 100%; +} + +#profiledetailsettings tr:last-child .experience-item, #profiledetailsettings tr:last-child .education-item { + margin-bottom: 0px; +} + +#profiledetailsettings .experience-item a.add_row, #profiledetailsettings .education-item a.add_row { + left: 160px; +} diff --git a/plugins/ExtendedProfile/extendedprofilewidget.php b/plugins/ExtendedProfile/extendedprofilewidget.php index 5d5f1b7ab9..161a524f94 100644 --- a/plugins/ExtendedProfile/extendedprofilewidget.php +++ b/plugins/ExtendedProfile/extendedprofilewidget.php @@ -128,7 +128,7 @@ class ExtendedProfileWidget extends Form { $this->out->elementStart('tr'); - $this->out->element('th', null, $field['label']); + $this->out->element('th', str_replace(' ','_',strtolower($field['label'])), $field['label']); $this->out->elementStart('td'); if ($this->editable) { @@ -175,7 +175,7 @@ class ExtendedProfileWidget extends Form $this->out->elementStart( 'div', array( 'id' => $id . '-edit', - 'class' => 'im-edit' + 'class' => 'im-item' ) ); $this->out->input( @@ -212,7 +212,7 @@ class ExtendedProfileWidget extends Form $this->out->elementStart( 'div', array( 'id' => $id . '-edit', - 'class' => 'phone-edit' + 'class' => 'phone-item' ) ); $this->out->input( @@ -242,6 +242,7 @@ class ExtendedProfileWidget extends Form protected function showExperience($name, $field) { $this->out->elementStart('div', 'experience-item'); + $this->out->element('div', 'label', _m('Company')); $this->out->element('div', 'field', $field['company']); $this->out->element('div', 'label', _m('Start')); $this->out->element('div', array('class' => 'field date'), $field['start']); @@ -264,44 +265,42 @@ class ExtendedProfileWidget extends Form $this->out->elementStart( 'div', array( 'id' => $id . '-edit', - 'class' => 'experience-edit' + 'class' => 'experience-item' ) ); + $this->out->element('div', 'label', _m('Company')); $this->out->input( $id, null, isset($field['company']) ? $field['company'] : null ); - $this->out->elementStart('ul', 'experience-start-and-end'); - $this->out->elementStart('li'); + $this->out->element('div', 'label', _m('Start')); $this->out->input( $id . '-start', - _m('Start'), + null, isset($field['start']) ? $field['start'] : null ); - $this->out->elementEnd('li'); - $this->out->elementStart('li'); + $this->out->element('div', 'label', _m('End')); $this->out->input( $id . '-end', - _m('End'), + null, isset($field['end']) ? $field['end'] : null ); - $this->out->elementEnd('li'); - $this->out->elementStart('li'); $this->out->hidden( $id . '-current', 'false' ); + $this->out->elementStart('div', 'current-checkbox'); $this->out->checkbox( $id . '-current', _m('Current'), $field['current'] ); - $this->out->elementEnd('li'); - $this->out->elementEnd('ul'); + $this->out->elementEnd('div'); + $this->showMultiControls(); $this->out->elementEnd('div'); } @@ -309,6 +308,7 @@ class ExtendedProfileWidget extends Form protected function showEducation($name, $field) { $this->out->elementStart('div', 'education-item'); + $this->out->element('div', 'label', _m('Institution')); $this->out->element('div', 'field', $field['school']); $this->out->element('div', 'label', _m('Degree')); $this->out->element('div', 'field', $field['degree']); @@ -328,9 +328,10 @@ class ExtendedProfileWidget extends Form $this->out->elementStart( 'div', array( 'id' => $id . '-edit', - 'class' => 'education-edit' + 'class' => 'education-item' ) ); + $this->out->element('div', 'label', _m('Institution')); $this->out->input( $id, null, @@ -353,23 +354,19 @@ class ExtendedProfileWidget extends Form isset($field['description']) ? $field['description'] : null ); - $this->out->elementStart('ul', 'education-start-and-end'); - $this->out->elementStart('li'); + $this->out->element('div', 'label', _m('Start')); $this->out->input( $id . '-start', - _m('Start'), + null, isset($field['start']) ? $field['start'] : null ); - $this->out->elementEnd('li'); - $this->out->elementStart('li'); + $this->out->element('div', 'label', _m('End')); $this->out->input( $id . '-end', - _m('End'), + null, isset($field['end']) ? $field['end'] : null ); - $this->out->elementEnd('li'); - $this->out->elementEnd('ul'); $this->showMultiControls(); $this->out->elementEnd('div'); @@ -377,16 +374,6 @@ class ExtendedProfileWidget extends Form function showMultiControls() { - $this->out->element( - 'a', - array( - 'class' => 'add_row', - 'href' => 'javascript://', - 'style' => 'display: none; ' - ), - '+' - ); - $this->out->element( 'a', array( @@ -396,6 +383,16 @@ class ExtendedProfileWidget extends Form ), '-' ); + + $this->out->element( + 'a', + array( + 'class' => 'add_row', + 'href' => 'javascript://', + 'style' => 'display: none; ' + ), + '+' + ); } /** @@ -514,7 +511,7 @@ class ExtendedProfileWidget extends Form function formClass() { - return 'form_profile_details'; + return 'form_profile_details form_settings'; } /** diff --git a/plugins/ExtendedProfile/js/profiledetail.js b/plugins/ExtendedProfile/js/profiledetail.js index c198132399..2821bed275 100644 --- a/plugins/ExtendedProfile/js/profiledetail.js +++ b/plugins/ExtendedProfile/js/profiledetail.js @@ -12,6 +12,9 @@ var reorder = function(class) { replaceIndex(rowIndex(div), i); }); + $this = $(divs).last().closest('tr'); + $this.addClass('supersizeme'); + $(divs).last().find('a.add_row').show(); if (divs.length == 1) { @@ -57,7 +60,8 @@ var addRow = function() { var class = $(div).attr('class'); var index = id.match(/\d+/); console.log("Current row = " + index + ', class = ' + class); - var tr = $(this).closest('tr'); + var trold = $(this).closest('tr'); + var tr = $(trold).removeClass('supersizeme'); var newtr = $(tr).clone(); var newIndex = parseInt(index) + 1; replaceIndex(newtr, index, newIndex); @@ -95,4 +99,4 @@ function() { $('.remove_row').live('click', removeRow); } -); \ No newline at end of file +); From 9e9cbdf505e9ec66c7e9d60bfe170f8d41a146e2 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 15 Mar 2011 10:09:20 -0700 Subject: [PATCH 060/146] Suppress PHP warnings/notices during AtomPub XML parsing to avoid HTTP header problems when given bad input. If display_errors is on, typical settings would cause PHP error messages to spew to output before the HTTP headers for setting a 400 error go through. Also switched from deprecated static DOMDocument::loadXML() to non-static call. --- actions/apitimelineuser.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/actions/apitimelineuser.php b/actions/apitimelineuser.php index 66984b5abd..3fe73c691c 100644 --- a/actions/apitimelineuser.php +++ b/actions/apitimelineuser.php @@ -322,8 +322,11 @@ class ApiTimelineUserAction extends ApiBareAuthAction $this->clientError(_('Atom post must not be empty.')); } - $dom = DOMDocument::loadXML($xml); - if (!$dom) { + $old = error_reporting(error_reporting() & ~(E_WARNING | E_NOTICE)); + $dom = new DOMDocument(); + $ok = $dom->loadXML($xml); + error_reporting($old); + if (!$ok) { // TRANS: Client error displayed attempting to post an API that is not well-formed XML. $this->clientError(_('Atom post must be well-formed XML.')); } From a6ae9ddd418a4bee2173a4188d5c382168f5d51e Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Tue, 15 Mar 2011 10:10:18 -0700 Subject: [PATCH 061/146] Extended profile - make websites save --- plugins/ExtendedProfile/extendedprofile.php | 38 ++++++++++--- .../ExtendedProfile/extendedprofilewidget.php | 57 +++++++++++++++++++ .../profiledetailsettingsaction.php | 37 ++++++++++++ 3 files changed, 125 insertions(+), 7 deletions(-) diff --git a/plugins/ExtendedProfile/extendedprofile.php b/plugins/ExtendedProfile/extendedprofile.php index 6d78ddd3d8..673680f027 100644 --- a/plugins/ExtendedProfile/extendedprofile.php +++ b/plugins/ExtendedProfile/extendedprofile.php @@ -98,6 +98,8 @@ class ExtendedProfile } } + // XXX: getPhones, getIms, and getWebsites pretty much do the same thing, + // so refactor. function getPhones() { $phones = (isset($this->fields['phone'])) ? $this->fields['phone'] : null; @@ -155,6 +157,32 @@ class ExtendedProfile return $iArrays; } + function getWebsites() + { + $sites = (isset($this->fields['website'])) ? $this->fields['website'] : null; + $wArrays = array(); + + if (empty($sites)) { + $wArrays[] = array( + 'label' => _m('Website'), + 'type' => 'website' + ); + } else { + for ($i = 0; $i < sizeof($sites); $i++) { + $wa = array( + 'label' => _m('Website'), + 'type' => 'website', + 'index' => intval($sites[$i]->value_index), + 'rel' => $sites[$i]->rel, + 'value' => $sites[$i]->field_value, + ); + + $wArrays[] = $wa; + } + } + return $wArrays; + } + function getExperiences() { $companies = (isset($this->fields['company'])) ? $this->fields['company'] : null; @@ -273,13 +301,9 @@ class ExtendedProfile 'contact' => array( 'label' => _m('Contact'), 'fields' => array( - 'phone' => $this->getPhones(), - 'im' => $this->getIms(), - 'website' => array( - 'label' => _m('Websites'), - 'type' => 'website', - 'multi' => true, - ), + 'phone' => $this->getPhones(), + 'im' => $this->getIms(), + 'website' => $this->getWebsites() ), ), 'personal' => array( diff --git a/plugins/ExtendedProfile/extendedprofilewidget.php b/plugins/ExtendedProfile/extendedprofilewidget.php index 5d5f1b7ab9..99d5852276 100644 --- a/plugins/ExtendedProfile/extendedprofilewidget.php +++ b/plugins/ExtendedProfile/extendedprofilewidget.php @@ -107,6 +107,7 @@ class ExtendedProfileWidget extends Form switch($fieldName) { case 'phone': case 'im': + case 'website': case 'experience': case 'education': $this->showMultiple($fieldName, $field); @@ -147,6 +148,8 @@ class ExtendedProfileWidget extends Form } } + // XXX: showPhone, showIm and showWebsite all work the same, so + // combine protected function showPhone($name, $field) { $this->out->elementStart('div', array('class' => 'phone-display')); @@ -167,6 +170,16 @@ class ExtendedProfileWidget extends Form $this->out->elementEnd('div'); } + protected function showWebsite($name, $field) + { + $this->out->elementStart('div', array('class' => 'website-display')); + $this->out->text($field['value']); + if (!empty($field['rel'])) { + $this->out->text(' (' . $field['rel'] . ')'); + } + $this->out->elementEnd('div'); + } + protected function showEditableIm($name, $field) { $index = isset($field['index']) ? $field['index'] : 0; @@ -239,6 +252,44 @@ class ExtendedProfileWidget extends Form $this->out->elementEnd('div'); } + protected function showEditableWebsite($name, $field) + { + $index = isset($field['index']) ? $field['index'] : 0; + $id = "extprofile-$name-$index"; + $rel = $id . '-rel'; + $this->out->elementStart( + 'div', array( + 'id' => $id . '-edit', + 'class' => 'website-edit' + ) + ); + $this->out->input( + $id, + null, + isset($field['value']) ? $field['value'] : null + ); + $this->out->dropdown( + $id . '-rel', + 'Type', + array( + 'blog' => 'Blog', + 'homepage' => 'Homepage', + 'facebook' => 'Facebook', + 'linkedin' => 'LinkedIn', + 'flickr' => 'Flickr', + 'google' => 'Google Profile', + 'other' => 'Other', + 'twitter' => 'Twitter' + ), + null, + false, + isset($field['rel']) ? $field['rel'] : null + ); + + $this->showMultiControls(); + $this->out->elementEnd('div'); + } + protected function showExperience($name, $field) { $this->out->elementStart('div', 'experience-item'); @@ -421,6 +472,9 @@ class ExtendedProfileWidget extends Form case 'phone': $this->showPhone($name, $field); break; + case 'website': + $this->showWebsite($name, $field); + break; case 'im': $this->showIm($name, $field); break; @@ -467,6 +521,9 @@ class ExtendedProfileWidget extends Form case 'im': $this->showEditableIm($name, $field); break; + case 'website': + $this->showEditableWebsite($name, $field); + break; case 'experience': $this->showEditableExperience($name, $field); break; diff --git a/plugins/ExtendedProfile/profiledetailsettingsaction.php b/plugins/ExtendedProfile/profiledetailsettingsaction.php index baac80a482..2357860884 100644 --- a/plugins/ExtendedProfile/profiledetailsettingsaction.php +++ b/plugins/ExtendedProfile/profiledetailsettingsaction.php @@ -110,6 +110,7 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction $this->savePhoneNumbers($user); $this->saveIms($user); + $this->saveWebsites($user); $this->saveExperiences($user); $this->saveEducations($user); @@ -198,6 +199,42 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction } } + function findWebsites() { + + // Form vals look like this: + + $sites = $this->sliceParams('website', 2); + $wsArray = array(); + + foreach ($sites as $site) { + list($id, $rel) = array_values($site); + $wsArray[] = array( + 'value' => $id, + 'rel' => $rel + ); + } + + return $wsArray; + } + + function saveWebsites($user) { + $sites = $this->findWebsites(); + $this->removeAll($user, 'website'); + $i = 0; + foreach($sites as $site) { + if (!empty($site['value'])) { + ++$i; + $this->saveField( + $user, + 'website', + $site['value'], + $site['rel'], + $i + ); + } + } + } + function findExperiences() { // Form vals look like this: From b66250c6aa2d04aa1a7c15bf385a73397589e78d Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 15 Mar 2011 12:49:17 -0700 Subject: [PATCH 062/146] Add StartNoticeWhoGets, EndNoticeWhoGets events to allow upcoming TagSub plugin to do extra inbox delivery. --- EVENTS.txt | 8 +++++++ classes/Notice.php | 59 ++++++++++++++++++++++++++-------------------- 2 files changed, 41 insertions(+), 26 deletions(-) diff --git a/EVENTS.txt b/EVENTS.txt index 1443a94fbe..54d06655ee 100644 --- a/EVENTS.txt +++ b/EVENTS.txt @@ -1131,3 +1131,11 @@ StartActivityObjectOutputJson: Called at start of JSON output generation for Act EndActivityObjectOutputJson: Called at end of JSON output generation for ActivityObject chunks: the array has not yet been filled out. - $obj ActivityObject - &$out: array to be serialized; you're free to modify it + +StartNoticeWhoGets: Called at start of inbox delivery prep; plugins can schedule notices to go to particular profiles that would otherwise not have reached them. Canceling will take over the entire addressing operation. Be aware that output can be cached or used several times, so should remain idempotent. +- $notice Notice +- &$ni: in/out array mapping profile IDs to constants: NOTICE_INBOX_SOURCE_SUB etc + +EndNoticeWhoGets: Called at end of inbox delivery prep; plugins can filter out profiles from receiving inbox delivery here. Be aware that output can be cached or used several times, so should remain idempotent. +- $notice Notice +- &$ni: in/out array mapping profile IDs to constants: NOTICE_INBOX_SOURCE_SUB etc diff --git a/classes/Notice.php b/classes/Notice.php index d520f4728f..e5c758005d 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -812,41 +812,48 @@ class Notice extends Memcached_DataObject $ni = array(); - foreach ($users as $id) { - $ni[$id] = NOTICE_INBOX_SOURCE_SUB; - } + // Give plugins a chance to add folks in at start... + if (Event::handle('StartNoticeWhoGets', array($this, &$ni))) { - foreach ($groups as $group) { - $users = $group->getUserMembers(); foreach ($users as $id) { - if (!array_key_exists($id, $ni)) { - $ni[$id] = NOTICE_INBOX_SOURCE_GROUP; + $ni[$id] = NOTICE_INBOX_SOURCE_SUB; + } + + foreach ($groups as $group) { + $users = $group->getUserMembers(); + foreach ($users as $id) { + if (!array_key_exists($id, $ni)) { + $ni[$id] = NOTICE_INBOX_SOURCE_GROUP; + } } } - } - foreach ($recipients as $recipient) { - if (!array_key_exists($recipient, $ni)) { - $ni[$recipient] = NOTICE_INBOX_SOURCE_REPLY; + foreach ($recipients as $recipient) { + if (!array_key_exists($recipient, $ni)) { + $ni[$recipient] = NOTICE_INBOX_SOURCE_REPLY; + } } - } - // Exclude any deleted, non-local, or blocking recipients. - $profile = $this->getProfile(); - $originalProfile = null; - if ($this->repeat_of) { - // Check blocks against the original notice's poster as well. - $original = Notice::staticGet('id', $this->repeat_of); - if ($original) { - $originalProfile = $original->getProfile(); + // Exclude any deleted, non-local, or blocking recipients. + $profile = $this->getProfile(); + $originalProfile = null; + if ($this->repeat_of) { + // Check blocks against the original notice's poster as well. + $original = Notice::staticGet('id', $this->repeat_of); + if ($original) { + $originalProfile = $original->getProfile(); + } } - } - foreach ($ni as $id => $source) { - $user = User::staticGet('id', $id); - if (empty($user) || $user->hasBlocked($profile) || - ($originalProfile && $user->hasBlocked($originalProfile))) { - unset($ni[$id]); + foreach ($ni as $id => $source) { + $user = User::staticGet('id', $id); + if (empty($user) || $user->hasBlocked($profile) || + ($originalProfile && $user->hasBlocked($originalProfile))) { + unset($ni[$id]); + } } + + // Give plugins a chance to filter out... + Event::handle('EndNoticeWhoGets', array($this, &$ni)); } if (!empty($c)) { From 8de24335d2e65ada6f32e15b919c552b74c0039d Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 15 Mar 2011 12:51:29 -0700 Subject: [PATCH 063/146] Doc comment on Notice->getTags() to clarify the return data type --- classes/Notice.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/classes/Notice.php b/classes/Notice.php index e5c758005d..664e5dab9f 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -2006,6 +2006,11 @@ class Notice extends Memcached_DataObject $this->is_local == Notice::LOCAL_NONPUBLIC); } + /** + * Get the list of hash tags saved with this notice. + * + * @return array of strings + */ public function getTags() { $tags = array(); From 119885d964f6f5402471f4874c7482c4d6a22fc0 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 15 Mar 2011 12:57:11 -0700 Subject: [PATCH 064/146] Stub TagSubPlugin: plugin guts with no UI to setup subs --- plugins/TagSub/TagSub.php | 109 ++++++++++++++++++++++ plugins/TagSub/TagSubPlugin.php | 156 ++++++++++++++++++++++++++++++++ 2 files changed, 265 insertions(+) create mode 100644 plugins/TagSub/TagSub.php create mode 100644 plugins/TagSub/TagSubPlugin.php diff --git a/plugins/TagSub/TagSub.php b/plugins/TagSub/TagSub.php new file mode 100644 index 0000000000..fdae3e2db0 --- /dev/null +++ b/plugins/TagSub/TagSub.php @@ -0,0 +1,109 @@ + + * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 + * @link http://status.net/ + * + * StatusNet - the distributed open-source microblogging tool + * Copyright (C) 2011, StatusNet, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +/** + * For storing the tag subscriptions + * + * @category PollPlugin + * @package StatusNet + * @author Brion Vibber + * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 + * @link http://status.net/ + * + * @see DB_DataObject + */ + +class TagSub extends Managed_DataObject +{ + public $__table = 'tagsub'; // table name + public $tag; // text + public $profile_id; // int -> profile.id + public $created; // datetime + + /** + * Get an instance by key + * + * This is a utility method to get a single instance with a given key value. + * + * @param string $k Key to use to lookup (usually 'user_id' for this class) + * @param mixed $v Value to lookup + * + * @return TagSub object found, or null for no hits + * + */ + function staticGet($k, $v=null) + { + return Memcached_DataObject::staticGet('TagSub', $k, $v); + } + + /** + * Get an instance by compound key + * + * This is a utility method to get a single instance with a given set of + * key-value pairs. Usually used for the primary key for a compound key; thus + * the name. + * + * @param array $kv array of key-value mappings + * + * @return TagSub object found, or null for no hits + * + */ + function pkeyGet($kv) + { + return Memcached_DataObject::pkeyGet('TagSub', $kv); + } + + /** + * The One True Thingy that must be defined and declared. + */ + public static function schemaDef() + { + return array( + 'description' => 'TagSubPlugin tag subscription records', + 'fields' => array( + 'tag' => array('type' => 'varchar', 'length' => 64, 'not null' => true, 'description' => 'hash tag associated with this subscription'), + 'profile_id' => array('type' => 'int', 'not null' => true, 'description' => 'profile ID of subscribing user'), + 'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'), + ), + 'primary key' => array('tag', 'profile_id'), + 'foreign keys' => array( + 'tagsub_profile_id_fkey' => array('profile', array('profile_id' => 'id')), + ), + 'indexes' => array( + 'tagsub_created_idx' => array('created'), + 'tagsub_profile_id_tag_idx' => array('profile_id', 'tag'), + ), + ); + } + +} diff --git a/plugins/TagSub/TagSubPlugin.php b/plugins/TagSub/TagSubPlugin.php new file mode 100644 index 0000000000..b43fcf32ba --- /dev/null +++ b/plugins/TagSub/TagSubPlugin.php @@ -0,0 +1,156 @@ +. + * + * @category TagSubPlugin + * @package StatusNet + * @author Brion Vibber + * @copyright 2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +/** + * TagSub plugin main class + * + * @category TagSubPlugin + * @package StatusNet + * @author Brion Vibber + * @copyright 2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ +class TagSubPlugin extends Plugin +{ + const VERSION = '0.1'; + + /** + * Database schema setup + * + * @see Schema + * + * @return boolean hook value; true means continue processing, false means stop. + */ + function onCheckSchema() + { + $schema = Schema::get(); + $schema->ensureTable('tagsub', TagSub::schemaDef()); + return true; + } + + /** + * Load related modules when needed + * + * @param string $cls Name of the class to be loaded + * + * @return boolean hook value; true means continue processing, false means stop. + */ + function onAutoload($cls) + { + $dir = dirname(__FILE__); + + switch ($cls) + { + case 'TagsubAction': + case 'TagunsubAction': + include_once $dir . '/' . strtolower(mb_substr($cls, 0, -6)) . '.php'; + return false; + case 'TagSub': + include_once $dir.'/'.$cls.'.php'; + return false; + case 'TagSubForm': + case 'TagUnsubForm': + include_once $dir.'/'.strtolower($cls).'.php'; + return false; + default: + return true; + } + } + + /** + * Map URLs to actions + * + * @param Net_URL_Mapper $m path-to-action mapper + * + * @return boolean hook value; true means continue processing, false means stop. + */ + function onRouterInitialized($m) + { + $m->connect('tag/:tag/subscribe', + array('action' => 'tagsub'), + array('tag' => Router::REGEX_TAG)); + $m->connect('tag/:tag/unsubscribe', + array('action' => 'tagunsub'), + array('tag' => Router::REGEX_TAG)); + + return true; + } + + /** + * Plugin version data + * + * @param array &$versions array of version data + * + * @return value + */ + function onPluginVersion(&$versions) + { + $versions[] = array('name' => 'TagSub', + 'version' => self::VERSION, + 'author' => 'Brion Vibber', + 'homepage' => 'http://status.net/wiki/Plugin:TagSub', + 'rawdescription' => + // TRANS: Plugin description. + _m('Plugin to allow following all messages with a given tag.')); + return true; + } + + /** + * Hook inbox delivery setup so tag subscribers receive all + * notices with that tag in their inbox. + * + * Currently makes no distinction between local messages and + * remote ones which happen to come in to the system. Remote + * notices that don't come in at all won't ever reach this. + * + * @param Notice $notice + * @param array $ni in/out map of profile IDs to inbox constants + * @return boolean hook result + */ + function onStartNoticeWhoGets(Notice $notice, array &$ni) + { + foreach ($notice->getTags() as $tag) { + $tagsub = new TagSub(); + $tagsub->tag = $tag; + $tagsub->find(); + + while ($tagsub->fetch()) { + // These constants are currently not actually used, iirc + $ni[$tagsub->profile_id] = NOTICE_INBOX_SOURCE_SUB; + } + } + return true; + } +} From 0bb2f1470474f3818f6c3357581ea04efa23a15f Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 15 Mar 2011 13:17:06 -0700 Subject: [PATCH 065/146] AJAX submit actions for tag subscribe/unsubscribe --- plugins/TagSub/TagSub.php | 31 +++++++ plugins/TagSub/TagSubPlugin.php | 34 ++++++- plugins/TagSub/tagsubaction.php | 149 ++++++++++++++++++++++++++++++ plugins/TagSub/tagsubform.php | 142 ++++++++++++++++++++++++++++ plugins/TagSub/tagunsubaction.php | 89 ++++++++++++++++++ plugins/TagSub/tagunsubform.php | 109 ++++++++++++++++++++++ 6 files changed, 550 insertions(+), 4 deletions(-) create mode 100644 plugins/TagSub/tagsubaction.php create mode 100644 plugins/TagSub/tagsubform.php create mode 100644 plugins/TagSub/tagunsubaction.php create mode 100644 plugins/TagSub/tagunsubform.php diff --git a/plugins/TagSub/TagSub.php b/plugins/TagSub/TagSub.php index fdae3e2db0..a734b4fc5f 100644 --- a/plugins/TagSub/TagSub.php +++ b/plugins/TagSub/TagSub.php @@ -106,4 +106,35 @@ class TagSub extends Managed_DataObject ); } + /** + * Start a tag subscription! + * + * @param profile $profile subscriber + * @param string $tag subscribee + * @return TagSub + */ + static function start(Profile $profile, $tag) + { + $ts = new TagSub(); + $ts->tag = $tag; + $ts->profile_id = $profile->id; + $ts->created = common_sql_now(); + $ts->insert(); + return $ts; + } + + /** + * End a tag subscription! + * + * @param profile $profile subscriber + * @param string $tag subscribee + */ + static function cancel(Profile $profile, $tag) + { + $ts = TagSub::pkeyGet(array('tag' => $tag, + 'profile_id' => $profile->id)); + if ($ts) { + $ts->delete(); + } + } } diff --git a/plugins/TagSub/TagSubPlugin.php b/plugins/TagSub/TagSubPlugin.php index b43fcf32ba..e51a7a8b39 100644 --- a/plugins/TagSub/TagSubPlugin.php +++ b/plugins/TagSub/TagSubPlugin.php @@ -73,13 +73,11 @@ class TagSubPlugin extends Plugin switch ($cls) { - case 'TagsubAction': - case 'TagunsubAction': - include_once $dir . '/' . strtolower(mb_substr($cls, 0, -6)) . '.php'; - return false; case 'TagSub': include_once $dir.'/'.$cls.'.php'; return false; + case 'TagsubAction': + case 'TagunsubAction': case 'TagSubForm': case 'TagUnsubForm': include_once $dir.'/'.strtolower($cls).'.php'; @@ -153,4 +151,32 @@ class TagSubPlugin extends Plugin } return true; } + + /** + * + * @param TagAction $action + * @return boolean hook result + */ + function onStartTagShowContent(TagAction $action) + { + $user = common_current_user(); + if ($user) { + $tag = $action->trimmed('tag'); + $tagsub = TagSub::pkeyGet(array('tag' => $tag, + 'profile_id' => $user->id)); + if ($tagsub) { + $form = new TagUnsubForm($action, $tag); + } else { + $form = new TagSubForm($action, $tag); + } + $action->elementStart('div', 'entity_actions'); + $action->elementStart('ul'); + $action->elementStart('li', 'entity_subscribe'); + $form->show(); + $action->elementEnd('li'); + $action->elementEnd('ul'); + $action->elementEnd('div'); + } + return true; + } } diff --git a/plugins/TagSub/tagsubaction.php b/plugins/TagSub/tagsubaction.php new file mode 100644 index 0000000000..2e4e25d6e1 --- /dev/null +++ b/plugins/TagSub/tagsubaction.php @@ -0,0 +1,149 @@ +. + * + * PHP version 5 + * + * @category Action + * @package StatusNet + * @author Brion Vibber + * @author Evan Prodromou + * @copyright 2008-2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +/** + * Tag subscription action + * + * Takes parameters: + * + * - token: session token to prevent CSRF attacks + * - ajax: boolean; whether to return Ajax or full-browser results + * + * Only works if the current user is logged in. + * + * @category Action + * @package StatusNet + * @author Evan Prodromou + * @author Brion Vibber + * @copyright 2008-2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3 + * @link http://status.net/ + */ +class TagsubAction extends Action +{ + var $user; + var $tag; + + /** + * Check pre-requisites and instantiate attributes + * + * @param Array $args array of arguments (URL, GET, POST) + * + * @return boolean success flag + */ + function prepare($args) + { + parent::prepare($args); + if ($this->boolean('ajax')) { + StatusNet::setApi(true); + } + + // Only allow POST requests + + if ($_SERVER['REQUEST_METHOD'] != 'POST') { + // TRANS: Client error displayed trying to perform any request method other than POST. + // TRANS: Do not translate POST. + $this->clientError(_('This action only accepts POST requests.')); + return false; + } + + // CSRF protection + + $token = $this->trimmed('token'); + + if (!$token || $token != common_session_token()) { + // TRANS: Client error displayed when the session token is not okay. + $this->clientError(_('There was a problem with your session token.'. + ' Try again, please.')); + return false; + } + + // Only for logged-in users + + $this->user = common_current_user(); + + if (empty($this->user)) { + // TRANS: Client error displayed trying to subscribe when not logged in. + $this->clientError(_('Not logged in.')); + return false; + } + + // Profile to subscribe to + + $this->tag = $this->arg('tag'); + + if (empty($this->tag)) { + // TRANS: Client error displayed trying to subscribe to a non-existing profile. + $this->clientError(_('No such profile.')); + return false; + } + + return true; + } + + /** + * Handle request + * + * Does the subscription and returns results. + * + * @param Array $args unused. + * + * @return void + */ + function handle($args) + { + // Throws exception on error + + TagSub::start($this->user->getProfile(), + $this->tag); + + if ($this->boolean('ajax')) { + $this->startHTML('text/xml;charset=utf-8'); + $this->elementStart('head'); + // TRANS: Page title when tag subscription succeeded. + $this->element('title', null, _m('Subscribed')); + $this->elementEnd('head'); + $this->elementStart('body'); + $unsubscribe = new TagUnsubForm($this, $this->tag); + $unsubscribe->show(); + $this->elementEnd('body'); + $this->elementEnd('html'); + } else { + $url = common_local_url('tag', + array('tag' => $this->tag)); + common_redirect($url, 303); + } + } +} diff --git a/plugins/TagSub/tagsubform.php b/plugins/TagSub/tagsubform.php new file mode 100644 index 0000000000..108558be24 --- /dev/null +++ b/plugins/TagSub/tagsubform.php @@ -0,0 +1,142 @@ +. + * + * @category TagSubPlugin + * @package StatusNet + * @author Brion Vibber + * @author Evan Prodromou + * @author Sarven Capadisli + * @copyright 2009-2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET') && !defined('LACONICA')) { + exit(1); +} + +/** + * Form for subscribing to a user + * + * @category TagSubPlugin + * @package StatusNet + * @author Brion Vibber + * @author Evan Prodromou + * @author Sarven Capadisli + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + * + * @see UnsubscribeForm + */ + +class TagSubForm extends Form +{ + /** + * Name of tag to subscribe to + */ + + var $tag = ''; + + /** + * Constructor + * + * @param HTMLOutputter $out output channel + * @param string $tag name of tag to subscribe to + */ + + function __construct($out=null, $tag=null) + { + parent::__construct($out); + + $this->tag = $tag; + } + + /** + * ID of the form + * + * @return int ID of the form + */ + + function id() + { + return 'tag-subscribe-' . $this->tag; + } + + + /** + * class of the form + * + * @return string of the form class + */ + + function formClass() + { + // class to match existing styles... + return 'form_user_subscribe ajax'; + } + + + /** + * Action of the form + * + * @return string URL of the action + */ + + function action() + { + return common_local_url('tagsub', array('tag' => $this->tag)); + } + + + /** + * Legend of the Form + * + * @return void + */ + function formLegend() + { + $this->out->element('legend', null, _m('Subscribe to this tag')); + } + + /** + * Data elements of the form + * + * @return void + */ + + function formData() + { + $this->out->hidden('subscribeto-' . $this->tag, + $this->tag, + 'subscribeto'); + } + + /** + * Action elements + * + * @return void + */ + + function formActions() + { + $this->out->submit('submit', _('Subscribe'), 'submit', null, _m('Subscribe to this tag')); + } +} diff --git a/plugins/TagSub/tagunsubaction.php b/plugins/TagSub/tagunsubaction.php new file mode 100644 index 0000000000..26fb9ffec8 --- /dev/null +++ b/plugins/TagSub/tagunsubaction.php @@ -0,0 +1,89 @@ +. + * + * PHP version 5 + * + * @category Action + * @package StatusNet + * @author Brion Vibber + * @author Evan Prodromou + * @copyright 2008-2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +/** + * Tag unsubscription action + * + * Takes parameters: + * + * - token: session token to prevent CSRF attacks + * - ajax: boolean; whether to return Ajax or full-browser results + * + * Only works if the current user is logged in. + * + * @category Action + * @package StatusNet + * @author Evan Prodromou + * @author Brion Vibber + * @copyright 2008-2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3 + * @link http://status.net/ + */ +class TagunsubAction extends TagsubAction +{ + /** + * Handle request + * + * Does the subscription and returns results. + * + * @param Array $args unused. + * + * @return void + */ + function handle($args) + { + // Throws exception on error + + TagSub::cancel($this->user->getProfile(), + $this->tag); + + if ($this->boolean('ajax')) { + $this->startHTML('text/xml;charset=utf-8'); + $this->elementStart('head'); + // TRANS: Page title when tag unsubscription succeeded. + $this->element('title', null, _m('Unsubscribed')); + $this->elementEnd('head'); + $this->elementStart('body'); + $subscribe = new TagSubForm($this, $this->tag); + $subscribe->show(); + $this->elementEnd('body'); + $this->elementEnd('html'); + } else { + $url = common_local_url('tag', + array('tag' => $this->tag)); + common_redirect($url, 303); + } + } +} diff --git a/plugins/TagSub/tagunsubform.php b/plugins/TagSub/tagunsubform.php new file mode 100644 index 0000000000..0b44648071 --- /dev/null +++ b/plugins/TagSub/tagunsubform.php @@ -0,0 +1,109 @@ +. + * + * @category TagSubPlugin + * @package StatusNet + * @author Brion Vibber + * @author Evan Prodromou + * @author Sarven Capadisli + * @copyright 2009-2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET') && !defined('LACONICA')) { + exit(1); +} + +/** + * Form for subscribing to a user + * + * @category TagSubPlugin + * @package StatusNet + * @author Brion Vibber + * @author Evan Prodromou + * @author Sarven Capadisli + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + * + * @see UnsubscribeForm + */ + +class TagUnsubForm extends TagSubForm +{ + /** + * ID of the form + * + * @return int ID of the form + */ + + function id() + { + return 'tag-unsubscribe-' . $this->tag; + } + + + /** + * class of the form + * + * @return string of the form class + */ + + function formClass() + { + // class to match existing styles... + return 'form_user_unsubscribe ajax'; + } + + + /** + * Action of the form + * + * @return string URL of the action + */ + + function action() + { + return common_local_url('tagunsub', array('tag' => $this->tag)); + } + + + /** + * Legend of the Form + * + * @return void + */ + function formLegend() + { + $this->out->element('legend', null, _m('Unsubscribe from this tag')); + } + + /** + * Action elements + * + * @return void + */ + + function formActions() + { + $this->out->submit('submit', _('Unsubscribe'), 'submit', null, _m('Unsubscribe from this tag')); + } +} From 579fc11862173c8be3a623ebc3248ce9d61835a8 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 15 Mar 2011 14:58:09 -0700 Subject: [PATCH 066/146] copy-paste TagSub to SearchSub :D --- plugins/SearchSub/SearchSub.php | 140 ++++++++++++++++++ plugins/SearchSub/SearchSubPlugin.php | 182 ++++++++++++++++++++++++ plugins/SearchSub/searchsubaction.php | 149 +++++++++++++++++++ plugins/SearchSub/searchsubform.php | 142 ++++++++++++++++++ plugins/SearchSub/searchunsubaction.php | 89 ++++++++++++ plugins/SearchSub/searchunsubform.php | 109 ++++++++++++++ 6 files changed, 811 insertions(+) create mode 100644 plugins/SearchSub/SearchSub.php create mode 100644 plugins/SearchSub/SearchSubPlugin.php create mode 100644 plugins/SearchSub/searchsubaction.php create mode 100644 plugins/SearchSub/searchsubform.php create mode 100644 plugins/SearchSub/searchunsubaction.php create mode 100644 plugins/SearchSub/searchunsubform.php diff --git a/plugins/SearchSub/SearchSub.php b/plugins/SearchSub/SearchSub.php new file mode 100644 index 0000000000..cbf64d39cc --- /dev/null +++ b/plugins/SearchSub/SearchSub.php @@ -0,0 +1,140 @@ + + * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 + * @link http://status.net/ + * + * StatusNet - the distributed open-source microblogging tool + * Copyright (C) 2011, StatusNet, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +/** + * For storing the search subscriptions + * + * @category PollPlugin + * @package StatusNet + * @author Brion Vibber + * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 + * @link http://status.net/ + * + * @see DB_DataObject + */ + +class SearchSub extends Managed_DataObject +{ + public $__table = 'searchsub'; // table name + public $search; // text + public $profile_id; // int -> profile.id + public $created; // datetime + + /** + * Get an instance by key + * + * This is a utility method to get a single instance with a given key value. + * + * @param string $k Key to use to lookup (usually 'user_id' for this class) + * @param mixed $v Value to lookup + * + * @return SearchSub object found, or null for no hits + * + */ + function staticGet($k, $v=null) + { + return Memcached_DataObject::staticGet('SearchSub', $k, $v); + } + + /** + * Get an instance by compound key + * + * This is a utility method to get a single instance with a given set of + * key-value pairs. Usually used for the primary key for a compound key; thus + * the name. + * + * @param array $kv array of key-value mappings + * + * @return SearchSub object found, or null for no hits + * + */ + function pkeyGet($kv) + { + return Memcached_DataObject::pkeyGet('SearchSub', $kv); + } + + /** + * The One True Thingy that must be defined and declared. + */ + public static function schemaDef() + { + return array( + 'description' => 'SearchSubPlugin search subscription records', + 'fields' => array( + 'search' => array('type' => 'varchar', 'length' => 64, 'not null' => true, 'description' => 'hash search associated with this subscription'), + 'profile_id' => array('type' => 'int', 'not null' => true, 'description' => 'profile ID of subscribing user'), + 'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'), + ), + 'primary key' => array('search', 'profile_id'), + 'foreign keys' => array( + 'searchsub_profile_id_fkey' => array('profile', array('profile_id' => 'id')), + ), + 'indexes' => array( + 'searchsub_created_idx' => array('created'), + 'searchsub_profile_id_tag_idx' => array('profile_id', 'search'), + ), + ); + } + + /** + * Start a search subscription! + * + * @param profile $profile subscriber + * @param string $search subscribee + * @return SearchSub + */ + static function start(Profile $profile, $search) + { + $ts = new SearchSub(); + $ts->search = $search; + $ts->profile_id = $profile->id; + $ts->created = common_sql_now(); + $ts->insert(); + return $ts; + } + + /** + * End a search subscription! + * + * @param profile $profile subscriber + * @param string $search subscribee + */ + static function cancel(Profile $profile, $search) + { + $ts = SearchSub::pkeyGet(array('search' => $search, + 'profile_id' => $profile->id)); + if ($ts) { + $ts->delete(); + } + } +} diff --git a/plugins/SearchSub/SearchSubPlugin.php b/plugins/SearchSub/SearchSubPlugin.php new file mode 100644 index 0000000000..59db0ffcbb --- /dev/null +++ b/plugins/SearchSub/SearchSubPlugin.php @@ -0,0 +1,182 @@ +. + * + * @category SearchSubPlugin + * @package StatusNet + * @author Brion Vibber + * @copyright 2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +/** + * SearchSub plugin main class + * + * @category SearchSubPlugin + * @package StatusNet + * @author Brion Vibber + * @copyright 2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ +class SearchSubPlugin extends Plugin +{ + const VERSION = '0.1'; + + /** + * Database schema setup + * + * @see Schema + * + * @return boolean hook value; true means continue processing, false means stop. + */ + function onCheckSchema() + { + $schema = Schema::get(); + $schema->ensureTable('searchsub', SearchSub::schemaDef()); + return true; + } + + /** + * Load related modules when needed + * + * @param string $cls Name of the class to be loaded + * + * @return boolean hook value; true means continue processing, false means stop. + */ + function onAutoload($cls) + { + $dir = dirname(__FILE__); + + switch ($cls) + { + case 'SearchSub': + include_once $dir.'/'.$cls.'.php'; + return false; + case 'SearchsubAction': + case 'SearchunsubAction': + case 'SearchSubForm': + case 'SearchUnsubForm': + include_once $dir.'/'.strtolower($cls).'.php'; + return false; + default: + return true; + } + } + + /** + * Map URLs to actions + * + * @param Net_URL_Mapper $m path-to-action mapper + * + * @return boolean hook value; true means continue processing, false means stop. + */ + function onRouterInitialized($m) + { + $m->connect('search/:search/subscribe', + array('action' => 'searchsub'), + array('search' => Router::REGEX_TAG)); + $m->connect('search/:search/unsubscribe', + array('action' => 'searchunsub'), + array('search' => Router::REGEX_TAG)); + + return true; + } + + /** + * Plugin version data + * + * @param array &$versions array of version data + * + * @return value + */ + function onPluginVersion(&$versions) + { + $versions[] = array('name' => 'SearchSub', + 'version' => self::VERSION, + 'author' => 'Brion Vibber', + 'homepage' => 'http://status.net/wiki/Plugin:SearchSub', + 'rawdescription' => + // TRANS: Plugin description. + _m('Plugin to allow following all messages with a given search.')); + return true; + } + + /** + * Hook inbox delivery setup so search subscribers receive all + * notices with that search in their inbox. + * + * Currently makes no distinction between local messages and + * remote ones which happen to come in to the system. Remote + * notices that don't come in at all won't ever reach this. + * + * @param Notice $notice + * @param array $ni in/out map of profile IDs to inbox constants + * @return boolean hook result + */ + function onStartNoticeWhoGets(Notice $notice, array &$ni) + { + foreach ($notice->getTags() as $search) { + $searchsub = new SearchSub(); + $searchsub->search = $search; + $searchsub->find(); + + while ($searchsub->fetch()) { + // These constants are currently not actually used, iirc + $ni[$searchsub->profile_id] = NOTICE_INBOX_SOURCE_SUB; + } + } + return true; + } + + /** + * + * @param SearchAction $action + * @return boolean hook result + */ + function onStartTagShowContent(SearchAction $action) + { + $user = common_current_user(); + if ($user) { + $search = $action->trimmed('search'); + $searchsub = SearchSub::pkeyGet(array('search' => $search, + 'profile_id' => $user->id)); + if ($searchsub) { + $form = new SearchUnsubForm($action, $search); + } else { + $form = new SearchSubForm($action, $search); + } + $action->elementStart('div', 'entity_actions'); + $action->elementStart('ul'); + $action->elementStart('li', 'entity_subscribe'); + $form->show(); + $action->elementEnd('li'); + $action->elementEnd('ul'); + $action->elementEnd('div'); + } + return true; + } +} diff --git a/plugins/SearchSub/searchsubaction.php b/plugins/SearchSub/searchsubaction.php new file mode 100644 index 0000000000..67bc178df6 --- /dev/null +++ b/plugins/SearchSub/searchsubaction.php @@ -0,0 +1,149 @@ +. + * + * PHP version 5 + * + * @category Action + * @package StatusNet + * @author Brion Vibber + * @author Evan Prodromou + * @copyright 2008-2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +/** + * Search subscription action + * + * Takes parameters: + * + * - token: session token to prevent CSRF attacks + * - ajax: boolean; whether to return Ajax or full-browser results + * + * Only works if the current user is logged in. + * + * @category Action + * @package StatusNet + * @author Evan Prodromou + * @author Brion Vibber + * @copyright 2008-2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3 + * @link http://status.net/ + */ +class SearchsubAction extends Action +{ + var $user; + var $search; + + /** + * Check pre-requisites and instantiate attributes + * + * @param Array $args array of arguments (URL, GET, POST) + * + * @return boolean success flag + */ + function prepare($args) + { + parent::prepare($args); + if ($this->boolean('ajax')) { + StatusNet::setApi(true); + } + + // Only allow POST requests + + if ($_SERVER['REQUEST_METHOD'] != 'POST') { + // TRANS: Client error displayed trying to perform any request method other than POST. + // TRANS: Do not translate POST. + $this->clientError(_('This action only accepts POST requests.')); + return false; + } + + // CSRF protection + + $token = $this->trimmed('token'); + + if (!$token || $token != common_session_token()) { + // TRANS: Client error displayed when the session token is not okay. + $this->clientError(_('There was a problem with your session token.'. + ' Try again, please.')); + return false; + } + + // Only for logged-in users + + $this->user = common_current_user(); + + if (empty($this->user)) { + // TRANS: Client error displayed trying to subscribe when not logged in. + $this->clientError(_('Not logged in.')); + return false; + } + + // Profile to subscribe to + + $this->search = $this->arg('search'); + + if (empty($this->search)) { + // TRANS: Client error displayed trying to subscribe to a non-existing profile. + $this->clientError(_('No such profile.')); + return false; + } + + return true; + } + + /** + * Handle request + * + * Does the subscription and returns results. + * + * @param Array $args unused. + * + * @return void + */ + function handle($args) + { + // Throws exception on error + + SearchSub::start($this->user->getProfile(), + $this->search); + + if ($this->boolean('ajax')) { + $this->startHTML('text/xml;charset=utf-8'); + $this->elementStart('head'); + // TRANS: Page title when search subscription succeeded. + $this->element('title', null, _m('Subscribed')); + $this->elementEnd('head'); + $this->elementStart('body'); + $unsubscribe = new SearchUnsubForm($this, $this->search); + $unsubscribe->show(); + $this->elementEnd('body'); + $this->elementEnd('html'); + } else { + $url = common_local_url('search', + array('search' => $this->search)); + common_redirect($url, 303); + } + } +} diff --git a/plugins/SearchSub/searchsubform.php b/plugins/SearchSub/searchsubform.php new file mode 100644 index 0000000000..8078cdde1b --- /dev/null +++ b/plugins/SearchSub/searchsubform.php @@ -0,0 +1,142 @@ +. + * + * @category SearchSubPlugin + * @package StatusNet + * @author Brion Vibber + * @author Evan Prodromou + * @author Sarven Capadisli + * @copyright 2009-2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET') && !defined('LACONICA')) { + exit(1); +} + +/** + * Form for subscribing to a user + * + * @category SearchSubPlugin + * @package StatusNet + * @author Brion Vibber + * @author Evan Prodromou + * @author Sarven Capadisli + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + * + * @see UnsubscribeForm + */ + +class SearchSubForm extends Form +{ + /** + * Name of search to subscribe to + */ + + var $search = ''; + + /** + * Constructor + * + * @param HTMLOutputter $out output channel + * @param string $search name of search to subscribe to + */ + + function __construct($out=null, $search=null) + { + parent::__construct($out); + + $this->search = $search; + } + + /** + * ID of the form + * + * @return int ID of the form + */ + + function id() + { + return 'search-subscribe-' . $this->search; + } + + + /** + * class of the form + * + * @return string of the form class + */ + + function formClass() + { + // class to match existing styles... + return 'form_user_subscribe ajax'; + } + + + /** + * Action of the form + * + * @return string URL of the action + */ + + function action() + { + return common_local_url('searchsub', array('search' => $this->search)); + } + + + /** + * Legend of the Form + * + * @return void + */ + function formLegend() + { + $this->out->element('legend', null, _m('Subscribe to this search')); + } + + /** + * Data elements of the form + * + * @return void + */ + + function formData() + { + $this->out->hidden('subscribeto-' . $this->search, + $this->search, + 'subscribeto'); + } + + /** + * Action elements + * + * @return void + */ + + function formActions() + { + $this->out->submit('submit', _('Subscribe'), 'submit', null, _m('Subscribe to this search')); + } +} diff --git a/plugins/SearchSub/searchunsubaction.php b/plugins/SearchSub/searchunsubaction.php new file mode 100644 index 0000000000..f7f006e21c --- /dev/null +++ b/plugins/SearchSub/searchunsubaction.php @@ -0,0 +1,89 @@ +. + * + * PHP version 5 + * + * @category Action + * @package StatusNet + * @author Brion Vibber + * @author Evan Prodromou + * @copyright 2008-2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +/** + * Search unsubscription action + * + * Takes parameters: + * + * - token: session token to prevent CSRF attacks + * - ajax: boolean; whether to return Ajax or full-browser results + * + * Only works if the current user is logged in. + * + * @category Action + * @package StatusNet + * @author Evan Prodromou + * @author Brion Vibber + * @copyright 2008-2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3 + * @link http://status.net/ + */ +class SearchunsubAction extends SearchsubAction +{ + /** + * Handle request + * + * Does the subscription and returns results. + * + * @param Array $args unused. + * + * @return void + */ + function handle($args) + { + // Throws exception on error + + SearchSub::cancel($this->user->getProfile(), + $this->search); + + if ($this->boolean('ajax')) { + $this->startHTML('text/xml;charset=utf-8'); + $this->elementStart('head'); + // TRANS: Page title when search unsubscription succeeded. + $this->element('title', null, _m('Unsubscribed')); + $this->elementEnd('head'); + $this->elementStart('body'); + $subscribe = new SearchSubForm($this, $this->search); + $subscribe->show(); + $this->elementEnd('body'); + $this->elementEnd('html'); + } else { + $url = common_local_url('search', + array('search' => $this->search)); + common_redirect($url, 303); + } + } +} diff --git a/plugins/SearchSub/searchunsubform.php b/plugins/SearchSub/searchunsubform.php new file mode 100644 index 0000000000..296b74f4a1 --- /dev/null +++ b/plugins/SearchSub/searchunsubform.php @@ -0,0 +1,109 @@ +. + * + * @category SearchSubPlugin + * @package StatusNet + * @author Brion Vibber + * @author Evan Prodromou + * @author Sarven Capadisli + * @copyright 2009-2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET') && !defined('LACONICA')) { + exit(1); +} + +/** + * Form for subscribing to a user + * + * @category SearchSubPlugin + * @package StatusNet + * @author Brion Vibber + * @author Evan Prodromou + * @author Sarven Capadisli + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + * + * @see UnsubscribeForm + */ + +class SearchUnsubForm extends SearchSubForm +{ + /** + * ID of the form + * + * @return int ID of the form + */ + + function id() + { + return 'search-unsubscribe-' . $this->search; + } + + + /** + * class of the form + * + * @return string of the form class + */ + + function formClass() + { + // class to match existing styles... + return 'form_user_unsubscribe ajax'; + } + + + /** + * Action of the form + * + * @return string URL of the action + */ + + function action() + { + return common_local_url('searchunsub', array('search' => $this->search)); + } + + + /** + * Legend of the Form + * + * @return void + */ + function formLegend() + { + $this->out->element('legend', null, _m('Unsubscribe from this search')); + } + + /** + * Action elements + * + * @return void + */ + + function formActions() + { + $this->out->submit('submit', _('Unsubscribe'), 'submit', null, _m('Unsubscribe from this search')); + } +} From 08b430a24736e3bd92c2b8464f825c3ec00f6b79 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 15 Mar 2011 15:33:37 -0700 Subject: [PATCH 067/146] Event hook for notice search pages --- actions/noticesearch.php | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/actions/noticesearch.php b/actions/noticesearch.php index 4f4c7a05ba..1f43af800d 100644 --- a/actions/noticesearch.php +++ b/actions/noticesearch.php @@ -138,11 +138,14 @@ class NoticesearchAction extends SearchAction $this->elementEnd('div'); return; } - $terms = preg_split('/[\s,]+/', $q); - $nl = new SearchNoticeList($notice, $this, $terms); - $cnt = $nl->show(); - $this->pagination($page > 1, $cnt > NOTICES_PER_PAGE, - $page, 'noticesearch', array('q' => $q)); + if (Event::handle('StartNoticeSearchShowResults', array($this, $q, $notice))) { + $terms = preg_split('/[\s,]+/', $q); + $nl = new SearchNoticeList($notice, $this, $terms); + $cnt = $nl->show(); + $this->pagination($page > 1, $cnt > NOTICES_PER_PAGE, + $page, 'noticesearch', array('q' => $q)); + Event::handle('EndNoticeSearchShowResults', array($this, $q, $notice)); + } } function showScripts() From 341bef5e017d655a6c098639f08f46bc6efc6d60 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 15 Mar 2011 15:34:06 -0700 Subject: [PATCH 068/146] tag -> search stuff: basic search subscription implementation in SearchSub --- plugins/SearchSub/SearchSubPlugin.php | 52 +++++++++++++++++++++------ 1 file changed, 41 insertions(+), 11 deletions(-) diff --git a/plugins/SearchSub/SearchSubPlugin.php b/plugins/SearchSub/SearchSubPlugin.php index 59db0ffcbb..130600a41a 100644 --- a/plugins/SearchSub/SearchSubPlugin.php +++ b/plugins/SearchSub/SearchSubPlugin.php @@ -139,31 +139,61 @@ class SearchSubPlugin extends Plugin */ function onStartNoticeWhoGets(Notice $notice, array &$ni) { - foreach ($notice->getTags() as $search) { - $searchsub = new SearchSub(); - $searchsub->search = $search; - $searchsub->find(); + // Warning: this is potentially very slow + // with a lot of searches! + $sub = new SearchSub(); + $sub->groupBy('search'); + $sub->find(); + while ($sub->fetch()) { + $search = $sub->search; - while ($searchsub->fetch()) { - // These constants are currently not actually used, iirc - $ni[$searchsub->profile_id] = NOTICE_INBOX_SOURCE_SUB; + if ($this->matchSearch($notice, $search)) { + // Match? Find all those who subscribed to this + // search term and get our delivery on... + $searchsub = new SearchSub(); + $searchsub->search = $search; + $searchsub->find(); + + while ($searchsub->fetch()) { + // These constants are currently not actually used, iirc + $ni[$searchsub->profile_id] = NOTICE_INBOX_SOURCE_SUB; + } } } return true; } /** + * Does the given notice match the given fulltext search query? * - * @param SearchAction $action + * Warning: not guaranteed to match other search engine behavior, etc. + * Currently using a basic case-insensitive substring match, which + * probably fits with the 'LIKE' search but not the default MySQL + * or Sphinx search backends. + * + * @param Notice $notice + * @param string $search + * @return boolean + */ + function matchSearch(Notice $notice, $search) + { + return (mb_stripos($notice->content, $search) !== false); + } + + /** + * + * @param NoticeSearchAction $action + * @param string $q + * @param Notice $notice * @return boolean hook result */ - function onStartTagShowContent(SearchAction $action) + function onStartNoticeSearchShowResults($action, $q, $notice) { $user = common_current_user(); if ($user) { - $search = $action->trimmed('search'); + $search = $q; $searchsub = SearchSub::pkeyGet(array('search' => $search, - 'profile_id' => $user->id)); + 'profile_id' => $user->id)); if ($searchsub) { $form = new SearchUnsubForm($action, $search); } else { From e4eb6719a5e270430b57425bcb344f0c7971254b Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Tue, 15 Mar 2011 15:35:00 -0700 Subject: [PATCH 069/146] Extended profile - make birthday save --- .../ExtendedProfile/extendedprofilewidget.php | 8 +- .../profiledetailsettingsaction.php | 76 +++++++++---------- 2 files changed, 45 insertions(+), 39 deletions(-) diff --git a/plugins/ExtendedProfile/extendedprofilewidget.php b/plugins/ExtendedProfile/extendedprofilewidget.php index 05cfadacc3..fc3d7ca51d 100644 --- a/plugins/ExtendedProfile/extendedprofilewidget.php +++ b/plugins/ExtendedProfile/extendedprofilewidget.php @@ -399,7 +399,7 @@ class ExtendedProfileWidget extends Form $this->out->element('div', 'label', _m('Description')); $this->out->element('div', 'field', $field['description']); - $this->out->input( + $this->out->textarea( $id . '-description', null, isset($field['description']) ? $field['description'] : null @@ -463,6 +463,9 @@ class ExtendedProfileWidget extends Form case 'textarea': $this->out->text($this->ext->getTextValue($name)); break; + case 'date': + $this->out->text($this->ext->getTextValue($name)); + break; case 'tags': $this->out->text($this->ext->getTags()); break; @@ -506,6 +509,9 @@ class ExtendedProfileWidget extends Form case 'text': $out->input($id, null, $this->ext->getTextValue($name)); break; + case 'date': + $out->input($id, null, $this->ext->getTextValue($name)); + break; case 'textarea': $out->textarea($id, null, $this->ext->getTextValue($name)); break; diff --git a/plugins/ExtendedProfile/profiledetailsettingsaction.php b/plugins/ExtendedProfile/profiledetailsettingsaction.php index 2357860884..d3b653bad2 100644 --- a/plugins/ExtendedProfile/profiledetailsettingsaction.php +++ b/plugins/ExtendedProfile/profiledetailsettingsaction.php @@ -100,6 +100,7 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction $profile = $user->getProfile(); $simpleFieldNames = array('title', 'spouse', 'kids'); + $dateFieldNames = array('birthday'); foreach ($simpleFieldNames as $name) { $value = $this->trimmed('extprofile-' . $name); @@ -108,6 +109,15 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction } } + foreach ($dateFieldNames as $name) { + $value = $this->trimmed('extprofile-' . $name); + $this->saveField( + $user, + $name, + $this->parseDate($name, $value) + ); + } + $this->savePhoneNumbers($user); $this->saveIms($user); $this->saveWebsites($user); @@ -123,6 +133,30 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction } + function parseDate($fieldname, $datestr, $required = false) + { + if (empty($datestr) && $required) { + $msg = sprintf( + _m('You must supply a date for "%s".'), + $fieldname + ); + throw new Exception($msg); + } else { + $ts = strtotime($datestr); + if ($ts === false) { + throw new Exception( + sprintf( + _m('Invalid date entered for "%s": %s'), + $fieldname, + $ts + ) + ); + } + return common_sql_date($ts); + } + return null; + } + function savePhoneNumbers($user) { $phones = $this->findPhoneNumbers(); $this->removeAll($user, 'phone'); @@ -249,26 +283,10 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction foreach ($experiences as $exp) { list($company, $current, $end, $start) = array_values($exp); if (!empty($company)) { - $startTs = strtotime($start); - - if ($startTs === false) { - $msg = empty($start) ? _m('You must supply a start date.') - : sprintf(_m("Invalid start date: %s"), $start); - throw new Exception($msg); - } - - $endTs = strtotime($end); - - if ($current === 'false' && $endTs === false) { - $msg = empty($end) ? _m('You must supply an end date.') - : sprintf(_m("Invalid end date: %s"), $end); - throw new Exception($msg); - } - $expArray[] = array( 'company' => $company, - 'start' => common_sql_date($startTs), - 'end' => common_sql_date($endTs), + 'start' => $this->parseDate('Start', $start, true), + 'end' => $this->parseDate('End', $end, true), 'current' => ($current == 'false') ? false : true ); } @@ -344,31 +362,13 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction foreach ($edus as $edu) { list($school, $degree, $description, $end, $start) = array_values($edu); - if (!empty($school)) { - - $startTs = strtotime($start); - - if ($startTs === false) { - $msg = empty($start) ? _m('You must supply a start date.') - : sprintf(_m("Invalid start date: %s"), $start); - throw new Exception($msg); - } - - $endTs = strtotime($end); - - if ($endTs === false) { - $msg = empty($end) ? _m('You must supply an end date.') - : sprintf(_m("Invalid end date: %s"), $end); - throw new Exception($msg); - } - $eduArray[] = array( 'school' => $school, 'degree' => $degree, 'description' => $description, - 'start' => common_sql_date($startTs), - 'end' => common_sql_date($endTs) + 'start' => $this->parseDate('Start', $start, true), + 'end' => $this->parseDate('End', $end, true) ); } } From ce05a78d0843b7d6f1664d128d0cfd3eac5e2801 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 15 Mar 2011 17:15:25 -0700 Subject: [PATCH 070/146] SubMirror wizard work in progress: Twitter option now lets you type in a username and picks the feed. Should in theory work via superfeedr or other compatible hub --- plugins/SubMirror/actions/addmirror.php | 18 +++++- plugins/SubMirror/actions/basemirror.php | 2 +- plugins/SubMirror/actions/mirrorsettings.php | 15 ++++- plugins/SubMirror/lib/addmirrorform.php | 3 +- .../SubMirror/lib/addtwittermirrorform.php | 60 +++++++++++++++++++ 5 files changed, 94 insertions(+), 4 deletions(-) create mode 100644 plugins/SubMirror/lib/addtwittermirrorform.php diff --git a/plugins/SubMirror/actions/addmirror.php b/plugins/SubMirror/actions/addmirror.php index 8c3a9740f3..31805c1669 100644 --- a/plugins/SubMirror/actions/addmirror.php +++ b/plugins/SubMirror/actions/addmirror.php @@ -59,11 +59,27 @@ class AddMirrorAction extends BaseMirrorAction function prepare($args) { parent::prepare($args); - $this->feedurl = $this->validateFeedUrl($this->trimmed('feedurl')); + $feedurl = $this->getFeedUrl(); + $this->feedurl = $this->validateFeedUrl($feedurl); $this->profile = $this->profileForFeed($this->feedurl); return true; } + function getFeedUrl() + { + $provider = $this->trimmed('provider'); + switch ($provider) { + case 'feed': + return $this->trimmed('feedurl'); + case 'twitter': + $screenie = $this->trimmed('screen_name'); + $base = 'http://api.twitter.com/1/statuses/user_timeline.atom?screen_name='; + return $base . urlencode($screenie); + default: + throw new Exception('Internal form error: unrecognized feed provider.'); + } + } + function saveMirror() { if ($this->oprofile->subscribe()) { diff --git a/plugins/SubMirror/actions/basemirror.php b/plugins/SubMirror/actions/basemirror.php index 3e3431103f..843dfb92e1 100644 --- a/plugins/SubMirror/actions/basemirror.php +++ b/plugins/SubMirror/actions/basemirror.php @@ -68,7 +68,7 @@ abstract class BaseMirrorAction extends Action if (common_valid_http_url($url)) { return $url; } else { - $this->clientError(_m("Invalid feed URL.")); + $this->clientError(sprintf(_m("Invalid feed URL: %s"), $url)); } } diff --git a/plugins/SubMirror/actions/mirrorsettings.php b/plugins/SubMirror/actions/mirrorsettings.php index ae09111ec4..90bbf3dffb 100644 --- a/plugins/SubMirror/actions/mirrorsettings.php +++ b/plugins/SubMirror/actions/mirrorsettings.php @@ -100,7 +100,20 @@ class MirrorSettingsAction extends SettingsAction function showAddFeedForm() { - $form = new AddMirrorForm($this); + switch ($this->arg('provider')) { + case 'statusnet': + break; + case 'twitter': + $form = new AddTwitterMirrorForm($this); + break; + case 'wordpress': + break; + case 'linkedin': + break; + case 'feed': + default: + $form = new AddMirrorForm($this); + } $form->show(); } diff --git a/plugins/SubMirror/lib/addmirrorform.php b/plugins/SubMirror/lib/addmirrorform.php index e1d50c272c..17edbd5e96 100644 --- a/plugins/SubMirror/lib/addmirrorform.php +++ b/plugins/SubMirror/lib/addmirrorform.php @@ -49,6 +49,7 @@ class AddMirrorForm extends Form */ function formData() { + $this->out->hidden('provider', 'feed'); $this->out->elementStart('fieldset'); $this->out->elementStart('ul'); @@ -67,7 +68,7 @@ class AddMirrorForm extends Form $this->out->elementEnd('fieldset'); } - private function doInput($id, $name, $label, $value=null, $instructions=null) + protected function doInput($id, $name, $label, $value=null, $instructions=null) { $this->out->element('label', array('for' => $id), $label); $attrs = array('name' => $name, diff --git a/plugins/SubMirror/lib/addtwittermirrorform.php b/plugins/SubMirror/lib/addtwittermirrorform.php new file mode 100644 index 0000000000..eb28aa038f --- /dev/null +++ b/plugins/SubMirror/lib/addtwittermirrorform.php @@ -0,0 +1,60 @@ +. + * + * @package StatusNet + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET') && !defined('LACONICA')) { + exit(1); +} + +class AddTwitterMirrorForm extends AddMirrorForm +{ + + /** + * Visible or invisible data elements + * + * Display the form fields that make up the data of the form. + * Sub-classes should overload this to show their data. + * + * @return void + */ + function formData() + { + $this->out->hidden('provider', 'twitter'); + $this->out->elementStart('fieldset'); + + $this->out->elementStart('ul'); + + $this->li(); + $this->doInput('addmirror-feedurl', + 'screen_name', + _m('Twitter username:'), + $this->out->trimmed('screen_name')); + $this->unli(); + + $this->li(); + $this->out->submit('addmirror-save', _m('BUTTON','Add feed')); + $this->unli(); + $this->out->elementEnd('ul'); + $this->out->elementEnd('fieldset'); + } +} From 7345de120221da277fff253e59a7259ae3b0e9cb Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 15 Mar 2011 17:32:25 -0700 Subject: [PATCH 071/146] Add layout divs to InfoAction's core block; fixes error display layout in Neo skin --- lib/info.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/info.php b/lib/info.php index 395c6522ec..f72bed59d6 100644 --- a/lib/info.php +++ b/lib/info.php @@ -93,8 +93,14 @@ class InfoAction extends Action function showCore() { $this->elementStart('div', array('id' => 'core')); + $this->elementStart('div', array('id' => 'aside_primary_wrapper')); + $this->elementStart('div', array('id' => 'content_wrapper')); + $this->elementStart('div', array('id' => 'site_nav_local_views_wrapper')); $this->showContentBlock(); $this->elementEnd('div'); + $this->elementEnd('div'); + $this->elementEnd('div'); + $this->elementEnd('div'); } function showHeader() From 73b5821fc33225978e51cb04c9e5ad1434bc018c Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 15 Mar 2011 17:32:09 -0700 Subject: [PATCH 072/146] Submirror wizard updates... commenting out Wordpress (not sure what to do with it), LinkedIn (can't find documentation on any public RSS/Atom feeds from it, it seems that a feed of your updates doesn't currently exist?), and StatusNet (we'd need to know what to do with it; could take webfinger-style addresses or such.) Also added a commented-out Facebook section; it seems that there may not be a current way to get at public updates via RSS/Atom either, or if it is it seems really inconsistent and undocumented. (You can get at your friends updates by jumping through some hoops, but it seems we'd want to mirror a single account's own update feed?) --- plugins/SubMirror/lib/addmirrorwizard.php | 28 +++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/plugins/SubMirror/lib/addmirrorwizard.php b/plugins/SubMirror/lib/addmirrorwizard.php index 7a63f8366b..920db0bc9c 100644 --- a/plugins/SubMirror/lib/addmirrorwizard.php +++ b/plugins/SubMirror/lib/addmirrorwizard.php @@ -60,22 +60,50 @@ class AddMirrorWizard extends Widget function providers() { return array( + /* + // We could accept hostname & username combos here, or + // webfingery combinations as for remote users. array( 'id' => 'statusnet', 'name' => _m('StatusNet'), ), + */ + // Accepts a Twitter username and pulls their user timeline as a + // public Atom feed. Requires a working alternate hub which, one + // hopes, is getting timely updates. array( 'id' => 'twitter', 'name' => _m('Twitter'), ), + /* + // WordPress was on our list some whiles ago, but not sure + // what we can actually do here. Search on Wordpress.com hosted + // sites, or ? array( 'id' => 'wordpress', 'name' => _m('WordPress'), ), + */ + /* + // In theory, Facebook lets you pull public updates over RSS, + // but the URLs for your own update feed that I can find from + // 2009-era websites no longer seem to work and there's no + // good current documentation. May not still be available... + // Mirroring from an FB account is probably better done with + // the dedicated plugin. (As of March 2011) + array( + 'id' => 'facebook', + 'name' => _m('Facebook'), + ), + */ + /* + // LinkedIn doesn't currently seem to have public feeds + // for users or groups (March 2011) array( 'id' => 'linkedin', 'name' => _m('LinkedIn'), ), + */ array( 'id' => 'feed', 'name' => _m('RSS or Atom feed'), From 903ce7d10cff41b91f6fb83adc3f32bfdfc62acd Mon Sep 17 00:00:00 2001 From: Samantha Doherty Date: Tue, 15 Mar 2011 21:43:28 -0400 Subject: [PATCH 073/146] Hide all unnecessarylabels from profile edit view. --- plugins/ExtendedProfile/css/profiledetail.css | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/plugins/ExtendedProfile/css/profiledetail.css b/plugins/ExtendedProfile/css/profiledetail.css index 797d32d415..e0650d40a1 100644 --- a/plugins/ExtendedProfile/css/profiledetail.css +++ b/plugins/ExtendedProfile/css/profiledetail.css @@ -65,6 +65,10 @@ margin-right: 8px; } +.form_settings .extended-profile label { + display: none; +} + .experience-item input[type=text], .education-item input[type=text] { float: left; } @@ -84,13 +88,10 @@ .form_settings .extended-profile label.checkbox { max-width: 100%; float: none; + display: inline; left: -20px; } -.phone-item label, .im-item label { - display: none; -} - .extended-profile select { padding-right: 2px; font-size: 0.88em; From 95d03e74e940ef8f50e26d8e7a3a4b68509dd9c2 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Tue, 15 Mar 2011 18:45:08 -0700 Subject: [PATCH 074/146] Extended profile - autocomplete for manager --- .../ExtendedProfile/ExtendedProfilePlugin.php | 22 +++- .../action/userautocomplete.php | 113 ++++++++++++++++++ .../ExtendedProfile/extendedprofilewidget.php | 6 + plugins/ExtendedProfile/js/profiledetail.js | 5 + .../profiledetailsettingsaction.php | 4 +- 5 files changed, 144 insertions(+), 6 deletions(-) create mode 100644 plugins/ExtendedProfile/action/userautocomplete.php diff --git a/plugins/ExtendedProfile/ExtendedProfilePlugin.php b/plugins/ExtendedProfile/ExtendedProfilePlugin.php index 933b43cad7..d1572ce9fd 100644 --- a/plugins/ExtendedProfile/ExtendedProfilePlugin.php +++ b/plugins/ExtendedProfile/ExtendedProfilePlugin.php @@ -54,6 +54,7 @@ class ExtendedProfilePlugin extends Plugin function onAutoload($cls) { $lower = strtolower($cls); + switch ($lower) { case 'extendedprofile': @@ -62,6 +63,9 @@ class ExtendedProfilePlugin extends Plugin case 'profiledetailsettingsaction': require_once dirname(__FILE__) . '/' . $lower . '.php'; return false; + case 'userautocompleteaction': + require_once dirname(__FILE__) . '/action/' . mb_substr($lower, 0, -6) . '.php'; + return false; case 'profile_detail': require_once dirname(__FILE__) . '/' . ucfirst($lower) . '.php'; return false; @@ -81,11 +85,19 @@ class ExtendedProfilePlugin extends Plugin */ function onStartInitializeRouter($m) { - $m->connect(':nickname/detail', - array('action' => 'profiledetail'), - array('nickname' => Nickname::DISPLAY_FMT)); - $m->connect('settings/profile/detail', - array('action' => 'profiledetailsettings')); + $m->connect( + ':nickname/detail', + array('action' => 'profiledetail'), + array('nickname' => Nickname::DISPLAY_FMT) + ); + $m->connect( + '/settings/profile/finduser', + array('action' => 'Userautocomplete') + ); + $m->connect( + 'settings/profile/detail', + array('action' => 'profiledetailsettings') + ); return true; } diff --git a/plugins/ExtendedProfile/action/userautocomplete.php b/plugins/ExtendedProfile/action/userautocomplete.php new file mode 100644 index 0000000000..d4857429e0 --- /dev/null +++ b/plugins/ExtendedProfile/action/userautocomplete.php @@ -0,0 +1,113 @@ +. + * + * @category Search + * @package StatusNet + * @author Zach Copley + * @copyright 2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + exit(1); +} + + +class UserautocompleteAction extends Action +{ + var $query; + + /** + * Initialization. + * + * @param array $args Web and URL arguments + * + * @return boolean true if nothing goes wrong + */ + function prepare($args) + { + parent::prepare($args); + $this->query = $this->trimmed('term'); + return true; + } + + /** + * Handle a request + * + * @param array $args Arguments from $_REQUEST + * + * @return void + */ + function handle($args) + { + parent::handle($args); + $this->showResults(); + } + + /** + * Search for users matching the query and spit the results out + * as a quick-n-dirty JSON document + * + * @return void + */ + function showResults() + { + $people = array(); + + $profile = new Profile(); + + $search_engine = $profile->getSearchEngine('profile'); + $search_engine->set_sort_mode('nickname_desc'); + $search_engine->limit(0, 10); + $search_engine->query(strtolower($this->query . '*')); + + $cnt = $profile->find(); + + if ($cnt > 0) { + + $sql = 'SELECT profile.* FROM profile, user WHERE profile.id = user.id ' + . ' AND LEFT(LOWER(profile.nickname), ' + . strlen($this->query) + . ') = \'%s\' ' + . ' LIMIT 0, 10'; + + $profile->query(sprintf($sql, $this->query)); + } + + while ($profile->fetch()) { + $people[] = $profile->nickname; + } + + header('Content-Type: application/json; charset=utf-8'); + print json_encode($people); + } + + /** + * Do we need to write to the database? + * + * @return boolean true + */ + function isReadOnly($args) + { + return true; + } +} diff --git a/plugins/ExtendedProfile/extendedprofilewidget.php b/plugins/ExtendedProfile/extendedprofilewidget.php index fc3d7ca51d..dec0512be4 100644 --- a/plugins/ExtendedProfile/extendedprofilewidget.php +++ b/plugins/ExtendedProfile/extendedprofilewidget.php @@ -466,6 +466,9 @@ class ExtendedProfileWidget extends Form case 'date': $this->out->text($this->ext->getTextValue($name)); break; + case 'person': + $this->out->text($this->ext->getTextValue($name)); + break; case 'tags': $this->out->text($this->ext->getTags()); break; @@ -512,6 +515,9 @@ class ExtendedProfileWidget extends Form case 'date': $out->input($id, null, $this->ext->getTextValue($name)); break; + case 'person': + $out->input($id, null, $this->ext->getTextValue($name)); + break; case 'textarea': $out->textarea($id, null, $this->ext->getTextValue($name)); break; diff --git a/plugins/ExtendedProfile/js/profiledetail.js b/plugins/ExtendedProfile/js/profiledetail.js index 2821bed275..7510323a43 100644 --- a/plugins/ExtendedProfile/js/profiledetail.js +++ b/plugins/ExtendedProfile/js/profiledetail.js @@ -89,6 +89,11 @@ var init = function() { reorder('experience-item'); reorder('education-item'); reorder('im-item'); + + $("input#extprofile-manager").autocomplete({ + source: 'finduser', + minLength: 2 }); + } $(document).ready( diff --git a/plugins/ExtendedProfile/profiledetailsettingsaction.php b/plugins/ExtendedProfile/profiledetailsettingsaction.php index d3b653bad2..b0590f7316 100644 --- a/plugins/ExtendedProfile/profiledetailsettingsaction.php +++ b/plugins/ExtendedProfile/profiledetailsettingsaction.php @@ -44,12 +44,14 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction function showStylesheets() { parent::showStylesheets(); $this->cssLink('plugins/ExtendedProfile/css/profiledetail.css'); + $this->cssLink('http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css'); return true; } function showScripts() { parent::showScripts(); $this->script('plugins/ExtendedProfile/js/profiledetail.js'); + $this->script('http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js'); return true; } @@ -99,7 +101,7 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction $profile = $user->getProfile(); - $simpleFieldNames = array('title', 'spouse', 'kids'); + $simpleFieldNames = array('title', 'spouse', 'kids', 'manager'); $dateFieldNames = array('birthday'); foreach ($simpleFieldNames as $name) { From b11a2faf5412a73690535df66034a06467e4208e Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Tue, 15 Mar 2011 19:33:05 -0700 Subject: [PATCH 075/146] Extended profile - namespace JavaScript functions --- plugins/ExtendedProfile/js/profiledetail.js | 55 ++++++++++----------- 1 file changed, 27 insertions(+), 28 deletions(-) diff --git a/plugins/ExtendedProfile/js/profiledetail.js b/plugins/ExtendedProfile/js/profiledetail.js index 7510323a43..98594a46b7 100644 --- a/plugins/ExtendedProfile/js/profiledetail.js +++ b/plugins/ExtendedProfile/js/profiledetail.js @@ -1,4 +1,6 @@ -var reorder = function(class) { +var SN_EXTENDED = SN_EXTENDED || {}; + +SN_EXTENDED.reorder = function(class) { console.log("QQQ Enter reorder"); var divs = $.find('div[class=' + class + ']'); @@ -9,7 +11,7 @@ var reorder = function(class) { $(divs).each(function(i, div) { console.log("ROW " + i); $(div).find('a.remove_row').show(); - replaceIndex(rowIndex(div), i); + SN_EXTENDED.replaceIndex(SN_EXTENDED.rowIndex(div), i); }); $this = $(divs).last().closest('tr'); @@ -23,19 +25,19 @@ var reorder = function(class) { }; -var rowIndex = function(div) { +SN_EXTENDED.rowIndex = function(div) { var idstr = $(div).attr('id'); var id = idstr.match(/\d+/); console.log("id = " + id); return id; }; -var rowCount = function(class) { +SN_EXTENDED.rowCount = function(class) { var divs = $.find('div[class=' + class + ']'); return divs.length; }; -var replaceIndex = function(elem, oldIndex, newIndex) { +SN_EXTENDED.replaceIndex = function(elem, oldIndex, newIndex) { $(elem).find('*').each(function() { $.each(this.attributes, function(i, attrib) { var regexp = /extprofile-.*-\d.*/; @@ -49,12 +51,12 @@ var replaceIndex = function(elem, oldIndex, newIndex) { }); } -var resetRow = function(elem) { +SN_EXTENDED.resetRow = function(elem) { $(elem).find('input').attr('value', ''); $(elem).find("select option[value='office']").attr("selected", true); } -var addRow = function() { +SN_EXTENDED.addRow = function() { var div = $(this).closest('div'); var id = $(div).attr('id'); var class = $(div).attr('class'); @@ -64,44 +66,41 @@ var addRow = function() { var tr = $(trold).removeClass('supersizeme'); var newtr = $(tr).clone(); var newIndex = parseInt(index) + 1; - replaceIndex(newtr, index, newIndex); - resetRow(newtr); + SN_EXTENDED.replaceIndex(newtr, index, newIndex); + SN_EXTENDED.resetRow(newtr); $(tr).after(newtr); - reorder(class); + SN_EXTENDED.reorder(class); }; -var removeRow = function() { +SN_EXTENDED.removeRow = function() { var div = $(this).closest('div'); var id = $(div).attr('id'); var class = $(div).attr('class'); - cnt = rowCount(class); + cnt = SN_EXTENDED.rowCount(class); console.debug("removeRow - cnt = " + cnt); if (cnt > 1) { var target = $(this).closest('tr'); target.remove(); - reorder(class); + SN_EXTENDED.reorder(class); } }; -var init = function() { - reorder('phone-item'); - reorder('experience-item'); - reorder('education-item'); - reorder('im-item'); +$(document).ready( + +function() { + + var multifields = ["phone-item", "experience-item", "education-item", "im-item"]; + + for (f in multifields) { + SN_EXTENDED.reorder(multifields[f]); + } $("input#extprofile-manager").autocomplete({ source: 'finduser', minLength: 2 }); -} + $('.add_row').live('click', SN_EXTENDED.addRow); + $('.remove_row').live('click', SN_EXTENDED.removeRow); -$(document).ready( - -function() { - init(); - $('.add_row').live('click', addRow); - $('.remove_row').live('click', removeRow); -} - -); +}); From bde85a668551251493ab5343d3a8a02db29bb87e Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Tue, 15 Mar 2011 21:23:34 -0700 Subject: [PATCH 076/146] Extended profile - fix issue with JavaScript not executing in Firefox --- .../ExtendedProfile/extendedprofilewidget.php | 4 +- plugins/ExtendedProfile/js/profiledetail.js | 49 ++++++++----------- 2 files changed, 22 insertions(+), 31 deletions(-) diff --git a/plugins/ExtendedProfile/extendedprofilewidget.php b/plugins/ExtendedProfile/extendedprofilewidget.php index dec0512be4..5a9eb7e4f9 100644 --- a/plugins/ExtendedProfile/extendedprofilewidget.php +++ b/plugins/ExtendedProfile/extendedprofilewidget.php @@ -430,7 +430,7 @@ class ExtendedProfileWidget extends Form array( 'class' => 'remove_row', 'href' => 'javascript://', - 'style' => 'display: none; ' + 'style' => 'display: none;' ), '-' ); @@ -440,7 +440,7 @@ class ExtendedProfileWidget extends Form array( 'class' => 'add_row', 'href' => 'javascript://', - 'style' => 'display: none; ' + 'style' => 'display: none;' ), '+' ); diff --git a/plugins/ExtendedProfile/js/profiledetail.js b/plugins/ExtendedProfile/js/profiledetail.js index 98594a46b7..9fb935f153 100644 --- a/plugins/ExtendedProfile/js/profiledetail.js +++ b/plugins/ExtendedProfile/js/profiledetail.js @@ -1,39 +1,32 @@ var SN_EXTENDED = SN_EXTENDED || {}; -SN_EXTENDED.reorder = function(class) { - console.log("QQQ Enter reorder"); +SN_EXTENDED.reorder = function(cls) { - var divs = $.find('div[class=' + class + ']'); - console.log('divs length = ' + divs.length); - - $(divs).find('a').hide(); + var divs = $('div[class=' + cls + ']'); $(divs).each(function(i, div) { - console.log("ROW " + i); $(div).find('a.remove_row').show(); SN_EXTENDED.replaceIndex(SN_EXTENDED.rowIndex(div), i); }); - $this = $(divs).last().closest('tr'); - $this.addClass('supersizeme'); + var lastDiv = $(divs).last().closest('tr'); + lastDiv.addClass('supersizeme'); $(divs).last().find('a.add_row').show(); if (divs.length == 1) { $(divs).find('a.remove_row').hide(); } - }; SN_EXTENDED.rowIndex = function(div) { var idstr = $(div).attr('id'); var id = idstr.match(/\d+/); - console.log("id = " + id); return id; }; -SN_EXTENDED.rowCount = function(class) { - var divs = $.find('div[class=' + class + ']'); +SN_EXTENDED.rowCount = function(cls) { + var divs = $.find('div[class=' + cls + ']'); return divs.length; }; @@ -45,7 +38,6 @@ SN_EXTENDED.replaceIndex = function(elem, oldIndex, newIndex) { var match = value.match(regexp); if (match !== null) { attrib.value = value.replace("-" + oldIndex, "-" + newIndex); - console.log('match: oldIndex = ' + oldIndex + ' newIndex = ' + newIndex + ' name = ' + attrib.name + ' value = ' + attrib.value); } }); }); @@ -54,41 +46,40 @@ SN_EXTENDED.replaceIndex = function(elem, oldIndex, newIndex) { SN_EXTENDED.resetRow = function(elem) { $(elem).find('input').attr('value', ''); $(elem).find("select option[value='office']").attr("selected", true); -} +}; SN_EXTENDED.addRow = function() { var div = $(this).closest('div'); - var id = $(div).attr('id'); - var class = $(div).attr('class'); + var id = div.attr('id'); + var cls = div.attr('class'); var index = id.match(/\d+/); - console.log("Current row = " + index + ', class = ' + class); - var trold = $(this).closest('tr'); - var tr = $(trold).removeClass('supersizeme'); - var newtr = $(tr).clone(); var newIndex = parseInt(index) + 1; + var newtr = $(div).closest('tr').clone(); SN_EXTENDED.replaceIndex(newtr, index, newIndex); + $(newtr).removeClass('supersizeme'); SN_EXTENDED.resetRow(newtr); - $(tr).after(newtr); - SN_EXTENDED.reorder(class); + $(div).closest('tr').after(newtr); + SN_EXTENDED.reorder(cls); }; SN_EXTENDED.removeRow = function() { var div = $(this).closest('div'); var id = $(div).attr('id'); - var class = $(div).attr('class'); + var cls = $(div).attr('class'); - cnt = SN_EXTENDED.rowCount(class); - console.debug("removeRow - cnt = " + cnt); + var cnt = SN_EXTENDED.rowCount(cls); if (cnt > 1) { var target = $(this).closest('tr'); target.remove(); - SN_EXTENDED.reorder(class); + SN_EXTENDED.reorder(cls); } }; -$(document).ready( +$(document).ready(function() { -function() { + $("input#extprofile-manager").autocomplete({ + source: 'finduser', + minLength: 2 }); var multifields = ["phone-item", "experience-item", "education-item", "im-item"]; From 40e1fc82466cf370d05ff7e380e3a99964a851c2 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Tue, 15 Mar 2011 21:55:47 -0700 Subject: [PATCH 077/146] Extended profile - prettier date formatting --- .../ExtendedProfile/extendedprofilewidget.php | 50 +++++++++++++++---- 1 file changed, 40 insertions(+), 10 deletions(-) diff --git a/plugins/ExtendedProfile/extendedprofilewidget.php b/plugins/ExtendedProfile/extendedprofilewidget.php index 5a9eb7e4f9..ebf4c0422c 100644 --- a/plugins/ExtendedProfile/extendedprofilewidget.php +++ b/plugins/ExtendedProfile/extendedprofilewidget.php @@ -295,10 +295,22 @@ class ExtendedProfileWidget extends Form $this->out->elementStart('div', 'experience-item'); $this->out->element('div', 'label', _m('Company')); $this->out->element('div', 'field', $field['company']); + $this->out->element('div', 'label', _m('Start')); - $this->out->element('div', array('class' => 'field date'), $field['start']); + $this->out->element( + 'div', + array('class' => 'field date'), + date('j M Y', strtotime($field['start']) + ) + ); $this->out->element('div', 'label', _m('End')); - $this->out->element('div', array('class' => 'field date'), $field['end']); + $this->out->element( + 'div', + array('class' => 'field date'), + date('j M Y', strtotime($field['end']) + ) + ); + if ($field['current']) { $this->out->element( 'div', @@ -331,14 +343,14 @@ class ExtendedProfileWidget extends Form $this->out->input( $id . '-start', null, - isset($field['start']) ? $field['start'] : null + isset($field['start']) ? date('j M Y', strtotime($field['start'])) : null ); $this->out->element('div', 'label', _m('End')); $this->out->input( $id . '-end', null, - isset($field['end']) ? $field['end'] : null + isset($field['end']) ? date('j M Y', strtotime($field['end'])) : null ); $this->out->hidden( $id . '-current', @@ -366,9 +378,19 @@ class ExtendedProfileWidget extends Form $this->out->element('div', 'label', _m('Description')); $this->out->element('div', 'field', $field['description']); $this->out->element('div', 'label', _m('Start')); - $this->out->element('div', array('class' => 'field date'), $field['start']); + $this->out->element( + 'div', + array('class' => 'field date'), + date('j M Y', strtotime($field['start']) + ) + ); $this->out->element('div', 'label', _m('End')); - $this->out->element('div', array('class' => 'field date'), $field['end']); + $this->out->element( + 'div', + array('class' => 'field date'), + date('j M Y', strtotime($field['end']) + ) + ); $this->out->elementEnd('div'); } @@ -409,14 +431,14 @@ class ExtendedProfileWidget extends Form $this->out->input( $id . '-start', null, - isset($field['start']) ? $field['start'] : null + isset($field['start']) ? date('j M Y', strtotime($field['start'])) : null ); $this->out->element('div', 'label', _m('End')); $this->out->input( $id . '-end', null, - isset($field['end']) ? $field['end'] : null + isset($field['end']) ? date('j M Y', strtotime($field['end'])) : null ); $this->showMultiControls(); @@ -464,7 +486,11 @@ class ExtendedProfileWidget extends Form $this->out->text($this->ext->getTextValue($name)); break; case 'date': - $this->out->text($this->ext->getTextValue($name)); + $this->out->element( + 'div', + array('class' => 'field date'), + date('j M Y', strtotime($this->ext->getTextValue($name))) + ); break; case 'person': $this->out->text($this->ext->getTextValue($name)); @@ -513,7 +539,11 @@ class ExtendedProfileWidget extends Form $out->input($id, null, $this->ext->getTextValue($name)); break; case 'date': - $out->input($id, null, $this->ext->getTextValue($name)); + $out->input( + $id, + null, + date('j M Y', strtotime($this->ext->getTextValue($name))) + ); break; case 'person': $out->input($id, null, $this->ext->getTextValue($name)); From b9065d7bc19e55309204e8beb485b9cad496f0da Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Tue, 15 Mar 2011 23:02:05 -0700 Subject: [PATCH 078/146] Extended profile - add fancy datepicker widgets --- plugins/ExtendedProfile/js/profiledetail.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plugins/ExtendedProfile/js/profiledetail.js b/plugins/ExtendedProfile/js/profiledetail.js index 9fb935f153..d24b4aabe8 100644 --- a/plugins/ExtendedProfile/js/profiledetail.js +++ b/plugins/ExtendedProfile/js/profiledetail.js @@ -81,6 +81,10 @@ $(document).ready(function() { source: 'finduser', minLength: 2 }); + $.datepicker.formatDate('yy-mm-dd'); + + $("input[name$=-start], input[name$=-end], #extprofile-birthday").datepicker({ dateFormat: 'd M yy' }); + var multifields = ["phone-item", "experience-item", "education-item", "im-item"]; for (f in multifields) { From bda9d43c56c2282583bd3a870219a4bb7a128800 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Tue, 15 Mar 2011 23:51:28 -0700 Subject: [PATCH 079/146] Extended profile - add fancy JQuery UI confirm dialog when deleting items --- .../ExtendedProfile/extendedprofilewidget.php | 7 ++++ plugins/ExtendedProfile/js/profiledetail.js | 36 ++++++++++++++----- 2 files changed, 35 insertions(+), 8 deletions(-) diff --git a/plugins/ExtendedProfile/extendedprofilewidget.php b/plugins/ExtendedProfile/extendedprofilewidget.php index ebf4c0422c..5be149a0cb 100644 --- a/plugins/ExtendedProfile/extendedprofilewidget.php +++ b/plugins/ExtendedProfile/extendedprofilewidget.php @@ -77,6 +77,13 @@ class ExtendedProfileWidget extends Form */ public function formData() { + // For JQuery UI modal dialog + $this->out->elementStart( + 'div', + array('id' => 'confirm-dialog', 'title' => 'Confirmation Required') + ); + $this->out->text('Really delete this entry?'); + $this->out->elementEnd('div'); $this->showSections(); } diff --git a/plugins/ExtendedProfile/js/profiledetail.js b/plugins/ExtendedProfile/js/profiledetail.js index d24b4aabe8..fbcefe730d 100644 --- a/plugins/ExtendedProfile/js/profiledetail.js +++ b/plugins/ExtendedProfile/js/profiledetail.js @@ -44,7 +44,7 @@ SN_EXTENDED.replaceIndex = function(elem, oldIndex, newIndex) { } SN_EXTENDED.resetRow = function(elem) { - $(elem).find('input').attr('value', ''); + $(elem).find('input, textarea').attr('value', ''); $(elem).find("select option[value='office']").attr("selected", true); }; @@ -63,27 +63,47 @@ SN_EXTENDED.addRow = function() { }; SN_EXTENDED.removeRow = function() { + var div = $(this).closest('div'); var id = $(div).attr('id'); var cls = $(div).attr('class'); - var cnt = SN_EXTENDED.rowCount(cls); + + var that = this; + + $("#confirm-dialog").dialog({ + buttons : { + "Confirm" : function() { + var target = $(that).closest('tr'); + target.fadeOut("slow", function() { + $(that).remove(); + }); + SN_EXTENDED.reorder(cls); + $(this).dialog("close"); + }, + "Cancel" : function() { + $(this).dialog("close"); + } + } + }); + if (cnt > 1) { - var target = $(this).closest('tr'); - target.remove(); - SN_EXTENDED.reorder(cls); + $("#confirm-dialog").dialog("open"); } }; $(document).ready(function() { + $("#confirm-dialog").dialog({ + autoOpen: false, + modal: true + }); + $("input#extprofile-manager").autocomplete({ source: 'finduser', minLength: 2 }); - $.datepicker.formatDate('yy-mm-dd'); - - $("input[name$=-start], input[name$=-end], #extprofile-birthday").datepicker({ dateFormat: 'd M yy' }); + $("input[name$=-start], input[name$=-end], #extprofile-birthday").datepicker({ dateFormat: 'd M yy' }); var multifields = ["phone-item", "experience-item", "education-item", "im-item"]; From d51625ab3ddc26a8819c3eb0e1682b4767ca057f Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Tue, 15 Mar 2011 23:58:45 -0700 Subject: [PATCH 080/146] Extended profile - hide add button when not needed (regression) --- plugins/ExtendedProfile/js/profiledetail.js | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/ExtendedProfile/js/profiledetail.js b/plugins/ExtendedProfile/js/profiledetail.js index fbcefe730d..7960cee83f 100644 --- a/plugins/ExtendedProfile/js/profiledetail.js +++ b/plugins/ExtendedProfile/js/profiledetail.js @@ -5,6 +5,7 @@ SN_EXTENDED.reorder = function(cls) { var divs = $('div[class=' + cls + ']'); $(divs).each(function(i, div) { + $(div).find('a.add_row').hide(); $(div).find('a.remove_row').show(); SN_EXTENDED.replaceIndex(SN_EXTENDED.rowIndex(div), i); }); From 665dd1de78785e6a9176c5533f5a29bbc33166d5 Mon Sep 17 00:00:00 2001 From: Samantha Doherty Date: Wed, 16 Mar 2011 03:09:06 -0400 Subject: [PATCH 081/146] Remove supersizeme class as appropriate. --- plugins/ExtendedProfile/js/profiledetail.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/plugins/ExtendedProfile/js/profiledetail.js b/plugins/ExtendedProfile/js/profiledetail.js index 7960cee83f..24191d4ad9 100644 --- a/plugins/ExtendedProfile/js/profiledetail.js +++ b/plugins/ExtendedProfile/js/profiledetail.js @@ -55,9 +55,8 @@ SN_EXTENDED.addRow = function() { var cls = div.attr('class'); var index = id.match(/\d+/); var newIndex = parseInt(index) + 1; - var newtr = $(div).closest('tr').clone(); + var newtr = $(div).closest('tr').removeClass('supersizeme').clone(); SN_EXTENDED.replaceIndex(newtr, index, newIndex); - $(newtr).removeClass('supersizeme'); SN_EXTENDED.resetRow(newtr); $(div).closest('tr').after(newtr); SN_EXTENDED.reorder(cls); From a715b133ffcda328f4dbc67e9490ccedfe4c0f77 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Wed, 16 Mar 2011 00:23:34 -0700 Subject: [PATCH 082/146] Extended profile - fix regression whereby if there was only one item, you could still delete it! --- plugins/ExtendedProfile/js/profiledetail.js | 10 +++++----- .../ExtendedProfile/profiledetailsettingsaction.php | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/plugins/ExtendedProfile/js/profiledetail.js b/plugins/ExtendedProfile/js/profiledetail.js index 7960cee83f..f475046385 100644 --- a/plugins/ExtendedProfile/js/profiledetail.js +++ b/plugins/ExtendedProfile/js/profiledetail.js @@ -68,19 +68,17 @@ SN_EXTENDED.removeRow = function() { var div = $(this).closest('div'); var id = $(div).attr('id'); var cls = $(div).attr('class'); - var cnt = SN_EXTENDED.rowCount(cls); - var that = this; $("#confirm-dialog").dialog({ buttons : { "Confirm" : function() { + $(this).dialog("close"); var target = $(that).closest('tr'); target.fadeOut("slow", function() { - $(that).remove(); + $(target).remove(); + SN_EXTENDED.reorder(cls); }); - SN_EXTENDED.reorder(cls); - $(this).dialog("close"); }, "Cancel" : function() { $(this).dialog("close"); @@ -88,6 +86,8 @@ SN_EXTENDED.removeRow = function() { } }); + var cnt = SN_EXTENDED.rowCount(cls); + if (cnt > 1) { $("#confirm-dialog").dialog("open"); } diff --git a/plugins/ExtendedProfile/profiledetailsettingsaction.php b/plugins/ExtendedProfile/profiledetailsettingsaction.php index b0590f7316..01a8fa9c7b 100644 --- a/plugins/ExtendedProfile/profiledetailsettingsaction.php +++ b/plugins/ExtendedProfile/profiledetailsettingsaction.php @@ -60,7 +60,7 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction // CSRF protection $token = $this->trimmed('token'); if (!$token || $token != common_session_token()) { - $this->show_form( + $this->showForm( _m( 'There was a problem with your session token. ' . 'Try again, please.' From b80b9f31fc3c2941c38d1977a554ff777c7e3399 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Wed, 16 Mar 2011 00:25:02 -0700 Subject: [PATCH 083/146] Small smattering of pixie dust --- plugins/ExtendedProfile/js/profiledetail.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/ExtendedProfile/js/profiledetail.js b/plugins/ExtendedProfile/js/profiledetail.js index ecc89f8151..c96732b835 100644 --- a/plugins/ExtendedProfile/js/profiledetail.js +++ b/plugins/ExtendedProfile/js/profiledetail.js @@ -16,7 +16,7 @@ SN_EXTENDED.reorder = function(cls) { $(divs).last().find('a.add_row').show(); if (divs.length == 1) { - $(divs).find('a.remove_row').hide(); + $(divs).find('a.remove_row').fadeOut("slow"); } }; From 724dba668af45690a9122f49e24d89f8c3e6ede7 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Wed, 16 Mar 2011 00:34:00 -0700 Subject: [PATCH 084/146] Extended profile - allow adding more than one website --- plugins/ExtendedProfile/extendedprofilewidget.php | 2 +- plugins/ExtendedProfile/js/profiledetail.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/ExtendedProfile/extendedprofilewidget.php b/plugins/ExtendedProfile/extendedprofilewidget.php index 5be149a0cb..25a0ab8b20 100644 --- a/plugins/ExtendedProfile/extendedprofilewidget.php +++ b/plugins/ExtendedProfile/extendedprofilewidget.php @@ -267,7 +267,7 @@ class ExtendedProfileWidget extends Form $this->out->elementStart( 'div', array( 'id' => $id . '-edit', - 'class' => 'website-edit' + 'class' => 'website-item' ) ); $this->out->input( diff --git a/plugins/ExtendedProfile/js/profiledetail.js b/plugins/ExtendedProfile/js/profiledetail.js index c96732b835..e1b06562e0 100644 --- a/plugins/ExtendedProfile/js/profiledetail.js +++ b/plugins/ExtendedProfile/js/profiledetail.js @@ -105,7 +105,7 @@ $(document).ready(function() { $("input[name$=-start], input[name$=-end], #extprofile-birthday").datepicker({ dateFormat: 'd M yy' }); - var multifields = ["phone-item", "experience-item", "education-item", "im-item"]; + var multifields = ["phone-item", "experience-item", "education-item", "im-item", 'website-item']; for (f in multifields) { SN_EXTENDED.reorder(multifields[f]); From 974d0c48f6234a99b0d28f6c54033434cace877c Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Wed, 16 Mar 2011 00:50:43 -0700 Subject: [PATCH 085/146] Extended profile - don't check end date if experience entry has current checked --- plugins/ExtendedProfile/profiledetailsettingsaction.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/ExtendedProfile/profiledetailsettingsaction.php b/plugins/ExtendedProfile/profiledetailsettingsaction.php index 01a8fa9c7b..13bf43b927 100644 --- a/plugins/ExtendedProfile/profiledetailsettingsaction.php +++ b/plugins/ExtendedProfile/profiledetailsettingsaction.php @@ -288,7 +288,7 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction $expArray[] = array( 'company' => $company, 'start' => $this->parseDate('Start', $start, true), - 'end' => $this->parseDate('End', $end, true), + 'end' => ($current == 'false') ? $this->parseDate('End', $end, true) : null, 'current' => ($current == 'false') ? false : true ); } From bb087a965009fd93a5c02a9e10ab90adcc6b7963 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Wed, 16 Mar 2011 01:09:38 -0700 Subject: [PATCH 086/146] Extended profile - fix some issues saving and displaying dates --- plugins/ExtendedProfile/extendedprofile.php | 9 +++++++++ plugins/ExtendedProfile/extendedprofilewidget.php | 15 +++++++++------ .../profiledetailsettingsaction.php | 6 +++++- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/plugins/ExtendedProfile/extendedprofile.php b/plugins/ExtendedProfile/extendedprofile.php index 673680f027..fa632e5073 100644 --- a/plugins/ExtendedProfile/extendedprofile.php +++ b/plugins/ExtendedProfile/extendedprofile.php @@ -98,6 +98,15 @@ class ExtendedProfile } } + function getDateValue($name) { + $key = strtolower($name); + if (array_key_exists($key, $this->fields)) { + return $this->fields[$key][0]->date; + } else { + return null; + } + } + // XXX: getPhones, getIms, and getWebsites pretty much do the same thing, // so refactor. function getPhones() diff --git a/plugins/ExtendedProfile/extendedprofilewidget.php b/plugins/ExtendedProfile/extendedprofilewidget.php index 25a0ab8b20..622beff32f 100644 --- a/plugins/ExtendedProfile/extendedprofilewidget.php +++ b/plugins/ExtendedProfile/extendedprofilewidget.php @@ -493,11 +493,14 @@ class ExtendedProfileWidget extends Form $this->out->text($this->ext->getTextValue($name)); break; case 'date': - $this->out->element( - 'div', - array('class' => 'field date'), - date('j M Y', strtotime($this->ext->getTextValue($name))) - ); + $value = $this->ext->getDateValue($name); + if (!empty($value)) { + $this->out->element( + 'div', + array('class' => 'field date'), + date('j M Y', strtotime($value)) + ); + } break; case 'person': $this->out->text($this->ext->getTextValue($name)); @@ -549,7 +552,7 @@ class ExtendedProfileWidget extends Form $out->input( $id, null, - date('j M Y', strtotime($this->ext->getTextValue($name))) + date('j M Y', strtotime($this->ext->getDateValue($name))) ); break; case 'person': diff --git a/plugins/ExtendedProfile/profiledetailsettingsaction.php b/plugins/ExtendedProfile/profiledetailsettingsaction.php index 13bf43b927..719717e088 100644 --- a/plugins/ExtendedProfile/profiledetailsettingsaction.php +++ b/plugins/ExtendedProfile/profiledetailsettingsaction.php @@ -113,10 +113,14 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction foreach ($dateFieldNames as $name) { $value = $this->trimmed('extprofile-' . $name); + $dateVal = $this->parseDate($name, $value); $this->saveField( $user, $name, - $this->parseDate($name, $value) + null, + null, + null, + $dateVal ); } From 17afe068059f426db04c4b2bf85d31bf4e03953a Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Wed, 16 Mar 2011 01:23:47 -0700 Subject: [PATCH 087/146] Extended profile - linkify related URLs added by the user --- .../ExtendedProfile/extendedprofilewidget.php | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/plugins/ExtendedProfile/extendedprofilewidget.php b/plugins/ExtendedProfile/extendedprofilewidget.php index 622beff32f..d4a3f21a52 100644 --- a/plugins/ExtendedProfile/extendedprofilewidget.php +++ b/plugins/ExtendedProfile/extendedprofilewidget.php @@ -79,7 +79,7 @@ class ExtendedProfileWidget extends Form { // For JQuery UI modal dialog $this->out->elementStart( - 'div', + 'div', array('id' => 'confirm-dialog', 'title' => 'Confirmation Required') ); $this->out->text('Really delete this entry?'); @@ -180,7 +180,19 @@ class ExtendedProfileWidget extends Form protected function showWebsite($name, $field) { $this->out->elementStart('div', array('class' => 'website-display')); - $this->out->text($field['value']); + + $url = $field['value']; + + $this->out->element( + "a", + array( + 'href' => $url, + 'class' => 'extended-profile-link', + 'target' => "_blank" + ), + $url + ); + if (!empty($field['rel'])) { $this->out->text(' (' . $field['rel'] . ')'); } From 82023d388a5a060b2b10964bf0cace27fa0a1ae5 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Wed, 16 Mar 2011 01:26:53 -0700 Subject: [PATCH 088/146] Extended profile - don't show empty company entry in view --- .../ExtendedProfile/extendedprofilewidget.php | 39 ++++++++++--------- 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/plugins/ExtendedProfile/extendedprofilewidget.php b/plugins/ExtendedProfile/extendedprofilewidget.php index d4a3f21a52..fb519cfffc 100644 --- a/plugins/ExtendedProfile/extendedprofilewidget.php +++ b/plugins/ExtendedProfile/extendedprofilewidget.php @@ -313,29 +313,32 @@ class ExtendedProfileWidget extends Form { $this->out->elementStart('div', 'experience-item'); $this->out->element('div', 'label', _m('Company')); - $this->out->element('div', 'field', $field['company']); - $this->out->element('div', 'label', _m('Start')); - $this->out->element( - 'div', - array('class' => 'field date'), - date('j M Y', strtotime($field['start']) - ) - ); - $this->out->element('div', 'label', _m('End')); - $this->out->element( - 'div', - array('class' => 'field date'), - date('j M Y', strtotime($field['end']) - ) - ); + if (!empty($field['company'])) { + $this->out->element('div', 'field', $field['company']); - if ($field['current']) { + $this->out->element('div', 'label', _m('Start')); $this->out->element( 'div', - array('class' => 'field current'), - '(' . _m('Current') . ')' + array('class' => 'field date'), + date('j M Y', strtotime($field['start']) + ) ); + $this->out->element('div', 'label', _m('End')); + $this->out->element( + 'div', + array('class' => 'field date'), + date('j M Y', strtotime($field['end']) + ) + ); + + if ($field['current']) { + $this->out->element( + 'div', + array('class' => 'field current'), + '(' . _m('Current') . ')' + ); + } } $this->out->elementEnd('div'); } From 365b7ab56ea70f6fa70ab46358cd794c7892683b Mon Sep 17 00:00:00 2001 From: Samantha Doherty Date: Wed, 16 Mar 2011 04:32:33 -0400 Subject: [PATCH 089/146] More style for profile edit. --- plugins/ExtendedProfile/css/profiledetail.css | 28 +++++++++++++++++-- .../ExtendedProfile/extendedprofilewidget.php | 2 +- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/plugins/ExtendedProfile/css/profiledetail.css b/plugins/ExtendedProfile/css/profiledetail.css index e0650d40a1..3af9bcba4a 100644 --- a/plugins/ExtendedProfile/css/profiledetail.css +++ b/plugins/ExtendedProfile/css/profiledetail.css @@ -69,6 +69,22 @@ display: none; } +.extended-profile textarea { + width: 280px; +} + +.extended-profile input[type=text] { + width: 280px; +} + +.extended-profile .phone-item input[type=text], .extended-profile .im-item input[type=text], .extended-profile .website-item input[type=text] { + width: 175px; +} + +.extended-profile input.hasDatepicker { + width: 100px; +} + .experience-item input[type=text], .education-item input[type=text] { float: left; } @@ -101,7 +117,6 @@ display: block; height: 16px; width: 16px; - line-height: 4em; overflow: hidden; background-image: url('../../../theme/rebase/images/icons/icons-01.gif'); background-repeat: no-repeat; @@ -112,14 +127,18 @@ float: right; position: relative; top: 6px; + line-height: 4em; } .extended-profile a.add_row { clear: both; position: relative; top: 6px; - left: 2px; + left: 2px; background-position: 0px -1186px; + width: 120px; + padding-left: 20px; + line-height: 1.2em; } #content table.extended-profile .supersizeme th { @@ -131,6 +150,11 @@ width: 100%; } +#profiledetailsettings .education-item textarea { + float: left; + margin-bottom: 8px; +} + #profiledetailsettings tr:last-child .experience-item, #profiledetailsettings tr:last-child .education-item { margin-bottom: 0px; } diff --git a/plugins/ExtendedProfile/extendedprofilewidget.php b/plugins/ExtendedProfile/extendedprofilewidget.php index fb519cfffc..7f62d3eae4 100644 --- a/plugins/ExtendedProfile/extendedprofilewidget.php +++ b/plugins/ExtendedProfile/extendedprofilewidget.php @@ -486,7 +486,7 @@ class ExtendedProfileWidget extends Form 'href' => 'javascript://', 'style' => 'display: none;' ), - '+' + 'Add another item' ); } From 368cfd8facac4e69a00b1d6c0e7eb43299e61cf4 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Wed, 16 Mar 2011 02:41:32 -0700 Subject: [PATCH 090/146] * Extended profile - make cloned datefields work correctly with calendar popup * Validate URLs --- .../ExtendedProfile/extendedprofilewidget.php | 1 + plugins/ExtendedProfile/js/profiledetail.js | 23 +++++++++++++++++++ .../profiledetailsettingsaction.php | 15 +++++++++++- 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/plugins/ExtendedProfile/extendedprofilewidget.php b/plugins/ExtendedProfile/extendedprofilewidget.php index 7f62d3eae4..1ef6440ed6 100644 --- a/plugins/ExtendedProfile/extendedprofilewidget.php +++ b/plugins/ExtendedProfile/extendedprofilewidget.php @@ -369,6 +369,7 @@ class ExtendedProfileWidget extends Form ); $this->out->element('div', 'label', _m('End')); + $this->out->input( $id . '-end', null, diff --git a/plugins/ExtendedProfile/js/profiledetail.js b/plugins/ExtendedProfile/js/profiledetail.js index e1b06562e0..99a3f78a43 100644 --- a/plugins/ExtendedProfile/js/profiledetail.js +++ b/plugins/ExtendedProfile/js/profiledetail.js @@ -46,7 +46,13 @@ SN_EXTENDED.replaceIndex = function(elem, oldIndex, newIndex) { SN_EXTENDED.resetRow = function(elem) { $(elem).find('input, textarea').attr('value', ''); + $(elem).find('input').removeAttr('disabled'); $(elem).find("select option[value='office']").attr("selected", true); + $(elem).find("input:checkbox").attr('checked', false); + $(elem).find("input[name$=-start], input[name$=-end]").each(function() { + $(this).removeClass('hasDatepicker'); + $(this).datepicker({ dateFormat: 'd M yy' }); + }); }; SN_EXTENDED.addRow = function() { @@ -118,4 +124,21 @@ $(document).ready(function() { $('.add_row').live('click', SN_EXTENDED.addRow); $('.remove_row').live('click', SN_EXTENDED.removeRow); + $('input:checkbox[name$=current]').each(function() { + var input = $(this).parent().siblings('input[id$=-end]'); + if ($(this).is(':checked')) { + $(input).attr('disabled', 'true'); + } + }); + + $('input:checkbox[name$=current]').live('click', function() { + var input = $(this).parent().siblings('input[id$=-end]'); + if ($(this).is(':checked')) { + $(input).val(''); + $(input).attr('disabled', 'true'); + } else { + $(input).removeAttr('disabled'); + } + }); + }); diff --git a/plugins/ExtendedProfile/profiledetailsettingsaction.php b/plugins/ExtendedProfile/profiledetailsettingsaction.php index 719717e088..7b03f247ed 100644 --- a/plugins/ExtendedProfile/profiledetailsettingsaction.php +++ b/plugins/ExtendedProfile/profiledetailsettingsaction.php @@ -262,6 +262,14 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction $this->removeAll($user, 'website'); $i = 0; foreach($sites as $site) { + + if (!Validate::uri( + $site['value'], + array('allowed_schemes' => array('http', 'https'))) + ) { + throw new Exception(sprintf(_m('Invalid URL: %s'), $site['value'])); + } + if (!empty($site['value'])) { ++$i; $this->saveField( @@ -287,7 +295,12 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction $expArray = array(); foreach ($experiences as $exp) { - list($company, $current, $end, $start) = array_values($exp); + if (sizeof($experiences) == 4) { + list($company, $current, $end, $start) = array_values($exp); + } else { + $end = null; + list($company, $current, $start) = array_values($exp); + } if (!empty($company)) { $expArray[] = array( 'company' => $company, From afa1aa6c9b129b292b46c94936498196a4785cca Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Wed, 16 Mar 2011 09:53:27 -0400 Subject: [PATCH 091/146] Revert "use jquery-ui for input_forms tabset" This reverts commit c4bada902296ec8d77c232a0a638b0dd60aa1bd0. --- js/util.js | 16 ++++++++++++++++ lib/action.php | 7 +++---- theme/rebase/css/display.css | 12 ++++++++++++ 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/js/util.js b/js/util.js index 67e28485e4..cc95a08bf5 100644 --- a/js/util.js +++ b/js/util.js @@ -1276,6 +1276,22 @@ var SN = { // StatusNet return false; }, + + /** + * Switch to another active input sub-form. + * This will hide the current form (if any), show the new one, and + * update the input type tab selection state. + * + * @param {String} tag + */ + switchInputFormTab: function(tag) { + // The one that's current isn't current anymore + $('.input_form_nav_tab.current').removeClass('current'); + $('#input_form_nav_'+tag).addClass('current'); + + $('.input_form.current').removeClass('current'); + $('#input_form_'+tag).addClass('current'); + } }, Init: { diff --git a/lib/action.php b/lib/action.php index 686b512a2c..7614f4be3a 100644 --- a/lib/action.php +++ b/lib/action.php @@ -315,7 +315,6 @@ class Action extends HTMLOutputter // lawsuit $this->showScriptMessages(); // Frame-busting code to avoid clickjacking attacks. $this->inlineScript('if (window.top !== window.self) { window.top.location.href = window.self.location.href; }'); - $this->inlineScript('$(document).ready(function(){ $(\'#input_forms\').tabs(); });'); Event::handle('EndShowStatusNetScripts', array($this)); Event::handle('EndShowLaconicaScripts', array($this)); } @@ -593,7 +592,7 @@ class Action extends HTMLOutputter // lawsuit { $tabs = array('status' => _('Status')); - $this->elementStart('div', array('id' => 'input_forms')); + $this->elementStart('div', 'input_forms'); if (Event::handle('StartShowEntryForms', array(&$tabs))) { @@ -612,7 +611,7 @@ class Action extends HTMLOutputter // lawsuit $this->elementStart('li', $attrs); $this->element('a', - array('href' => '#input_forms-'.$tag), + array('href' => 'javascript:SN.U.switchInputFormTab("'.$tag.'")'), $title); $this->elementEnd('li'); } @@ -622,7 +621,7 @@ class Action extends HTMLOutputter // lawsuit foreach ($tabs as $tag => $title) { $attrs = array('class' => 'input_form', - 'id' => 'input_forms-'.$tag); + 'id' => 'input_form_'.$tag); if ($tag == 'status') { $attrs['class'] .= ' current'; diff --git a/theme/rebase/css/display.css b/theme/rebase/css/display.css index f7a9486f24..c1ac1e8f4d 100644 --- a/theme/rebase/css/display.css +++ b/theme/rebase/css/display.css @@ -1962,6 +1962,18 @@ margin-bottom:18px; padding-left:20px; } +#input_form_nav { + list-style-type: none; +} + +#input_form_nav li { + display:inline; +} + +.input_form_nav_tab.current { + text-decoration: underline; +} + .input_form { display: none; } From a72dbc1aff774446c0c31bb219d748484453b59e Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 14 Mar 2011 10:58:19 -0500 Subject: [PATCH 092/146] add a profile block to left column --- lib/action.php | 16 ++++++ lib/defaultprofileblock.php | 112 ++++++++++++++++++++++++++++++++++++ lib/profileblock.php | 109 +++++++++++++++++++++++++++++++++++ 3 files changed, 237 insertions(+) create mode 100644 lib/defaultprofileblock.php create mode 100644 lib/profileblock.php diff --git a/lib/action.php b/lib/action.php index 12464c2c68..aa85c40f22 100644 --- a/lib/action.php +++ b/lib/action.php @@ -716,10 +716,26 @@ class Action extends HTMLOutputter // lawsuit // Need to have this ID for CSS; I'm too lazy to add it to // all menus $this->elementStart('div', array('id' => 'site_nav_local_views')); + // Cheat cheat cheat! + $this->showProfileBlock(); $this->showLocalNav(); $this->elementEnd('div'); } + /** + * If there's a logged-in user, show a bit of login context + * + * @return nothing + */ + + function showProfileBlock() + { + if (common_logged_in()) { + $block = new DefaultProfileBlock($this); + $block->show(); + } + } + /** * Show local navigation. * diff --git a/lib/defaultprofileblock.php b/lib/defaultprofileblock.php new file mode 100644 index 0000000000..a072b56f16 --- /dev/null +++ b/lib/defaultprofileblock.php @@ -0,0 +1,112 @@ +. + * + * @category Widget + * @package StatusNet + * @author Evan Prodromou + * @copyright 2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + // This check helps protect against security problems; + // your code file can't be executed directly from the web. + exit(1); +} + +/** + * Default profile block + * + * @category Widget + * @package StatusNet + * @author Evan Prodromou + * @copyright 2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + +class DefaultProfileBlock extends ProfileBlock +{ + protected $profile = null; + + function __construct($out) + { + parent::__construct($out); + $user = common_current_user(); + if (empty($user)) { + throw new Exception("DefaultProfileBlock with no user."); + } + $this->profile = $user->getProfile(); + } + + function avatar() + { + $avatar = $this->profile->getAvatar(AVATAR_PROFILE_SIZE); + if (empty($avatar)) { + $avatar = $this->profile->getAvatar(73); + } + return (!empty($avatar)) ? + $avatar->displayUrl() : + Avatar::defaultImage(AVATAR_PROFILE_SIZE); + } + + function name() + { + return $this->profile->getBestName(); + } + + function url() + { + return $this->profile->profileurl; + } + + function canEdit() + { + return true; + } + + function editUrl() + { + return common_local_url('profilesettings'); + } + + function editText() + { + return _('Edit'); + } + + function location() + { + return $this->profile->location; + } + + function homepage() + { + return $this->profile->homepage; + } + + function description() + { + return $this->profile->bio; + } +} \ No newline at end of file diff --git a/lib/profileblock.php b/lib/profileblock.php new file mode 100644 index 0000000000..3e8e929821 --- /dev/null +++ b/lib/profileblock.php @@ -0,0 +1,109 @@ +. + * + * @category Widget + * @package StatusNet + * @author Evan Prodromou + * @copyright 2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + // This check helps protect against security problems; + // your code file can't be executed directly from the web. + exit(1); +} + +/** + * Class comment + * + * @category General + * @package StatusNet + * @author Evan Prodromou + * @copyright 2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + +abstract class ProfileBlock extends Widget +{ + abstract function avatar(); + abstract function name(); + abstract function url(); + abstract function canEdit(); + abstract function editUrl(); + abstract function editText(); + abstract function location(); + abstract function homepage(); + abstract function description(); + + function show() + { + $this->out->elementStart('div', 'profile_block'); + + $this->out->element('img', array('src' => $this->avatar(), + 'class' => 'profile_block_avatar', + 'alt' => $this->name(), + 'width' => AVATAR_PROFILE_SIZE, + 'height' => AVATAR_PROFILE_SIZE)); + + if ($this->canEdit()) { + $this->out->element('a', array('href' => $this->editUrl()), + $this->editText()); + } + + $name = $this->name(); + + if (!empty($name)) { + $url = $this->url(); + if (!empty($url)) { + $this->out->element('a', array('href' => $url), + $name); + } else { + $this->out->element('span', 'profile_block_name', $name); + } + } + + $location = $this->location(); + + if (!empty($location)) { + $this->out->element('span', 'profile_block_location', $location); + } + + $homepage = $this->homepage(); + + if (!empty($homepage)) { + $this->out->element('a', 'profile_block_homepage', $homepage); + } + + $description = $this->description(); + + if (!empty($description)) { + $this->out->element('p', + 'profile_block_description', + $description); + } + + $this->out->elementEnd('div'); + } +} From d0317d96e18c21f1ae38e95bfa66a03328ded0ed Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 14 Mar 2011 11:00:07 -0500 Subject: [PATCH 093/146] hide profile block on settings and admin panels --- lib/adminpanelaction.php | 4 ++++ lib/settingsaction.php | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/lib/adminpanelaction.php b/lib/adminpanelaction.php index a085fcd5dc..5e7e284b5c 100644 --- a/lib/adminpanelaction.php +++ b/lib/adminpanelaction.php @@ -290,4 +290,8 @@ class AdminPanelAction extends Action return $isOK; } + + function showProfileBlock() + { + } } diff --git a/lib/settingsaction.php b/lib/settingsaction.php index dc60137ab4..c7113d15c2 100644 --- a/lib/settingsaction.php +++ b/lib/settingsaction.php @@ -174,4 +174,8 @@ class SettingsAction extends CurrentUserDesignAction { return; } + + function showProfileBlock() + { + } } From e5133f8150910fa30a7f1f122be34a37478e938d Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 14 Mar 2011 11:04:51 -0500 Subject: [PATCH 094/146] add accountprofileblock and make defaultprofileblock use it --- lib/accountprofileblock.php | 109 ++++++++++++++++++++++++++++++++++++ lib/defaultprofileblock.php | 44 ++------------- 2 files changed, 114 insertions(+), 39 deletions(-) create mode 100644 lib/accountprofileblock.php diff --git a/lib/accountprofileblock.php b/lib/accountprofileblock.php new file mode 100644 index 0000000000..61aff13d41 --- /dev/null +++ b/lib/accountprofileblock.php @@ -0,0 +1,109 @@ +. + * + * @category Widget + * @package StatusNet + * @author Evan Prodromou + * @copyright 2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + // This check helps protect against security problems; + // your code file can't be executed directly from the web. + exit(1); +} + +/** + * Profile block to show for an account + * + * @category Widget + * @package StatusNet + * @author Evan Prodromou + * @copyright 2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + +class AccountProfileBlock extends ProfileBlock +{ + protected $profile = null; + + function __construct($out, $profile) + { + parent::__construct($out); + $this->profile = $profile; + } + + function avatar() + { + $avatar = $this->profile->getAvatar(AVATAR_PROFILE_SIZE); + if (empty($avatar)) { + $avatar = $this->profile->getAvatar(73); + } + return (!empty($avatar)) ? + $avatar->displayUrl() : + Avatar::defaultImage(AVATAR_PROFILE_SIZE); + } + + function name() + { + return $this->profile->getBestName(); + } + + function url() + { + return $this->profile->profileurl; + } + + function canEdit() + { + $user = common_current_user(); + return ((!empty($user)) && ($user->id == $profile->id)); + } + + function editUrl() + { + return common_local_url('profilesettings'); + } + + function editText() + { + return _('Edit'); + } + + function location() + { + return $this->profile->location; + } + + function homepage() + { + return $this->profile->homepage; + } + + function description() + { + return $this->profile->bio; + } +} \ No newline at end of file diff --git a/lib/defaultprofileblock.php b/lib/defaultprofileblock.php index a072b56f16..18a32a0951 100644 --- a/lib/defaultprofileblock.php +++ b/lib/defaultprofileblock.php @@ -45,39 +45,15 @@ if (!defined('STATUSNET')) { * @link http://status.net/ */ -class DefaultProfileBlock extends ProfileBlock +class DefaultProfileBlock extends AccountProfileBlock { - protected $profile = null; - function __construct($out) { - parent::__construct($out); $user = common_current_user(); if (empty($user)) { throw new Exception("DefaultProfileBlock with no user."); } - $this->profile = $user->getProfile(); - } - - function avatar() - { - $avatar = $this->profile->getAvatar(AVATAR_PROFILE_SIZE); - if (empty($avatar)) { - $avatar = $this->profile->getAvatar(73); - } - return (!empty($avatar)) ? - $avatar->displayUrl() : - Avatar::defaultImage(AVATAR_PROFILE_SIZE); - } - - function name() - { - return $this->profile->getBestName(); - } - - function url() - { - return $this->profile->profileurl; + parent::__construct($out, $user->getProfile()); } function canEdit() @@ -85,28 +61,18 @@ class DefaultProfileBlock extends ProfileBlock return true; } - function editUrl() - { - return common_local_url('profilesettings'); - } - - function editText() - { - return _('Edit'); - } - function location() { - return $this->profile->location; + return null; } function homepage() { - return $this->profile->homepage; + return null; } function description() { - return $this->profile->bio; + return null; } } \ No newline at end of file From 561458650f746c548097adcd9f470cc2486b0191 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 14 Mar 2011 11:10:07 -0500 Subject: [PATCH 095/146] profile group uses account profile block --- actions/showstream.php | 6 ++++++ actions/usergroups.php | 6 ++++++ lib/galleryaction.php | 6 ++++++ 3 files changed, 18 insertions(+) diff --git a/actions/showstream.php b/actions/showstream.php index afde49ecea..25aa670e4f 100644 --- a/actions/showstream.php +++ b/actions/showstream.php @@ -110,6 +110,12 @@ class ShowstreamAction extends ProfileAction $nav->show(); } + function showProfileBlock() + { + $block = new AccountProfileBlock($this, $this->profile); + $block->show(); + } + function showPageNoticeBlock() { return; diff --git a/actions/usergroups.php b/actions/usergroups.php index cf904bc929..b0514bec4b 100644 --- a/actions/usergroups.php +++ b/actions/usergroups.php @@ -168,4 +168,10 @@ class UsergroupsAction extends OwnerDesignAction $this->raw(common_markup_to_html($message)); $this->elementEnd('div'); } + + function showProfileBlock() + { + $block = new AccountProfileBlock($this, $this->profile); + $block->show(); + } } diff --git a/lib/galleryaction.php b/lib/galleryaction.php index 107134a09b..3db46dd09c 100644 --- a/lib/galleryaction.php +++ b/lib/galleryaction.php @@ -168,4 +168,10 @@ class GalleryAction extends OwnerDesignAction { return array(); } + + function showProfileBlock() + { + $block = new AccountProfileBlock($this, $this->profile); + $block->show(); + } } From 66b505a341c3f2b2fc842355bb55bdadd9cbff23 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 14 Mar 2011 11:29:06 -0500 Subject: [PATCH 096/146] show group profile block for group pages --- lib/groupdesignaction.php | 6 +++ lib/groupprofileblock.php | 104 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 110 insertions(+) create mode 100644 lib/groupprofileblock.php diff --git a/lib/groupdesignaction.php b/lib/groupdesignaction.php index 3eb3964e87..44f35f6299 100644 --- a/lib/groupdesignaction.php +++ b/lib/groupdesignaction.php @@ -68,4 +68,10 @@ class GroupDesignAction extends Action { } return parent::getDesign(); } + + function showProfileBlock() + { + $block = new GroupProfileBlock($this, $this->group); + $block->show(); + } } diff --git a/lib/groupprofileblock.php b/lib/groupprofileblock.php new file mode 100644 index 0000000000..f54f82e9e5 --- /dev/null +++ b/lib/groupprofileblock.php @@ -0,0 +1,104 @@ +. + * + * @category Widget + * @package StatusNet + * @author Evan Prodromou + * @copyright 2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + // This check helps protect against security problems; + // your code file can't be executed directly from the web. + exit(1); +} + +/** + * Profile block to show for a group + * + * @category Widget + * @package StatusNet + * @author Evan Prodromou + * @copyright 2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + +class GroupProfileBlock extends ProfileBlock +{ + protected $group = null; + + function __construct($out, $group) + { + parent::__construct($out); + $this->group = $group; + } + + function avatar() + { + return ($this->group->homepage_logo) ? + $this->group->homepage_logo : User_group::defaultLogo(AVATAR_PROFILE_SIZE); + } + + function name() + { + return $this->group->getBestName(); + } + + function url() + { + return $this->group->mainpage; + } + + function canEdit() + { + $user = common_current_user(); + return ((!empty($user)) && ($user->isAdmin($this->group))); + } + + function editUrl() + { + return common_local_url('editgroup', array('nickname' => $this->group->nickname)); + } + + function editText() + { + return _('Edit'); + } + + function location() + { + return $this->group->location; + } + + function homepage() + { + return $this->group->homepage; + } + + function description() + { + return $this->group->description; + } +} \ No newline at end of file From f23184a8d6778b8aecfb5dca2c8de9dfb850bf15 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 14 Mar 2011 11:34:59 -0500 Subject: [PATCH 097/146] add newline to group profile block --- lib/groupprofileblock.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/groupprofileblock.php b/lib/groupprofileblock.php index f54f82e9e5..8d2686085f 100644 --- a/lib/groupprofileblock.php +++ b/lib/groupprofileblock.php @@ -101,4 +101,4 @@ class GroupProfileBlock extends ProfileBlock { return $this->group->description; } -} \ No newline at end of file +} From f242cf0e58bc169c51dac6a6486df01b436add23 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 14 Mar 2011 15:18:03 -0500 Subject: [PATCH 098/146] move profile block to the aside --- lib/action.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/action.php b/lib/action.php index aa85c40f22..51d7e8923e 100644 --- a/lib/action.php +++ b/lib/action.php @@ -717,7 +717,6 @@ class Action extends HTMLOutputter // lawsuit // all menus $this->elementStart('div', array('id' => 'site_nav_local_views')); // Cheat cheat cheat! - $this->showProfileBlock(); $this->showLocalNav(); $this->elementEnd('div'); } @@ -879,6 +878,7 @@ class Action extends HTMLOutputter // lawsuit { $this->elementStart('div', array('id' => 'aside_primary', 'class' => 'aside')); + $this->showProfileBlock(); if (Event::handle('StartShowObjectNavBlock', array($this))) { $this->showObjectNavBlock(); Event::handle('EndShowObjectNavBlock', array($this)); From fbc11b72d7e2f51033f4d331fdfdeb6ebfbe7437 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 14 Mar 2011 15:19:37 -0500 Subject: [PATCH 099/146] Allow profileblock subclasses to show different sized avatars --- lib/profileblock.php | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/profileblock.php b/lib/profileblock.php index 3e8e929821..26d38ee349 100644 --- a/lib/profileblock.php +++ b/lib/profileblock.php @@ -61,11 +61,13 @@ abstract class ProfileBlock extends Widget { $this->out->elementStart('div', 'profile_block'); + $size = $this->avatarSize(); + $this->out->element('img', array('src' => $this->avatar(), 'class' => 'profile_block_avatar', 'alt' => $this->name(), - 'width' => AVATAR_PROFILE_SIZE, - 'height' => AVATAR_PROFILE_SIZE)); + 'width' => $size, + 'height' => $size)); if ($this->canEdit()) { $this->out->element('a', array('href' => $this->editUrl()), @@ -106,4 +108,10 @@ abstract class ProfileBlock extends Widget $this->out->elementEnd('div'); } + + function avatarSize() + { + return AVATAR_PROFILE_SIZE; + } + } From a661b22fada7a3b698b570d6bc1d1103b361a574 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 14 Mar 2011 15:19:56 -0500 Subject: [PATCH 100/146] use stream-sized avatar for default profileblock --- lib/defaultprofileblock.php | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/lib/defaultprofileblock.php b/lib/defaultprofileblock.php index 18a32a0951..18eff49432 100644 --- a/lib/defaultprofileblock.php +++ b/lib/defaultprofileblock.php @@ -56,6 +56,22 @@ class DefaultProfileBlock extends AccountProfileBlock parent::__construct($out, $user->getProfile()); } + function avatarSize() + { + return AVATAR_STREAM_SIZE; + } + + function avatar() + { + $avatar = $this->profile->getAvatar(AVATAR_STREAM_SIZE); + if (empty($avatar)) { + $avatar = $this->profile->getAvatar(73); + } + return (!empty($avatar)) ? + $avatar->displayUrl() : + Avatar::defaultImage(AVATAR_STREAM_SIZE); + } + function canEdit() { return true; From 051e374792ae24467632282c7c0c30279f6dc9c0 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 14 Mar 2011 16:39:14 -0400 Subject: [PATCH 101/146] profile block can have actions --- lib/profileblock.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/profileblock.php b/lib/profileblock.php index 26d38ee349..7fcc11ef1a 100644 --- a/lib/profileblock.php +++ b/lib/profileblock.php @@ -106,6 +106,8 @@ abstract class ProfileBlock extends Widget $description); } + $this->showActions(); + $this->out->elementEnd('div'); } @@ -114,4 +116,7 @@ abstract class ProfileBlock extends Widget return AVATAR_PROFILE_SIZE; } + function showActions() + { + } } From 3d68474e1449621da879776c7f5467fdc16fb954 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 14 Mar 2011 16:39:45 -0400 Subject: [PATCH 102/146] move UserProfile actions to account profile block --- lib/accountprofileblock.php | 196 ++++++++++++++++++++++++++++++++++++ 1 file changed, 196 insertions(+) diff --git a/lib/accountprofileblock.php b/lib/accountprofileblock.php index 61aff13d41..e75527b288 100644 --- a/lib/accountprofileblock.php +++ b/lib/accountprofileblock.php @@ -48,11 +48,13 @@ if (!defined('STATUSNET')) { class AccountProfileBlock extends ProfileBlock { protected $profile = null; + protected $user = null; function __construct($out, $profile) { parent::__construct($out); $this->profile = $profile; + $this->user = User::staticGet('id', $profile->id); } function avatar() @@ -106,4 +108,198 @@ class AccountProfileBlock extends ProfileBlock { return $this->profile->bio; } + + function showActions() + { + if ($this->profile->hasRole(Profile_role::DELETED)) { + $this->out->elementStart('div', 'entity_actions'); + // TRANS: H2 for user actions in a profile. + $this->out->element('h2', null, _('User actions')); + $this->out->elementStart('ul'); + $this->out->elementStart('p', array('class' => 'profile_deleted')); + // TRANS: Text shown in user profile of not yet compeltely deleted users. + $this->out->text(_('User deletion in progress...')); + $this->out->elementEnd('p'); + $this->out->elementEnd('ul'); + $this->out->elementEnd('div'); + return; + } + if (Event::handle('StartProfilePageActionsSection', array($this->out, $this->profile))) { + + $cur = common_current_user(); + + $this->out->elementStart('div', 'entity_actions'); + // TRANS: H2 for entity actions in a profile. + $this->out->element('h2', null, _('User actions')); + $this->out->elementStart('ul'); + + if (Event::handle('StartProfilePageActionsElements', array($this->out, $this->profile))) { + if (empty($cur)) { // not logged in + if (Event::handle('StartProfileRemoteSubscribe', array($this->out, $this->profile))) { + $this->out->elementStart('li', 'entity_subscribe'); + $this->showRemoteSubscribeLink(); + $this->out->elementEnd('li'); + Event::handle('EndProfileRemoteSubscribe', array($this->out, $this->profile)); + } + } else { + if ($cur->id == $this->profile->id) { // your own page + $this->out->elementStart('li', 'entity_edit'); + $this->out->element('a', array('href' => common_local_url('profilesettings'), + // TRANS: Link title for link on user profile. + 'title' => _('Edit profile settings')), + // TRANS: Link text for link on user profile. + _('Edit')); + $this->out->elementEnd('li'); + } else { // someone else's page + + // subscribe/unsubscribe button + + $this->out->elementStart('li', 'entity_subscribe'); + + if ($cur->isSubscribed($this->profile)) { + $usf = new UnsubscribeForm($this->out, $this->profile); + $usf->show(); + } else { + $sf = new SubscribeForm($this->out, $this->profile); + $sf->show(); + } + $this->out->elementEnd('li'); + + if ($cur->mutuallySubscribed($this->profile)) { + + // message + + $this->out->elementStart('li', 'entity_send-a-message'); + $this->out->element('a', array('href' => common_local_url('newmessage', array('to' => $this->user->id)), + // TRANS: Link title for link on user profile. + 'title' => _('Send a direct message to this user')), + // TRANS: Link text for link on user profile. + _('Message')); + $this->out->elementEnd('li'); + + // nudge + + if ($this->user && $this->user->email && $this->user->emailnotifynudge) { + $this->out->elementStart('li', 'entity_nudge'); + $nf = new NudgeForm($this->out, $this->user); + $nf->show(); + $this->out->elementEnd('li'); + } + } + + // return-to args, so we don't have to keep re-writing them + + list($action, $r2args) = $this->out->returnToArgs(); + + // push the action into the list + + $r2args['action'] = $action; + + // block/unblock + + $blocked = $cur->hasBlocked($this->profile); + $this->out->elementStart('li', 'entity_block'); + if ($blocked) { + $ubf = new UnblockForm($this->out, $this->profile, $r2args); + $ubf->show(); + } else { + $bf = new BlockForm($this->out, $this->profile, $r2args); + $bf->show(); + } + $this->out->elementEnd('li'); + + // Some actions won't be applicable to non-local users. + $isLocal = !empty($this->user); + + if ($cur->hasRight(Right::SANDBOXUSER) || + $cur->hasRight(Right::SILENCEUSER) || + $cur->hasRight(Right::DELETEUSER)) { + $this->out->elementStart('li', 'entity_moderation'); + // TRANS: Label text on user profile to select a user role. + $this->out->element('p', null, _('Moderate')); + $this->out->elementStart('ul'); + if ($cur->hasRight(Right::SANDBOXUSER)) { + $this->out->elementStart('li', 'entity_sandbox'); + if ($this->profile->isSandboxed()) { + $usf = new UnSandboxForm($this->out, $this->profile, $r2args); + $usf->show(); + } else { + $sf = new SandboxForm($this->out, $this->profile, $r2args); + $sf->show(); + } + $this->out->elementEnd('li'); + } + + if ($cur->hasRight(Right::SILENCEUSER)) { + $this->out->elementStart('li', 'entity_silence'); + if ($this->profile->isSilenced()) { + $usf = new UnSilenceForm($this->out, $this->profile, $r2args); + $usf->show(); + } else { + $sf = new SilenceForm($this->out, $this->profile, $r2args); + $sf->show(); + } + $this->out->elementEnd('li'); + } + + if ($isLocal && $cur->hasRight(Right::DELETEUSER)) { + $this->out->elementStart('li', 'entity_delete'); + $df = new DeleteUserForm($this->out, $this->profile, $r2args); + $df->show(); + $this->out->elementEnd('li'); + } + $this->out->elementEnd('ul'); + $this->out->elementEnd('li'); + } + + if ($isLocal && $cur->hasRight(Right::GRANTROLE)) { + $this->out->elementStart('li', 'entity_role'); + // TRANS: Label text on user profile to select a user role. + $this->out->element('p', null, _('User role')); + $this->out->elementStart('ul'); + // TRANS: Role that can be set for a user profile. + $this->roleButton('administrator', _m('role', 'Administrator')); + // TRANS: Role that can be set for a user profile. + $this->roleButton('moderator', _m('role', 'Moderator')); + $this->out->elementEnd('ul'); + $this->out->elementEnd('li'); + } + } + } + + Event::handle('EndProfilePageActionsElements', array($this->out, $this->profile)); + } + + $this->out->elementEnd('ul'); + $this->out->elementEnd('div'); + + Event::handle('EndProfilePageActionsSection', array($this->out, $this->profile)); + } + } + + function roleButton($role, $label) + { + list($action, $r2args) = $this->out->returnToArgs(); + $r2args['action'] = $action; + + $this->out->elementStart('li', "entity_role_$role"); + if ($this->profile->hasRole($role)) { + $rf = new RevokeRoleForm($role, $label, $this->out, $this->profile, $r2args); + $rf->show(); + } else { + $rf = new GrantRoleForm($role, $label, $this->out, $this->profile, $r2args); + $rf->show(); + } + $this->out->elementEnd('li'); + } + + function showRemoteSubscribeLink() + { + $url = common_local_url('remotesubscribe', + array('nickname' => $this->profile->nickname)); + $this->out->element('a', array('href' => $url, + 'class' => 'entity_remote_subscribe'), + // TRANS: Link text for link that will subscribe to a remote profile. + _('Subscribe')); + } } \ No newline at end of file From 2d4554ea038d94862d164441d549a42473f00b2c Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 14 Mar 2011 16:40:56 -0400 Subject: [PATCH 103/146] Remove UserProfile class --- actions/showstream.php | 8 - lib/userprofile.php | 408 ----------------------------------------- 2 files changed, 416 deletions(-) delete mode 100644 lib/userprofile.php diff --git a/actions/showstream.php b/actions/showstream.php index 25aa670e4f..08f8a3e80e 100644 --- a/actions/showstream.php +++ b/actions/showstream.php @@ -33,7 +33,6 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { } require_once INSTALLDIR.'/lib/personalgroupnav.php'; -require_once INSTALLDIR.'/lib/userprofile.php'; require_once INSTALLDIR.'/lib/noticelist.php'; require_once INSTALLDIR.'/lib/profileminilist.php'; require_once INSTALLDIR.'/lib/groupminilist.php'; @@ -100,7 +99,6 @@ class ShowstreamAction extends ProfileAction function showContent() { - $this->showProfile(); $this->showNotices(); } @@ -199,12 +197,6 @@ class ShowstreamAction extends ProfileAction 'href' => $rsd)); } - function showProfile() - { - $profile = new UserProfile($this, $this->user, $this->profile); - $profile->show(); - } - function showEmptyListMessage() { // TRANS: First sentence of empty list message for a stream. $1%s is a user nickname. diff --git a/lib/userprofile.php b/lib/userprofile.php deleted file mode 100644 index 9c563db5d0..0000000000 --- a/lib/userprofile.php +++ /dev/null @@ -1,408 +0,0 @@ -. - * - * @category Action - * @package StatusNet - * @author Evan Prodromou - * @author Sarven Capadisli - * @copyright 2008 StatusNet, Inc. - * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 - * @link http://status.net/ - */ - -if (!defined('STATUSNET') && !defined('LACONICA')) { - exit(1); -} - -require_once INSTALLDIR.'/lib/widget.php'; - -/** - * Profile of a user - * - * Shows profile information about a particular user - * - * @category Output - * @package StatusNet - * @author Evan Prodromou - * @author Sarven Capadisli - * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 - * @link http://status.net/ - * - * @see HTMLOutputter - */ -class UserProfile extends Widget -{ - var $user = null; - var $profile = null; - - function __construct($action=null, $user=null, $profile=null) - { - parent::__construct($action); - $this->user = $user; - $this->profile = $profile; - } - - function show() - { - $this->showProfileData(); - $this->showEntityActions(); - } - - function showProfileData() - { - if (Event::handle('StartProfilePageProfileSection', array(&$this->out, $this->profile))) { - - $this->out->elementStart('div', array('id' => 'i', - 'class' => 'entity_profile vcard author')); - // TRANS: H2 for user profile information. - $this->out->element('h2', null, _('User profile')); - - if (Event::handle('StartProfilePageProfileElements', array(&$this->out, $this->profile))) { - - $this->showAvatar(); - $this->showNickname(); - $this->showFullName(); - $this->showLocation(); - $this->showHomepage(); - $this->showBio(); - $this->showProfileTags(); - - Event::handle('EndProfilePageProfileElements', array(&$this->out, $this->profile)); - } - - $this->out->elementEnd('div'); - Event::handle('EndProfilePageProfileSection', array(&$this->out, $this->profile)); - } - } - - function showAvatar() - { - $this->out->elementStart('div', 'ur_face'); - - if (Event::handle('StartProfilePageAvatar', array($this->out, $this->profile))) { - - $avatar = $this->profile->getAvatar(AVATAR_PROFILE_SIZE); - if (!$avatar) { - // hack for remote Twitter users: no 96px, but large Twitter size is 73px - $avatar = $this->profile->getAvatar(73); - } - - $this->out->element('img', - array('src' => ($avatar) ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_PROFILE_SIZE), - 'class' => 'photo avatar entity_depiction', - 'width' => AVATAR_PROFILE_SIZE, - 'height' => AVATAR_PROFILE_SIZE, - 'alt' => $this->profile->nickname)); - - $cur = common_current_user(); - - if ($cur && $cur->id == $this->profile->id) { - $this->out->element('a', array('href' => common_local_url('avatarsettings')), _('Edit Avatar')); - } - - Event::handle('EndProfilePageAvatar', - array($this->out, $this->profile)); - } - - $this->out->elementEnd('div'); - } - - function showNickname() - { - if (Event::handle('StartProfilePageNickname', array($this->out, $this->profile))) { - - $hasFN = ($this->profile->fullname) ? 'entity_nickname nickname url uid' : 'entity_nickname fn nickname url uid'; - $this->out->element('a', - array('href' => $this->profile->profileurl, - 'rel' => 'me', - 'class' => $hasFN), - $this->profile->nickname); - - Event::handle('EndProfilePageNickname', array($this->out, $this->profile)); - } - } - - function showFullName() - { - if (Event::handle('StartProfilePageFullName', array($this->out, $this->profile))) { - if ($this->profile->fullname) { - $this->out->element('span', - 'entity_fn fn', - $this->profile->fullname); - } - Event::handle('EndProfilePageFullName', array($this->out, $this->profile)); - } - } - - function showLocation() - { - if (Event::handle('StartProfilePageLocation', array($this->out, $this->profile))) { - if ($this->profile->location) { - $this->out->element('span', - 'entity_location label', - $this->profile->location); - } - Event::handle('EndProfilePageLocation', array($this->out, $this->profile)); - } - } - - function showHomepage() - { - if (Event::handle('StartProfilePageHomepage', array($this->out, $this->profile))) { - if ($this->profile->homepage) { - $this->out->element('a', - array('href' => $this->profile->homepage, - 'rel' => 'me', - 'class' => 'url entity_url'), - $this->profile->homepage); - } - Event::handle('EndProfilePageHomepage', array($this->out, $this->profile)); - } - } - - function showBio() - { - if (Event::handle('StartProfilePageBio', array($this->out, $this->profile))) { - if ($this->profile->bio) { - $this->out->element('div', - 'note entity_note', - $this->profile->bio); - } - Event::handle('EndProfilePageBio', array($this->out, $this->profile)); - } - } - - function showProfileTags() - { - if (Event::handle('StartProfilePageProfileTags', array($this->out, $this->profile))) { - $tags = Profile_tag::getTags($this->profile->id, $this->profile->id); - - if (count($tags) > 0) { - $this->out->elementStart('ul', 'tags xoxo entity_tags'); - foreach ($tags as $tag) { - $this->out->elementStart('li'); - // Avoid space by using raw output. - $pt = '#'; - $this->out->raw($pt); - $this->out->elementEnd('li'); - } - $this->out->elementEnd('ul'); - } - Event::handle('EndProfilePageProfileTags', array($this->out, $this->profile)); - } - } - - function showEntityActions() - { - if ($this->profile->hasRole(Profile_role::DELETED)) { - $this->out->elementStart('div', 'entity_actions'); - // TRANS: H2 for user actions in a profile. - $this->out->element('h2', null, _('User actions')); - $this->out->elementStart('ul'); - $this->out->elementStart('p', array('class' => 'profile_deleted')); - // TRANS: Text shown in user profile of not yet compeltely deleted users. - $this->out->text(_('User deletion in progress...')); - $this->out->elementEnd('p'); - $this->out->elementEnd('ul'); - $this->out->elementEnd('div'); - return; - } - if (Event::handle('StartProfilePageActionsSection', array($this->out, $this->profile))) { - - $cur = common_current_user(); - - $this->out->elementStart('div', 'entity_actions'); - // TRANS: H2 for entity actions in a profile. - $this->out->element('h2', null, _('User actions')); - $this->out->elementStart('ul'); - - if (Event::handle('StartProfilePageActionsElements', array($this->out, $this->profile))) { - if (empty($cur)) { // not logged in - if (Event::handle('StartProfileRemoteSubscribe', array($this->out, $this->profile))) { - $this->out->elementStart('li', 'entity_subscribe'); - $this->showRemoteSubscribeLink(); - $this->out->elementEnd('li'); - Event::handle('EndProfileRemoteSubscribe', array($this->out, $this->profile)); - } - } else { - if ($cur->id == $this->profile->id) { // your own page - $this->out->elementStart('li', 'entity_edit'); - $this->out->element('a', array('href' => common_local_url('profilesettings'), - // TRANS: Link title for link on user profile. - 'title' => _('Edit profile settings')), - // TRANS: Link text for link on user profile. - _('Edit')); - $this->out->elementEnd('li'); - } else { // someone else's page - - // subscribe/unsubscribe button - - $this->out->elementStart('li', 'entity_subscribe'); - - if ($cur->isSubscribed($this->profile)) { - $usf = new UnsubscribeForm($this->out, $this->profile); - $usf->show(); - } else { - $sf = new SubscribeForm($this->out, $this->profile); - $sf->show(); - } - $this->out->elementEnd('li'); - - if ($cur->mutuallySubscribed($this->profile)) { - - // message - - $this->out->elementStart('li', 'entity_send-a-message'); - $this->out->element('a', array('href' => common_local_url('newmessage', array('to' => $this->user->id)), - // TRANS: Link title for link on user profile. - 'title' => _('Send a direct message to this user')), - // TRANS: Link text for link on user profile. - _('Message')); - $this->out->elementEnd('li'); - - // nudge - - if ($this->user && $this->user->email && $this->user->emailnotifynudge) { - $this->out->elementStart('li', 'entity_nudge'); - $nf = new NudgeForm($this->out, $this->user); - $nf->show(); - $this->out->elementEnd('li'); - } - } - - // return-to args, so we don't have to keep re-writing them - - list($action, $r2args) = $this->out->returnToArgs(); - - // push the action into the list - - $r2args['action'] = $action; - - // block/unblock - - $blocked = $cur->hasBlocked($this->profile); - $this->out->elementStart('li', 'entity_block'); - if ($blocked) { - $ubf = new UnblockForm($this->out, $this->profile, $r2args); - $ubf->show(); - } else { - $bf = new BlockForm($this->out, $this->profile, $r2args); - $bf->show(); - } - $this->out->elementEnd('li'); - - // Some actions won't be applicable to non-local users. - $isLocal = !empty($this->user); - - if ($cur->hasRight(Right::SANDBOXUSER) || - $cur->hasRight(Right::SILENCEUSER) || - $cur->hasRight(Right::DELETEUSER)) { - $this->out->elementStart('li', 'entity_moderation'); - // TRANS: Label text on user profile to select a user role. - $this->out->element('p', null, _('Moderate')); - $this->out->elementStart('ul'); - if ($cur->hasRight(Right::SANDBOXUSER)) { - $this->out->elementStart('li', 'entity_sandbox'); - if ($this->profile->isSandboxed()) { - $usf = new UnSandboxForm($this->out, $this->profile, $r2args); - $usf->show(); - } else { - $sf = new SandboxForm($this->out, $this->profile, $r2args); - $sf->show(); - } - $this->out->elementEnd('li'); - } - - if ($cur->hasRight(Right::SILENCEUSER)) { - $this->out->elementStart('li', 'entity_silence'); - if ($this->profile->isSilenced()) { - $usf = new UnSilenceForm($this->out, $this->profile, $r2args); - $usf->show(); - } else { - $sf = new SilenceForm($this->out, $this->profile, $r2args); - $sf->show(); - } - $this->out->elementEnd('li'); - } - - if ($isLocal && $cur->hasRight(Right::DELETEUSER)) { - $this->out->elementStart('li', 'entity_delete'); - $df = new DeleteUserForm($this->out, $this->profile, $r2args); - $df->show(); - $this->out->elementEnd('li'); - } - $this->out->elementEnd('ul'); - $this->out->elementEnd('li'); - } - - if ($isLocal && $cur->hasRight(Right::GRANTROLE)) { - $this->out->elementStart('li', 'entity_role'); - // TRANS: Label text on user profile to select a user role. - $this->out->element('p', null, _('User role')); - $this->out->elementStart('ul'); - // TRANS: Role that can be set for a user profile. - $this->roleButton('administrator', _m('role', 'Administrator')); - // TRANS: Role that can be set for a user profile. - $this->roleButton('moderator', _m('role', 'Moderator')); - $this->out->elementEnd('ul'); - $this->out->elementEnd('li'); - } - } - } - - Event::handle('EndProfilePageActionsElements', array($this->out, $this->profile)); - } - - $this->out->elementEnd('ul'); - $this->out->elementEnd('div'); - - Event::handle('EndProfilePageActionsSection', array($this->out, $this->profile)); - } - } - - function roleButton($role, $label) - { - list($action, $r2args) = $this->out->returnToArgs(); - $r2args['action'] = $action; - - $this->out->elementStart('li', "entity_role_$role"); - if ($this->profile->hasRole($role)) { - $rf = new RevokeRoleForm($role, $label, $this->out, $this->profile, $r2args); - $rf->show(); - } else { - $rf = new GrantRoleForm($role, $label, $this->out, $this->profile, $r2args); - $rf->show(); - } - $this->out->elementEnd('li'); - } - - function showRemoteSubscribeLink() - { - $url = common_local_url('remotesubscribe', - array('nickname' => $this->profile->nickname)); - $this->out->element('a', array('href' => $url, - 'class' => 'entity_remote_subscribe'), - // TRANS: Link text for link that will subscribe to a remote profile. - _('Subscribe')); - } -} From bbba1f6e168463b6994460568778e7a7df5941a1 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 14 Mar 2011 16:55:33 -0400 Subject: [PATCH 104/146] Show group actions in profile block --- actions/showgroup.php | 117 -------------------------------------- lib/groupprofileblock.php | 36 +++++++++++- 2 files changed, 35 insertions(+), 118 deletions(-) diff --git a/actions/showgroup.php b/actions/showgroup.php index 411940ef9a..b198352cb0 100644 --- a/actions/showgroup.php +++ b/actions/showgroup.php @@ -180,8 +180,6 @@ class ShowgroupAction extends GroupDesignAction */ function showContent() { - $this->showGroupProfile(); - $this->showGroupActions(); $this->showGroupNotices(); } @@ -205,121 +203,6 @@ class ShowgroupAction extends GroupDesignAction array('nickname' => $this->group->nickname)); } - /** - * Show the group profile - * - * Information about the group - * - * @return void - */ - function showGroupProfile() - { - $this->elementStart('div', array('id' => 'i', - 'class' => 'entity_profile vcard author')); - - $logo = ($this->group->homepage_logo) ? - $this->group->homepage_logo : User_group::defaultLogo(AVATAR_PROFILE_SIZE); - - $this->element('img', array('src' => $logo, - 'class' => 'photo avatar entity_depiction', - 'width' => AVATAR_PROFILE_SIZE, - 'height' => AVATAR_PROFILE_SIZE, - 'alt' => $this->group->nickname)); - - $hasFN = ($this->group->fullname) ? 'entity_nickname nickname url uid' : - 'entity_nickname fn org nickname url uid'; - $this->element('a', array('href' => $this->group->homeUrl(), - 'rel' => 'me', 'class' => $hasFN), - $this->group->nickname); - - if ($this->group->fullname) { - $this->element('div', 'entity_fn fn org', $this->group->fullname); - } - - if ($this->group->location) { - $this->element('div', 'entity_location label', $this->group->location); - } - - if ($this->group->homepage) { - $this->element('a', array('href' => $this->group->homepage, - 'rel' => 'me', - 'class' => 'url entity_url'), - $this->group->homepage); - } - - if ($this->group->description) { - $this->element('div', 'note entity_note', $this->group->description); - } - - if (common_config('group', 'maxaliases') > 0) { - $aliases = $this->group->getAliases(); - - if (!empty($aliases)) { - $this->element('div', - 'aliases entity_aliases', - implode(' ', $aliases)); - } - - if ($this->group->description) { - $this->elementStart('dl', 'entity_note'); - // TRANS: Label for group description or group note (dt). Text hidden by default. - $this->element('dt', null, _('Note')); - $this->element('dd', 'note', $this->group->description); - $this->elementEnd('dl'); - } - - if (common_config('group', 'maxaliases') > 0) { - $aliases = $this->group->getAliases(); - - if (!empty($aliases)) { - $this->elementStart('dl', 'entity_aliases'); - // TRANS: Label for group aliases (dt). Text hidden by default. - $this->element('dt', null, _('Aliases')); - $this->element('dd', 'aliases', implode(' ', $aliases)); - $this->elementEnd('dl'); - } - } - - Event::handle('EndGroupProfileElements', array($this, $this->group)); - } - - $this->elementEnd('div'); - } - - function showGroupActions() - { - $cur = common_current_user(); - $this->elementStart('div', 'entity_actions'); - // TRANS: Group actions header (h2). Text hidden by default. - $this->element('h2', null, _('Group actions')); - $this->elementStart('ul'); - if (Event::handle('StartGroupActionsList', array($this, $this->group))) { - $this->elementStart('li', 'entity_subscribe'); - if (Event::handle('StartGroupSubscribe', array($this, $this->group))) { - if ($cur) { - if ($cur->isMember($this->group)) { - $lf = new LeaveForm($this, $this->group); - $lf->show(); - } else if (!Group_block::isBlocked($this->group, $cur->getProfile())) { - $jf = new JoinForm($this, $this->group); - $jf->show(); - } - } - Event::handle('EndGroupSubscribe', array($this, $this->group)); - } - $this->elementEnd('li'); - if ($cur && $cur->hasRight(Right::DELETEGROUP)) { - $this->elementStart('li', 'entity_delete'); - $df = new DeleteGroupForm($this, $this->group); - $df->show(); - $this->elementEnd('li'); - } - Event::handle('EndGroupActionsList', array($this, $this->group)); - } - $this->elementEnd('ul'); - $this->elementEnd('div'); - } - /** * Get a list of the feeds for this page * diff --git a/lib/groupprofileblock.php b/lib/groupprofileblock.php index 8d2686085f..32526b0458 100644 --- a/lib/groupprofileblock.php +++ b/lib/groupprofileblock.php @@ -58,7 +58,7 @@ class GroupProfileBlock extends ProfileBlock function avatar() { return ($this->group->homepage_logo) ? - $this->group->homepage_logo : User_group::defaultLogo(AVATAR_PROFILE_SIZE); + $this->group->homepage_logo : User_group::defaultLogo(AVATAR_PROFILE_SIZE); } function name() @@ -101,4 +101,38 @@ class GroupProfileBlock extends ProfileBlock { return $this->group->description; } + + function showActions() + { + $cur = common_current_user(); + $this->out->elementStart('div', 'entity_actions'); + // TRANS: Group actions header (h2). Text hidden by default. + $this->out->element('h2', null, _('Group actions')); + $this->out->elementStart('ul'); + if (Event::handle('StartGroupActionsList', array($this, $this->group))) { + $this->out->elementStart('li', 'entity_subscribe'); + if (Event::handle('StartGroupSubscribe', array($this, $this->group))) { + if ($cur) { + if ($cur->isMember($this->group)) { + $lf = new LeaveForm($this->out, $this->group); + $lf->show(); + } else if (!Group_block::isBlocked($this->group, $cur->getProfile())) { + $jf = new JoinForm($this->out, $this->group); + $jf->show(); + } + } + Event::handle('EndGroupSubscribe', array($this, $this->group)); + } + $this->out->elementEnd('li'); + if ($cur && $cur->hasRight(Right::DELETEGROUP)) { + $this->out->elementStart('li', 'entity_delete'); + $df = new DeleteGroupForm($this->out, $this->group); + $df->show(); + $this->out->elementEnd('li'); + } + Event::handle('EndGroupActionsList', array($this, $this->group)); + } + $this->out->elementEnd('ul'); + $this->out->elementEnd('div'); + } } From 07d9cca0040e8124ed7c5c35965c76932aed3272 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 14 Mar 2011 16:55:55 -0400 Subject: [PATCH 105/146] fix bug with undefined variable --- lib/accountprofileblock.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/accountprofileblock.php b/lib/accountprofileblock.php index e75527b288..f31503353d 100644 --- a/lib/accountprofileblock.php +++ b/lib/accountprofileblock.php @@ -81,7 +81,7 @@ class AccountProfileBlock extends ProfileBlock function canEdit() { $user = common_current_user(); - return ((!empty($user)) && ($user->id == $profile->id)); + return ((!empty($user)) && ($user->id == $this->profile->id)); } function editUrl() From 410ca34ce992814cce1f8becd7076481bedbf141 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Wed, 16 Mar 2011 09:59:36 -0400 Subject: [PATCH 106/146] remove edit link from profileblock --- lib/accountprofileblock.php | 16 ---------------- lib/defaultprofileblock.php | 5 ----- lib/groupprofileblock.php | 16 ---------------- lib/profileblock.php | 8 -------- 4 files changed, 45 deletions(-) diff --git a/lib/accountprofileblock.php b/lib/accountprofileblock.php index f31503353d..ea6e27ac76 100644 --- a/lib/accountprofileblock.php +++ b/lib/accountprofileblock.php @@ -78,22 +78,6 @@ class AccountProfileBlock extends ProfileBlock return $this->profile->profileurl; } - function canEdit() - { - $user = common_current_user(); - return ((!empty($user)) && ($user->id == $this->profile->id)); - } - - function editUrl() - { - return common_local_url('profilesettings'); - } - - function editText() - { - return _('Edit'); - } - function location() { return $this->profile->location; diff --git a/lib/defaultprofileblock.php b/lib/defaultprofileblock.php index 18eff49432..b8af14ac21 100644 --- a/lib/defaultprofileblock.php +++ b/lib/defaultprofileblock.php @@ -72,11 +72,6 @@ class DefaultProfileBlock extends AccountProfileBlock Avatar::defaultImage(AVATAR_STREAM_SIZE); } - function canEdit() - { - return true; - } - function location() { return null; diff --git a/lib/groupprofileblock.php b/lib/groupprofileblock.php index 32526b0458..9df541e343 100644 --- a/lib/groupprofileblock.php +++ b/lib/groupprofileblock.php @@ -71,22 +71,6 @@ class GroupProfileBlock extends ProfileBlock return $this->group->mainpage; } - function canEdit() - { - $user = common_current_user(); - return ((!empty($user)) && ($user->isAdmin($this->group))); - } - - function editUrl() - { - return common_local_url('editgroup', array('nickname' => $this->group->nickname)); - } - - function editText() - { - return _('Edit'); - } - function location() { return $this->group->location; diff --git a/lib/profileblock.php b/lib/profileblock.php index 7fcc11ef1a..716149dfeb 100644 --- a/lib/profileblock.php +++ b/lib/profileblock.php @@ -50,9 +50,6 @@ abstract class ProfileBlock extends Widget abstract function avatar(); abstract function name(); abstract function url(); - abstract function canEdit(); - abstract function editUrl(); - abstract function editText(); abstract function location(); abstract function homepage(); abstract function description(); @@ -69,11 +66,6 @@ abstract class ProfileBlock extends Widget 'width' => $size, 'height' => $size)); - if ($this->canEdit()) { - $this->out->element('a', array('href' => $this->editUrl()), - $this->editText()); - } - $name = $this->name(); if (!empty($name)) { From 519bbfb2e973169e52d6802fdca7f49930d2dabb Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Wed, 16 Mar 2011 10:03:28 -0400 Subject: [PATCH 107/146] use

                        to keep stuff in profile block from bunching --- lib/profileblock.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/profileblock.php b/lib/profileblock.php index 716149dfeb..dca0814437 100644 --- a/lib/profileblock.php +++ b/lib/profileblock.php @@ -69,19 +69,21 @@ abstract class ProfileBlock extends Widget $name = $this->name(); if (!empty($name)) { + $this->out->elementStart('p', 'profile_block_name'); $url = $this->url(); if (!empty($url)) { $this->out->element('a', array('href' => $url), $name); } else { - $this->out->element('span', 'profile_block_name', $name); + $this->out->text($name); } + $this->out->elementEnd('p'); } $location = $this->location(); if (!empty($location)) { - $this->out->element('span', 'profile_block_location', $location); + $this->out->element('p', 'profile_block_location', $location); } $homepage = $this->homepage(); From 9b4533058cc7aaccff62ec8d4b073bf270a2bf21 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Wed, 16 Mar 2011 10:05:07 -0400 Subject: [PATCH 108/146] no profileblock on login actions --- actions/login.php | 4 ++++ actions/register.php | 4 ++++ plugins/OpenID/openidlogin.php | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/actions/login.php b/actions/login.php index 547374a12e..7ec9c32139 100644 --- a/actions/login.php +++ b/actions/login.php @@ -301,4 +301,8 @@ class LoginAction extends Action function showNoticeForm() { } + + function showProfileBlock() + { + } } diff --git a/actions/register.php b/actions/register.php index d0dbceeb81..1bcd3edc17 100644 --- a/actions/register.php +++ b/actions/register.php @@ -610,4 +610,8 @@ class RegisterAction extends Action function showNoticeForm() { } + + function showProfileBlock() + { + } } diff --git a/plugins/OpenID/openidlogin.php b/plugins/OpenID/openidlogin.php index 850b68e63a..918a79ccd1 100644 --- a/plugins/OpenID/openidlogin.php +++ b/plugins/OpenID/openidlogin.php @@ -178,4 +178,8 @@ class OpenidloginAction extends Action function showNoticeForm() { } + + function showProfileBlock() + { + } } From 32aa061c17d04658bd8780914dad4ba7b3851365 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Wed, 16 Mar 2011 10:16:29 -0400 Subject: [PATCH 109/146] remove debugging code for microapp --- lib/microappplugin.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/microappplugin.php b/lib/microappplugin.php index 86803b8ae3..ab6d565157 100644 --- a/lib/microappplugin.php +++ b/lib/microappplugin.php @@ -525,8 +525,6 @@ abstract class MicroAppPlugin extends Plugin function onStartMakeEntryForm($tag, $out, &$form) { - $this->log(LOG_INFO, "onStartMakeEntryForm() called for tag '$tag'"); - if ($tag == $this->tag()) { $form = $this->entryForm($out); return false; From c99f6f6afcc2667467d0e1140f634bbc3bd4a7de Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Wed, 16 Mar 2011 10:26:14 -0400 Subject: [PATCH 110/146] remove a bunch of common_debug() calls for url shortening --- lib/util.php | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/lib/util.php b/lib/util.php index 9f84e3120a..536fff4dec 100644 --- a/lib/util.php +++ b/lib/util.php @@ -1031,19 +1031,13 @@ function common_linkify($url) { */ function common_shorten_links($text, $always = false, User $user=null) { - common_debug("common_shorten_links() called"); - $user = common_current_user(); $maxLength = User_urlshortener_prefs::maxNoticeLength($user); - common_debug("maxLength = $maxLength"); - if ($always || mb_strlen($text) > $maxLength) { - common_debug("Forcing shortening"); return common_replace_urls_callback($text, array('File_redirection', 'forceShort'), $user); } else { - common_debug("Not forcing shortening"); return common_replace_urls_callback($text, array('File_redirection', 'makeShort'), $user); } } @@ -2066,27 +2060,21 @@ function common_database_tablename($tablename) */ function common_shorten_url($long_url, User $user=null, $force = false) { - common_debug("Shortening URL '$long_url' (force = $force)"); - $long_url = trim($long_url); $user = common_current_user(); $maxUrlLength = User_urlshortener_prefs::maxUrlLength($user); - common_debug("maxUrlLength = $maxUrlLength"); // $force forces shortening even if it's not strictly needed // I doubt URL shortening is ever 'strictly' needed. - ESP if (mb_strlen($long_url) < $maxUrlLength && !$force) { - common_debug("Skipped shortening URL."); return $long_url; } $shortenerName = User_urlshortener_prefs::urlShorteningService($user); - common_debug("Shortener name = '$shortenerName'"); - if (Event::handle('StartShortenUrl', array($long_url, $shortenerName, &$shortenedUrl))) { if ($shortenerName == 'internal') { From 0666c6f8b269c5e73d0d4f33824a5cbf110ffe29 Mon Sep 17 00:00:00 2001 From: Samantha Doherty Date: Wed, 16 Mar 2011 13:05:55 -0400 Subject: [PATCH 111/146] Fix for education description fields in extended profile. --- plugins/ExtendedProfile/css/profiledetail.css | 1 + plugins/ExtendedProfile/extendedprofilewidget.php | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/ExtendedProfile/css/profiledetail.css b/plugins/ExtendedProfile/css/profiledetail.css index 3af9bcba4a..7de7e88ff5 100644 --- a/plugins/ExtendedProfile/css/profiledetail.css +++ b/plugins/ExtendedProfile/css/profiledetail.css @@ -55,6 +55,7 @@ float: left; padding-top: 2px; padding-bottom: 2px; + max-width: 350px; } #profiledetailsettings #content table.extended-profile td { diff --git a/plugins/ExtendedProfile/extendedprofilewidget.php b/plugins/ExtendedProfile/extendedprofilewidget.php index 1ef6440ed6..80d88a9599 100644 --- a/plugins/ExtendedProfile/extendedprofilewidget.php +++ b/plugins/ExtendedProfile/extendedprofilewidget.php @@ -442,7 +442,6 @@ class ExtendedProfileWidget extends Form ); $this->out->element('div', 'label', _m('Description')); - $this->out->element('div', 'field', $field['description']); $this->out->textarea( $id . '-description', From 3692a0909534009659f722f429815ecc0398c56c Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Wed, 16 Mar 2011 10:30:57 -0700 Subject: [PATCH 112/146] Extended profile - add nav link to new profile block --- lib/accountprofileblock.php | 33 ++++++++++--------- .../ExtendedProfile/ExtendedProfilePlugin.php | 15 ++------- .../profiledetailsettingsaction.php | 2 -- 3 files changed, 20 insertions(+), 30 deletions(-) diff --git a/lib/accountprofileblock.php b/lib/accountprofileblock.php index ea6e27ac76..a8bdb4715b 100644 --- a/lib/accountprofileblock.php +++ b/lib/accountprofileblock.php @@ -4,7 +4,7 @@ * Copyright (C) 2011, StatusNet, Inc. * * Profile block to show for an account - * + * * PHP version 5 * * This program is free software: you can redistribute it and/or modify @@ -63,8 +63,8 @@ class AccountProfileBlock extends ProfileBlock if (empty($avatar)) { $avatar = $this->profile->getAvatar(73); } - return (!empty($avatar)) ? - $avatar->displayUrl() : + return (!empty($avatar)) ? + $avatar->displayUrl() : Avatar::defaultImage(AVATAR_PROFILE_SIZE); } @@ -95,21 +95,22 @@ class AccountProfileBlock extends ProfileBlock function showActions() { - if ($this->profile->hasRole(Profile_role::DELETED)) { - $this->out->elementStart('div', 'entity_actions'); - // TRANS: H2 for user actions in a profile. - $this->out->element('h2', null, _('User actions')); - $this->out->elementStart('ul'); - $this->out->elementStart('p', array('class' => 'profile_deleted')); - // TRANS: Text shown in user profile of not yet compeltely deleted users. - $this->out->text(_('User deletion in progress...')); - $this->out->elementEnd('p'); - $this->out->elementEnd('ul'); - $this->out->elementEnd('div'); - return; - } if (Event::handle('StartProfilePageActionsSection', array($this->out, $this->profile))) { + if ($this->profile->hasRole(Profile_role::DELETED)) { + $this->out->elementStart('div', 'entity_actions'); + // TRANS: H2 for user actions in a profile. + $this->out->element('h2', null, _('User actions')); + $this->out->elementStart('ul'); + $this->out->elementStart('p', array('class' => 'profile_deleted')); + // TRANS: Text shown in user profile of not yet compeltely deleted users. + $this->out->text(_('User deletion in progress...')); + $this->out->elementEnd('p'); + $this->out->elementEnd('ul'); + $this->out->elementEnd('div'); + return; + } + $cur = common_current_user(); $this->out->elementStart('div', 'entity_actions'); diff --git a/plugins/ExtendedProfile/ExtendedProfilePlugin.php b/plugins/ExtendedProfile/ExtendedProfilePlugin.php index d1572ce9fd..b69c65df1f 100644 --- a/plugins/ExtendedProfile/ExtendedProfilePlugin.php +++ b/plugins/ExtendedProfile/ExtendedProfilePlugin.php @@ -34,7 +34,7 @@ class ExtendedProfilePlugin extends Plugin { $versions[] = array('name' => 'ExtendedProfile', 'version' => STATUSNET_VERSION, - 'author' => 'Brion Vibber', + 'author' => 'Brion Vibber, Zach Copley', 'homepage' => 'http://status.net/wiki/Plugin:ExtendedProfile', 'rawdescription' => _m('UI extensions for additional profile fields.')); @@ -110,22 +110,13 @@ class ExtendedProfilePlugin extends Plugin return true; } - function onEndAccountSettingsProfileMenuItem($widget, $menu) - { - // TRANS: Link title attribute in user account settings menu. - $title = _('Change additional profile settings'); - // TRANS: Link description in user account settings menu. - $widget->showMenuItem('profiledetailsettings',_m('Details'),$title); - return true; - } - - function onEndProfilePageProfileElements(HTMLOutputter $out, Profile $profile) { + function onStartProfilePageActionsSection(HTMLOutputter $out, Profile $profile) { $user = User::staticGet('id', $profile->id); if ($user) { $url = common_local_url('profiledetail', array('nickname' => $user->nickname)); $out->element('a', array('href' => $url), _m('More details...')); } - return; + return true; } } diff --git a/plugins/ExtendedProfile/profiledetailsettingsaction.php b/plugins/ExtendedProfile/profiledetailsettingsaction.php index 7b03f247ed..4d716ec32c 100644 --- a/plugins/ExtendedProfile/profiledetailsettingsaction.php +++ b/plugins/ExtendedProfile/profiledetailsettingsaction.php @@ -44,14 +44,12 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction function showStylesheets() { parent::showStylesheets(); $this->cssLink('plugins/ExtendedProfile/css/profiledetail.css'); - $this->cssLink('http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css'); return true; } function showScripts() { parent::showScripts(); $this->script('plugins/ExtendedProfile/js/profiledetail.js'); - $this->script('http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js'); return true; } From 5e40450efd6e17cd27c07d5a009d95044f01744e Mon Sep 17 00:00:00 2001 From: Samantha Doherty Date: Wed, 16 Mar 2011 13:50:24 -0400 Subject: [PATCH 113/146] Quick style update for profile blocks. --- lib/profileblock.php | 2 +- .../ExtendedProfile/ExtendedProfilePlugin.php | 2 +- theme/neo/css/display.css | 27 +++++++++++++++++++ 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/lib/profileblock.php b/lib/profileblock.php index dca0814437..19e5a386ba 100644 --- a/lib/profileblock.php +++ b/lib/profileblock.php @@ -56,7 +56,7 @@ abstract class ProfileBlock extends Widget function show() { - $this->out->elementStart('div', 'profile_block'); + $this->out->elementStart('div', 'profile_block section'); $size = $this->avatarSize(); diff --git a/plugins/ExtendedProfile/ExtendedProfilePlugin.php b/plugins/ExtendedProfile/ExtendedProfilePlugin.php index b69c65df1f..127c91a543 100644 --- a/plugins/ExtendedProfile/ExtendedProfilePlugin.php +++ b/plugins/ExtendedProfile/ExtendedProfilePlugin.php @@ -114,7 +114,7 @@ class ExtendedProfilePlugin extends Plugin $user = User::staticGet('id', $profile->id); if ($user) { $url = common_local_url('profiledetail', array('nickname' => $user->nickname)); - $out->element('a', array('href' => $url), _m('More details...')); + $out->element('a', array('href' => $url, 'class' => 'profiledetail'), _m('More details...')); } return true; } diff --git a/theme/neo/css/display.css b/theme/neo/css/display.css index 7cb5e11911..92da5977ef 100644 --- a/theme/neo/css/display.css +++ b/theme/neo/css/display.css @@ -413,6 +413,33 @@ address { text-transform: uppercase; } +.profile_block_name { + font-size: 14px; + font-weight: bold; +} + +.profile_block_location { + font-weight: bold; +} + +.profile_block_description { + line-height: 1.2em; +} + +.profile_block .entity_actions { + float: left; + margin-left: 0px; +} + +.profile_block .entity_moderation:hover ul, +.profile_block .entity_role:hover ul { + left: 20px; +} + +.profile_block a.profiledetail { + display: block; +} + .section ul.entities { width: 220px; } From 405dae87b12d3177a628172c1e91295c09cbb505 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Wed, 16 Mar 2011 10:58:13 -0700 Subject: [PATCH 114/146] Extended profile - fix for unix epoc getting displayed for empty birthday and some validation issues --- .../ExtendedProfile/extendedprofilewidget.php | 44 ++++++++++--------- .../profiledetailsettingsaction.php | 3 +- 2 files changed, 25 insertions(+), 22 deletions(-) diff --git a/plugins/ExtendedProfile/extendedprofilewidget.php b/plugins/ExtendedProfile/extendedprofilewidget.php index 80d88a9599..b507713f06 100644 --- a/plugins/ExtendedProfile/extendedprofilewidget.php +++ b/plugins/ExtendedProfile/extendedprofilewidget.php @@ -395,25 +395,28 @@ class ExtendedProfileWidget extends Form { $this->out->elementStart('div', 'education-item'); $this->out->element('div', 'label', _m('Institution')); - $this->out->element('div', 'field', $field['school']); - $this->out->element('div', 'label', _m('Degree')); - $this->out->element('div', 'field', $field['degree']); - $this->out->element('div', 'label', _m('Description')); - $this->out->element('div', 'field', $field['description']); - $this->out->element('div', 'label', _m('Start')); - $this->out->element( - 'div', - array('class' => 'field date'), - date('j M Y', strtotime($field['start']) - ) - ); - $this->out->element('div', 'label', _m('End')); - $this->out->element( - 'div', - array('class' => 'field date'), - date('j M Y', strtotime($field['end']) - ) - ); + if (!empty($field['school'])) { + + $this->out->element('div', 'field', $field['school']); + $this->out->element('div', 'label', _m('Degree')); + $this->out->element('div', 'field', $field['degree']); + $this->out->element('div', 'label', _m('Description')); + $this->out->element('div', 'field', $field['description']); + $this->out->element('div', 'label', _m('Start')); + $this->out->element( + 'div', + array('class' => 'field date'), + date('j M Y', strtotime($field['start']) + ) + ); + $this->out->element('div', 'label', _m('End')); + $this->out->element( + 'div', + array('class' => 'field date'), + date('j M Y', strtotime($field['end']) + ) + ); + } $this->out->elementEnd('div'); } @@ -564,10 +567,11 @@ class ExtendedProfileWidget extends Form $out->input($id, null, $this->ext->getTextValue($name)); break; case 'date': + $value = $this->ext->getDateValue($name); $out->input( $id, null, - date('j M Y', strtotime($this->ext->getDateValue($name))) + empty($value) ? null : date('j M Y', strtotime($value)) ); break; case 'person': diff --git a/plugins/ExtendedProfile/profiledetailsettingsaction.php b/plugins/ExtendedProfile/profiledetailsettingsaction.php index 4d716ec32c..4a2045cefb 100644 --- a/plugins/ExtendedProfile/profiledetailsettingsaction.php +++ b/plugins/ExtendedProfile/profiledetailsettingsaction.php @@ -260,8 +260,7 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction $this->removeAll($user, 'website'); $i = 0; foreach($sites as $site) { - - if (!Validate::uri( + if (!empty($site['value']) && !Validate::uri( $site['value'], array('allowed_schemes' => array('http', 'https'))) ) { From 5ec018ca19407e34ecd8ba9909731503b1aee51c Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Wed, 16 Mar 2011 10:58:18 -0700 Subject: [PATCH 115/146] Fix tag nesting bug on group page --- actions/showgroup.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/actions/showgroup.php b/actions/showgroup.php index b198352cb0..aa1f620880 100644 --- a/actions/showgroup.php +++ b/actions/showgroup.php @@ -323,7 +323,7 @@ class ShowgroupAction extends GroupDesignAction // TRANS: Header for group statistics on a group page (h2). $this->element('h2', null, _('Statistics')); - $this->elementEnd('dl'); + $this->elementStart('dl'); $this->element('dt', null, _m('LABEL','Created')); $this->element('dd', 'entity_created', date('j M Y', strtotime($this->group->created))); From a81a599d8afb5143e4268eb4f658ef6731c7b18a Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Wed, 16 Mar 2011 11:11:06 -0700 Subject: [PATCH 116/146] MESSAGES_PER_PAGE constant missing (merge error?) --- lib/framework.php | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/framework.php b/lib/framework.php index 350a1c268d..da96c8e1d4 100644 --- a/lib/framework.php +++ b/lib/framework.php @@ -33,6 +33,7 @@ define('AVATAR_MINI_SIZE', 24); define('NOTICES_PER_PAGE', 20); define('PROFILES_PER_PAGE', 20); +define('MESSAGES_PER_PAGE', 20); define('FOREIGN_NOTICE_SEND', 1); define('FOREIGN_NOTICE_RECV', 2); From 9966c51625766b16cc673d3eb630017f5c975382 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Wed, 16 Mar 2011 14:55:19 -0400 Subject: [PATCH 117/146] use Y,N,? instead of 1,0,null for 3vl in RSVPs --- plugins/Event/RSVP.php | 31 ++++++++++++++++++------------- plugins/Event/cancelrsvpform.php | 2 +- plugins/Event/newrsvp.php | 25 +++++++++++++++++-------- plugins/Event/rsvpform.php | 18 +++++++++++++++--- 4 files changed, 51 insertions(+), 25 deletions(-) diff --git a/plugins/Event/RSVP.php b/plugins/Event/RSVP.php index dc7166b9ce..8bb2d2855d 100644 --- a/plugins/Event/RSVP.php +++ b/plugins/Event/RSVP.php @@ -54,7 +54,7 @@ class RSVP extends Managed_DataObject public $uri; // varchar(255) public $profile_id; // int public $event_id; // varchar(36) UUID - public $result; // tinyint + public $response; // tinyint public $created; // datetime /** @@ -119,8 +119,9 @@ class RSVP extends Managed_DataObject 'length' => 36, 'not null' => true, 'description' => 'UUID'), - 'result' => array('type' => 'tinyint', - 'description' => '1, 0, or null for three-state yes, no, maybe'), + 'response' => array('type' => 'char', + 'length' => '1', + 'description' => 'Y, N, or ? for three-state yes, no, maybe'), 'created' => array('type' => 'datetime', 'not null' => true), ), @@ -135,8 +136,10 @@ class RSVP extends Managed_DataObject ); } - function saveNew($profile, $event, $result, $options=array()) + function saveNew($profile, $event, $verb, $options=array()) { + common_debug("RSVP::saveNew({$profile->id}, {$event->id}, '$verb', 'some options');"); + if (array_key_exists('uri', $options)) { $other = RSVP::staticGet('uri', $options['uri']); if (!empty($other)) { @@ -156,7 +159,7 @@ class RSVP extends Managed_DataObject $rsvp->id = UUID::gen(); $rsvp->profile_id = $profile->id; $rsvp->event_id = $event->id; - $rsvp->result = self::codeFor($result); + $rsvp->response = self::codeFor($verb); if (array_key_exists('created', $options)) { $rsvp->created = $options['created']; @@ -176,13 +179,13 @@ class RSVP extends Managed_DataObject // XXX: come up with something sexier $content = sprintf(_('RSVPed %s for an event.'), - ($result == RSVP::POSITIVE) ? _('positively') : - ($result == RSVP::NEGATIVE) ? _('negatively') : + ($verb == RSVP::POSITIVE) ? _('positively') : + ($verb == RSVP::NEGATIVE) ? _('negatively') : _('possibly')); $rendered = $content; - $options = array_merge(array('object_type' => $result), + $options = array_merge(array('object_type' => $verb), $options); if (!array_key_exists('uri', $options)) { @@ -206,14 +209,16 @@ class RSVP extends Managed_DataObject function codeFor($verb) { - return ($verb == RSVP::POSITIVE) ? 1 : - ($verb == RSVP::NEGATIVE) ? 0 : null; + return ($verb == RSVP::POSITIVE) ? 'Y' : + ($verb == RSVP::NEGATIVE) ? 'N' : + ($verb == RSVP::POSSIBLE) ? '?' : null; } static function verbFor($code) { - return ($code == 1) ? RSVP::POSITIVE : - ($code == 0) ? RSVP::NEGATIVE : null; + return ($code == 'Y') ? RSVP::POSITIVE : + ($code == 'N') ? RSVP::NEGATIVE : + ($code == '?') ? RSVP::POSSIBLE : null; } function getNotice() @@ -242,7 +247,7 @@ class RSVP extends Managed_DataObject if ($rsvp->find()) { while ($rsvp->fetch()) { - $verb = self::verbFor($rsvp->result); + $verb = self::verbFor($rsvp->response); $rsvps[$verb][] = clone($rsvp); } } diff --git a/plugins/Event/cancelrsvpform.php b/plugins/Event/cancelrsvpform.php index 8cccbdb661..955a782e62 100644 --- a/plugins/Event/cancelrsvpform.php +++ b/plugins/Event/cancelrsvpform.php @@ -100,7 +100,7 @@ class CancelRSVPForm extends Form $this->out->hidden('rsvp', $this->rsvp->id); - switch (RSVP::verbFor($this->rsvp->result)) { + switch (RSVP::verbFor($this->rsvp->response)) { case RSVP::POSITIVE: $this->out->text(_('You will attend this event.')); break; diff --git a/plugins/Event/newrsvp.php b/plugins/Event/newrsvp.php index 4bacd129f4..2b28580b1d 100644 --- a/plugins/Event/newrsvp.php +++ b/plugins/Event/newrsvp.php @@ -48,7 +48,7 @@ class NewrsvpAction extends Action { protected $user = null; protected $event = null; - protected $type = null; + protected $verb = null; /** * Returns the title of the action @@ -94,13 +94,22 @@ class NewrsvpAction extends Action throw new ClientException(_('You must be logged in to RSVP for an event.')); } - if ($this->arg('yes')) { - $this->type = RSVP::POSITIVE; - } else if ($this->arg('no')) { - $this->type = RSVP::NEGATIVE; - } else { - $this->type = RSVP::POSSIBLE; + common_debug(print_r($this->args, true)); + + switch (strtolower($this->trimmed('submitvalue'))) { + case 'yes': + $this->verb = RSVP::POSITIVE; + break; + case 'no': + $this->verb = RSVP::NEGATIVE; + break; + case 'maybe': + $this->verb = RSVP::POSSIBLE; + break; + default: + throw new ClientException('Unknown submit value.'); } + return true; } @@ -136,7 +145,7 @@ class NewrsvpAction extends Action try { $saved = RSVP::saveNew($this->user->getProfile(), $this->event, - $this->type); + $this->verb); } catch (ClientException $ce) { $this->error = $ce->getMessage(); $this->showPage(); diff --git a/plugins/Event/rsvpform.php b/plugins/Event/rsvpform.php index ad30f6a36e..acc8cd8d12 100644 --- a/plugins/Event/rsvpform.php +++ b/plugins/Event/rsvpform.php @@ -101,6 +101,7 @@ class RSVPForm extends Form $this->out->text(_('RSVP: ')); $this->out->hidden('event', $this->event->id); + $this->out->hidden('submitvalue', ''); $this->out->elementEnd('fieldset'); } @@ -113,8 +114,19 @@ class RSVPForm extends Form function formActions() { - $this->out->submit('yes', _m('BUTTON', 'Yes')); - $this->out->submit('no', _m('BUTTON', 'No')); - $this->out->submit('maybe', _m('BUTTON', 'Maybe')); + $this->submitButton('yes', _m('BUTTON', 'Yes')); + $this->submitButton('no', _m('BUTTON', 'No')); + $this->submitButton('maybe', _m('BUTTON', 'Maybe')); + } + + function submitButton($id, $label) + { + $this->out->element('input', array('type' => 'submit', + 'id' => $id, + 'name' => $id, + 'class' => 'submit', + 'value' => $label, + 'title' => $label, + 'onClick' => 'this.form.submitvalue.value = this.name; return true;')); } } From 47cd5f311cebb25335d986faff52f363f7320184 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Wed, 16 Mar 2011 15:22:15 -0400 Subject: [PATCH 118/146] my code-to-verb logic was ab0rken; fixed --- plugins/Event/RSVP.php | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/plugins/Event/RSVP.php b/plugins/Event/RSVP.php index 8bb2d2855d..fad87aabc8 100644 --- a/plugins/Event/RSVP.php +++ b/plugins/Event/RSVP.php @@ -161,6 +161,8 @@ class RSVP extends Managed_DataObject $rsvp->event_id = $event->id; $rsvp->response = self::codeFor($verb); + common_debug("Got value {$rsvp->response} for verb {$verb}"); + if (array_key_exists('created', $options)) { $rsvp->created = $options['created']; } else { @@ -209,16 +211,36 @@ class RSVP extends Managed_DataObject function codeFor($verb) { - return ($verb == RSVP::POSITIVE) ? 'Y' : - ($verb == RSVP::NEGATIVE) ? 'N' : - ($verb == RSVP::POSSIBLE) ? '?' : null; + switch ($verb) { + case RSVP::POSITIVE: + return 'Y'; + break; + case RSVP::NEGATIVE: + return 'N'; + break; + case RSVP::POSSIBLE: + return '?'; + break; + default: + throw new Exception("Unknown verb {$verb}"); + } } static function verbFor($code) { - return ($code == 'Y') ? RSVP::POSITIVE : - ($code == 'N') ? RSVP::NEGATIVE : - ($code == '?') ? RSVP::POSSIBLE : null; + switch ($code) { + case 'Y': + return RSVP::POSITIVE; + break; + case 'N': + return RSVP::NEGATIVE; + break; + case '?': + return RSVP::POSSIBLE; + break; + default: + throw new Exception("Unknown code {$code}"); + } } function getNotice() From c211b1a38ee88e94f35465c001e5739480360d50 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Wed, 16 Mar 2011 12:28:26 -0700 Subject: [PATCH 119/146] Work in progress: adding link for managing tag subscriptions. Needs the action still to be functional. --- plugins/TagSub/TagSubPlugin.php | 56 +++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/plugins/TagSub/TagSubPlugin.php b/plugins/TagSub/TagSubPlugin.php index e51a7a8b39..e3c11ac1ef 100644 --- a/plugins/TagSub/TagSubPlugin.php +++ b/plugins/TagSub/TagSubPlugin.php @@ -179,4 +179,60 @@ class TagSubPlugin extends Plugin } return true; } + + /** + * Menu item for personal subscriptions/groups area + * + * @param Widget $widget Widget being executed + * + * @return boolean hook return + */ + + function onEndSubGroupNav($widget) + { + $action = $widget->out; + $action_name = $action->trimmed('action'); + + $widget->item('tagsubs', + array(), + // TRANS: SubMirror plugin menu item on user settings page. + _m('MENU', 'Tags'), + // TRANS: SubMirror plugin tooltip for user settings menu item. + _m('Configure tag subscriptions')); + + return true; + } + + /** + * Add a count of mirrored feeds into a user's profile sidebar stats. + * + * @param Profile $profile + * @param array $stats + * @return boolean hook return value + */ + function onProfileStats($profile, &$stats) + { + $cur = common_current_user(); + if (!empty($cur) && $cur->id == $profile->id) { + $tagsub = new TagSub(); + $tagsub->profile_id = $profile->id; + $entry = array( + 'id' => 'tagsubs', + 'label' => _m('Tag subscriptions'), + 'link' => common_local_url('tagsubs'), + 'value' => $tagsub->count(), + ); + + $insertAt = count($stats); + foreach ($stats as $i => $row) { + if ($row['id'] == 'groups') { + // Slip us in after them. + $insertAt = $i + 1; + break; + } + } + array_splice($stats, $insertAt, 0, array($entry)); + } + return true; + } } From ba2a246951e5ab9884b0969a6955bae14d6c772d Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Wed, 16 Mar 2011 17:13:34 -0400 Subject: [PATCH 120/146] slightly better formatting on events --- plugins/Event/EventPlugin.php | 60 ++++++++++++++++++++++++++--------- plugins/Event/event.css | 9 ++++++ 2 files changed, 54 insertions(+), 15 deletions(-) create mode 100644 plugins/Event/event.css diff --git a/plugins/Event/EventPlugin.php b/plugins/Event/EventPlugin.php index 4159641d08..1a43bac348 100644 --- a/plugins/Event/EventPlugin.php +++ b/plugins/Event/EventPlugin.php @@ -297,7 +297,7 @@ class EventPlugin extends MicroappPlugin } // @fixme we have to start the name/avatar and open this div - $out->elementStart('div', array('class' => 'event-info entry-content')); // EVENT-INFO.ENTRY-CONTENT IN + $out->elementStart('div', array('class' => 'event-info')); // EVENT-INFO.ENTRY-CONTENT IN $profile = $notice->getProfile(); $avatar = $profile->getAvatar(AVATAR_MINI_SIZE); @@ -336,7 +336,7 @@ class EventPlugin extends MicroappPlugin assert(!empty($event)); assert(!empty($profile)); - $out->elementStart('div', 'vevent'); // VEVENT IN + $out->elementStart('div', 'vevent event'); // VEVENT IN $out->elementStart('h3'); // VEVENT/H3 IN @@ -351,39 +351,63 @@ class EventPlugin extends MicroappPlugin $out->elementEnd('h3'); // VEVENT/H3 OUT + $startDate = strftime("%x", $event->start_time); + $startTime = strftime("%R", $event->start_time); + + $endDate = strftime("%x", $event->end_time); + $endTime = strftime("%R", $event->end_time); + // FIXME: better dates $out->elementStart('div', 'event-times'); // VEVENT/EVENT-TIMES IN - $out->element('abbr', array('class' => 'dtstart', - 'title' => common_date_iso8601($event->start_time)), - common_exact_date($event->start_time)); - $out->text(' - '); - $out->element('span', array('class' => 'dtend', - 'title' => common_date_iso8601($event->end_time)), - common_exact_date($event->end_time)); - $out->elementEnd('div'); // VEVENT/EVENT-TIMES OUT - if (!empty($event->description)) { - $out->element('div', 'description', $event->description); + $out->element('strong', null, _('Time:')); + + $out->element('abbr', array('class' => 'dtstart', + 'title' => common_date_iso8601()), + $startDate . ' ' . $startTime); + $out->text(' - '); + if ($startDate == $endDate) { + $out->element('span', array('class' => 'dtend', + 'title' => common_date_iso8601($event->end_time)), + $endTime); + } else { + $out->element('span', array('class' => 'dtend', + 'title' => common_date_iso8601($event->end_time)), + $endDate . ' ' . $endTime); } + $out->elementEnd('div'); // VEVENT/EVENT-TIMES OUT + if (!empty($event->location)) { - $out->element('div', 'location', $event->location); + $out->elementStart('div', 'event-location'); + $out->element('strong', null, _('Location: ')); + $out->element('span', 'location', $event->location); + $out->elementEnd('div'); + } + + if (!empty($event->description)) { + $out->elementStart('div', 'event-description'); + $out->element('strong', null, _('Description: ')); + $out->element('span', 'description', $event->description); + $out->elementEnd('div'); } $rsvps = $event->getRSVPs(); - $out->element('div', 'event-rsvps', + $out->elementStart('div', 'event-rsvps'); + $out->element('strong', null, _('Attending: ')); + $out->element('span', 'event-rsvps', sprintf(_('Yes: %d No: %d Maybe: %d'), count($rsvps[RSVP::POSITIVE]), count($rsvps[RSVP::NEGATIVE]), count($rsvps[RSVP::POSSIBLE]))); + $out->elementEnd('div'); $user = common_current_user(); if (!empty($user)) { $rsvp = $event->getRSVP($user->getProfile()); - common_log(LOG_DEBUG, "RSVP is: " . ($rsvp ? $rsvp->id : 'none')); if (empty($rsvp)) { $form = new RSVPForm($event, $out); @@ -440,4 +464,10 @@ class EventPlugin extends MicroappPlugin { $action->inlineScript('$(document).ready(function() { $("#startdate").datepicker(); $("#enddate").datepicker(); });'); } + + function onEndShowStyles($action) + { + $action->cssLink($this->path('event.css')); + return true; + } } diff --git a/plugins/Event/event.css b/plugins/Event/event.css new file mode 100644 index 0000000000..a922bb5791 --- /dev/null +++ b/plugins/Event/event.css @@ -0,0 +1,9 @@ +.event-tags li { display: inline; } +.event-mentions li { display: inline; } +.event-avatar { float: left; } +.event-notice-count { float: right; } +.event-info { float: left; } +.event-title { margin-left: 0px; } +#content .event .entry-title { margin-left: 0px; } +#content .event .entry-content { margin-left: 0px; } + From 7785407c65274fac632b52acc84c3a045f7dfeeb Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Wed, 16 Mar 2011 14:49:27 -0700 Subject: [PATCH 121/146] Work in progress: tagsub editing ui --- plugins/TagSub/TagSubPlugin.php | 3 + plugins/TagSub/tagsubsaction.php | 173 +++++++++++++++++++++++++++++++ 2 files changed, 176 insertions(+) create mode 100644 plugins/TagSub/tagsubsaction.php diff --git a/plugins/TagSub/TagSubPlugin.php b/plugins/TagSub/TagSubPlugin.php index e3c11ac1ef..ff6c038bc3 100644 --- a/plugins/TagSub/TagSubPlugin.php +++ b/plugins/TagSub/TagSubPlugin.php @@ -103,6 +103,9 @@ class TagSubPlugin extends Plugin array('action' => 'tagunsub'), array('tag' => Router::REGEX_TAG)); + $m->connect(':nickname/tag-subscriptions', + array('action' => 'tagsubs'), + array('nickname' => Nickname::DISPLAY_FMT)); return true; } diff --git a/plugins/TagSub/tagsubsaction.php b/plugins/TagSub/tagsubsaction.php new file mode 100644 index 0000000000..78156fa7b0 --- /dev/null +++ b/plugins/TagSub/tagsubsaction.php @@ -0,0 +1,173 @@ +. + * + * @category Social + * @package StatusNet + * @author Evan Prodromou + * @author Sarven Capadisli + * @copyright 2008-2009 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET') && !defined('LACONICA')) { + exit(1); +} + +/** + * A list of the user's subscriptions + * + * @category Social + * @package StatusNet + * @author Evan Prodromou + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ +class TagSubsAction extends GalleryAction +{ + function title() + { + if ($this->page == 1) { + // TRANS: Header for subscriptions overview for a user (first page). + // TRANS: %s is a user nickname. + return sprintf(_m('%s\'s tag subscriptions'), $this->user->nickname); + } else { + // TRANS: Header for subscriptions overview for a user (not first page). + // TRANS: %1$s is a user nickname, %2$d is the page number. + return sprintf(_m('%1$s\'s tag subscriptions, page %2$d'), + $this->user->nickname, + $this->page); + } + } + + function showPageNotice() + { + $user = common_current_user(); + if ($user && ($user->id == $this->profile->id)) { + $this->element('p', null, + // TRANS: Page notice for page with an overview of all tag subscriptions + // TRANS: of the logged in user's own profile. + _m('You have subscribed to receive all notices on this site containing the following tags.')); + } else { + $this->element('p', null, + // TRANS: Page notice for page with an overview of all subscriptions of a user other + // TRANS: than the logged in user. %s is the user nickname. + sprintf(_m('%s has subscribed to receive all notices on this site containing the following tags.'), + $this->profile->nickname)); + } + } + + function showContent() + { + if (Event::handle('StartShowTagSubscriptionsContent', array($this))) { + parent::showContent(); + + $offset = ($this->page-1) * PROFILES_PER_PAGE; + $limit = PROFILES_PER_PAGE + 1; + + $cnt = 0; + + $tagsub = new TagSub(); + $tagsub->profile_id = $this->user->id; + $tagsub->limit($limit); + $tagsub->offset($offset); + $tagsub->find(); + + if ($tagsub->N) { + $list = new TagSubscriptionsList($tagsub, $this->user, $this); + $cnt = $list->show(); + if (0 == $cnt) { + $this->showEmptyListMessage(); + } + } + + $this->pagination($this->page > 1, $cnt > PROFILES_PER_PAGE, + $this->page, 'tagsubs', + array('nickname' => $this->user->nickname)); + + + Event::handle('EndShowTagSubscriptionsContent', array($this)); + } + } + + function showEmptyListMessage() + { + if (common_logged_in()) { + $current_user = common_current_user(); + if ($this->user->id === $current_user->id) { + // TRANS: Subscription list text when the logged in user has no subscriptions. + // TRANS: This message contains Markdown URLs. The link description is between + // TRANS: square brackets, and the link between parentheses. Do not separate "](" + // TRANS: and do not change the URL part. + $message = _('You\'re not listening to anyone\'s notices right now, try subscribing to people you know. '. + 'Try [people search](%%action.peoplesearch%%), look for members in groups you\'re interested '. + 'in and in our [featured users](%%action.featured%%). '. + 'If you\'re a [Twitter user](%%action.twittersettings%%), you can automatically subscribe to '. + 'people you already follow there.'); + } else { + // TRANS: Subscription list text when looking at the subscriptions for a of a user other + // TRANS: than the logged in user that has no subscriptions. %s is the user nickname. + $message = sprintf(_('%s is not listening to any tags.'), $this->user->nickname); + } + } + else { + // TRANS: Subscription list text when looking at the subscriptions for a of a user that has none + // TRANS: as an anonymous user. %s is the user nickname. + $message = sprintf(_m('%s is not listening to any tags.'), $this->user->nickname); + } + + $this->elementStart('div', 'guide'); + $this->raw(common_markup_to_html($message)); + $this->elementEnd('div'); + } +} + +// XXX SubscriptionsList and SubscriptionList are dangerously close + +class TagSubscriptionsList extends SubscriptionList +{ + function newListItem($tagsub) + { + return new TagSubscriptionsListItem($tagsub, $this->owner, $this->action); + } +} + +class TagSubscriptionsListItem extends SubscriptionListItem +{ + function showProfile() + { + $this->startProfile(); + // Relevant portion! + $cur = common_current_user(); + if (!empty($cur) && $cur->id == $this->owner->id) { + $this->showOwnerControls(); + } + $this->endProfile(); + } + + function showOwnerControls() + { + $tagsub = $this->profile; // ? + $form = new TagSubForm($this->out, $tagsub->tag); + $form->show(); + return; + } +} From 29a4bb4d9159ef337b3a80615c8a9f9f70f3b9bd Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Wed, 16 Mar 2011 17:51:27 -0400 Subject: [PATCH 122/146] better formatting for RSVPs --- plugins/Event/EventPlugin.php | 6 ++- plugins/Event/RSVP.php | 93 +++++++++++++++++++++++++++++++++-- theme/rebase/css/display.css | 4 ++ 3 files changed, 97 insertions(+), 6 deletions(-) diff --git a/plugins/Event/EventPlugin.php b/plugins/Event/EventPlugin.php index 1a43bac348..038e110627 100644 --- a/plugins/Event/EventPlugin.php +++ b/plugins/Event/EventPlugin.php @@ -324,7 +324,11 @@ class EventPlugin extends MicroappPlugin function showRSVPNotice($notice, $out) { - $out->raw($notice->rendered); + $rsvp = RSVP::fromNotice($notice); + + $out->elementStart('div', 'rsvp'); + $out->raw($rsvp->asHTML()); + $out->elementEnd('div'); return; } diff --git a/plugins/Event/RSVP.php b/plugins/Event/RSVP.php index fad87aabc8..7b61cc34ad 100644 --- a/plugins/Event/RSVP.php +++ b/plugins/Event/RSVP.php @@ -180,12 +180,9 @@ class RSVP extends Managed_DataObject // XXX: come up with something sexier - $content = sprintf(_('RSVPed %s for an event.'), - ($verb == RSVP::POSITIVE) ? _('positively') : - ($verb == RSVP::NEGATIVE) ? _('negatively') : - _('possibly')); + $content = $rsvp->asString(); - $rendered = $content; + $rendered = $rsvp->asHTML(); $options = array_merge(array('object_type' => $verb), $options); @@ -276,4 +273,90 @@ class RSVP extends Managed_DataObject return $rsvps; } + + function getProfile() + { + $profile = Profile::staticGet('id', $this->profile_id); + if (empty($profile)) { + throw new Exception("No profile with ID {$this->profile_id}"); + } + return $profile; + } + + function getEvent() + { + $event = Happening::staticGet('id', $this->event_id); + if (empty($event)) { + throw new Exception("No event with ID {$this->event_id}"); + } + return $event; + } + + function asHTML() + { + return self::toHTML($this->getProfile(), + $this->getEvent(), + $this->response); + } + + function asString() + { + return self::toString($this->getProfile(), + $this->getEvent(), + $this->response); + } + + static function toHTML($profile, $event, $response) + { + $fmt = null; + + $notice = $event->getNotice(); + + switch ($response) { + case 'Y': + $fmt = _("%2s is attending %4s."); + break; + case 'N': + $fmt = _("%2s is not attending %4s."); + break; + case '?': + $fmt = _("%2s might attend %4s."); + break; + default: + throw new Exception("Unknown response code {$response}"); + break; + } + + return sprintf($fmt, + htmlspecialchars($profile->profileurl), + htmlspecialchars($profile->getBestName()), + htmlspecialchars($notice->bestUrl()), + htmlspecialchars($event->title)); + } + + static function toString($profile, $event, $response) + { + $fmt = null; + + $notice = $event->getNotice(); + + switch ($response) { + case 'Y': + $fmt = _("%1s is attending %2s."); + break; + case 'N': + $fmt = _("%1s is not attending %2s."); + break; + case '?': + $fmt = _("%1s might attend %2s.>"); + break; + default: + throw new Exception("Unknown response code {$response}"); + break; + } + + return sprintf($fmt, + $profile->getBestName(), + $event->title); + } } diff --git a/theme/rebase/css/display.css b/theme/rebase/css/display.css index ee88b312a7..6c3c9e6296 100644 --- a/theme/rebase/css/display.css +++ b/theme/rebase/css/display.css @@ -451,6 +451,10 @@ address .poweredby { overflow:visible; } +.notice .automatic { +font-style:italic; +} + #showstream h1 { display:none; } From 59515d5976504bd5b08598ef0b3e3160c52bece6 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Wed, 16 Mar 2011 14:52:42 -0700 Subject: [PATCH 123/146] Extended profile - don't show rel for empty phone number --- plugins/ExtendedProfile/extendedprofilewidget.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/plugins/ExtendedProfile/extendedprofilewidget.php b/plugins/ExtendedProfile/extendedprofilewidget.php index b507713f06..53cb5d3b87 100644 --- a/plugins/ExtendedProfile/extendedprofilewidget.php +++ b/plugins/ExtendedProfile/extendedprofilewidget.php @@ -160,9 +160,11 @@ class ExtendedProfileWidget extends Form protected function showPhone($name, $field) { $this->out->elementStart('div', array('class' => 'phone-display')); - $this->out->text($field['value']); - if (!empty($field['rel'])) { - $this->out->text(' (' . $field['rel'] . ')'); + if (!empty($field['value'])) { + $this->out->text($field['value']); + if (!empty($field['rel'])) { + $this->out->text(' (' . $field['rel'] . ')'); + } } $this->out->elementEnd('div'); } From 0bf40bd74807cdb1a62a6d7f073fe4bf83edf6fb Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Wed, 16 Mar 2011 14:54:14 -0700 Subject: [PATCH 124/146] Output avatar/author along with ProfileNoticeListItem items on ShowProfileAction -- they get hidden in CSS anyway, and we need the author data for the inline reply form if you end up replying to yourself/someone else from a profile stream view. Note that the other modification -- of the repeat line -- is still going to be inconsistent between things originally on the page and anything that comes over Realtime. --- actions/showstream.php | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/actions/showstream.php b/actions/showstream.php index 08f8a3e80e..10085d94d7 100644 --- a/actions/showstream.php +++ b/actions/showstream.php @@ -279,6 +279,18 @@ class ShowstreamAction extends ProfileAction // We don't show the author for a profile, since we already know who it is! +/** + * Slightly modified from standard list; the author & avatar are hidden + * in CSS. We used to remove them here too, but as it turns out that + * confuses the inline reply code... and we hide them in CSS anyway + * since realtime updates come through in original form. + * + * Remaining customization right now is for the repeat marker, where + * it'll list who the original poster was instead of who did the repeat + * (since the repeater is you, and the repeatee isn't shown!) + * This will remain inconsistent if realtime updates come through, + * since those'll get rendered as a regular NoticeListItem. + */ class ProfileNoticeList extends NoticeList { function newListItem($notice) @@ -289,11 +301,6 @@ class ProfileNoticeList extends NoticeList class ProfileNoticeListItem extends DoFollowListItem { - function showAuthor() - { - return; - } - /** * show a link to the author of repeat * From 09a4cebd477d0531bba2d1fb9234d01ddba29bfa Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Wed, 16 Mar 2011 15:01:58 -0700 Subject: [PATCH 125/146] fix flushrouter.php -- tried to call Cache::delete statically --- scripts/flushrouter.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/flushrouter.php b/scripts/flushrouter.php index 79493eae49..51178a725c 100644 --- a/scripts/flushrouter.php +++ b/scripts/flushrouter.php @@ -28,6 +28,7 @@ END_OF_FLUSHROUTER_HELP; require_once INSTALLDIR.'/scripts/commandline.inc'; -Cache::delete(Router::cacheKey()); +$cache = Cache::instance(); +$cache->delete(Router::cacheKey()); print "OK.\n"; \ No newline at end of file From 42a4b1d90cdb45384c1787df2bb690f166e30216 Mon Sep 17 00:00:00 2001 From: Samantha Doherty Date: Wed, 16 Mar 2011 18:20:40 -0400 Subject: [PATCH 126/146] Bit of quick styling for Events. --- theme/neo/css/display.css | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/theme/neo/css/display.css b/theme/neo/css/display.css index 92da5977ef..b13a74d667 100644 --- a/theme/neo/css/display.css +++ b/theme/neo/css/display.css @@ -1144,5 +1144,38 @@ table.profile_list tr.alt { font-size: 0em; } +/* Event specific styles */ + +#form_event_rsvp #new_rsvp_data { + display: inline; + margin: 10px 0px; +} + +#form_event_rsvp input.submit { + height: 1.6em; + padding: 0px 10px; + margin-left: 10px; + color:#fff; + font-weight: bold; + text-transform: uppercase; + font-size: 1.1em; + text-shadow: 0px -1px 0px rgba(0, 0, 0, 0.2); + border: 1px solid #d7621c; + border-radius: 4px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + background: #FB6104; + background: -moz-linear-gradient(top, #ff9d63 , #FB6104); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ff9d63), color-stop(100%,#FB6104)); + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ff9d63', endColorstr='#FB6104',GradientType=0 ); +} + +#form_event_rsvp .notice input.submit:hover { + text-shadow: 0px -1px 0px rgba(0, 0, 0, 0.6); + background: #ff9d63; + background: -moz-linear-gradient(top, #FB6104 , #fc8035); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#FB6104), color-stop(100%,#fc8035)); + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#FB6104', endColorstr='#fc8035',GradientType=0 ); +} }/*end of @media screen, projection, tv*/ From 0791d0034fae2699b616b27c307010a061b17b29 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Wed, 16 Mar 2011 18:53:46 -0400 Subject: [PATCH 127/146] return Ajax-y XML on exceptions --- lib/action.php | 5 +++++ lib/error.php | 29 ++++++++++++++++++++++++++++- lib/statusnet.php | 11 +++++++++++ 3 files changed, 44 insertions(+), 1 deletion(-) diff --git a/lib/action.php b/lib/action.php index 51d7e8923e..20de71aec1 100644 --- a/lib/action.php +++ b/lib/action.php @@ -83,6 +83,11 @@ class Action extends HTMLOutputter // lawsuit function prepare($argarray) { $this->args =& common_copy_args($argarray); + + if ($this->boolean('ajax')) { + StatusNet::setAjax(true); + } + return true; } diff --git a/lib/error.php b/lib/error.php index d234ab92b2..4024a9affc 100644 --- a/lib/error.php +++ b/lib/error.php @@ -68,7 +68,11 @@ class ErrorAction extends InfoAction function showPage() { - if ($this->minimal) { + if (StatusNet::isAjax()) { + $this->extraHeaders(); + $this->ajaxErrorMsg(); + exit(); + } if ($this->minimal) { // Even more minimal -- we're in a machine API // and don't want to flood the output. $this->extraHeaders(); @@ -94,4 +98,27 @@ class ErrorAction extends InfoAction function showNoticeForm() { } + + /** + * Show an Ajax-y error message + * + * Goes back to the browser, where it's shown in a popup. + * + * @param string $msg Message to show + * + * @return void + */ + + function ajaxErrorMsg() + { + $this->startHTML('text/xml;charset=utf-8', true); + $this->elementStart('head'); + // TRANS: Page title after an AJAX error occurs on the send notice page. + $this->element('title', null, _('Ajax Error')); + $this->elementEnd('head'); + $this->elementStart('body'); + $this->element('p', array('id' => 'error'), $this->message); + $this->elementEnd('body'); + $this->elementEnd('html'); + } } diff --git a/lib/statusnet.php b/lib/statusnet.php index 4c2aacd8f7..648369ec44 100644 --- a/lib/statusnet.php +++ b/lib/statusnet.php @@ -31,6 +31,7 @@ class StatusNet { protected static $have_config; protected static $is_api; + protected static $is_ajax; protected static $plugins = array(); /** @@ -230,6 +231,16 @@ class StatusNet self::$is_api = $mode; } + public function isAjax() + { + return self::$is_ajax; + } + + public function setAjax($mode) + { + self::$is_ajax = $mode; + } + /** * Build default configuration array * @return array From f8859aa3aa30bc5f9cce62675cf4a94e9c8a3dad Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Wed, 16 Mar 2011 15:55:40 -0700 Subject: [PATCH 128/146] Tag subscriptions management UI for TagSub plugin --- plugins/TagSub/TagSubPlugin.php | 15 +++++---- plugins/TagSub/tagsubsaction.php | 57 ++++++++++++++++++++++---------- 2 files changed, 47 insertions(+), 25 deletions(-) diff --git a/plugins/TagSub/TagSubPlugin.php b/plugins/TagSub/TagSubPlugin.php index ff6c038bc3..53a06ab5bf 100644 --- a/plugins/TagSub/TagSubPlugin.php +++ b/plugins/TagSub/TagSubPlugin.php @@ -78,6 +78,7 @@ class TagSubPlugin extends Plugin return false; case 'TagsubAction': case 'TagunsubAction': + case 'TagsubsAction': case 'TagSubForm': case 'TagUnsubForm': include_once $dir.'/'.strtolower($cls).'.php'; @@ -196,12 +197,12 @@ class TagSubPlugin extends Plugin $action = $widget->out; $action_name = $action->trimmed('action'); - $widget->item('tagsubs', - array(), - // TRANS: SubMirror plugin menu item on user settings page. - _m('MENU', 'Tags'), - // TRANS: SubMirror plugin tooltip for user settings menu item. - _m('Configure tag subscriptions')); + $action->menuItem(common_local_url('tagsubs', array('nickname' => $action->user->nickname)), + // TRANS: SubMirror plugin menu item on user settings page. + _m('MENU', 'Tags'), + // TRANS: SubMirror plugin tooltip for user settings menu item. + _m('Configure tag subscriptions'), + $action_name == 'tagsubs' && $action->arg('nickname') == $action->user->nickname); return true; } @@ -222,7 +223,7 @@ class TagSubPlugin extends Plugin $entry = array( 'id' => 'tagsubs', 'label' => _m('Tag subscriptions'), - 'link' => common_local_url('tagsubs'), + 'link' => common_local_url('tagsubs', array('nickname' => $profile->nickname)), 'value' => $tagsub->count(), ); diff --git a/plugins/TagSub/tagsubsaction.php b/plugins/TagSub/tagsubsaction.php index 78156fa7b0..f11935229b 100644 --- a/plugins/TagSub/tagsubsaction.php +++ b/plugins/TagSub/tagsubsaction.php @@ -65,12 +65,12 @@ class TagSubsAction extends GalleryAction $this->element('p', null, // TRANS: Page notice for page with an overview of all tag subscriptions // TRANS: of the logged in user's own profile. - _m('You have subscribed to receive all notices on this site containing the following tags.')); + _m('You have subscribed to receive all notices on this site containing the following tags:')); } else { $this->element('p', null, // TRANS: Page notice for page with an overview of all subscriptions of a user other // TRANS: than the logged in user. %s is the user nickname. - sprintf(_m('%s has subscribed to receive all notices on this site containing the following tags.'), + sprintf(_m('%s has subscribed to receive all notices on this site containing the following tags:'), $this->profile->nickname)); } } @@ -87,8 +87,7 @@ class TagSubsAction extends GalleryAction $tagsub = new TagSub(); $tagsub->profile_id = $this->user->id; - $tagsub->limit($limit); - $tagsub->offset($offset); + $tagsub->limit($limit, $offset); $tagsub->find(); if ($tagsub->N) { @@ -97,6 +96,8 @@ class TagSubsAction extends GalleryAction if (0 == $cnt) { $this->showEmptyListMessage(); } + } else { + $this->showEmptyListMessage(); } $this->pagination($this->page > 1, $cnt > PROFILES_PER_PAGE, @@ -113,18 +114,13 @@ class TagSubsAction extends GalleryAction if (common_logged_in()) { $current_user = common_current_user(); if ($this->user->id === $current_user->id) { - // TRANS: Subscription list text when the logged in user has no subscriptions. - // TRANS: This message contains Markdown URLs. The link description is between - // TRANS: square brackets, and the link between parentheses. Do not separate "](" - // TRANS: and do not change the URL part. - $message = _('You\'re not listening to anyone\'s notices right now, try subscribing to people you know. '. - 'Try [people search](%%action.peoplesearch%%), look for members in groups you\'re interested '. - 'in and in our [featured users](%%action.featured%%). '. - 'If you\'re a [Twitter user](%%action.twittersettings%%), you can automatically subscribe to '. - 'people you already follow there.'); + // TRANS: Tag subscription list text when the logged in user has no tag subscriptions. + $message = _('You\'re not listening to any hash tags right now. You can push the "Subscribe" button ' . + 'on any hashtag page to automatically receive any public messages on this site that use that ' . + 'tag, even if you\'re not subscribed to the poster.'); } else { - // TRANS: Subscription list text when looking at the subscriptions for a of a user other - // TRANS: than the logged in user that has no subscriptions. %s is the user nickname. + // TRANS: Tag subscription list text when looking at the subscriptions for a of a user other + // TRANS: than the logged in user that has no tag subscriptions. %s is the user nickname. $message = sprintf(_('%s is not listening to any tags.'), $this->user->nickname); } } @@ -152,22 +148,47 @@ class TagSubscriptionsList extends SubscriptionList class TagSubscriptionsListItem extends SubscriptionListItem { + function startItem() + { + $this->out->elementStart('li', array('class' => 'tagsub')); + } + function showProfile() { - $this->startProfile(); + $tagsub = $this->profile; + $tag = $tagsub->tag; + // Relevant portion! $cur = common_current_user(); if (!empty($cur) && $cur->id == $this->owner->id) { $this->showOwnerControls(); } - $this->endProfile(); + + $url = common_local_url('tag', array('tag' => $tag)); + $linkline = sprintf(_m('#%s since %s'), + htmlspecialchars($url), + htmlspecialchars($tag), + common_date_string($tagsub->created)); + + $this->out->elementStart('div', 'tagsub-item'); + $this->out->raw($linkline); + $this->out->element('div', array('style' => 'clear: both')); + $this->out->elementEnd('div'); + } + + function showActions() + { } function showOwnerControls() { + $this->out->elementStart('div', 'entity_actions'); + $tagsub = $this->profile; // ? - $form = new TagSubForm($this->out, $tagsub->tag); + $form = new TagUnsubForm($this->out, $tagsub->tag); $form->show(); + + $this->out->elementEnd('div'); return; } } From 1b82589b8f12d75fecf7c5bac80094eae37070ac Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Wed, 16 Mar 2011 19:08:35 -0400 Subject: [PATCH 129/146] better date handling in events --- plugins/Event/EventPlugin.php | 14 ++++---- plugins/Event/newevent.php | 67 ++++++++++++++++++++++++++++------- 2 files changed, 62 insertions(+), 19 deletions(-) diff --git a/plugins/Event/EventPlugin.php b/plugins/Event/EventPlugin.php index 038e110627..5a6add9385 100644 --- a/plugins/Event/EventPlugin.php +++ b/plugins/Event/EventPlugin.php @@ -246,11 +246,11 @@ class EventPlugin extends MicroappPlugin $obj->extra[] = array('dtstart', array('xmlns' => 'urn:ietf:params:xml:ns:xcal'), - common_date_iso8601($happening->start_date)); + common_date_iso8601($happening->start_time)); $obj->extra[] = array('dtend', array('xmlns' => 'urn:ietf:params:xml:ns:xcal'), - common_date_iso8601($happening->end_date)); + common_date_iso8601($happening->end_time)); // XXX: probably need other stuff here @@ -355,11 +355,11 @@ class EventPlugin extends MicroappPlugin $out->elementEnd('h3'); // VEVENT/H3 OUT - $startDate = strftime("%x", $event->start_time); - $startTime = strftime("%R", $event->start_time); + $startDate = strftime("%x", strtotime($event->start_time)); + $startTime = strftime("%R", strtotime($event->start_time)); - $endDate = strftime("%x", $event->end_time); - $endTime = strftime("%R", $event->end_time); + $endDate = strftime("%x", strtotime($event->end_time)); + $endTime = strftime("%R", strtotime($event->end_time)); // FIXME: better dates @@ -368,7 +368,7 @@ class EventPlugin extends MicroappPlugin $out->element('strong', null, _('Time:')); $out->element('abbr', array('class' => 'dtstart', - 'title' => common_date_iso8601()), + 'title' => common_date_iso8601($event->start_time)), $startDate . ' ' . $startTime); $out->text(' - '); if ($startDate == $endDate) { diff --git a/plugins/Event/newevent.php b/plugins/Event/newevent.php index 0f5635487b..5551e0ce2c 100644 --- a/plugins/Event/newevent.php +++ b/plugins/Event/newevent.php @@ -52,8 +52,8 @@ class NeweventAction extends Action protected $title = null; protected $location = null; protected $description = null; - protected $start_time = null; - protected $end_time = null; + protected $startTime = null; + protected $endTime = null; /** * Returns the title of the action @@ -90,17 +90,60 @@ class NeweventAction extends Action } $this->title = $this->trimmed('title'); + + if (empty($this->title)) { + throw new ClientException(_('Title required.')); + } + $this->location = $this->trimmed('location'); $this->url = $this->trimmed('url'); $this->description = $this->trimmed('description'); - $start_date = $this->trimmed('start_date'); - $start_time = $this->trimmed('start_time'); - $end_date = $this->trimmed('end_date'); - $end_time = $this->trimmed('end_time'); + $startDate = $this->trimmed('startdate'); - $this->start_time = strtotime($start_date . ' ' . $start_time); - $this->end_time = strtotime($end_date . ' ' . $end_time); + if (empty($startDate)) { + throw new ClientException(_('Start date required.')); + } + + $startTime = $this->trimmed('starttime'); + + if (empty($startTime)) { + $startTime = '00:00'; + } + + $endDate = $this->trimmed('enddate'); + + if (empty($endDate)) { + throw new ClientException(_('End date required.')); + } + + $endTime = $this->trimmed('endtime'); + + if (empty($endTime)) { + $endTime = '00:00'; + } + + $start = $startDate . ' ' . $startTime; + + common_debug("Event start: '$start'"); + + $end = $endDate . ' ' . $endTime; + + common_debug("Event start: '$end'"); + + $this->startTime = strtotime($start); + $this->endTime = strtotime($end); + + if ($this->startTime == 0) { + throw new Exception(sprintf(_('Could not parse date "%s"'), + $start)); + } + + + if ($this->endTime == 0) { + throw new Exception(sprintf(_('Could not parse date "%s"'), + $end)); + } return true; } @@ -139,19 +182,19 @@ class NeweventAction extends Action throw new ClientException(_('Event must have a title.')); } - if (empty($this->start_time)) { + if (empty($this->startTime)) { throw new ClientException(_('Event must have a start time.')); } - if (empty($this->end_time)) { + if (empty($this->endTime)) { throw new ClientException(_('Event must have an end time.')); } $profile = $this->user->getProfile(); $saved = Happening::saveNew($profile, - $this->start_time, - $this->end_time, + $this->startTime, + $this->endTime, $this->title, $this->location, $this->description, From 88d31a793398fca66b50e588c573153b8d402da6 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Wed, 16 Mar 2011 16:08:49 -0700 Subject: [PATCH 130/146] Extended profile - move some files around and rename stuff to follow plugin conventions --- .../ExtendedProfile/ExtendedProfilePlugin.php | 20 +++++++++++-------- .../profiledetail.php} | 0 .../profiledetailsettings.php} | 14 +++++++------ .../{action => actions}/userautocomplete.php | 0 .../{ => classes}/Profile_detail.php | 0 .../{ => lib}/extendedprofile.php | 0 .../{ => lib}/extendedprofilewidget.php | 0 7 files changed, 20 insertions(+), 14 deletions(-) rename plugins/ExtendedProfile/{profiledetailaction.php => actions/profiledetail.php} (100%) rename plugins/ExtendedProfile/{profiledetailsettingsaction.php => actions/profiledetailsettings.php} (98%) rename plugins/ExtendedProfile/{action => actions}/userautocomplete.php (100%) rename plugins/ExtendedProfile/{ => classes}/Profile_detail.php (100%) rename plugins/ExtendedProfile/{ => lib}/extendedprofile.php (100%) rename plugins/ExtendedProfile/{ => lib}/extendedprofilewidget.php (100%) diff --git a/plugins/ExtendedProfile/ExtendedProfilePlugin.php b/plugins/ExtendedProfile/ExtendedProfilePlugin.php index 127c91a543..3e6aa5f860 100644 --- a/plugins/ExtendedProfile/ExtendedProfilePlugin.php +++ b/plugins/ExtendedProfile/ExtendedProfilePlugin.php @@ -53,22 +53,26 @@ class ExtendedProfilePlugin extends Plugin */ function onAutoload($cls) { - $lower = strtolower($cls); + $dir = dirname(__FILE__); - switch ($lower) + switch (strtolower($cls)) { - case 'extendedprofile': - case 'extendedprofilewidget': case 'profiledetailaction': case 'profiledetailsettingsaction': - require_once dirname(__FILE__) . '/' . $lower . '.php'; - return false; case 'userautocompleteaction': - require_once dirname(__FILE__) . '/action/' . mb_substr($lower, 0, -6) . '.php'; + include_once $dir . '/actions/' + . strtolower(mb_substr($cls, 0, -6)) . '.php'; return false; + break; // Safety first! + case 'extendedprofile': + case 'extendedprofilewidget': + include_once $dir . '/lib/' . strtolower($cls) . '.php'; + return false; + break; case 'profile_detail': - require_once dirname(__FILE__) . '/' . ucfirst($lower) . '.php'; + include_once $dir . '/classes/' . ucfirst($cls) . '.php'; return false; + break; default: return true; } diff --git a/plugins/ExtendedProfile/profiledetailaction.php b/plugins/ExtendedProfile/actions/profiledetail.php similarity index 100% rename from plugins/ExtendedProfile/profiledetailaction.php rename to plugins/ExtendedProfile/actions/profiledetail.php diff --git a/plugins/ExtendedProfile/profiledetailsettingsaction.php b/plugins/ExtendedProfile/actions/profiledetailsettings.php similarity index 98% rename from plugins/ExtendedProfile/profiledetailsettingsaction.php rename to plugins/ExtendedProfile/actions/profiledetailsettings.php index 4a2045cefb..23a6ce5d65 100644 --- a/plugins/ExtendedProfile/profiledetailsettingsaction.php +++ b/plugins/ExtendedProfile/actions/profiledetailsettings.php @@ -139,12 +139,14 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction function parseDate($fieldname, $datestr, $required = false) { - if (empty($datestr) && $required) { - $msg = sprintf( - _m('You must supply a date for "%s".'), - $fieldname - ); - throw new Exception($msg); + if (empty($datestr)) { + if ($required) { + $msg = sprintf( + _m('You must supply a date for "%s".'), + $fieldname + ); + throw new Exception($msg); + } } else { $ts = strtotime($datestr); if ($ts === false) { diff --git a/plugins/ExtendedProfile/action/userautocomplete.php b/plugins/ExtendedProfile/actions/userautocomplete.php similarity index 100% rename from plugins/ExtendedProfile/action/userautocomplete.php rename to plugins/ExtendedProfile/actions/userautocomplete.php diff --git a/plugins/ExtendedProfile/Profile_detail.php b/plugins/ExtendedProfile/classes/Profile_detail.php similarity index 100% rename from plugins/ExtendedProfile/Profile_detail.php rename to plugins/ExtendedProfile/classes/Profile_detail.php diff --git a/plugins/ExtendedProfile/extendedprofile.php b/plugins/ExtendedProfile/lib/extendedprofile.php similarity index 100% rename from plugins/ExtendedProfile/extendedprofile.php rename to plugins/ExtendedProfile/lib/extendedprofile.php diff --git a/plugins/ExtendedProfile/extendedprofilewidget.php b/plugins/ExtendedProfile/lib/extendedprofilewidget.php similarity index 100% rename from plugins/ExtendedProfile/extendedprofilewidget.php rename to plugins/ExtendedProfile/lib/extendedprofilewidget.php From 7d202e9c616775ab9e79b910af2061200d245a14 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Wed, 16 Mar 2011 16:10:43 -0700 Subject: [PATCH 131/146] Detect and show AJAX errors on FormXHR submission handling. Previously we threw away errore reported by the actual AJAX submission and only used whatever error the browser reported to us; this didn't help if we reached the server ok but had a problem there. We now extract the #error if given and use that in the alert(). Also should now show 'Unknown error' instead of a crappy generic 'something died in jQuery' when we get a 200 response but bogus return data. --- js/util.js | 22 ++++++++++++++++++++-- js/util.min.js | 2 +- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/js/util.js b/js/util.js index 966df4d93f..31e574a3a8 100644 --- a/js/util.js +++ b/js/util.js @@ -253,16 +253,34 @@ var SN = { // StatusNet .attr(SN.C.S.Disabled, SN.C.S.Disabled); }, error: function (xhr, textStatus, errorThrown) { - alert(errorThrown || textStatus); + // If the server end reported an error from StatusNet, + // find it -- otherwise we'll see what was reported + // from the browser. + var errorReported = null; + if (xhr.responseXML) { + errorReported = $('#error', xhr.responseXML).text(); + } + alert(errorReported || errorThrown || textStatus); + + // Restore the form to original state. + // Hopefully. :D + form + .removeClass(SN.C.S.Processing) + .find('.submit') + .removeClass(SN.C.S.Disabled) + .removeAttr(SN.C.S.Disabled); }, success: function(data, textStatus) { if (typeof($('form', data)[0]) != 'undefined') { form_new = document._importNode($('form', data)[0], true); form.replaceWith(form_new); } - else { + else if (typeof($('p', data)[0]) != 'undefined') { form.replaceWith(document._importNode($('p', data)[0], true)); } + else { + alert('Unknown error.'); + } } }); }, diff --git a/js/util.min.js b/js/util.min.js index 26ae7494cb..afc41802d0 100644 --- a/js/util.min.js +++ b/js/util.min.js @@ -1 +1 @@ -var SN={C:{I:{CounterBlackout:false,MaxLength:140,PatternUsername:/^[0-9a-zA-Z\-_.]*$/,HTTP20x30x:[200,201,202,203,204,205,206,300,301,302,303,304,305,306,307],NoticeFormMaster:null},S:{Disabled:"disabled",Warning:"warning",Error:"error",Success:"success",Processing:"processing",CommandResult:"command_result",FormNotice:"form_notice",NoticeDataGeo:"notice_data-geo",NoticeDataGeoCookie:"NoticeDataGeo",NoticeDataGeoSelected:"notice_data-geo_selected",StatusNetInstance:"StatusNetInstance"}},messages:{},msg:function(a){if(typeof SN.messages[a]=="undefined"){return"["+a+"]"}else{return SN.messages[a]}},U:{FormNoticeEnhancements:function(b){if(jQuery.data(b[0],"ElementData")===undefined){MaxLength=b.find(".count").text();if(typeof(MaxLength)=="undefined"){MaxLength=SN.C.I.MaxLength}jQuery.data(b[0],"ElementData",{MaxLength:MaxLength});SN.U.Counter(b);NDT=b.find(".notice_data-text:first");NDT.bind("keyup",function(c){SN.U.Counter(b)});var a=function(c){window.setTimeout(function(){SN.U.Counter(b)},50)};NDT.bind("cut",a).bind("paste",a)}else{b.find(".count").text(jQuery.data(b[0],"ElementData").MaxLength)}},Counter:function(d){SN.C.I.FormNoticeCurrent=d;var b=jQuery.data(d[0],"ElementData").MaxLength;if(b<=0){return}var c=b-SN.U.CharacterCount(d);var a=d.find(".count");if(c.toString()!=a.text()){if(!SN.C.I.CounterBlackout||c===0){if(a.text()!=String(c)){a.text(c)}if(c<0){d.addClass(SN.C.S.Warning)}else{d.removeClass(SN.C.S.Warning)}if(!SN.C.I.CounterBlackout){SN.C.I.CounterBlackout=true;SN.C.I.FormNoticeCurrent=d;window.setTimeout("SN.U.ClearCounterBlackout(SN.C.I.FormNoticeCurrent);",500)}}}},CharacterCount:function(a){return a.find(".notice_data-text:first").val().length},ClearCounterBlackout:function(a){SN.C.I.CounterBlackout=false;SN.U.Counter(a)},RewriteAjaxAction:function(a){if(document.location.protocol=="https:"&&a.substr(0,5)=="http:"){return a.replace(/^http:\/\/[^:\/]+/,"https://"+document.location.host)}else{return a}},FormXHR:function(a){$.ajax({type:"POST",dataType:"xml",url:SN.U.RewriteAjaxAction(a.attr("action")),data:a.serialize()+"&ajax=1",beforeSend:function(b){a.addClass(SN.C.S.Processing).find(".submit").addClass(SN.C.S.Disabled).attr(SN.C.S.Disabled,SN.C.S.Disabled)},error:function(c,d,b){alert(b||d)},success:function(b,c){if(typeof($("form",b)[0])!="undefined"){form_new=document._importNode($("form",b)[0],true);a.replaceWith(form_new)}else{a.replaceWith(document._importNode($("p",b)[0],true))}}})},FormNoticeXHR:function(b){SN.C.I.NoticeDataGeo={};b.append('');b.attr("action",SN.U.RewriteAjaxAction(b.attr("action")));var c=function(d,e){b.append($('

                        ').addClass(d).text(e))};var a=function(){b.find(".form_response").remove()};b.ajaxForm({dataType:"xml",timeout:"60000",beforeSend:function(d){if(b.find(".notice_data-text:first").val()==""){b.addClass(SN.C.S.Warning);return false}b.addClass(SN.C.S.Processing).find(".submit").addClass(SN.C.S.Disabled).attr(SN.C.S.Disabled,SN.C.S.Disabled);SN.U.normalizeGeoData(b);return true},error:function(f,g,e){b.removeClass(SN.C.S.Processing).find(".submit").removeClass(SN.C.S.Disabled).removeAttr(SN.C.S.Disabled,SN.C.S.Disabled);a();if(g=="timeout"){c("error","Sorry! We had trouble sending your notice. The servers are overloaded. Please try again, and contact the site administrator if this problem persists.")}else{var d=SN.U.GetResponseXML(f);if($("."+SN.C.S.Error,d).length>0){b.append(document._importNode($("."+SN.C.S.Error,d)[0],true))}else{if(parseInt(f.status)===0||jQuery.inArray(parseInt(f.status),SN.C.I.HTTP20x30x)>=0){b.resetForm().find(".attach-status").remove();SN.U.FormNoticeEnhancements(b)}else{c("error","(Sorry! We had trouble sending your notice ("+f.status+" "+f.statusText+"). Please report the problem to the site administrator if this happens again.")}}}},success:function(i,f){a();var n=$("#"+SN.C.S.Error,i);if(n.length>0){c("error",n.text())}else{if($("body")[0].id=="bookmarklet"){self.close()}var d=$("#"+SN.C.S.CommandResult,i);if(d.length>0){c("success",d.text())}else{var m=document._importNode($("li",i)[0],true);var k=$("#notices_primary .notices:first");var l=b.closest("li.notice-reply");if(l.length>0){var e=$(m).attr("id");if($("#"+e).length==0){var j=l.closest("li.notice");l.replaceWith(m);SN.U.NoticeInlineReplyPlaceholder(j)}else{l.remove()}}else{if(k.length>0&&SN.U.belongsOnTimeline(m)){if($("#"+m.id).length===0){var h=b.find("[name=inreplyto]").val();var g="#notices_primary #notice-"+h;if($("body")[0].id=="conversation"){if(h.length>0&&$(g+" .notices").length<1){$(g).append('
                          ')}$($(g+" .notices")[0]).append(m)}else{k.prepend(m)}$("#"+m.id).css({display:"none"}).fadeIn(2500);SN.U.NoticeWithAttachment($("#"+m.id));SN.U.switchInputFormTab("placeholder")}}else{c("success",$("title",i).text())}}}b.resetForm();b.find("[name=inreplyto]").val("");b.find(".attach-status").remove();SN.U.FormNoticeEnhancements(b)}},complete:function(d,e){b.removeClass(SN.C.S.Processing).find(".submit").removeAttr(SN.C.S.Disabled).removeClass(SN.C.S.Disabled);b.find("[name=lat]").val(SN.C.I.NoticeDataGeo.NLat);b.find("[name=lon]").val(SN.C.I.NoticeDataGeo.NLon);b.find("[name=location_ns]").val(SN.C.I.NoticeDataGeo.NLNS);b.find("[name=location_id]").val(SN.C.I.NoticeDataGeo.NLID);b.find("[name=notice_data-geo]").attr("checked",SN.C.I.NoticeDataGeo.NDG)}})},normalizeGeoData:function(a){SN.C.I.NoticeDataGeo.NLat=a.find("[name=lat]").val();SN.C.I.NoticeDataGeo.NLon=a.find("[name=lon]").val();SN.C.I.NoticeDataGeo.NLNS=a.find("[name=location_ns]").val();SN.C.I.NoticeDataGeo.NLID=a.find("[name=location_id]").val();SN.C.I.NoticeDataGeo.NDG=a.find("[name=notice_data-geo]").attr("checked");var b=$.cookie(SN.C.S.NoticeDataGeoCookie);if(b!==null&&b!="disabled"){b=JSON.parse(b);SN.C.I.NoticeDataGeo.NLat=a.find("[name=lat]").val(b.NLat).val();SN.C.I.NoticeDataGeo.NLon=a.find("[name=lon]").val(b.NLon).val();if(b.NLNS){SN.C.I.NoticeDataGeo.NLNS=a.find("[name=location_ns]").val(b.NLNS).val();SN.C.I.NoticeDataGeo.NLID=a.find("[name=location_id]").val(b.NLID).val()}else{a.find("[name=location_ns]").val("");a.find("[name=location_id]").val("")}}if(b=="disabled"){SN.C.I.NoticeDataGeo.NDG=a.find("[name=notice_data-geo]").attr("checked",false).attr("checked")}else{SN.C.I.NoticeDataGeo.NDG=a.find("[name=notice_data-geo]").attr("checked",true).attr("checked")}},GetResponseXML:function(b){try{return b.responseXML}catch(a){return(new DOMParser()).parseFromString(b.responseText,"text/xml")}},NoticeReply:function(){$("#content .notice_reply").live("click",function(c){c.preventDefault();var b=$(this).closest("li.notice");var a=($(".author .nickname",b).length>0)?$($(".author .nickname",b)[0]):$(".author .nickname.uid");SN.U.NoticeInlineReplyTrigger(b,"@"+a.text());return false})},NoticeReplyTo:function(a){},NoticeInlineReplyTrigger:function(h,i){var b=$($(".notice_id",h)[0]).text();var e=h;var f=h.closest(".notices");if(f.hasClass("threaded-replies")){e=f.closest(".notice")}else{f=$("ul.threaded-replies",h);if(f.length==0){f=$('
                            ');h.append(f)}}var j=$(".notice-reply-form",f);var d=function(){j.find("input[name=inreplyto]").val(b);var m=j.find("textarea");if(m.length==0){throw"No textarea"}var l="";if(i){l=i+" "}m.val(l+m.val().replace(RegExp(l,"i"),""));m.data("initialText",$.trim(i+""));m.focus();if(m[0].setSelectionRange){var k=m.val().length;m[0].setSelectionRange(k,k)}};if(j.length>0){d()}else{f.find("li.notice-reply-placeholder").remove();var g=$("li.notice-reply",f);if(g.length==0){g=$('
                          • ');var c=function(k){var l=document._importNode(k,true);g.append(l);f.append(g);var m=j=$(l);SN.Init.NoticeFormSetup(m);d()};if(SN.C.I.NoticeFormMaster){c(SN.C.I.NoticeFormMaster)}else{var a=$("#form_notice").attr("action");$.get(a,{ajax:1},function(k,m,l){c($("form",k)[0])})}}}},NoticeInlineReplyPlaceholder:function(b){var a=b.find("ul.threaded-replies");var c=$('
                          • ');c.find("input").val(SN.msg("reply_placeholder"));a.append(c)},NoticeInlineReplySetup:function(){$("li.notice-reply-placeholder input").live("focus",function(){var a=$(this).closest("li.notice");SN.U.NoticeInlineReplyTrigger(a);return false})},NoticeRepeat:function(){$(".form_repeat").live("click",function(a){a.preventDefault();SN.U.NoticeRepeatConfirmation($(this));return false})},NoticeRepeatConfirmation:function(a){var c=a.find(".submit");var b=c.clone();b.addClass("submit_dialogbox").removeClass("submit");a.append(b);b.bind("click",function(){SN.U.FormXHR(a);return false});c.hide();a.addClass("dialogbox").append('').closest(".notice-options").addClass("opaque");a.find("button.close").click(function(){$(this).remove();a.removeClass("dialogbox").closest(".notice-options").removeClass("opaque");a.find(".submit_dialogbox").remove();a.find(".submit").show();return false})},NoticeAttachments:function(){$(".notice a.attachment").each(function(){SN.U.NoticeWithAttachment($(this).closest(".notice"))})},NoticeWithAttachment:function(b){if(b.find(".attachment").length===0){return}var a=b.find(".attachment.more");if(a.length>0){$(a[0]).click(function(){var c=$(this);c.addClass(SN.C.S.Processing);$.get(c.attr("href")+"/ajax",null,function(d){c.parent(".entry-content").html($(d).find("#attachment_view .entry-content").html())});return false}).attr("title",SN.msg("showmore_tooltip"))}},NoticeDataAttach:function(b){var a=b.find("input[type=file]");a.change(function(f){b.find(".attach-status").remove();var d=$(this).val();if(!d){return false}var c=$('
                            ');c.find("code").text(d);c.find("button").click(function(){c.remove();a.val("");return false});b.append(c);if(typeof this.files=="object"){for(var e=0;eg){f=false}if(f){h(c,function(j){var i=$("").attr("title",e).attr("alt",e).attr("src",j).attr("style","height: 120px");d.find(".attach-status").append(i)})}else{var b=$("
                            ").text(e);d.find(".attach-status").append(b)}},NoticeLocationAttach:function(a){var e=a.find("[name=lat]");var k=a.find("[name=lon]");var g=a.find("[name=location_ns]").val();var l=a.find("[name=location_id]").val();var b="";var d=a.find("[name=notice_data-geo]");var c=a.find("[name=notice_data-geo]");var j=a.find("label.notice_data-geo");function f(n){j.attr("title",jQuery.trim(j.text())).removeClass("checked");a.find("[name=lat]").val("");a.find("[name=lon]").val("");a.find("[name=location_ns]").val("");a.find("[name=location_id]").val("");a.find("[name=notice_data-geo]").attr("checked",false);$.cookie(SN.C.S.NoticeDataGeoCookie,"disabled",{path:"/"});if(n){a.find(".geo_status_wrapper").removeClass("success").addClass("error");a.find(".geo_status_wrapper .geo_status").text(n)}else{a.find(".geo_status_wrapper").remove()}}function m(n,o){SN.U.NoticeGeoStatus(a,"Looking up place name...");$.getJSON(n,o,function(p){var q,r;if(typeof(p.location_ns)!="undefined"){a.find("[name=location_ns]").val(p.location_ns);q=p.location_ns}if(typeof(p.location_id)!="undefined"){a.find("[name=location_id]").val(p.location_id);r=p.location_id}if(typeof(p.name)=="undefined"){NLN_text=o.lat+";"+o.lon}else{NLN_text=p.name}SN.U.NoticeGeoStatus(a,NLN_text,o.lat,o.lon,p.url);j.attr("title",NoticeDataGeo_text.ShareDisable+" ("+NLN_text+")");a.find("[name=lat]").val(o.lat);a.find("[name=lon]").val(o.lon);a.find("[name=location_ns]").val(q);a.find("[name=location_id]").val(r);a.find("[name=notice_data-geo]").attr("checked",true);var s={NLat:o.lat,NLon:o.lon,NLNS:q,NLID:r,NLN:NLN_text,NLNU:p.url,NDG:true};$.cookie(SN.C.S.NoticeDataGeoCookie,JSON.stringify(s),{path:"/"})})}if(c.length>0){if($.cookie(SN.C.S.NoticeDataGeoCookie)=="disabled"){c.attr("checked",false)}else{c.attr("checked",true)}var h=a.find(".notice_data-geo_wrap");var i=h.attr("data-api");j.attr("title",j.text());c.change(function(){if(c.attr("checked")===true||$.cookie(SN.C.S.NoticeDataGeoCookie)===null){j.attr("title",NoticeDataGeo_text.ShareDisable).addClass("checked");if($.cookie(SN.C.S.NoticeDataGeoCookie)===null||$.cookie(SN.C.S.NoticeDataGeoCookie)=="disabled"){if(navigator.geolocation){SN.U.NoticeGeoStatus(a,"Requesting location from browser...");navigator.geolocation.getCurrentPosition(function(p){a.find("[name=lat]").val(p.coords.latitude);a.find("[name=lon]").val(p.coords.longitude);var q={lat:p.coords.latitude,lon:p.coords.longitude,token:$("#token").val()};m(i,q)},function(p){switch(p.code){case p.PERMISSION_DENIED:f("Location permission denied.");break;case p.TIMEOUT:f("Location lookup timeout.");break}},{timeout:10000})}else{if(e.length>0&&k.length>0){var n={lat:e,lon:k,token:$("#token").val()};m(i,n)}else{f();c.remove();j.remove()}}}else{var o=JSON.parse($.cookie(SN.C.S.NoticeDataGeoCookie));a.find("[name=lat]").val(o.NLat);a.find("[name=lon]").val(o.NLon);a.find("[name=location_ns]").val(o.NLNS);a.find("[name=location_id]").val(o.NLID);a.find("[name=notice_data-geo]").attr("checked",o.NDG);SN.U.NoticeGeoStatus(a,o.NLN,o.NLat,o.NLon,o.NLNU);j.attr("title",NoticeDataGeo_text.ShareDisable+" ("+o.NLN+")").addClass("checked")}}else{f()}}).change()}},NoticeGeoStatus:function(e,a,f,g,c){var h=e.find(".geo_status_wrapper");if(h.length==0){h=$('
                            ');h.find("button.close").click(function(){e.find("[name=notice_data-geo]").removeAttr("checked").change();return false});e.append(h)}var b;if(c){b=$("").attr("href",c)}else{b=$("")}b.text(a);if(f||g){var d=f+";"+g;b.attr("title",d);if(!a){b.text(d)}}h.find(".geo_status").empty().append(b)},NewDirectMessage:function(){NDM=$(".entity_send-a-message a");NDM.attr({href:NDM.attr("href")+"&ajax=1"});NDM.bind("click",function(){var a=$(".entity_send-a-message form");if(a.length===0){$(this).addClass(SN.C.S.Processing);$.get(NDM.attr("href"),null,function(b){$(".entity_send-a-message").append(document._importNode($("form",b)[0],true));a=$(".entity_send-a-message .form_notice");SN.U.FormNoticeXHR(a);SN.U.FormNoticeEnhancements(a);a.append('');$(".entity_send-a-message button").click(function(){a.hide();return false});NDM.removeClass(SN.C.S.Processing)})}else{a.show();$(".entity_send-a-message textarea").focus()}return false})},GetFullYear:function(c,d,a){var b=new Date();b.setFullYear(c,d,a);return b},StatusNetInstance:{Set:function(b){var a=SN.U.StatusNetInstance.Get();if(a!==null){b=$.extend(a,b)}$.cookie(SN.C.S.StatusNetInstance,JSON.stringify(b),{path:"/",expires:SN.U.GetFullYear(2029,0,1)})},Get:function(){var a=$.cookie(SN.C.S.StatusNetInstance);if(a!==null){return JSON.parse(a)}return null},Delete:function(){$.cookie(SN.C.S.StatusNetInstance,null)}},belongsOnTimeline:function(b){var a=$("body").attr("id");if(a=="public"){return true}var c=$("#nav_profile a").attr("href");if(c){var d=$(b).find(".vcard.author a.url").attr("href");if(d==c){if(a=="all"||a=="showstream"){return true}}}return false},switchInputFormTab:function(a){$(".input_form_nav_tab.current").removeClass("current");if(a=="placeholder"){$("#input_form_nav_status").addClass("current")}else{$("#input_form_nav_"+a).addClass("current")}$(".input_form.current").removeClass("current");$("#input_form_"+a).addClass("current").find(".ajax-notice").each(function(){var b=$(this);SN.Init.NoticeFormSetup(b)}).find("textarea:first").focus()}},Init:{NoticeForm:function(){if($("body.user_in").length>0){$("#input_form_placeholder input.placeholder").focus(function(){SN.U.switchInputFormTab("status")});$("body").bind("click",function(g){var d=$("#content .input_forms div.current");if(d.length>0){if($("#content .input_forms").has(g.target).length==0){var a=d.find('textarea, input[type=text], input[type=""]');var c=false;a.each(function(){c=c||$(this).val()});if(!c){SN.U.switchInputFormTab("placeholder")}}}var b=$("li.notice-reply");if(b.length>0){var f=$(g.target);b.each(function(){var j=$(this);if(j.has(g.target).length==0){var h=j.find(".notice_data-text:first");var i=$.trim(h.val());if(i==""||i==h.data("initialText")){var e=j.closest("li.notice");j.remove();SN.U.NoticeInlineReplyPlaceholder(e)}}})}})}},NoticeFormSetup:function(a){if(!a.data("NoticeFormSetup")){SN.U.NoticeLocationAttach(a);SN.U.FormNoticeXHR(a);SN.U.FormNoticeEnhancements(a);SN.U.NoticeDataAttach(a);a.data("NoticeFormSetup",true)}},Notices:function(){if($("body.user_in").length>0){var a=$(".form_notice:first");if(a.length>0){SN.C.I.NoticeFormMaster=document._importNode(a[0],true)}SN.U.NoticeRepeat();SN.U.NoticeReply();SN.U.NoticeInlineReplySetup()}SN.U.NoticeAttachments()},EntityActions:function(){if($("body.user_in").length>0){SN.U.NewDirectMessage()}},Login:function(){if(SN.U.StatusNetInstance.Get()!==null){var a=SN.U.StatusNetInstance.Get().Nickname;if(a!==null){$("#form_login #nickname").val(a)}}$("#form_login").bind("submit",function(){SN.U.StatusNetInstance.Set({Nickname:$("#form_login #nickname").val()});return true})},AjaxForms:function(){$("form.ajax").live("submit",function(){SN.U.FormXHR($(this));return false})},UploadForms:function(){$("input[type=file]").change(function(d){if(typeof this.files=="object"&&this.files.length>0){var c=0;for(var b=0;b0&&c>a){var e="File too large: maximum upload size is %d bytes.";alert(e.replace("%d",a));$(this).val("");d.preventDefault();return false}}})}}};$(document).ready(function(){SN.Init.AjaxForms();SN.Init.UploadForms();if($("."+SN.C.S.FormNotice).length>0){SN.Init.NoticeForm()}if($("#content .notices").length>0){SN.Init.Notices()}if($("#content .entity_actions").length>0){SN.Init.EntityActions()}if($("#form_login").length>0){SN.Init.Login()}});if(!document.ELEMENT_NODE){document.ELEMENT_NODE=1;document.ATTRIBUTE_NODE=2;document.TEXT_NODE=3;document.CDATA_SECTION_NODE=4;document.ENTITY_REFERENCE_NODE=5;document.ENTITY_NODE=6;document.PROCESSING_INSTRUCTION_NODE=7;document.COMMENT_NODE=8;document.DOCUMENT_NODE=9;document.DOCUMENT_TYPE_NODE=10;document.DOCUMENT_FRAGMENT_NODE=11;document.NOTATION_NODE=12}document._importNode=function(e,a){switch(e.nodeType){case document.ELEMENT_NODE:var d=document.createElement(e.nodeName);if(e.attributes&&e.attributes.length>0){for(var c=0,b=e.attributes.length;c0){for(var c=0,b=e.childNodes.length;c0){var j=c.pop();j()}}};window._google_loader_apiLoaded=function(){f()};var d=function(){return(window.google&&google.loader)};var g=function(j){if(d()){return true}h(j);e();return false};e();return{shim:true,type:"ClientLocation",lastPosition:null,getCurrentPosition:function(k,n,o){var m=this;if(!g(function(){m.getCurrentPosition(k,n,o)})){return}if(google.loader.ClientLocation){var l=google.loader.ClientLocation;var j={coords:{latitude:l.latitude,longitude:l.longitude,altitude:null,accuracy:43000,altitudeAccuracy:null,heading:null,speed:null},address:{city:l.address.city,country:l.address.country,country_code:l.address.country_code,region:l.address.region},timestamp:new Date()};k(j);this.lastPosition=j}else{if(n==="function"){n({code:3,message:"Using the Google ClientLocation API and it is not able to calculate a location."})}}},watchPosition:function(j,l,m){this.getCurrentPosition(j,l,m);var k=this;var n=setInterval(function(){k.getCurrentPosition(j,l,m)},10000);return n},clearWatch:function(j){clearInterval(j)},getPermission:function(l,j,k){return true}}});navigator.geolocation=(window.google&&google.gears)?a():b()})()}; \ No newline at end of file +var SN={C:{I:{CounterBlackout:false,MaxLength:140,PatternUsername:/^[0-9a-zA-Z\-_.]*$/,HTTP20x30x:[200,201,202,203,204,205,206,300,301,302,303,304,305,306,307],NoticeFormMaster:null},S:{Disabled:"disabled",Warning:"warning",Error:"error",Success:"success",Processing:"processing",CommandResult:"command_result",FormNotice:"form_notice",NoticeDataGeo:"notice_data-geo",NoticeDataGeoCookie:"NoticeDataGeo",NoticeDataGeoSelected:"notice_data-geo_selected",StatusNetInstance:"StatusNetInstance"}},messages:{},msg:function(a){if(typeof SN.messages[a]=="undefined"){return"["+a+"]"}else{return SN.messages[a]}},U:{FormNoticeEnhancements:function(b){if(jQuery.data(b[0],"ElementData")===undefined){MaxLength=b.find(".count").text();if(typeof(MaxLength)=="undefined"){MaxLength=SN.C.I.MaxLength}jQuery.data(b[0],"ElementData",{MaxLength:MaxLength});SN.U.Counter(b);NDT=b.find(".notice_data-text:first");NDT.bind("keyup",function(c){SN.U.Counter(b)});var a=function(c){window.setTimeout(function(){SN.U.Counter(b)},50)};NDT.bind("cut",a).bind("paste",a)}else{b.find(".count").text(jQuery.data(b[0],"ElementData").MaxLength)}},Counter:function(d){SN.C.I.FormNoticeCurrent=d;var b=jQuery.data(d[0],"ElementData").MaxLength;if(b<=0){return}var c=b-SN.U.CharacterCount(d);var a=d.find(".count");if(c.toString()!=a.text()){if(!SN.C.I.CounterBlackout||c===0){if(a.text()!=String(c)){a.text(c)}if(c<0){d.addClass(SN.C.S.Warning)}else{d.removeClass(SN.C.S.Warning)}if(!SN.C.I.CounterBlackout){SN.C.I.CounterBlackout=true;SN.C.I.FormNoticeCurrent=d;window.setTimeout("SN.U.ClearCounterBlackout(SN.C.I.FormNoticeCurrent);",500)}}}},CharacterCount:function(a){return a.find(".notice_data-text:first").val().length},ClearCounterBlackout:function(a){SN.C.I.CounterBlackout=false;SN.U.Counter(a)},RewriteAjaxAction:function(a){if(document.location.protocol=="https:"&&a.substr(0,5)=="http:"){return a.replace(/^http:\/\/[^:\/]+/,"https://"+document.location.host)}else{return a}},FormXHR:function(a){$.ajax({type:"POST",dataType:"xml",url:SN.U.RewriteAjaxAction(a.attr("action")),data:a.serialize()+"&ajax=1",beforeSend:function(b){a.addClass(SN.C.S.Processing).find(".submit").addClass(SN.C.S.Disabled).attr(SN.C.S.Disabled,SN.C.S.Disabled)},error:function(d,e,c){var b=null;if(d.responseXML){b=$("#error",d.responseXML).text()}alert(b||c||e);a.removeClass(SN.C.S.Processing).find(".submit").removeClass(SN.C.S.Disabled).removeAttr(SN.C.S.Disabled)},success:function(b,c){if(typeof($("form",b)[0])!="undefined"){form_new=document._importNode($("form",b)[0],true);a.replaceWith(form_new)}else{if(typeof($("p",b)[0])!="undefined"){a.replaceWith(document._importNode($("p",b)[0],true))}else{alert("Unknown error.")}}}})},FormNoticeXHR:function(b){SN.C.I.NoticeDataGeo={};b.append('');b.attr("action",SN.U.RewriteAjaxAction(b.attr("action")));var c=function(d,e){b.append($('

                            ').addClass(d).text(e))};var a=function(){b.find(".form_response").remove()};b.ajaxForm({dataType:"xml",timeout:"60000",beforeSend:function(d){if(b.find(".notice_data-text:first").val()==""){b.addClass(SN.C.S.Warning);return false}b.addClass(SN.C.S.Processing).find(".submit").addClass(SN.C.S.Disabled).attr(SN.C.S.Disabled,SN.C.S.Disabled);SN.U.normalizeGeoData(b);return true},error:function(f,g,e){b.removeClass(SN.C.S.Processing).find(".submit").removeClass(SN.C.S.Disabled).removeAttr(SN.C.S.Disabled,SN.C.S.Disabled);a();if(g=="timeout"){c("error","Sorry! We had trouble sending your notice. The servers are overloaded. Please try again, and contact the site administrator if this problem persists.")}else{var d=SN.U.GetResponseXML(f);if($("."+SN.C.S.Error,d).length>0){b.append(document._importNode($("."+SN.C.S.Error,d)[0],true))}else{if(parseInt(f.status)===0||jQuery.inArray(parseInt(f.status),SN.C.I.HTTP20x30x)>=0){b.resetForm().find(".attach-status").remove();SN.U.FormNoticeEnhancements(b)}else{c("error","(Sorry! We had trouble sending your notice ("+f.status+" "+f.statusText+"). Please report the problem to the site administrator if this happens again.")}}}},success:function(i,f){a();var n=$("#"+SN.C.S.Error,i);if(n.length>0){c("error",n.text())}else{if($("body")[0].id=="bookmarklet"){self.close()}var d=$("#"+SN.C.S.CommandResult,i);if(d.length>0){c("success",d.text())}else{var m=document._importNode($("li",i)[0],true);var k=$("#notices_primary .notices:first");var l=b.closest("li.notice-reply");if(l.length>0){var e=$(m).attr("id");if($("#"+e).length==0){var j=l.closest("li.notice");l.replaceWith(m);SN.U.NoticeInlineReplyPlaceholder(j)}else{l.remove()}}else{if(k.length>0&&SN.U.belongsOnTimeline(m)){if($("#"+m.id).length===0){var h=b.find("[name=inreplyto]").val();var g="#notices_primary #notice-"+h;if($("body")[0].id=="conversation"){if(h.length>0&&$(g+" .notices").length<1){$(g).append('
                              ')}$($(g+" .notices")[0]).append(m)}else{k.prepend(m)}$("#"+m.id).css({display:"none"}).fadeIn(2500);SN.U.NoticeWithAttachment($("#"+m.id));SN.U.switchInputFormTab("placeholder")}}else{c("success",$("title",i).text())}}}b.resetForm();b.find("[name=inreplyto]").val("");b.find(".attach-status").remove();SN.U.FormNoticeEnhancements(b)}},complete:function(d,e){b.removeClass(SN.C.S.Processing).find(".submit").removeAttr(SN.C.S.Disabled).removeClass(SN.C.S.Disabled);b.find("[name=lat]").val(SN.C.I.NoticeDataGeo.NLat);b.find("[name=lon]").val(SN.C.I.NoticeDataGeo.NLon);b.find("[name=location_ns]").val(SN.C.I.NoticeDataGeo.NLNS);b.find("[name=location_id]").val(SN.C.I.NoticeDataGeo.NLID);b.find("[name=notice_data-geo]").attr("checked",SN.C.I.NoticeDataGeo.NDG)}})},normalizeGeoData:function(a){SN.C.I.NoticeDataGeo.NLat=a.find("[name=lat]").val();SN.C.I.NoticeDataGeo.NLon=a.find("[name=lon]").val();SN.C.I.NoticeDataGeo.NLNS=a.find("[name=location_ns]").val();SN.C.I.NoticeDataGeo.NLID=a.find("[name=location_id]").val();SN.C.I.NoticeDataGeo.NDG=a.find("[name=notice_data-geo]").attr("checked");var b=$.cookie(SN.C.S.NoticeDataGeoCookie);if(b!==null&&b!="disabled"){b=JSON.parse(b);SN.C.I.NoticeDataGeo.NLat=a.find("[name=lat]").val(b.NLat).val();SN.C.I.NoticeDataGeo.NLon=a.find("[name=lon]").val(b.NLon).val();if(b.NLNS){SN.C.I.NoticeDataGeo.NLNS=a.find("[name=location_ns]").val(b.NLNS).val();SN.C.I.NoticeDataGeo.NLID=a.find("[name=location_id]").val(b.NLID).val()}else{a.find("[name=location_ns]").val("");a.find("[name=location_id]").val("")}}if(b=="disabled"){SN.C.I.NoticeDataGeo.NDG=a.find("[name=notice_data-geo]").attr("checked",false).attr("checked")}else{SN.C.I.NoticeDataGeo.NDG=a.find("[name=notice_data-geo]").attr("checked",true).attr("checked")}},GetResponseXML:function(b){try{return b.responseXML}catch(a){return(new DOMParser()).parseFromString(b.responseText,"text/xml")}},NoticeReply:function(){$("#content .notice_reply").live("click",function(c){c.preventDefault();var b=$(this).closest("li.notice");var a=($(".author .nickname",b).length>0)?$($(".author .nickname",b)[0]):$(".author .nickname.uid");SN.U.NoticeInlineReplyTrigger(b,"@"+a.text());return false})},NoticeReplyTo:function(a){},NoticeInlineReplyTrigger:function(h,i){var b=$($(".notice_id",h)[0]).text();var e=h;var f=h.closest(".notices");if(f.hasClass("threaded-replies")){e=f.closest(".notice")}else{f=$("ul.threaded-replies",h);if(f.length==0){f=$('
                                ');h.append(f)}}var j=$(".notice-reply-form",f);var d=function(){j.find("input[name=inreplyto]").val(b);var m=j.find("textarea");if(m.length==0){throw"No textarea"}var l="";if(i){l=i+" "}m.val(l+m.val().replace(RegExp(l,"i"),""));m.data("initialText",$.trim(i+""));m.focus();if(m[0].setSelectionRange){var k=m.val().length;m[0].setSelectionRange(k,k)}};if(j.length>0){d()}else{f.find("li.notice-reply-placeholder").remove();var g=$("li.notice-reply",f);if(g.length==0){g=$('
                              • ');var c=function(k){var l=document._importNode(k,true);g.append(l);f.append(g);var m=j=$(l);SN.Init.NoticeFormSetup(m);d()};if(SN.C.I.NoticeFormMaster){c(SN.C.I.NoticeFormMaster)}else{var a=$("#form_notice").attr("action");$.get(a,{ajax:1},function(k,m,l){c($("form",k)[0])})}}}},NoticeInlineReplyPlaceholder:function(b){var a=b.find("ul.threaded-replies");var c=$('
                              • ');c.find("input").val(SN.msg("reply_placeholder"));a.append(c)},NoticeInlineReplySetup:function(){$("li.notice-reply-placeholder input").live("focus",function(){var a=$(this).closest("li.notice");SN.U.NoticeInlineReplyTrigger(a);return false})},NoticeRepeat:function(){$(".form_repeat").live("click",function(a){a.preventDefault();SN.U.NoticeRepeatConfirmation($(this));return false})},NoticeRepeatConfirmation:function(a){var c=a.find(".submit");var b=c.clone();b.addClass("submit_dialogbox").removeClass("submit");a.append(b);b.bind("click",function(){SN.U.FormXHR(a);return false});c.hide();a.addClass("dialogbox").append('').closest(".notice-options").addClass("opaque");a.find("button.close").click(function(){$(this).remove();a.removeClass("dialogbox").closest(".notice-options").removeClass("opaque");a.find(".submit_dialogbox").remove();a.find(".submit").show();return false})},NoticeAttachments:function(){$(".notice a.attachment").each(function(){SN.U.NoticeWithAttachment($(this).closest(".notice"))})},NoticeWithAttachment:function(b){if(b.find(".attachment").length===0){return}var a=b.find(".attachment.more");if(a.length>0){$(a[0]).click(function(){var c=$(this);c.addClass(SN.C.S.Processing);$.get(c.attr("href")+"/ajax",null,function(d){c.parent(".entry-content").html($(d).find("#attachment_view .entry-content").html())});return false}).attr("title",SN.msg("showmore_tooltip"))}},NoticeDataAttach:function(b){var a=b.find("input[type=file]");a.change(function(f){b.find(".attach-status").remove();var d=$(this).val();if(!d){return false}var c=$('
                                ');c.find("code").text(d);c.find("button").click(function(){c.remove();a.val("");return false});b.append(c);if(typeof this.files=="object"){for(var e=0;eg){f=false}if(f){h(c,function(j){var i=$("").attr("title",e).attr("alt",e).attr("src",j).attr("style","height: 120px");d.find(".attach-status").append(i)})}else{var b=$("
                                ").text(e);d.find(".attach-status").append(b)}},NoticeLocationAttach:function(a){var e=a.find("[name=lat]");var k=a.find("[name=lon]");var g=a.find("[name=location_ns]").val();var l=a.find("[name=location_id]").val();var b="";var d=a.find("[name=notice_data-geo]");var c=a.find("[name=notice_data-geo]");var j=a.find("label.notice_data-geo");function f(n){j.attr("title",jQuery.trim(j.text())).removeClass("checked");a.find("[name=lat]").val("");a.find("[name=lon]").val("");a.find("[name=location_ns]").val("");a.find("[name=location_id]").val("");a.find("[name=notice_data-geo]").attr("checked",false);$.cookie(SN.C.S.NoticeDataGeoCookie,"disabled",{path:"/"});if(n){a.find(".geo_status_wrapper").removeClass("success").addClass("error");a.find(".geo_status_wrapper .geo_status").text(n)}else{a.find(".geo_status_wrapper").remove()}}function m(n,o){SN.U.NoticeGeoStatus(a,"Looking up place name...");$.getJSON(n,o,function(p){var q,r;if(typeof(p.location_ns)!="undefined"){a.find("[name=location_ns]").val(p.location_ns);q=p.location_ns}if(typeof(p.location_id)!="undefined"){a.find("[name=location_id]").val(p.location_id);r=p.location_id}if(typeof(p.name)=="undefined"){NLN_text=o.lat+";"+o.lon}else{NLN_text=p.name}SN.U.NoticeGeoStatus(a,NLN_text,o.lat,o.lon,p.url);j.attr("title",NoticeDataGeo_text.ShareDisable+" ("+NLN_text+")");a.find("[name=lat]").val(o.lat);a.find("[name=lon]").val(o.lon);a.find("[name=location_ns]").val(q);a.find("[name=location_id]").val(r);a.find("[name=notice_data-geo]").attr("checked",true);var s={NLat:o.lat,NLon:o.lon,NLNS:q,NLID:r,NLN:NLN_text,NLNU:p.url,NDG:true};$.cookie(SN.C.S.NoticeDataGeoCookie,JSON.stringify(s),{path:"/"})})}if(c.length>0){if($.cookie(SN.C.S.NoticeDataGeoCookie)=="disabled"){c.attr("checked",false)}else{c.attr("checked",true)}var h=a.find(".notice_data-geo_wrap");var i=h.attr("data-api");j.attr("title",j.text());c.change(function(){if(c.attr("checked")===true||$.cookie(SN.C.S.NoticeDataGeoCookie)===null){j.attr("title",NoticeDataGeo_text.ShareDisable).addClass("checked");if($.cookie(SN.C.S.NoticeDataGeoCookie)===null||$.cookie(SN.C.S.NoticeDataGeoCookie)=="disabled"){if(navigator.geolocation){SN.U.NoticeGeoStatus(a,"Requesting location from browser...");navigator.geolocation.getCurrentPosition(function(p){a.find("[name=lat]").val(p.coords.latitude);a.find("[name=lon]").val(p.coords.longitude);var q={lat:p.coords.latitude,lon:p.coords.longitude,token:$("#token").val()};m(i,q)},function(p){switch(p.code){case p.PERMISSION_DENIED:f("Location permission denied.");break;case p.TIMEOUT:f("Location lookup timeout.");break}},{timeout:10000})}else{if(e.length>0&&k.length>0){var n={lat:e,lon:k,token:$("#token").val()};m(i,n)}else{f();c.remove();j.remove()}}}else{var o=JSON.parse($.cookie(SN.C.S.NoticeDataGeoCookie));a.find("[name=lat]").val(o.NLat);a.find("[name=lon]").val(o.NLon);a.find("[name=location_ns]").val(o.NLNS);a.find("[name=location_id]").val(o.NLID);a.find("[name=notice_data-geo]").attr("checked",o.NDG);SN.U.NoticeGeoStatus(a,o.NLN,o.NLat,o.NLon,o.NLNU);j.attr("title",NoticeDataGeo_text.ShareDisable+" ("+o.NLN+")").addClass("checked")}}else{f()}}).change()}},NoticeGeoStatus:function(e,a,f,g,c){var h=e.find(".geo_status_wrapper");if(h.length==0){h=$('
                                ');h.find("button.close").click(function(){e.find("[name=notice_data-geo]").removeAttr("checked").change();return false});e.append(h)}var b;if(c){b=$("").attr("href",c)}else{b=$("")}b.text(a);if(f||g){var d=f+";"+g;b.attr("title",d);if(!a){b.text(d)}}h.find(".geo_status").empty().append(b)},NewDirectMessage:function(){NDM=$(".entity_send-a-message a");NDM.attr({href:NDM.attr("href")+"&ajax=1"});NDM.bind("click",function(){var a=$(".entity_send-a-message form");if(a.length===0){$(this).addClass(SN.C.S.Processing);$.get(NDM.attr("href"),null,function(b){$(".entity_send-a-message").append(document._importNode($("form",b)[0],true));a=$(".entity_send-a-message .form_notice");SN.U.FormNoticeXHR(a);SN.U.FormNoticeEnhancements(a);a.append('');$(".entity_send-a-message button").click(function(){a.hide();return false});NDM.removeClass(SN.C.S.Processing)})}else{a.show();$(".entity_send-a-message textarea").focus()}return false})},GetFullYear:function(c,d,a){var b=new Date();b.setFullYear(c,d,a);return b},StatusNetInstance:{Set:function(b){var a=SN.U.StatusNetInstance.Get();if(a!==null){b=$.extend(a,b)}$.cookie(SN.C.S.StatusNetInstance,JSON.stringify(b),{path:"/",expires:SN.U.GetFullYear(2029,0,1)})},Get:function(){var a=$.cookie(SN.C.S.StatusNetInstance);if(a!==null){return JSON.parse(a)}return null},Delete:function(){$.cookie(SN.C.S.StatusNetInstance,null)}},belongsOnTimeline:function(b){var a=$("body").attr("id");if(a=="public"){return true}var c=$("#nav_profile a").attr("href");if(c){var d=$(b).find(".vcard.author a.url").attr("href");if(d==c){if(a=="all"||a=="showstream"){return true}}}return false},switchInputFormTab:function(a){$(".input_form_nav_tab.current").removeClass("current");if(a=="placeholder"){$("#input_form_nav_status").addClass("current")}else{$("#input_form_nav_"+a).addClass("current")}$(".input_form.current").removeClass("current");$("#input_form_"+a).addClass("current").find(".ajax-notice").each(function(){var b=$(this);SN.Init.NoticeFormSetup(b)}).find("textarea:first").focus()}},Init:{NoticeForm:function(){if($("body.user_in").length>0){$("#input_form_placeholder input.placeholder").focus(function(){SN.U.switchInputFormTab("status")});$("body").bind("click",function(g){var d=$("#content .input_forms div.current");if(d.length>0){if($("#content .input_forms").has(g.target).length==0){var a=d.find('textarea, input[type=text], input[type=""]');var c=false;a.each(function(){c=c||$(this).val()});if(!c){SN.U.switchInputFormTab("placeholder")}}}var b=$("li.notice-reply");if(b.length>0){var f=$(g.target);b.each(function(){var j=$(this);if(j.has(g.target).length==0){var h=j.find(".notice_data-text:first");var i=$.trim(h.val());if(i==""||i==h.data("initialText")){var e=j.closest("li.notice");j.remove();SN.U.NoticeInlineReplyPlaceholder(e)}}})}})}},NoticeFormSetup:function(a){if(!a.data("NoticeFormSetup")){SN.U.NoticeLocationAttach(a);SN.U.FormNoticeXHR(a);SN.U.FormNoticeEnhancements(a);SN.U.NoticeDataAttach(a);a.data("NoticeFormSetup",true)}},Notices:function(){if($("body.user_in").length>0){var a=$(".form_notice:first");if(a.length>0){SN.C.I.NoticeFormMaster=document._importNode(a[0],true)}SN.U.NoticeRepeat();SN.U.NoticeReply();SN.U.NoticeInlineReplySetup()}SN.U.NoticeAttachments()},EntityActions:function(){if($("body.user_in").length>0){SN.U.NewDirectMessage()}},Login:function(){if(SN.U.StatusNetInstance.Get()!==null){var a=SN.U.StatusNetInstance.Get().Nickname;if(a!==null){$("#form_login #nickname").val(a)}}$("#form_login").bind("submit",function(){SN.U.StatusNetInstance.Set({Nickname:$("#form_login #nickname").val()});return true})},AjaxForms:function(){$("form.ajax").live("submit",function(){SN.U.FormXHR($(this));return false})},UploadForms:function(){$("input[type=file]").change(function(d){if(typeof this.files=="object"&&this.files.length>0){var c=0;for(var b=0;b0&&c>a){var e="File too large: maximum upload size is %d bytes.";alert(e.replace("%d",a));$(this).val("");d.preventDefault();return false}}})}}};$(document).ready(function(){SN.Init.AjaxForms();SN.Init.UploadForms();if($("."+SN.C.S.FormNotice).length>0){SN.Init.NoticeForm()}if($("#content .notices").length>0){SN.Init.Notices()}if($("#content .entity_actions").length>0){SN.Init.EntityActions()}if($("#form_login").length>0){SN.Init.Login()}});if(!document.ELEMENT_NODE){document.ELEMENT_NODE=1;document.ATTRIBUTE_NODE=2;document.TEXT_NODE=3;document.CDATA_SECTION_NODE=4;document.ENTITY_REFERENCE_NODE=5;document.ENTITY_NODE=6;document.PROCESSING_INSTRUCTION_NODE=7;document.COMMENT_NODE=8;document.DOCUMENT_NODE=9;document.DOCUMENT_TYPE_NODE=10;document.DOCUMENT_FRAGMENT_NODE=11;document.NOTATION_NODE=12}document._importNode=function(e,a){switch(e.nodeType){case document.ELEMENT_NODE:var d=document.createElement(e.nodeName);if(e.attributes&&e.attributes.length>0){for(var c=0,b=e.attributes.length;c0){for(var c=0,b=e.childNodes.length;c0){var j=c.pop();j()}}};window._google_loader_apiLoaded=function(){f()};var d=function(){return(window.google&&google.loader)};var g=function(j){if(d()){return true}h(j);e();return false};e();return{shim:true,type:"ClientLocation",lastPosition:null,getCurrentPosition:function(k,n,o){var m=this;if(!g(function(){m.getCurrentPosition(k,n,o)})){return}if(google.loader.ClientLocation){var l=google.loader.ClientLocation;var j={coords:{latitude:l.latitude,longitude:l.longitude,altitude:null,accuracy:43000,altitudeAccuracy:null,heading:null,speed:null},address:{city:l.address.city,country:l.address.country,country_code:l.address.country_code,region:l.address.region},timestamp:new Date()};k(j);this.lastPosition=j}else{if(n==="function"){n({code:3,message:"Using the Google ClientLocation API and it is not able to calculate a location."})}}},watchPosition:function(j,l,m){this.getCurrentPosition(j,l,m);var k=this;var n=setInterval(function(){k.getCurrentPosition(j,l,m)},10000);return n},clearWatch:function(j){clearInterval(j)},getPermission:function(l,j,k){return true}}});navigator.geolocation=(window.google&&google.gears)?a():b()})()}; \ No newline at end of file From 262126bd54627e37244185fbedce3e50cc41cf2f Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Wed, 16 Mar 2011 16:17:02 -0700 Subject: [PATCH 132/146] Extended profile - Add sammdy to author credits in version info --- plugins/ExtendedProfile/ExtendedProfilePlugin.php | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/plugins/ExtendedProfile/ExtendedProfilePlugin.php b/plugins/ExtendedProfile/ExtendedProfilePlugin.php index 3e6aa5f860..ce1593dad5 100644 --- a/plugins/ExtendedProfile/ExtendedProfilePlugin.php +++ b/plugins/ExtendedProfile/ExtendedProfilePlugin.php @@ -32,12 +32,14 @@ class ExtendedProfilePlugin extends Plugin function onPluginVersion(&$versions) { - $versions[] = array('name' => 'ExtendedProfile', - 'version' => STATUSNET_VERSION, - 'author' => 'Brion Vibber, Zach Copley', - 'homepage' => 'http://status.net/wiki/Plugin:ExtendedProfile', - 'rawdescription' => - _m('UI extensions for additional profile fields.')); + $versions[] = array( + 'name' => 'ExtendedProfile', + 'version' => STATUSNET_VERSION, + 'author' => 'Brion Vibber, Samantha Doherty, Zach Copley', + 'homepage' => 'http://status.net/wiki/Plugin:ExtendedProfile', + 'rawdescription' => _m( + 'UI extensions for additional profile fields.') + ); return true; } From 390881e8176c920427b19d4299b7629ed2f3900a Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Wed, 16 Mar 2011 16:41:02 -0700 Subject: [PATCH 133/146] SearchSub plugin: add management UI for subscribed searches --- plugins/SearchSub/SearchSubPlugin.php | 60 ++++++++ plugins/SearchSub/searchsubsaction.php | 194 +++++++++++++++++++++++++ 2 files changed, 254 insertions(+) create mode 100644 plugins/SearchSub/searchsubsaction.php diff --git a/plugins/SearchSub/SearchSubPlugin.php b/plugins/SearchSub/SearchSubPlugin.php index 130600a41a..f7da8c44d9 100644 --- a/plugins/SearchSub/SearchSubPlugin.php +++ b/plugins/SearchSub/SearchSubPlugin.php @@ -78,6 +78,7 @@ class SearchSubPlugin extends Plugin return false; case 'SearchsubAction': case 'SearchunsubAction': + case 'SearchsubsAction': case 'SearchSubForm': case 'SearchUnsubForm': include_once $dir.'/'.strtolower($cls).'.php'; @@ -103,6 +104,9 @@ class SearchSubPlugin extends Plugin array('action' => 'searchunsub'), array('search' => Router::REGEX_TAG)); + $m->connect(':nickname/search-subscriptions', + array('action' => 'searchsubs'), + array('nickname' => Nickname::DISPLAY_FMT)); return true; } @@ -209,4 +213,60 @@ class SearchSubPlugin extends Plugin } return true; } + + /** + * Menu item for personal subscriptions/groups area + * + * @param Widget $widget Widget being executed + * + * @return boolean hook return + */ + + function onEndSubGroupNav($widget) + { + $action = $widget->out; + $action_name = $action->trimmed('action'); + + $action->menuItem(common_local_url('searchsubs', array('nickname' => $action->user->nickname)), + // TRANS: SearchSub plugin menu item on user settings page. + _m('MENU', 'Searches'), + // TRANS: SearchSub plugin tooltip for user settings menu item. + _m('Configure search subscriptions'), + $action_name == 'searchsubs' && $action->arg('nickname') == $action->user->nickname); + + return true; + } + + /** + * Add a count of mirrored feeds into a user's profile sidebar stats. + * + * @param Profile $profile + * @param array $stats + * @return boolean hook return value + */ + function onProfileStats($profile, &$stats) + { + $cur = common_current_user(); + if (!empty($cur) && $cur->id == $profile->id) { + $searchsub = new SearchSub(); + $searchsub ->profile_id = $profile->id; + $entry = array( + 'id' => 'searchsubs', + 'label' => _m('Search subscriptions'), + 'link' => common_local_url('searchsubs', array('nickname' => $profile->nickname)), + 'value' => $searchsub->count(), + ); + + $insertAt = count($stats); + foreach ($stats as $i => $row) { + if ($row['id'] == 'groups') { + // Slip us in after them. + $insertAt = $i + 1; + break; + } + } + array_splice($stats, $insertAt, 0, array($entry)); + } + return true; + } } diff --git a/plugins/SearchSub/searchsubsaction.php b/plugins/SearchSub/searchsubsaction.php new file mode 100644 index 0000000000..f888613349 --- /dev/null +++ b/plugins/SearchSub/searchsubsaction.php @@ -0,0 +1,194 @@ +. + * + * @category Social + * @package StatusNet + * @author Evan Prodromou + * @author Sarven Capadisli + * @copyright 2008-2009 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET') && !defined('LACONICA')) { + exit(1); +} + +/** + * A list of the user's subscriptions + * + * @category Social + * @package StatusNet + * @author Evan Prodromou + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ +class SearchSubsAction extends GalleryAction +{ + function title() + { + if ($this->page == 1) { + // TRANS: Header for subscriptions overview for a user (first page). + // TRANS: %s is a user nickname. + return sprintf(_m('%s\'s search subscriptions'), $this->user->nickname); + } else { + // TRANS: Header for subscriptions overview for a user (not first page). + // TRANS: %1$s is a user nickname, %2$d is the page number. + return sprintf(_m('%1$s\'s search subscriptions, page %2$d'), + $this->user->nickname, + $this->page); + } + } + + function showPageNotice() + { + $user = common_current_user(); + if ($user && ($user->id == $this->profile->id)) { + $this->element('p', null, + // TRANS: Page notice for page with an overview of all search subscriptions + // TRANS: of the logged in user's own profile. + _m('You have subscribed to receive all notices on this site matching the following searches:')); + } else { + $this->element('p', null, + // TRANS: Page notice for page with an overview of all subscriptions of a user other + // TRANS: than the logged in user. %s is the user nickname. + sprintf(_m('%s has subscribed to receive all notices on this site matching the following searches:'), + $this->profile->nickname)); + } + } + + function showContent() + { + if (Event::handle('StartShowTagSubscriptionsContent', array($this))) { + parent::showContent(); + + $offset = ($this->page-1) * PROFILES_PER_PAGE; + $limit = PROFILES_PER_PAGE + 1; + + $cnt = 0; + + $searchsub = new SearchSub(); + $searchsub->profile_id = $this->user->id; + $searchsub->limit($limit, $offset); + $searchsub->find(); + + if ($searchsub->N) { + $list = new SearchSubscriptionsList($searchsub, $this->user, $this); + $cnt = $list->show(); + if (0 == $cnt) { + $this->showEmptyListMessage(); + } + } else { + $this->showEmptyListMessage(); + } + + $this->pagination($this->page > 1, $cnt > PROFILES_PER_PAGE, + $this->page, 'searchsubs', + array('nickname' => $this->user->nickname)); + + + Event::handle('EndShowTagSubscriptionsContent', array($this)); + } + } + + function showEmptyListMessage() + { + if (common_logged_in()) { + $current_user = common_current_user(); + if ($this->user->id === $current_user->id) { + // TRANS: Search subscription list text when the logged in user has no search subscriptions. + $message = _('You\'re not subscribed to any text searches right now. You can push the "Subscribe" button ' . + 'on any notice text search to automatically receive any public messages on this site that match that ' . + 'search, even if you\'re not subscribed to the poster.'); + } else { + // TRANS: Search subscription list text when looking at the subscriptions for a of a user other + // TRANS: than the logged in user that has no search subscriptions. %s is the user nickname. + $message = sprintf(_('%s is not subscribed to any searches.'), $this->user->nickname); + } + } + else { + // TRANS: Subscription list text when looking at the subscriptions for a of a user that has none + // TRANS: as an anonymous user. %s is the user nickname. + $message = sprintf(_m('%s is not subscribed to any searches.'), $this->user->nickname); + } + + $this->elementStart('div', 'guide'); + $this->raw(common_markup_to_html($message)); + $this->elementEnd('div'); + } +} + +// XXX SubscriptionsList and SubscriptionList are dangerously close + +class SearchSubscriptionsList extends SubscriptionList +{ + function newListItem($searchsub) + { + return new SearchSubscriptionsListItem($searchsub, $this->owner, $this->action); + } +} + +class SearchSubscriptionsListItem extends SubscriptionListItem +{ + function startItem() + { + $this->out->elementStart('li', array('class' => 'searchsub')); + } + + function showProfile() + { + $searchsub = $this->profile; + $search = $searchsub->search; + + // Relevant portion! + $cur = common_current_user(); + if (!empty($cur) && $cur->id == $this->owner->id) { + $this->showOwnerControls(); + } + + $url = common_local_url('noticesearch', array('q' => $search)); + $linkline = sprintf(_m('"%s" since %s'), + htmlspecialchars($url), + htmlspecialchars($search), + common_date_string($searchsub->created)); + + $this->out->elementStart('div', 'searchsub-item'); + $this->out->raw($linkline); + $this->out->element('div', array('style' => 'clear: both')); + $this->out->elementEnd('div'); + } + + function showActions() + { + } + + function showOwnerControls() + { + $this->out->elementStart('div', 'entity_actions'); + + $searchsub = $this->profile; // ? + $form = new SearchUnsubForm($this->out, $searchsub->search); + $form->show(); + + $this->out->elementEnd('div'); + return; + } +} From bd12546984296047c125742670d0c6f7c24651dd Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Wed, 16 Mar 2011 16:52:37 -0700 Subject: [PATCH 134/146] Allow plugins to modify or append command help text; broke the command help down into pieces which also will aid translators in future, as the entire message blob won't change every time something gets fiddled with. --- lib/command.php | 123 +++++++++++++++++++++++++------------ lib/commandinterpreter.php | 2 +- 2 files changed, 84 insertions(+), 41 deletions(-) diff --git a/lib/command.php b/lib/command.php index 39fb283dd8..03baa8212d 100644 --- a/lib/command.php +++ b/lib/command.php @@ -911,45 +911,88 @@ class HelpCommand extends Command { function handle($channel) { - $channel->output($this->user, - // TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings. - _("Commands:\n". - "on - turn on notifications\n". - "off - turn off notifications\n". - "help - show this help\n". - "follow - subscribe to user\n". - "groups - lists the groups you have joined\n". - "subscriptions - list the people you follow\n". - "subscribers - list the people that follow you\n". - "leave - unsubscribe from user\n". - "d - direct message to user\n". - "get - get last notice from user\n". - "whois - get profile info on user\n". - "lose - force user to stop following you\n". - "fav - add user's last notice as a 'fave'\n". - "fav # - add notice with the given id as a 'fave'\n". - "repeat # - repeat a notice with a given id\n". - "repeat - repeat the last notice from user\n". - "reply # - reply to notice with a given id\n". - "reply - reply to the last notice from user\n". - "join - join group\n". - "login - Get a link to login to the web interface\n". - "drop - leave group\n". - "stats - get your stats\n". - "stop - same as 'off'\n". - "quit - same as 'off'\n". - "sub - same as 'follow'\n". - "unsub - same as 'leave'\n". - "last - same as 'get'\n". - "on - not yet implemented.\n". - "off - not yet implemented.\n". - "nudge - remind a user to update.\n". - "invite - not yet implemented.\n". - "track - not yet implemented.\n". - "untrack - not yet implemented.\n". - "track off - not yet implemented.\n". - "untrack all - not yet implemented.\n". - "tracks - not yet implemented.\n". - "tracking - not yet implemented.\n")); + // TRANS: Header line of help text for commands. + $out = array(_m('COMMANDHELP', "Commands:")); + $commands = array(// TRANS: Help message for IM/SMS command "on" + "on" => _m('COMMANDHELP', "turn on notifications"), + // TRANS: Help message for IM/SMS command "off" + "off" => _m('COMMANDHELP', "turn off notifications"), + // TRANS: Help message for IM/SMS command "help" + "help" => _m('COMMANDHELP', "show this help"), + // TRANS: Help message for IM/SMS command "follow " + "follow " => _m('COMMANDHELP', "subscribe to user"), + // TRANS: Help message for IM/SMS command "groups" + "groups" => _m('COMMANDHELP', "lists the groups you have joined"), + // TRANS: Help message for IM/SMS command "subscriptions" + "subscriptions" => _m('COMMANDHELP', "list the people you follow"), + // TRANS: Help message for IM/SMS command "subscribers" + "subscribers" => _m('COMMANDHELP', "list the people that follow you"), + // TRANS: Help message for IM/SMS command "leave " + "leave " => _m('COMMANDHELP', "unsubscribe from user"), + // TRANS: Help message for IM/SMS command "d " + "d " => _m('COMMANDHELP', "direct message to user"), + // TRANS: Help message for IM/SMS command "get " + "get " => _m('COMMANDHELP', "get last notice from user"), + // TRANS: Help message for IM/SMS command "whois " + "whois " => _m('COMMANDHELP', "get profile info on user"), + // TRANS: Help message for IM/SMS command "lose " + "lose " => _m('COMMANDHELP', "force user to stop following you"), + // TRANS: Help message for IM/SMS command "fav " + "fav " => _m('COMMANDHELP', "add user's last notice as a 'fave'"), + // TRANS: Help message for IM/SMS command "fav #" + "fav #" => _m('COMMANDHELP', "add notice with the given id as a 'fave'"), + // TRANS: Help message for IM/SMS command "repeat #" + "repeat #" => _m('COMMANDHELP', "repeat a notice with a given id"), + // TRANS: Help message for IM/SMS command "repeat " + "repeat " => _m('COMMANDHELP', "repeat the last notice from user"), + // TRANS: Help message for IM/SMS command "reply #" + "reply #" => _m('COMMANDHELP', "reply to notice with a given id"), + // TRANS: Help message for IM/SMS command "reply " + "reply " => _m('COMMANDHELP', "reply to the last notice from user"), + // TRANS: Help message for IM/SMS command "join " + "join " => _m('COMMANDHELP', "join group"), + // TRANS: Help message for IM/SMS command "login" + "login" => _m('COMMANDHELP', "Get a link to login to the web interface"), + // TRANS: Help message for IM/SMS command "drop " + "drop " => _m('COMMANDHELP', "leave group"), + // TRANS: Help message for IM/SMS command "stats" + "stats" => _m('COMMANDHELP', "get your stats"), + // TRANS: Help message for IM/SMS command "stop" + "stop" => _m('COMMANDHELP', "same as 'off'"), + // TRANS: Help message for IM/SMS command "quit" + "quit" => _m('COMMANDHELP', "same as 'off'"), + // TRANS: Help message for IM/SMS command "sub " + "sub " => _m('COMMANDHELP', "same as 'follow'"), + // TRANS: Help message for IM/SMS command "unsub " + "unsub " => _m('COMMANDHELP', "same as 'leave'"), + // TRANS: Help message for IM/SMS command "last " + "last " => _m('COMMANDHELP', "same as 'get'"), + // TRANS: Help message for IM/SMS command "on " + "on " => _m('COMMANDHELP', "not yet implemented."), + // TRANS: Help message for IM/SMS command "off " + "off " => _m('COMMANDHELP', "not yet implemented."), + // TRANS: Help message for IM/SMS command "nudge " + "nudge " => _m('COMMANDHELP', "remind a user to update."), + // TRANS: Help message for IM/SMS command "invite " + "invite " => _m('COMMANDHELP', "not yet implemented."), + // TRANS: Help message for IM/SMS command "track " + "track " => _m('COMMANDHELP', "not yet implemented."), + // TRANS: Help message for IM/SMS command "untrack " + "untrack " => _m('COMMANDHELP', "not yet implemented."), + // TRANS: Help message for IM/SMS command "track off" + "track off" => _m('COMMANDHELP', "not yet implemented."), + // TRANS: Help message for IM/SMS command "untrack all" + "untrack all" => _m('COMMANDHELP', "not yet implemented."), + // TRANS: Help message for IM/SMS command "tracks" + "tracks" => _m('COMMANDHELP', "not yet implemented."), + // TRANS: Help message for IM/SMS command "tracking" + "tracking" => _m('COMMANDHELP', "not yet implemented.")); + + // Give plugins a chance to add or override... + Event::handle('HelpCommandMessages', array($this, &$commands)); + foreach ($commands as $command => $help) { + $out[] = "$command - $help"; + } + $channel->output($this->user, implode("\n", $out)); } } diff --git a/lib/commandinterpreter.php b/lib/commandinterpreter.php index fe426f1fcd..6b1b70055e 100644 --- a/lib/commandinterpreter.php +++ b/lib/commandinterpreter.php @@ -314,7 +314,7 @@ class CommandInterpreter $result = false; } - Event::handle('EndInterpretCommand', array($cmd, $arg, $user, $result)); + Event::handle('EndInterpretCommand', array($cmd, $arg, $user, &$result)); } return $result; From 0754edf9a24983e8a9ec48baf0086e8437e3f399 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Wed, 16 Mar 2011 17:08:09 -0700 Subject: [PATCH 135/146] SearchSub plugin: 'track X', 'untrack X', 'tracking', 'track off' commands now overridden :D --- plugins/SearchSub/SearchSubPlugin.php | 49 +++++++++++++++++++ plugins/SearchSub/searchsubtrackcommand.php | 38 ++++++++++++++ .../SearchSub/searchsubtrackingcommand.php | 27 ++++++++++ .../SearchSub/searchsubtrackoffcommand.php | 33 +++++++++++++ plugins/SearchSub/searchsubuntrackcommand.php | 38 ++++++++++++++ 5 files changed, 185 insertions(+) create mode 100644 plugins/SearchSub/searchsubtrackcommand.php create mode 100644 plugins/SearchSub/searchsubtrackingcommand.php create mode 100644 plugins/SearchSub/searchsubtrackoffcommand.php create mode 100644 plugins/SearchSub/searchsubuntrackcommand.php diff --git a/plugins/SearchSub/SearchSubPlugin.php b/plugins/SearchSub/SearchSubPlugin.php index f7da8c44d9..c07f7695da 100644 --- a/plugins/SearchSub/SearchSubPlugin.php +++ b/plugins/SearchSub/SearchSubPlugin.php @@ -81,6 +81,10 @@ class SearchSubPlugin extends Plugin case 'SearchsubsAction': case 'SearchSubForm': case 'SearchUnsubForm': + case 'SearchSubTrackCommand': + case 'SearchSubTrackOffCommand': + case 'SearchSubTrackingCommand': + case 'SearchSubUntrackCommand': include_once $dir.'/'.strtolower($cls).'.php'; return false; default: @@ -269,4 +273,49 @@ class SearchSubPlugin extends Plugin } return true; } + + /** + * Replace the built-in stub track commands with ones that control + * search subscriptions. + * + * @param CommandInterpreter $cmd + * @param string $arg + * @param User $user + * @param Command $result + * @return boolean hook result + */ + function onEndInterpretCommand($cmd, $arg, $user, &$result) + { + if ($result instanceof TrackCommand) { + $result = new SearchSubTrackCommand($user, $arg); + return false; + } else if ($result instanceof TrackOffCommand) { + $result = new SearchSubTrackOffCommand($user); + return false; + } else if ($result instanceof TrackingCommand) { + $result = new SearchSubTrackingCommand($user); + return false; + } else if ($result instanceof UntrackCommand) { + $result = new SearchSubUntrackCommand($user, $arg); + return false; + } else { + return true; + } + } + + function onHelpCommandMessages($cmd, &$commands) + { + // TRANS: Help message for IM/SMS command "track " + $commands["track "] = _m('COMMANDHELP', "Start following notices matching the given search query."); + // TRANS: Help message for IM/SMS command "untrack " + $commands["untrack "] = _m('COMMANDHELP', "Stop following notices matching the given search query."); + // TRANS: Help message for IM/SMS command "track off" + $commands["track off"] = _m('COMMANDHELP', "Disable all tracked search subscriptions."); + // TRANS: Help message for IM/SMS command "untrack all" + $commands["untrack all"] = _m('COMMANDHELP', "Disable all tracked search subscriptions."); + // TRANS: Help message for IM/SMS command "tracks" + $commands["tracks"] = _m('COMMANDHELP', "List all your search subscriptions."); + // TRANS: Help message for IM/SMS command "tracking" + $commands["tracking"] = _m('COMMANDHELP', "List all your search subscriptions."); + } } diff --git a/plugins/SearchSub/searchsubtrackcommand.php b/plugins/SearchSub/searchsubtrackcommand.php new file mode 100644 index 0000000000..bba2cb36e7 --- /dev/null +++ b/plugins/SearchSub/searchsubtrackcommand.php @@ -0,0 +1,38 @@ +keyword = $keyword; + } + + function handle($channel) + { + $cur = $this->user; + $searchsub = SearchSub::pkeyGet(array('search' => $this->keyword, + 'profile_id' => $cur->id)); + + if ($searchsub) { + // TRANS: Error text shown a user tries to track a search query they're already subscribed to. + $channel->error($cur, sprintf(_m('You are already tracking the search "%s".'), $this->keyword)); + return; + } + + try { + SearchSub::start($cur->getProfile(), $this->keyword); + } catch (Exception $e) { + // TRANS: Message given having failed to set up a search subscription by track command. + $channel->error($cur, sprintf(_m('Could not start a search subscription for query "%s".'), + $this->keyword)); + return; + } + + // TRANS: Message given having added a search subscription by track command. + $channel->output($cur, sprintf(_m('You are subscribed to the search "%s".'), + $this->keyword)); + } +} \ No newline at end of file diff --git a/plugins/SearchSub/searchsubtrackingcommand.php b/plugins/SearchSub/searchsubtrackingcommand.php new file mode 100644 index 0000000000..385a22b8ba --- /dev/null +++ b/plugins/SearchSub/searchsubtrackingcommand.php @@ -0,0 +1,27 @@ +user; + $all = new SearchSub(); + $all->profile_id = $cur->id; + $all->find(); + + if ($all->N == 0) { + // TRANS: Error text shown a user tries to disable all a search subscriptions with track off command, but has none. + $channel->error($cur, _m('You are not tracking any searches.')); + return; + } + + $list = array(); + while ($all->fetch()) { + $list[] = $all->search; + } + + // TRANS: Message given having disabled all search subscriptions with 'track off'. + $channel->output($cur, sprintf(_m('You are tracking searches for: %s'), + '"' . implode('", "', $list) . '"')); + } +} \ No newline at end of file diff --git a/plugins/SearchSub/searchsubtrackoffcommand.php b/plugins/SearchSub/searchsubtrackoffcommand.php new file mode 100644 index 0000000000..1e5eb97ebc --- /dev/null +++ b/plugins/SearchSub/searchsubtrackoffcommand.php @@ -0,0 +1,33 @@ +user; + $all = new SearchSub(); + $all->profile_id = $cur->id; + $all->find(); + + if ($all->N == 0) { + // TRANS: Error text shown a user tries to disable all a search subscriptions with track off command, but has none. + $channel->error($cur, _m('You are not tracking any searches.')); + return; + } + + $profile = $cur->getProfile(); + while ($all->fetch()) { + try { + SearchSub::cancel($profile, $all->search); + } catch (Exception $e) { + // TRANS: Message given having failed to cancel one of the search subs with 'track off' command. + $channel->error($cur, sprintf(_m('Error disabling search subscription for query "%s".'), + $all->search)); + return; + } + } + + // TRANS: Message given having disabled all search subscriptions with 'track off'. + $channel->output($cur, _m('Disabled all your search subscriptions.')); + } +} \ No newline at end of file diff --git a/plugins/SearchSub/searchsubuntrackcommand.php b/plugins/SearchSub/searchsubuntrackcommand.php new file mode 100644 index 0000000000..9fb84cd130 --- /dev/null +++ b/plugins/SearchSub/searchsubuntrackcommand.php @@ -0,0 +1,38 @@ +keyword = $keyword; + } + + function handle($channel) + { + $cur = $this->user; + $searchsub = SearchSub::pkeyGet(array('search' => $this->keyword, + 'profile_id' => $cur->id)); + + if (!$searchsub) { + // TRANS: Error text shown a user tries to untrack a search query they're not subscribed to. + $channel->error($cur, sprintf(_m('You are not tracking the search "%s".'), $this->keyword)); + return; + } + + try { + SearchSub::cancel($cur->getProfile(), $this->keyword); + } catch (Exception $e) { + // TRANS: Message given having failed to cancel a search subscription by untrack command. + $channel->error($cur, sprintf(_m('Could not end a search subscription for query "%s".'), + $this->keyword)); + return; + } + + // TRANS: Message given having removed a search subscription by untrack command. + $channel->output($cur, sprintf(_m('You are no longer subscribed to the search "%s".'), + $this->keyword)); + } +} \ No newline at end of file From 199e05f9deba36092748997cfbb870146ac4d4ce Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Thu, 17 Mar 2011 11:17:22 +0100 Subject: [PATCH 136/146] Localisation updates from http://translatewiki.net. --- locale/ar/LC_MESSAGES/statusnet.po | 453 ++++++---- locale/arz/LC_MESSAGES/statusnet.po | 340 +++++--- locale/bg/LC_MESSAGES/statusnet.po | 338 +++++--- locale/br/LC_MESSAGES/statusnet.po | 334 +++++--- locale/ca/LC_MESSAGES/statusnet.po | 456 ++++++---- locale/cs/LC_MESSAGES/statusnet.po | 451 ++++++---- locale/de/LC_MESSAGES/statusnet.po | 451 ++++++---- locale/en_GB/LC_MESSAGES/statusnet.po | 451 ++++++---- locale/eo/LC_MESSAGES/statusnet.po | 451 ++++++---- locale/es/LC_MESSAGES/statusnet.po | 792 ++++++++++-------- locale/fa/LC_MESSAGES/statusnet.po | 489 +++++++---- locale/fi/LC_MESSAGES/statusnet.po | 363 +++++--- locale/fr/LC_MESSAGES/statusnet.po | 453 ++++++---- locale/fur/LC_MESSAGES/statusnet.po | 330 +++++--- locale/gl/LC_MESSAGES/statusnet.po | 451 ++++++---- locale/hsb/LC_MESSAGES/statusnet.po | 335 +++++--- locale/hu/LC_MESSAGES/statusnet.po | 327 +++++--- locale/ia/LC_MESSAGES/statusnet.po | 474 +++++++---- locale/it/LC_MESSAGES/statusnet.po | 456 ++++++---- locale/ja/LC_MESSAGES/statusnet.po | 342 +++++--- locale/ka/LC_MESSAGES/statusnet.po | 332 +++++--- locale/ko/LC_MESSAGES/statusnet.po | 336 +++++--- locale/mk/LC_MESSAGES/statusnet.po | 475 +++++++---- locale/ml/LC_MESSAGES/statusnet.po | 327 +++++--- locale/nb/LC_MESSAGES/statusnet.po | 338 +++++--- locale/nl/LC_MESSAGES/statusnet.po | 479 +++++++---- locale/pl/LC_MESSAGES/statusnet.po | 456 ++++++---- locale/pt/LC_MESSAGES/statusnet.po | 451 ++++++---- locale/pt_BR/LC_MESSAGES/statusnet.po | 453 ++++++---- locale/ru/LC_MESSAGES/statusnet.po | 453 ++++++---- locale/statusnet.pot | 543 +++++++----- locale/sv/LC_MESSAGES/statusnet.po | 451 ++++++---- locale/te/LC_MESSAGES/statusnet.po | 342 +++++--- locale/tr/LC_MESSAGES/statusnet.po | 337 +++++--- locale/uk/LC_MESSAGES/statusnet.po | 471 +++++++---- locale/zh_CN/LC_MESSAGES/statusnet.po | 451 ++++++---- .../locale/ia/LC_MESSAGES/Directory.po | 54 ++ .../locale/mk/LC_MESSAGES/Directory.po | 54 ++ .../locale/nl/LC_MESSAGES/Directory.po | 55 ++ .../locale/uk/LC_MESSAGES/Directory.po | 55 ++ plugins/Event/locale/Event.pot | 8 +- plugins/Event/locale/ia/LC_MESSAGES/Event.po | 48 ++ plugins/Event/locale/mk/LC_MESSAGES/Event.po | 48 ++ plugins/Event/locale/nl/LC_MESSAGES/Event.po | 48 ++ plugins/Event/locale/te/LC_MESSAGES/Event.po | 48 ++ plugins/Event/locale/uk/LC_MESSAGES/Event.po | 49 ++ .../locale/ExtendedProfile.pot | 210 +++-- .../locale/br/LC_MESSAGES/ExtendedProfile.po | 116 ++- .../locale/ia/LC_MESSAGES/ExtendedProfile.po | 116 ++- .../locale/mk/LC_MESSAGES/ExtendedProfile.po | 116 ++- .../locale/nl/LC_MESSAGES/ExtendedProfile.po | 116 ++- .../locale/sv/LC_MESSAGES/ExtendedProfile.po | 116 ++- .../locale/te/LC_MESSAGES/ExtendedProfile.po | 116 ++- .../locale/uk/LC_MESSAGES/ExtendedProfile.po | 116 ++- plugins/Msn/locale/el/LC_MESSAGES/Msn.po | 29 + plugins/Poll/locale/Poll.pot | 10 +- plugins/Poll/locale/ia/LC_MESSAGES/Poll.po | 152 ++++ plugins/Poll/locale/mk/LC_MESSAGES/Poll.po | 152 ++++ plugins/Poll/locale/nl/LC_MESSAGES/Poll.po | 152 ++++ plugins/Poll/locale/uk/LC_MESSAGES/Poll.po | 153 ++++ plugins/SearchSub/locale/SearchSub.pot | 182 ++++ plugins/SubMirror/locale/SubMirror.pot | 35 +- .../locale/de/LC_MESSAGES/SubMirror.po | 23 +- .../locale/fr/LC_MESSAGES/SubMirror.po | 23 +- .../locale/ia/LC_MESSAGES/SubMirror.po | 23 +- .../locale/mk/LC_MESSAGES/SubMirror.po | 23 +- .../locale/nl/LC_MESSAGES/SubMirror.po | 23 +- .../locale/tl/LC_MESSAGES/SubMirror.po | 23 +- .../locale/uk/LC_MESSAGES/SubMirror.po | 23 +- plugins/TagSub/locale/TagSub.pot | 98 +++ .../locale/fa/LC_MESSAGES/UserLimit.po | 25 + .../locale/ru/LC_MESSAGES/YammerImport.po | 12 +- 72 files changed, 12540 insertions(+), 5342 deletions(-) create mode 100644 plugins/Directory/locale/ia/LC_MESSAGES/Directory.po create mode 100644 plugins/Directory/locale/mk/LC_MESSAGES/Directory.po create mode 100644 plugins/Directory/locale/nl/LC_MESSAGES/Directory.po create mode 100644 plugins/Directory/locale/uk/LC_MESSAGES/Directory.po create mode 100644 plugins/Event/locale/ia/LC_MESSAGES/Event.po create mode 100644 plugins/Event/locale/mk/LC_MESSAGES/Event.po create mode 100644 plugins/Event/locale/nl/LC_MESSAGES/Event.po create mode 100644 plugins/Event/locale/te/LC_MESSAGES/Event.po create mode 100644 plugins/Event/locale/uk/LC_MESSAGES/Event.po create mode 100644 plugins/Msn/locale/el/LC_MESSAGES/Msn.po create mode 100644 plugins/Poll/locale/ia/LC_MESSAGES/Poll.po create mode 100644 plugins/Poll/locale/mk/LC_MESSAGES/Poll.po create mode 100644 plugins/Poll/locale/nl/LC_MESSAGES/Poll.po create mode 100644 plugins/Poll/locale/uk/LC_MESSAGES/Poll.po create mode 100644 plugins/SearchSub/locale/SearchSub.pot create mode 100644 plugins/TagSub/locale/TagSub.pot create mode 100644 plugins/UserLimit/locale/fa/LC_MESSAGES/UserLimit.po diff --git a/locale/ar/LC_MESSAGES/statusnet.po b/locale/ar/LC_MESSAGES/statusnet.po index 17a4cb5b14..9650e26148 100644 --- a/locale/ar/LC_MESSAGES/statusnet.po +++ b/locale/ar/LC_MESSAGES/statusnet.po @@ -12,19 +12,19 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-11 18:15+0000\n" -"PO-Revision-Date: 2011-03-11 18:16:53+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:49:21+0000\n" "Language-Team: Arabic \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ar\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=6; plural=(n == 0) ? 0 : ( (n == 1) ? 1 : ( (n == " "2) ? 2 : ( (n%100 >= 3 && n%100 <= 10) ? 3 : ( (n%100 >= 11 && n%100 <= " "99) ? 4 : 5 ) ) ) );\n" -"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" +"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -600,7 +600,7 @@ msgstr "لم يمكن إزالة المستخدم %1$s من المجموعة %2$ msgid "%s's groups" msgstr "مجموعات %s" -#. TRANS: Used as subtitle in check for group membership. %1$s is a user name, %2$s is the site name. +#. TRANS: Used as subtitle in check for group membership. %1$s is the site name, %2$s is a user name. #, php-format msgid "%1$s groups %2$s is a member of." msgstr "مجموعات %1$s التي %2$s عضو فيها." @@ -4606,19 +4606,6 @@ msgstr "مجموعة %s" msgid "%1$s group, page %2$d" msgstr "مجموعة %1$s، الصفحة %2$d" -#. TRANS: Label for group description or group note (dt). Text hidden by default. -msgid "Note" -msgstr "ملاحظة" - -#. TRANS: Label for group aliases (dt). Text hidden by default. -msgid "Aliases" -msgstr "الكنى" - -#. TRANS: Group actions header (h2). Text hidden by default. -#, fuzzy -msgid "Group actions" -msgstr "تصرفات المستخدم" - #. TRANS: Tooltip for feed link. %s is a group nickname. #, php-format msgid "Notice feed for %s group (RSS 1.0)" @@ -4729,6 +4716,10 @@ msgstr "نتائج البحث ل\"%1$s\" على %2$s" msgid "Notice deleted." msgstr "حُذف الإشعار." +#, fuzzy +msgid "Notice" +msgstr "الإشعارات" + #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #, fuzzy, php-format msgid "%1$s tagged %2$s" @@ -5253,7 +5244,6 @@ msgstr "لا مدخل هوية." msgid "Tag %s" msgstr "الوسوم" -#. TRANS: H2 for user profile information. msgid "User profile" msgstr "ملف المستخدم الشخصي" @@ -5960,6 +5950,49 @@ msgstr "" msgid "No AtomPub API service for %s." msgstr "" +#. TRANS: H2 for user actions in a profile. +#. TRANS: H2 for entity actions in a profile. +msgid "User actions" +msgstr "تصرفات المستخدم" + +#. TRANS: Text shown in user profile of not yet compeltely deleted users. +msgid "User deletion in progress..." +msgstr "حذف المستخدم قيد التنفيذ..." + +#. TRANS: Link title for link on user profile. +msgid "Edit profile settings" +msgstr "عدّل إعدادات الملف الشخصي" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "عدّل" + +#. TRANS: Link title for link on user profile. +msgid "Send a direct message to this user" +msgstr "أرسل رسالة مباشرة إلى هذا المستخدم" + +#. TRANS: Link text for link on user profile. +msgid "Message" +msgstr "رسالة" + +#. TRANS: Label text on user profile to select a user role. +msgid "Moderate" +msgstr "راقب" + +#. TRANS: Label text on user profile to select a user role. +msgid "User role" +msgstr "دور المستخدم" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Administrator" +msgstr "إداري" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Moderator" +msgstr "مراقب" + #. TRANS: Page title. %1$s is the title, %2$s is the site name. #, php-format msgid "%1$s - %2$s" @@ -6711,85 +6744,171 @@ msgstr[3] "أنت عضو في هذه المجموعات:" msgstr[4] "" msgstr[5] "" -#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings. -msgid "" -"Commands:\n" -"on - turn on notifications\n" -"off - turn off notifications\n" -"help - show this help\n" -"follow - subscribe to user\n" -"groups - lists the groups you have joined\n" -"subscriptions - list the people you follow\n" -"subscribers - list the people that follow you\n" -"leave - unsubscribe from user\n" -"d - direct message to user\n" -"get - get last notice from user\n" -"whois - get profile info on user\n" -"lose - force user to stop following you\n" -"fav - add user's last notice as a 'fave'\n" -"fav # - add notice with the given id as a 'fave'\n" -"repeat # - repeat a notice with a given id\n" -"repeat - repeat the last notice from user\n" -"reply # - reply to notice with a given id\n" -"reply - reply to the last notice from user\n" -"join - join group\n" -"login - Get a link to login to the web interface\n" -"drop - leave group\n" -"stats - get your stats\n" -"stop - same as 'off'\n" -"quit - same as 'off'\n" -"sub - same as 'follow'\n" -"unsub - same as 'leave'\n" -"last - same as 'get'\n" -"on - not yet implemented.\n" -"off - not yet implemented.\n" -"nudge - remind a user to update.\n" -"invite - not yet implemented.\n" -"track - not yet implemented.\n" -"untrack - not yet implemented.\n" -"track off - not yet implemented.\n" -"untrack all - not yet implemented.\n" -"tracks - not yet implemented.\n" -"tracking - not yet implemented.\n" +#. TRANS: Header line of help text for commands. +#, fuzzy +msgctxt "COMMANDHELP" +msgid "Commands:" +msgstr "نتائج الأمر" + +#. TRANS: Help message for IM/SMS command "on" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn on notifications" +msgstr "تعذّر تشغيل الإشعار." + +#. TRANS: Help message for IM/SMS command "off" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn off notifications" +msgstr "تعذّر إطفاء الإشعارات." + +#. TRANS: Help message for IM/SMS command "help" +msgctxt "COMMANDHELP" +msgid "show this help" +msgstr "" + +#. TRANS: Help message for IM/SMS command "follow " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "subscribe to user" +msgstr "اشترك بهذا المستخدم" + +#. TRANS: Help message for IM/SMS command "groups" +msgctxt "COMMANDHELP" +msgid "lists the groups you have joined" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscriptions" +msgctxt "COMMANDHELP" +msgid "list the people you follow" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscribers" +msgctxt "COMMANDHELP" +msgid "list the people that follow you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "leave " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "unsubscribe from user" +msgstr "ألغِ الاشتراك مع هذا المستخدم" + +#. TRANS: Help message for IM/SMS command "d " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "direct message to user" +msgstr "رسالة مباشرة %s" + +#. TRANS: Help message for IM/SMS command "get " +msgctxt "COMMANDHELP" +msgid "get last notice from user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "whois " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "get profile info on user" +msgstr "معلومات الملف الشخصي" + +#. TRANS: Help message for IM/SMS command "lose " +msgctxt "COMMANDHELP" +msgid "force user to stop following you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav " +msgctxt "COMMANDHELP" +msgid "add user's last notice as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav #" +msgctxt "COMMANDHELP" +msgid "add notice with the given id as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat #" +msgctxt "COMMANDHELP" +msgid "repeat a notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "repeat the last notice from user" +msgstr "كرّر هذا الإشعار" + +#. TRANS: Help message for IM/SMS command "reply #" +msgctxt "COMMANDHELP" +msgid "reply to notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "reply " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "reply to the last notice from user" +msgstr "رُد على هذا الإشعار" + +#. TRANS: Help message for IM/SMS command "join " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "join group" +msgstr "غير معروفة" + +#. TRANS: Help message for IM/SMS command "login" +msgctxt "COMMANDHELP" +msgid "Get a link to login to the web interface" +msgstr "" + +#. TRANS: Help message for IM/SMS command "drop " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "leave group" +msgstr "احذف المستخدم" + +#. TRANS: Help message for IM/SMS command "stats" +msgctxt "COMMANDHELP" +msgid "get your stats" +msgstr "" + +#. TRANS: Help message for IM/SMS command "stop" +#. TRANS: Help message for IM/SMS command "quit" +msgctxt "COMMANDHELP" +msgid "same as 'off'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "sub " +msgctxt "COMMANDHELP" +msgid "same as 'follow'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "unsub " +msgctxt "COMMANDHELP" +msgid "same as 'leave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "last " +msgctxt "COMMANDHELP" +msgid "same as 'get'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "on " +#. TRANS: Help message for IM/SMS command "off " +#. TRANS: Help message for IM/SMS command "invite " +#. TRANS: Help message for IM/SMS command "track " +#. TRANS: Help message for IM/SMS command "untrack " +#. TRANS: Help message for IM/SMS command "track off" +#. TRANS: Help message for IM/SMS command "untrack all" +#. TRANS: Help message for IM/SMS command "tracks" +#. TRANS: Help message for IM/SMS command "tracking" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "not yet implemented." +msgstr "الأمر لم يُجهزّ بعد." + +#. TRANS: Help message for IM/SMS command "nudge " +msgctxt "COMMANDHELP" +msgid "remind a user to update." msgstr "" -"الأوامر:\n" -"on - شغّل الإشعار\n" -"off - أطفئ الإشعار\n" -"help - أظهر هذه المساعدة\n" -"follow - اشترك بالمستخدم\n" -"groups - اسرد المجموعات التي أنا عضو فيها\n" -"subscriptions - اسرد الذين أتابعهم\n" -"subscribers - اسرد الذين يتابعونني\n" -"leave - ألغِ الاشتراك بمستخدم\n" -"d - وجّه رسالة مباشرة إلى مستخدم\n" -"get - اجلب آخر رسالة من مستخدم\n" -"whois - اجلب معلومات ملف المستخدم\n" -"lose - أجبر المستخدم على عدم تتبعك\n" -"fav - اجعل آخر إشعار من المستخدم مفضلًا\n" -"fav # - اجعل الإشعار ذا رقم الهوية المعطى مفضلا\n" -"repeat # - كرّر الإشعار ذا رقم الهوية المعطى\n" -"repeat - كرّر آخر إشعار من المستخدم\n" -"reply # - رُد على الإشعار ذي رقم الهوية المعطى\n" -"reply - رُد على آخر إشعار من المستخدم\n" -"join - انضم إلى مجموعة\n" -"login - اجلب وصلة الولوج إلى واجهة الوب\n" -"drop - اترك المجموعة\n" -"stats - اجلب إحصاءاتك\n" -"stop - مثل 'off'\n" -"quit - مثل 'off'\n" -"sub - مثل 'follow'\n" -"unsub - مثل 'leave'\n" -"last - مثل 'get'\n" -"on - لم يطبق بعد.\n" -"off - لم يطبق بعد.\n" -"nudge - ذكّر مستخدمًا بإشعار أرسلته.\n" -"invite - لم يطبق بعد.\n" -"track - لم يطبق بعد.\n" -"untrack - لم يطبق بعد.\n" -"track off - لم يطبق بعد.\n" -"untrack all - لم يطبق بعد.\n" -"tracks - لم يطبق بعد.\n" -"tracking - لم يطبق بعد.\n" #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. #, fuzzy @@ -6973,6 +7092,9 @@ msgid "" "Location for the group, if any, like \"City, State (or Region), Country\"." msgstr "مكان تواجدك، على سبيل المثال \"المدينة، الولاية (أو المنطقة)، الدولة\"" +msgid "Aliases" +msgstr "الكنى" + #, php-format msgid "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " @@ -7054,6 +7176,11 @@ msgctxt "TOOLTIP" msgid "Add or edit %s design" msgstr "" +#. TRANS: Group actions header (h2). Text hidden by default. +#, fuzzy +msgid "Group actions" +msgstr "تصرفات المستخدم" + #. TRANS: Title for groups with the most members section. msgid "Groups with most members" msgstr "المجموعات الأكثر أعضاءً" @@ -7560,6 +7687,7 @@ msgstr "أرسل إشعارًا" msgid "What's up, %s?" msgstr "ما الأخبار يا %s؟" +#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "أرفق" @@ -8024,52 +8152,6 @@ msgstr "ألغِ الاشتراك" msgid "User %1$s (%2$d) has no profile record." msgstr "ليس للمستخدم ملف شخصي." -msgid "Edit Avatar" -msgstr "عدّل الأفتار" - -#. TRANS: H2 for user actions in a profile. -#. TRANS: H2 for entity actions in a profile. -msgid "User actions" -msgstr "تصرفات المستخدم" - -#. TRANS: Text shown in user profile of not yet compeltely deleted users. -msgid "User deletion in progress..." -msgstr "حذف المستخدم قيد التنفيذ..." - -#. TRANS: Link title for link on user profile. -msgid "Edit profile settings" -msgstr "عدّل إعدادات الملف الشخصي" - -#. TRANS: Link text for link on user profile. -msgid "Edit" -msgstr "عدّل" - -#. TRANS: Link title for link on user profile. -msgid "Send a direct message to this user" -msgstr "أرسل رسالة مباشرة إلى هذا المستخدم" - -#. TRANS: Link text for link on user profile. -msgid "Message" -msgstr "رسالة" - -#. TRANS: Label text on user profile to select a user role. -msgid "Moderate" -msgstr "راقب" - -#. TRANS: Label text on user profile to select a user role. -msgid "User role" -msgstr "دور المستخدم" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Administrator" -msgstr "إداري" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Moderator" -msgstr "مراقب" - #, fuzzy msgid "Not allowed to log in." msgstr "لست والجًا." @@ -8161,3 +8243,88 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" + +#~ msgid "Note" +#~ msgstr "ملاحظة" + +#~ msgid "" +#~ "Commands:\n" +#~ "on - turn on notifications\n" +#~ "off - turn off notifications\n" +#~ "help - show this help\n" +#~ "follow - subscribe to user\n" +#~ "groups - lists the groups you have joined\n" +#~ "subscriptions - list the people you follow\n" +#~ "subscribers - list the people that follow you\n" +#~ "leave - unsubscribe from user\n" +#~ "d - direct message to user\n" +#~ "get - get last notice from user\n" +#~ "whois - get profile info on user\n" +#~ "lose - force user to stop following you\n" +#~ "fav - add user's last notice as a 'fave'\n" +#~ "fav # - add notice with the given id as a 'fave'\n" +#~ "repeat # - repeat a notice with a given id\n" +#~ "repeat - repeat the last notice from user\n" +#~ "reply # - reply to notice with a given id\n" +#~ "reply - reply to the last notice from user\n" +#~ "join - join group\n" +#~ "login - Get a link to login to the web interface\n" +#~ "drop - leave group\n" +#~ "stats - get your stats\n" +#~ "stop - same as 'off'\n" +#~ "quit - same as 'off'\n" +#~ "sub - same as 'follow'\n" +#~ "unsub - same as 'leave'\n" +#~ "last - same as 'get'\n" +#~ "on - not yet implemented.\n" +#~ "off - not yet implemented.\n" +#~ "nudge - remind a user to update.\n" +#~ "invite - not yet implemented.\n" +#~ "track - not yet implemented.\n" +#~ "untrack - not yet implemented.\n" +#~ "track off - not yet implemented.\n" +#~ "untrack all - not yet implemented.\n" +#~ "tracks - not yet implemented.\n" +#~ "tracking - not yet implemented.\n" +#~ msgstr "" +#~ "الأوامر:\n" +#~ "on - شغّل الإشعار\n" +#~ "off - أطفئ الإشعار\n" +#~ "help - أظهر هذه المساعدة\n" +#~ "follow - اشترك بالمستخدم\n" +#~ "groups - اسرد المجموعات التي أنا عضو فيها\n" +#~ "subscriptions - اسرد الذين أتابعهم\n" +#~ "subscribers - اسرد الذين يتابعونني\n" +#~ "leave - ألغِ الاشتراك بمستخدم\n" +#~ "d - وجّه رسالة مباشرة إلى مستخدم\n" +#~ "get - اجلب آخر رسالة من مستخدم\n" +#~ "whois - اجلب معلومات ملف المستخدم\n" +#~ "lose - أجبر المستخدم على عدم تتبعك\n" +#~ "fav - اجعل آخر إشعار من المستخدم مفضلًا\n" +#~ "fav # - اجعل الإشعار ذا رقم الهوية المعطى مفضلا\n" +#~ "repeat # - كرّر الإشعار ذا رقم الهوية المعطى\n" +#~ "repeat - كرّر آخر إشعار من المستخدم\n" +#~ "reply # - رُد على الإشعار ذي رقم الهوية المعطى\n" +#~ "reply - رُد على آخر إشعار من المستخدم\n" +#~ "join - انضم إلى مجموعة\n" +#~ "login - اجلب وصلة الولوج إلى واجهة الوب\n" +#~ "drop - اترك المجموعة\n" +#~ "stats - اجلب إحصاءاتك\n" +#~ "stop - مثل 'off'\n" +#~ "quit - مثل 'off'\n" +#~ "sub - مثل 'follow'\n" +#~ "unsub - مثل 'leave'\n" +#~ "last - مثل 'get'\n" +#~ "on - لم يطبق بعد.\n" +#~ "off - لم يطبق بعد.\n" +#~ "nudge - ذكّر مستخدمًا بإشعار أرسلته.\n" +#~ "invite - لم يطبق بعد.\n" +#~ "track - لم يطبق بعد.\n" +#~ "untrack - لم يطبق بعد.\n" +#~ "track off - لم يطبق بعد.\n" +#~ "untrack all - لم يطبق بعد.\n" +#~ "tracks - لم يطبق بعد.\n" +#~ "tracking - لم يطبق بعد.\n" + +#~ msgid "Edit Avatar" +#~ msgstr "عدّل الأفتار" diff --git a/locale/arz/LC_MESSAGES/statusnet.po b/locale/arz/LC_MESSAGES/statusnet.po index 96a8a02c59..ece9e2217b 100644 --- a/locale/arz/LC_MESSAGES/statusnet.po +++ b/locale/arz/LC_MESSAGES/statusnet.po @@ -11,19 +11,19 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-11 18:15+0000\n" -"PO-Revision-Date: 2011-03-11 18:16:54+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:49:22+0000\n" "Language-Team: Egyptian Spoken Arabic \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: arz\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=6; plural= n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" -"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" +"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -609,7 +609,7 @@ msgstr "ما نفعش يتشال اليوزر %1$s من الجروپ %2$s." msgid "%s's groups" msgstr "مجموعات %s" -#. TRANS: Used as subtitle in check for group membership. %1$s is a user name, %2$s is the site name. +#. TRANS: Used as subtitle in check for group membership. %1$s is the site name, %2$s is a user name. #, fuzzy, php-format msgid "%1$s groups %2$s is a member of." msgstr "المجموعات التى %s عضو فيها" @@ -4647,19 +4647,6 @@ msgstr "مجموعه %s" msgid "%1$s group, page %2$d" msgstr "%1$s اعضاء الجروپ, صفحه %2$d" -#. TRANS: Label for group description or group note (dt). Text hidden by default. -msgid "Note" -msgstr "ملاحظة" - -#. TRANS: Label for group aliases (dt). Text hidden by default. -msgid "Aliases" -msgstr "الكنى" - -#. TRANS: Group actions header (h2). Text hidden by default. -#, fuzzy -msgid "Group actions" -msgstr "تصرفات المستخدم" - #. TRANS: Tooltip for feed link. %s is a group nickname. #, php-format msgid "Notice feed for %s group (RSS 1.0)" @@ -4768,6 +4755,10 @@ msgstr "نتايج التدوير لـ\"%1$s\" على %2$s" msgid "Notice deleted." msgstr "حُذف الإشعار." +#, fuzzy +msgid "Notice" +msgstr "الإشعارات" + #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #, fuzzy, php-format msgid "%1$s tagged %2$s" @@ -5294,7 +5285,6 @@ msgstr "لا مدخل هويه." msgid "Tag %s" msgstr "الوسوم" -#. TRANS: H2 for user profile information. msgid "User profile" msgstr "ملف المستخدم الشخصي" @@ -5995,6 +5985,51 @@ msgstr "" msgid "No AtomPub API service for %s." msgstr "" +#. TRANS: H2 for user actions in a profile. +#. TRANS: H2 for entity actions in a profile. +msgid "User actions" +msgstr "تصرفات المستخدم" + +#. TRANS: Text shown in user profile of not yet compeltely deleted users. +msgid "User deletion in progress..." +msgstr "" + +#. TRANS: Link title for link on user profile. +msgid "Edit profile settings" +msgstr "عدّل إعدادات الملف الشخصي" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "عدّل" + +#. TRANS: Link title for link on user profile. +msgid "Send a direct message to this user" +msgstr "أرسل رساله مباشره إلى هذا المستخدم" + +#. TRANS: Link text for link on user profile. +msgid "Message" +msgstr "رسالة" + +#. TRANS: Label text on user profile to select a user role. +msgid "Moderate" +msgstr "" + +#. TRANS: Label text on user profile to select a user role. +#, fuzzy +msgid "User role" +msgstr "ملف المستخدم الشخصي" + +#. TRANS: Role that can be set for a user profile. +#, fuzzy +msgctxt "role" +msgid "Administrator" +msgstr "الإداريون" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Moderator" +msgstr "" + #. TRANS: Page title. %1$s is the title, %2$s is the site name. #, php-format msgid "%1$s - %2$s" @@ -6758,46 +6793,170 @@ msgstr[3] "أنت عضو فى هذه المجموعات:" msgstr[4] "" msgstr[5] "" -#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings. -msgid "" -"Commands:\n" -"on - turn on notifications\n" -"off - turn off notifications\n" -"help - show this help\n" -"follow - subscribe to user\n" -"groups - lists the groups you have joined\n" -"subscriptions - list the people you follow\n" -"subscribers - list the people that follow you\n" -"leave - unsubscribe from user\n" -"d - direct message to user\n" -"get - get last notice from user\n" -"whois - get profile info on user\n" -"lose - force user to stop following you\n" -"fav - add user's last notice as a 'fave'\n" -"fav # - add notice with the given id as a 'fave'\n" -"repeat # - repeat a notice with a given id\n" -"repeat - repeat the last notice from user\n" -"reply # - reply to notice with a given id\n" -"reply - reply to the last notice from user\n" -"join - join group\n" -"login - Get a link to login to the web interface\n" -"drop - leave group\n" -"stats - get your stats\n" -"stop - same as 'off'\n" -"quit - same as 'off'\n" -"sub - same as 'follow'\n" -"unsub - same as 'leave'\n" -"last - same as 'get'\n" -"on - not yet implemented.\n" -"off - not yet implemented.\n" -"nudge - remind a user to update.\n" -"invite - not yet implemented.\n" -"track - not yet implemented.\n" -"untrack - not yet implemented.\n" -"track off - not yet implemented.\n" -"untrack all - not yet implemented.\n" -"tracks - not yet implemented.\n" -"tracking - not yet implemented.\n" +#. TRANS: Header line of help text for commands. +#, fuzzy +msgctxt "COMMANDHELP" +msgid "Commands:" +msgstr "نتائج الأمر" + +#. TRANS: Help message for IM/SMS command "on" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn on notifications" +msgstr "مش نافعه تتكرر الملاحظتك بتاعتك." + +#. TRANS: Help message for IM/SMS command "off" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn off notifications" +msgstr "مش نافعه تتكرر الملاحظتك بتاعتك." + +#. TRANS: Help message for IM/SMS command "help" +msgctxt "COMMANDHELP" +msgid "show this help" +msgstr "" + +#. TRANS: Help message for IM/SMS command "follow " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "subscribe to user" +msgstr "اشترك بهذا المستخدم" + +#. TRANS: Help message for IM/SMS command "groups" +msgctxt "COMMANDHELP" +msgid "lists the groups you have joined" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscriptions" +msgctxt "COMMANDHELP" +msgid "list the people you follow" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscribers" +msgctxt "COMMANDHELP" +msgid "list the people that follow you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "leave " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "unsubscribe from user" +msgstr "ألغِ الاشتراك مع هذا المستخدم" + +#. TRANS: Help message for IM/SMS command "d " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "direct message to user" +msgstr "رساله مباشره %s" + +#. TRANS: Help message for IM/SMS command "get " +msgctxt "COMMANDHELP" +msgid "get last notice from user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "whois " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "get profile info on user" +msgstr "معلومات الملف الشخصي" + +#. TRANS: Help message for IM/SMS command "lose " +msgctxt "COMMANDHELP" +msgid "force user to stop following you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav " +msgctxt "COMMANDHELP" +msgid "add user's last notice as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav #" +msgctxt "COMMANDHELP" +msgid "add notice with the given id as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat #" +msgctxt "COMMANDHELP" +msgid "repeat a notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "repeat the last notice from user" +msgstr "كرر هذا الإشعار" + +#. TRANS: Help message for IM/SMS command "reply #" +msgctxt "COMMANDHELP" +msgid "reply to notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "reply " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "reply to the last notice from user" +msgstr "رُد على هذا الإشعار" + +#. TRANS: Help message for IM/SMS command "join " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "join group" +msgstr "مش معروف" + +#. TRANS: Help message for IM/SMS command "login" +msgctxt "COMMANDHELP" +msgid "Get a link to login to the web interface" +msgstr "" + +#. TRANS: Help message for IM/SMS command "drop " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "leave group" +msgstr "احذف المستخدم" + +#. TRANS: Help message for IM/SMS command "stats" +msgctxt "COMMANDHELP" +msgid "get your stats" +msgstr "" + +#. TRANS: Help message for IM/SMS command "stop" +#. TRANS: Help message for IM/SMS command "quit" +msgctxt "COMMANDHELP" +msgid "same as 'off'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "sub " +msgctxt "COMMANDHELP" +msgid "same as 'follow'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "unsub " +msgctxt "COMMANDHELP" +msgid "same as 'leave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "last " +msgctxt "COMMANDHELP" +msgid "same as 'get'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "on " +#. TRANS: Help message for IM/SMS command "off " +#. TRANS: Help message for IM/SMS command "invite " +#. TRANS: Help message for IM/SMS command "track " +#. TRANS: Help message for IM/SMS command "untrack " +#. TRANS: Help message for IM/SMS command "track off" +#. TRANS: Help message for IM/SMS command "untrack all" +#. TRANS: Help message for IM/SMS command "tracks" +#. TRANS: Help message for IM/SMS command "tracking" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "not yet implemented." +msgstr "اكتمل الأمر" + +#. TRANS: Help message for IM/SMS command "nudge " +msgctxt "COMMANDHELP" +msgid "remind a user to update." msgstr "" #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. @@ -6982,6 +7141,9 @@ msgid "" "Location for the group, if any, like \"City, State (or Region), Country\"." msgstr "" +msgid "Aliases" +msgstr "الكنى" + #, php-format msgid "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " @@ -7064,6 +7226,11 @@ msgctxt "TOOLTIP" msgid "Add or edit %s design" msgstr "" +#. TRANS: Group actions header (h2). Text hidden by default. +#, fuzzy +msgid "Group actions" +msgstr "تصرفات المستخدم" + #. TRANS: Title for groups with the most members section. msgid "Groups with most members" msgstr "المجموعات الأكثر أعضاءً" @@ -7552,6 +7719,7 @@ msgstr "أرسل إشعارًا" msgid "What's up, %s?" msgstr "ما الأخبار يا %s؟" +#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "أرفق" @@ -8020,54 +8188,6 @@ msgstr "ألغِ الاشتراك" msgid "User %1$s (%2$d) has no profile record." msgstr "ليس للمستخدم ملف شخصى." -msgid "Edit Avatar" -msgstr "عدّل الأفتار" - -#. TRANS: H2 for user actions in a profile. -#. TRANS: H2 for entity actions in a profile. -msgid "User actions" -msgstr "تصرفات المستخدم" - -#. TRANS: Text shown in user profile of not yet compeltely deleted users. -msgid "User deletion in progress..." -msgstr "" - -#. TRANS: Link title for link on user profile. -msgid "Edit profile settings" -msgstr "عدّل إعدادات الملف الشخصي" - -#. TRANS: Link text for link on user profile. -msgid "Edit" -msgstr "عدّل" - -#. TRANS: Link title for link on user profile. -msgid "Send a direct message to this user" -msgstr "أرسل رساله مباشره إلى هذا المستخدم" - -#. TRANS: Link text for link on user profile. -msgid "Message" -msgstr "رسالة" - -#. TRANS: Label text on user profile to select a user role. -msgid "Moderate" -msgstr "" - -#. TRANS: Label text on user profile to select a user role. -#, fuzzy -msgid "User role" -msgstr "ملف المستخدم الشخصي" - -#. TRANS: Role that can be set for a user profile. -#, fuzzy -msgctxt "role" -msgid "Administrator" -msgstr "الإداريون" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Moderator" -msgstr "" - #, fuzzy msgid "Not allowed to log in." msgstr "لست والجًا." @@ -8159,3 +8279,9 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" + +#~ msgid "Note" +#~ msgstr "ملاحظة" + +#~ msgid "Edit Avatar" +#~ msgstr "عدّل الأفتار" diff --git a/locale/bg/LC_MESSAGES/statusnet.po b/locale/bg/LC_MESSAGES/statusnet.po index eaabeec93f..4d1cf6906c 100644 --- a/locale/bg/LC_MESSAGES/statusnet.po +++ b/locale/bg/LC_MESSAGES/statusnet.po @@ -11,17 +11,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-11 18:15+0000\n" -"PO-Revision-Date: 2011-03-11 18:16:55+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:49:23+0000\n" "Language-Team: Bulgarian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: bg\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" +"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -587,7 +587,7 @@ msgstr "Грешка при създаване на групата." msgid "%s's groups" msgstr "Групи на %s" -#. TRANS: Used as subtitle in check for group membership. %1$s is a user name, %2$s is the site name. +#. TRANS: Used as subtitle in check for group membership. %1$s is the site name, %2$s is a user name. #, fuzzy, php-format msgid "%1$s groups %2$s is a member of." msgstr "Групи, в които участва %s" @@ -4658,19 +4658,6 @@ msgstr "Група %s" msgid "%1$s group, page %2$d" msgstr "%1$s, страница %2$d" -#. TRANS: Label for group description or group note (dt). Text hidden by default. -msgid "Note" -msgstr "Бележка" - -#. TRANS: Label for group aliases (dt). Text hidden by default. -msgid "Aliases" -msgstr "Псевдоними" - -#. TRANS: Group actions header (h2). Text hidden by default. -#, fuzzy -msgid "Group actions" -msgstr "Потребителски действия" - #. TRANS: Tooltip for feed link. %s is a group nickname. #, php-format msgid "Notice feed for %s group (RSS 1.0)" @@ -4773,6 +4760,10 @@ msgstr "Съобщение от %1$s в %2$s" msgid "Notice deleted." msgstr "Бележката е изтрита." +#, fuzzy +msgid "Notice" +msgstr "Бележки" + #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #, fuzzy, php-format msgid "%1$s tagged %2$s" @@ -5292,7 +5283,6 @@ msgstr "Липсват аргументи return-to." msgid "Tag %s" msgstr "Етикети" -#. TRANS: H2 for user profile information. msgid "User profile" msgstr "Потребителски профил" @@ -6001,6 +5991,50 @@ msgstr "" msgid "No AtomPub API service for %s." msgstr "" +#. TRANS: H2 for user actions in a profile. +#. TRANS: H2 for entity actions in a profile. +msgid "User actions" +msgstr "Потребителски действия" + +#. TRANS: Text shown in user profile of not yet compeltely deleted users. +msgid "User deletion in progress..." +msgstr "" + +#. TRANS: Link title for link on user profile. +msgid "Edit profile settings" +msgstr "Редактиране на профила" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "Редактиране" + +#. TRANS: Link title for link on user profile. +msgid "Send a direct message to this user" +msgstr "Изпращате на пряко съобщение до този потребител." + +#. TRANS: Link text for link on user profile. +msgid "Message" +msgstr "Съобщение" + +#. TRANS: Label text on user profile to select a user role. +#, fuzzy +msgid "Moderate" +msgstr "Модератор" + +#. TRANS: Label text on user profile to select a user role. +msgid "User role" +msgstr "Потребителска роля" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Administrator" +msgstr "Администратор" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Moderator" +msgstr "Модератор" + #. TRANS: Page title. %1$s is the title, %2$s is the site name. #, php-format msgid "%1$s - %2$s" @@ -6745,46 +6779,170 @@ msgid_plural "You are a member of these groups:" msgstr[0] "Не членувате в тази група." msgstr[1] "Не членувате в тази група." -#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings. -msgid "" -"Commands:\n" -"on - turn on notifications\n" -"off - turn off notifications\n" -"help - show this help\n" -"follow - subscribe to user\n" -"groups - lists the groups you have joined\n" -"subscriptions - list the people you follow\n" -"subscribers - list the people that follow you\n" -"leave - unsubscribe from user\n" -"d - direct message to user\n" -"get - get last notice from user\n" -"whois - get profile info on user\n" -"lose - force user to stop following you\n" -"fav - add user's last notice as a 'fave'\n" -"fav # - add notice with the given id as a 'fave'\n" -"repeat # - repeat a notice with a given id\n" -"repeat - repeat the last notice from user\n" -"reply # - reply to notice with a given id\n" -"reply - reply to the last notice from user\n" -"join - join group\n" -"login - Get a link to login to the web interface\n" -"drop - leave group\n" -"stats - get your stats\n" -"stop - same as 'off'\n" -"quit - same as 'off'\n" -"sub - same as 'follow'\n" -"unsub - same as 'leave'\n" -"last - same as 'get'\n" -"on - not yet implemented.\n" -"off - not yet implemented.\n" -"nudge - remind a user to update.\n" -"invite - not yet implemented.\n" -"track - not yet implemented.\n" -"untrack - not yet implemented.\n" -"track off - not yet implemented.\n" -"untrack all - not yet implemented.\n" -"tracks - not yet implemented.\n" -"tracking - not yet implemented.\n" +#. TRANS: Header line of help text for commands. +#, fuzzy +msgctxt "COMMANDHELP" +msgid "Commands:" +msgstr "Резултат от командата" + +#. TRANS: Help message for IM/SMS command "on" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn on notifications" +msgstr "Грешка при включване на уведомлението." + +#. TRANS: Help message for IM/SMS command "off" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn off notifications" +msgstr "Грешка при изключване на уведомлението." + +#. TRANS: Help message for IM/SMS command "help" +msgctxt "COMMANDHELP" +msgid "show this help" +msgstr "" + +#. TRANS: Help message for IM/SMS command "follow " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "subscribe to user" +msgstr "Абониране за този потребител" + +#. TRANS: Help message for IM/SMS command "groups" +msgctxt "COMMANDHELP" +msgid "lists the groups you have joined" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscriptions" +msgctxt "COMMANDHELP" +msgid "list the people you follow" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscribers" +msgctxt "COMMANDHELP" +msgid "list the people that follow you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "leave " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "unsubscribe from user" +msgstr "Отписване от този потребител" + +#. TRANS: Help message for IM/SMS command "d " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "direct message to user" +msgstr "Преки съобщения до %s" + +#. TRANS: Help message for IM/SMS command "get " +msgctxt "COMMANDHELP" +msgid "get last notice from user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "whois " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "get profile info on user" +msgstr "Данни на профила" + +#. TRANS: Help message for IM/SMS command "lose " +msgctxt "COMMANDHELP" +msgid "force user to stop following you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav " +msgctxt "COMMANDHELP" +msgid "add user's last notice as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav #" +msgctxt "COMMANDHELP" +msgid "add notice with the given id as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat #" +msgctxt "COMMANDHELP" +msgid "repeat a notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "repeat the last notice from user" +msgstr "Повтаряне на тази бележка" + +#. TRANS: Help message for IM/SMS command "reply #" +msgctxt "COMMANDHELP" +msgid "reply to notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "reply " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "reply to the last notice from user" +msgstr "Отговаряне на тази бележка" + +#. TRANS: Help message for IM/SMS command "join " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "join group" +msgstr "Непозната група." + +#. TRANS: Help message for IM/SMS command "login" +msgctxt "COMMANDHELP" +msgid "Get a link to login to the web interface" +msgstr "" + +#. TRANS: Help message for IM/SMS command "drop " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "leave group" +msgstr "Изтриване на потребител" + +#. TRANS: Help message for IM/SMS command "stats" +msgctxt "COMMANDHELP" +msgid "get your stats" +msgstr "" + +#. TRANS: Help message for IM/SMS command "stop" +#. TRANS: Help message for IM/SMS command "quit" +msgctxt "COMMANDHELP" +msgid "same as 'off'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "sub " +msgctxt "COMMANDHELP" +msgid "same as 'follow'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "unsub " +msgctxt "COMMANDHELP" +msgid "same as 'leave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "last " +msgctxt "COMMANDHELP" +msgid "same as 'get'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "on " +#. TRANS: Help message for IM/SMS command "off " +#. TRANS: Help message for IM/SMS command "invite " +#. TRANS: Help message for IM/SMS command "track " +#. TRANS: Help message for IM/SMS command "untrack " +#. TRANS: Help message for IM/SMS command "track off" +#. TRANS: Help message for IM/SMS command "untrack all" +#. TRANS: Help message for IM/SMS command "tracks" +#. TRANS: Help message for IM/SMS command "tracking" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "not yet implemented." +msgstr "Командата все още не се поддържа." + +#. TRANS: Help message for IM/SMS command "nudge " +msgctxt "COMMANDHELP" +msgid "remind a user to update." msgstr "" #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. @@ -6972,6 +7130,9 @@ msgid "" msgstr "" "Къде се намира групата — град, община, държава и т.н. (ако е приложимо)" +msgid "Aliases" +msgstr "Псевдоними" + #, php-format msgid "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " @@ -7050,6 +7211,11 @@ msgctxt "TOOLTIP" msgid "Add or edit %s design" msgstr "" +#. TRANS: Group actions header (h2). Text hidden by default. +#, fuzzy +msgid "Group actions" +msgstr "Потребителски действия" + #. TRANS: Title for groups with the most members section. msgid "Groups with most members" msgstr "Групи с най-много членове" @@ -7525,6 +7691,7 @@ msgstr "Изпращане на бележка" msgid "What's up, %s?" msgstr "Какво става, %s?" +#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Прикрепяне" @@ -7988,53 +8155,6 @@ msgstr "Отписване" msgid "User %1$s (%2$d) has no profile record." msgstr "Потребителят няма профил." -msgid "Edit Avatar" -msgstr "Редактиране на аватара" - -#. TRANS: H2 for user actions in a profile. -#. TRANS: H2 for entity actions in a profile. -msgid "User actions" -msgstr "Потребителски действия" - -#. TRANS: Text shown in user profile of not yet compeltely deleted users. -msgid "User deletion in progress..." -msgstr "" - -#. TRANS: Link title for link on user profile. -msgid "Edit profile settings" -msgstr "Редактиране на профила" - -#. TRANS: Link text for link on user profile. -msgid "Edit" -msgstr "Редактиране" - -#. TRANS: Link title for link on user profile. -msgid "Send a direct message to this user" -msgstr "Изпращате на пряко съобщение до този потребител." - -#. TRANS: Link text for link on user profile. -msgid "Message" -msgstr "Съобщение" - -#. TRANS: Label text on user profile to select a user role. -#, fuzzy -msgid "Moderate" -msgstr "Модератор" - -#. TRANS: Label text on user profile to select a user role. -msgid "User role" -msgstr "Потребителска роля" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Administrator" -msgstr "Администратор" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Moderator" -msgstr "Модератор" - #, fuzzy msgid "Not allowed to log in." msgstr "Не сте влезли в системата." @@ -8110,3 +8230,9 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" + +#~ msgid "Note" +#~ msgstr "Бележка" + +#~ msgid "Edit Avatar" +#~ msgstr "Редактиране на аватара" diff --git a/locale/br/LC_MESSAGES/statusnet.po b/locale/br/LC_MESSAGES/statusnet.po index 8ca30f42c1..6bf976f0fd 100644 --- a/locale/br/LC_MESSAGES/statusnet.po +++ b/locale/br/LC_MESSAGES/statusnet.po @@ -12,17 +12,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-11 18:15+0000\n" -"PO-Revision-Date: 2011-03-11 18:16:56+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:49:25+0000\n" "Language-Team: Breton \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: br\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" +"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -589,7 +589,7 @@ msgstr "Dibosupl eo dilemel an implijer %1$s deus ar strollad %2$s." msgid "%s's groups" msgstr "Strollad %s" -#. TRANS: Used as subtitle in check for group membership. %1$s is a user name, %2$s is the site name. +#. TRANS: Used as subtitle in check for group membership. %1$s is the site name, %2$s is a user name. #, php-format msgid "%1$s groups %2$s is a member of." msgstr "Strolladoù %1s m'eo ezel %2s." @@ -4582,18 +4582,6 @@ msgstr "strollad %s" msgid "%1$s group, page %2$d" msgstr "Strollad %1$s, pajenn %2$d" -#. TRANS: Label for group description or group note (dt). Text hidden by default. -msgid "Note" -msgstr "Notenn" - -#. TRANS: Label for group aliases (dt). Text hidden by default. -msgid "Aliases" -msgstr "Aliasoù" - -#. TRANS: Group actions header (h2). Text hidden by default. -msgid "Group actions" -msgstr "Obererezh ar strollad" - #. TRANS: Tooltip for feed link. %s is a group nickname. #, php-format msgid "Notice feed for %s group (RSS 1.0)" @@ -4700,6 +4688,10 @@ msgstr "Kemenadenn resevet eus %1$s d'an %2$s" msgid "Notice deleted." msgstr "Ali dilammet." +#, fuzzy +msgid "Notice" +msgstr "Ali" + #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #, fuzzy, php-format msgid "%1$s tagged %2$s" @@ -5225,7 +5217,6 @@ msgstr "Arguzenn ID ebet." msgid "Tag %s" msgstr "Merk %s" -#. TRANS: H2 for user profile information. msgid "User profile" msgstr "Profil an implijer" @@ -5916,6 +5907,49 @@ msgstr "" msgid "No AtomPub API service for %s." msgstr "" +#. TRANS: H2 for user actions in a profile. +#. TRANS: H2 for entity actions in a profile. +msgid "User actions" +msgstr "Obererezh an implijer" + +#. TRANS: Text shown in user profile of not yet compeltely deleted users. +msgid "User deletion in progress..." +msgstr "Diverkadenn an implijer o vont war-raok..." + +#. TRANS: Link title for link on user profile. +msgid "Edit profile settings" +msgstr "Kemmañ arventennoù ar profil" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "Aozañ" + +#. TRANS: Link title for link on user profile. +msgid "Send a direct message to this user" +msgstr "Kas ur gemennadenn war-eeun d'an implijer-mañ" + +#. TRANS: Link text for link on user profile. +msgid "Message" +msgstr "Kemennadenn" + +#. TRANS: Label text on user profile to select a user role. +msgid "Moderate" +msgstr "Habaskaat" + +#. TRANS: Label text on user profile to select a user role. +msgid "User role" +msgstr "Rol an implijer" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Administrator" +msgstr "Merour" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Moderator" +msgstr "Habasker" + #. TRANS: Page title. %1$s is the title, %2$s is the site name. #, php-format msgid "%1$s - %2$s" @@ -6644,46 +6678,170 @@ msgid_plural "You are a member of these groups:" msgstr[0] "You are a member of this group:" msgstr[1] "You are a member of these groups:" -#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings. -msgid "" -"Commands:\n" -"on - turn on notifications\n" -"off - turn off notifications\n" -"help - show this help\n" -"follow - subscribe to user\n" -"groups - lists the groups you have joined\n" -"subscriptions - list the people you follow\n" -"subscribers - list the people that follow you\n" -"leave - unsubscribe from user\n" -"d - direct message to user\n" -"get - get last notice from user\n" -"whois - get profile info on user\n" -"lose - force user to stop following you\n" -"fav - add user's last notice as a 'fave'\n" -"fav # - add notice with the given id as a 'fave'\n" -"repeat # - repeat a notice with a given id\n" -"repeat - repeat the last notice from user\n" -"reply # - reply to notice with a given id\n" -"reply - reply to the last notice from user\n" -"join - join group\n" -"login - Get a link to login to the web interface\n" -"drop - leave group\n" -"stats - get your stats\n" -"stop - same as 'off'\n" -"quit - same as 'off'\n" -"sub - same as 'follow'\n" -"unsub - same as 'leave'\n" -"last - same as 'get'\n" -"on - not yet implemented.\n" -"off - not yet implemented.\n" -"nudge - remind a user to update.\n" -"invite - not yet implemented.\n" -"track - not yet implemented.\n" -"untrack - not yet implemented.\n" -"track off - not yet implemented.\n" -"untrack all - not yet implemented.\n" -"tracks - not yet implemented.\n" -"tracking - not yet implemented.\n" +#. TRANS: Header line of help text for commands. +#, fuzzy +msgctxt "COMMANDHELP" +msgid "Commands:" +msgstr "Disoc'hoù an urzhiad" + +#. TRANS: Help message for IM/SMS command "on" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn on notifications" +msgstr "Dibosupl eo gweredekaat ar c'hemennoù." + +#. TRANS: Help message for IM/SMS command "off" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn off notifications" +msgstr "Dibosupl eo diweredekaat ar c'hemennoù." + +#. TRANS: Help message for IM/SMS command "help" +msgctxt "COMMANDHELP" +msgid "show this help" +msgstr "" + +#. TRANS: Help message for IM/SMS command "follow " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "subscribe to user" +msgstr "En em goumanantiñ d'an implijer-mañ" + +#. TRANS: Help message for IM/SMS command "groups" +msgctxt "COMMANDHELP" +msgid "lists the groups you have joined" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscriptions" +msgctxt "COMMANDHELP" +msgid "list the people you follow" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscribers" +msgctxt "COMMANDHELP" +msgid "list the people that follow you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "leave " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "unsubscribe from user" +msgstr "En em zigoumanantiñ eus an implijer-mañ" + +#. TRANS: Help message for IM/SMS command "d " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "direct message to user" +msgstr "Kemennadennoù war-eeun kaset da %s" + +#. TRANS: Help message for IM/SMS command "get " +msgctxt "COMMANDHELP" +msgid "get last notice from user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "whois " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "get profile info on user" +msgstr "Titouroù ar profil" + +#. TRANS: Help message for IM/SMS command "lose " +msgctxt "COMMANDHELP" +msgid "force user to stop following you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav " +msgctxt "COMMANDHELP" +msgid "add user's last notice as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav #" +msgctxt "COMMANDHELP" +msgid "add notice with the given id as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat #" +msgctxt "COMMANDHELP" +msgid "repeat a notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "repeat the last notice from user" +msgstr "Adkregiñ gant ar c'hemenn-mañ" + +#. TRANS: Help message for IM/SMS command "reply #" +msgctxt "COMMANDHELP" +msgid "reply to notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "reply " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "reply to the last notice from user" +msgstr "Respont d'ar c'hemenn-mañ" + +#. TRANS: Help message for IM/SMS command "join " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "join group" +msgstr "Strollad dianav." + +#. TRANS: Help message for IM/SMS command "login" +msgctxt "COMMANDHELP" +msgid "Get a link to login to the web interface" +msgstr "" + +#. TRANS: Help message for IM/SMS command "drop " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "leave group" +msgstr "Dilemel ar strollad" + +#. TRANS: Help message for IM/SMS command "stats" +msgctxt "COMMANDHELP" +msgid "get your stats" +msgstr "" + +#. TRANS: Help message for IM/SMS command "stop" +#. TRANS: Help message for IM/SMS command "quit" +msgctxt "COMMANDHELP" +msgid "same as 'off'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "sub " +msgctxt "COMMANDHELP" +msgid "same as 'follow'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "unsub " +msgctxt "COMMANDHELP" +msgid "same as 'leave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "last " +msgctxt "COMMANDHELP" +msgid "same as 'get'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "on " +#. TRANS: Help message for IM/SMS command "off " +#. TRANS: Help message for IM/SMS command "invite " +#. TRANS: Help message for IM/SMS command "track " +#. TRANS: Help message for IM/SMS command "untrack " +#. TRANS: Help message for IM/SMS command "track off" +#. TRANS: Help message for IM/SMS command "untrack all" +#. TRANS: Help message for IM/SMS command "tracks" +#. TRANS: Help message for IM/SMS command "tracking" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "not yet implemented." +msgstr "Digarezit, n'eo ket bet emplementet an urzhiad-mañ c'hoazh." + +#. TRANS: Help message for IM/SMS command "nudge " +msgctxt "COMMANDHELP" +msgid "remind a user to update." msgstr "" #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. @@ -6867,6 +7025,9 @@ msgid "" "Location for the group, if any, like \"City, State (or Region), Country\"." msgstr "El lec'h m'emaoc'h, da skouer \"Kêr, Stad (pe Rannvro), Bro\"" +msgid "Aliases" +msgstr "Aliasoù" + #, php-format msgid "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " @@ -6944,6 +7105,10 @@ msgctxt "TOOLTIP" msgid "Add or edit %s design" msgstr "Ouzhpennañ pe kemmañ tres ar strollad %s" +#. TRANS: Group actions header (h2). Text hidden by default. +msgid "Group actions" +msgstr "Obererezh ar strollad" + #. TRANS: Title for groups with the most members section. #, fuzzy msgid "Groups with most members" @@ -7418,6 +7583,7 @@ msgstr "Kas un ali" msgid "What's up, %s?" msgstr "Penaos 'mañ kont, %s ?" +#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Stagañ" @@ -7877,52 +8043,6 @@ msgstr "Digoumanantiñ" msgid "User %1$s (%2$d) has no profile record." msgstr "An implijer-mañ n'eus profil ebet dezhañ." -msgid "Edit Avatar" -msgstr "Kemmañ an Avatar" - -#. TRANS: H2 for user actions in a profile. -#. TRANS: H2 for entity actions in a profile. -msgid "User actions" -msgstr "Obererezh an implijer" - -#. TRANS: Text shown in user profile of not yet compeltely deleted users. -msgid "User deletion in progress..." -msgstr "Diverkadenn an implijer o vont war-raok..." - -#. TRANS: Link title for link on user profile. -msgid "Edit profile settings" -msgstr "Kemmañ arventennoù ar profil" - -#. TRANS: Link text for link on user profile. -msgid "Edit" -msgstr "Aozañ" - -#. TRANS: Link title for link on user profile. -msgid "Send a direct message to this user" -msgstr "Kas ur gemennadenn war-eeun d'an implijer-mañ" - -#. TRANS: Link text for link on user profile. -msgid "Message" -msgstr "Kemennadenn" - -#. TRANS: Label text on user profile to select a user role. -msgid "Moderate" -msgstr "Habaskaat" - -#. TRANS: Label text on user profile to select a user role. -msgid "User role" -msgstr "Rol an implijer" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Administrator" -msgstr "Merour" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Moderator" -msgstr "Habasker" - #, fuzzy msgid "Not allowed to log in." msgstr "Nann-kevreet." @@ -7998,3 +8118,9 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" + +#~ msgid "Note" +#~ msgstr "Notenn" + +#~ msgid "Edit Avatar" +#~ msgstr "Kemmañ an Avatar" diff --git a/locale/ca/LC_MESSAGES/statusnet.po b/locale/ca/LC_MESSAGES/statusnet.po index c8c23852bb..be175cd65b 100644 --- a/locale/ca/LC_MESSAGES/statusnet.po +++ b/locale/ca/LC_MESSAGES/statusnet.po @@ -16,17 +16,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-11 18:15+0000\n" -"PO-Revision-Date: 2011-03-11 18:16:57+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:49:26+0000\n" "Language-Team: Catalan \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ca\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" +"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -598,7 +598,7 @@ msgstr "No s'ha pogut eliminar l'usuari %1$s del grup %2$s." msgid "%s's groups" msgstr "Grups de %s" -#. TRANS: Used as subtitle in check for group membership. %1$s is a user name, %2$s is the site name. +#. TRANS: Used as subtitle in check for group membership. %1$s is the site name, %2$s is a user name. #, php-format msgid "%1$s groups %2$s is a member of." msgstr "%1$s grups dels que %2$s és membre." @@ -3433,7 +3433,6 @@ msgid "6 or more characters." msgstr "6 o més caràcters." #. TRANS: Field label on page where to change password. In this field the new password should be typed a second time. -#, fuzzy msgctxt "LABEL" msgid "Confirm" msgstr "Confirma" @@ -3444,7 +3443,6 @@ msgid "Same as password above." msgstr "Igual que la contrasenya de dalt" #. TRANS: Button text on page where to change password. -#, fuzzy msgctxt "BUTTON" msgid "Change" msgstr "Canvia" @@ -3457,9 +3455,8 @@ msgid "Passwords don't match." msgstr "Les contrasenyes no coincideixen." #. TRANS: Form validation error on page where to change password. -#, fuzzy msgid "Incorrect old password." -msgstr "Contrasenya antiga incorrecta" +msgstr "La contrasenya antiga no és correcta" #. TRANS: Form validation error on page where to change password. msgid "Error saving user; invalid." @@ -4646,18 +4643,6 @@ msgstr "%s grup" msgid "%1$s group, page %2$d" msgstr "grup %1$s, pàgina %2$d" -#. TRANS: Label for group description or group note (dt). Text hidden by default. -msgid "Note" -msgstr "Avisos" - -#. TRANS: Label for group aliases (dt). Text hidden by default. -msgid "Aliases" -msgstr "Àlies" - -#. TRANS: Group actions header (h2). Text hidden by default. -msgid "Group actions" -msgstr "Accions del grup" - #. TRANS: Tooltip for feed link. %s is a group nickname. #, php-format msgid "Notice feed for %s group (RSS 1.0)" @@ -4768,6 +4753,10 @@ msgstr "Missatge de %1$s a %2$s" msgid "Notice deleted." msgstr "S'ha eliminat l'avís." +#, fuzzy +msgid "Notice" +msgstr "Avisos" + #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #, php-format msgid "%1$s tagged %2$s" @@ -5303,7 +5292,6 @@ msgstr "No hi ha cap argument ID." msgid "Tag %s" msgstr "Etiqueta %s" -#. TRANS: H2 for user profile information. msgid "User profile" msgstr "Perfil de l'usuari" @@ -6022,6 +6010,49 @@ msgstr "No es pot trobar l'XRD de %s." msgid "No AtomPub API service for %s." msgstr "No hi ha cap servei API d'AtomPub de %s." +#. TRANS: H2 for user actions in a profile. +#. TRANS: H2 for entity actions in a profile. +msgid "User actions" +msgstr "Accions de l'usuari" + +#. TRANS: Text shown in user profile of not yet compeltely deleted users. +msgid "User deletion in progress..." +msgstr "S'està eliminant l'usuari..." + +#. TRANS: Link title for link on user profile. +msgid "Edit profile settings" +msgstr "Edita la configuració del perfil" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "Edita" + +#. TRANS: Link title for link on user profile. +msgid "Send a direct message to this user" +msgstr "Envia un missatge directe a aquest usuari" + +#. TRANS: Link text for link on user profile. +msgid "Message" +msgstr "Missatge" + +#. TRANS: Label text on user profile to select a user role. +msgid "Moderate" +msgstr "Modera" + +#. TRANS: Label text on user profile to select a user role. +msgid "User role" +msgstr "Rol de l'usuari" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Administrator" +msgstr "Administrador" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Moderator" +msgstr "Moderador" + #. TRANS: Page title. %1$s is the title, %2$s is the site name. #, php-format msgid "%1$s - %2$s" @@ -6747,85 +6778,171 @@ msgid_plural "You are a member of these groups:" msgstr[0] "Sou un membre d'aquest grup:" msgstr[1] "Sou un membre d'aquests grups:" -#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings. -msgid "" -"Commands:\n" -"on - turn on notifications\n" -"off - turn off notifications\n" -"help - show this help\n" -"follow - subscribe to user\n" -"groups - lists the groups you have joined\n" -"subscriptions - list the people you follow\n" -"subscribers - list the people that follow you\n" -"leave - unsubscribe from user\n" -"d - direct message to user\n" -"get - get last notice from user\n" -"whois - get profile info on user\n" -"lose - force user to stop following you\n" -"fav - add user's last notice as a 'fave'\n" -"fav # - add notice with the given id as a 'fave'\n" -"repeat # - repeat a notice with a given id\n" -"repeat - repeat the last notice from user\n" -"reply # - reply to notice with a given id\n" -"reply - reply to the last notice from user\n" -"join - join group\n" -"login - Get a link to login to the web interface\n" -"drop - leave group\n" -"stats - get your stats\n" -"stop - same as 'off'\n" -"quit - same as 'off'\n" -"sub - same as 'follow'\n" -"unsub - same as 'leave'\n" -"last - same as 'get'\n" -"on - not yet implemented.\n" -"off - not yet implemented.\n" -"nudge - remind a user to update.\n" -"invite - not yet implemented.\n" -"track - not yet implemented.\n" -"untrack - not yet implemented.\n" -"track off - not yet implemented.\n" -"untrack all - not yet implemented.\n" -"tracks - not yet implemented.\n" -"tracking - not yet implemented.\n" +#. TRANS: Header line of help text for commands. +#, fuzzy +msgctxt "COMMANDHELP" +msgid "Commands:" +msgstr "Resultats de les comandes" + +#. TRANS: Help message for IM/SMS command "on" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn on notifications" +msgstr "No es poden activar els avisos." + +#. TRANS: Help message for IM/SMS command "off" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn off notifications" +msgstr "No es poden desactivar els avisos." + +#. TRANS: Help message for IM/SMS command "help" +msgctxt "COMMANDHELP" +msgid "show this help" +msgstr "" + +#. TRANS: Help message for IM/SMS command "follow " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "subscribe to user" +msgstr "Subscriu-me a aquest usuari" + +#. TRANS: Help message for IM/SMS command "groups" +msgctxt "COMMANDHELP" +msgid "lists the groups you have joined" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscriptions" +msgctxt "COMMANDHELP" +msgid "list the people you follow" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscribers" +msgctxt "COMMANDHELP" +msgid "list the people that follow you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "leave " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "unsubscribe from user" +msgstr "Cancel·la la subscripció d'aquest usuari" + +#. TRANS: Help message for IM/SMS command "d " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "direct message to user" +msgstr "Missatges directes a %s" + +#. TRANS: Help message for IM/SMS command "get " +msgctxt "COMMANDHELP" +msgid "get last notice from user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "whois " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "get profile info on user" +msgstr "El perfil remot no és un grup!" + +#. TRANS: Help message for IM/SMS command "lose " +msgctxt "COMMANDHELP" +msgid "force user to stop following you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav " +msgctxt "COMMANDHELP" +msgid "add user's last notice as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav #" +msgctxt "COMMANDHELP" +msgid "add notice with the given id as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat #" +msgctxt "COMMANDHELP" +msgid "repeat a notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "repeat the last notice from user" +msgstr "Repeteix l'avís" + +#. TRANS: Help message for IM/SMS command "reply #" +msgctxt "COMMANDHELP" +msgid "reply to notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "reply " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "reply to the last notice from user" +msgstr "Respon a aquest avís" + +#. TRANS: Help message for IM/SMS command "join " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "join group" +msgstr "Grup desconegut." + +#. TRANS: Help message for IM/SMS command "login" +msgctxt "COMMANDHELP" +msgid "Get a link to login to the web interface" +msgstr "" + +#. TRANS: Help message for IM/SMS command "drop " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "leave group" +msgstr "Elimina el grup" + +#. TRANS: Help message for IM/SMS command "stats" +msgctxt "COMMANDHELP" +msgid "get your stats" +msgstr "" + +#. TRANS: Help message for IM/SMS command "stop" +#. TRANS: Help message for IM/SMS command "quit" +msgctxt "COMMANDHELP" +msgid "same as 'off'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "sub " +msgctxt "COMMANDHELP" +msgid "same as 'follow'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "unsub " +msgctxt "COMMANDHELP" +msgid "same as 'leave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "last " +msgctxt "COMMANDHELP" +msgid "same as 'get'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "on " +#. TRANS: Help message for IM/SMS command "off " +#. TRANS: Help message for IM/SMS command "invite " +#. TRANS: Help message for IM/SMS command "track " +#. TRANS: Help message for IM/SMS command "untrack " +#. TRANS: Help message for IM/SMS command "track off" +#. TRANS: Help message for IM/SMS command "untrack all" +#. TRANS: Help message for IM/SMS command "tracks" +#. TRANS: Help message for IM/SMS command "tracking" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "not yet implemented." +msgstr "Comanda encara no implementada." + +#. TRANS: Help message for IM/SMS command "nudge " +msgctxt "COMMANDHELP" +msgid "remind a user to update." msgstr "" -"Ordres:\n" -"on - activeu els avisos\n" -"off - desactiveu els avisos\n" -"help - mostra aquesta ajuda\n" -"follow - se subscriu a l'usuari\n" -"groups - llista els grups on us heu unit\n" -"subscriptions - llista la gent que seguiu\n" -"subscribers - llista la gent que us segueix\n" -"leave - cancel·la la subscripció de l'usuari\n" -"d - missatge directe a l'usuari\n" -"get - s'obté el darrer avís de l'usuari\n" -"whois - s'obté la informació del perfil de l'usuari\n" -"lose - es força l'usuari a deixar de seguir-vos\n" -"fav - afegeix el darrer avís de l'usuari com a «preferit»\n" -"fav # - afegeix l'avís amb l'id donat com a «preferit»\n" -"repeat # - repeteix l'avís amb l'id donat\n" -"repeat - repeteix el darrer avís de l'usari\n" -"reply # - respon l'avís amb l'id donat\n" -"reply - respon el darrer avís de l'usuari\n" -"join - s'uneix al grup\n" -"login - s'obté un enllaç per iniciar una sessió des de la interfície web\n" -"drop - es deixa el grup\n" -"stats - s'obté el vostre estat\n" -"stop - el mateix que «off»\n" -"quit - el mateix que «off»\n" -"sub - el mateix que «follow»\n" -"unsub - el mateix que «leave»\n" -"last - el mateix que «get»\n" -"on - no s'ha implementat encara.\n" -"off - no s'ha implementat encara.\n" -"nudge - es recorda a l'usuari que actualitzi.\n" -"invite - no s'ha implementat encara.\n" -"track - no s'ha implementat encara.\n" -"untrack - no s'ha implementat encara.\n" -"track off - no s'ha implementat encara.\n" -"untrack all - no s'ha implementat encara.\n" -"tracks - no s'ha implementat encara.\n" -"tracking - no s'ha implementat encara.\n" #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. msgid "No configuration file found." @@ -6999,6 +7116,9 @@ msgid "" msgstr "" "Ubicació del grup, si s'hi adiu cap, com ara «ciutat, comarca (o illa), país»." +msgid "Aliases" +msgstr "Àlies" + #, php-format msgid "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " @@ -7080,6 +7200,10 @@ msgctxt "TOOLTIP" msgid "Add or edit %s design" msgstr "Afegeix o edita el disseny de %s" +#. TRANS: Group actions header (h2). Text hidden by default. +msgid "Group actions" +msgstr "Accions del grup" + #. TRANS: Title for groups with the most members section. msgid "Groups with most members" msgstr "Grups amb més membres" @@ -7647,6 +7771,7 @@ msgstr "Envia un avís" msgid "What's up, %s?" msgstr "Què tal, %s?" +#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Adjunta" @@ -8099,52 +8224,6 @@ msgstr "Cancel·la la subscripció" msgid "User %1$s (%2$d) has no profile record." msgstr "L'usuari %1$s (%2$d) no té un registre de perfil." -msgid "Edit Avatar" -msgstr "Edita l'avatar" - -#. TRANS: H2 for user actions in a profile. -#. TRANS: H2 for entity actions in a profile. -msgid "User actions" -msgstr "Accions de l'usuari" - -#. TRANS: Text shown in user profile of not yet compeltely deleted users. -msgid "User deletion in progress..." -msgstr "S'està eliminant l'usuari..." - -#. TRANS: Link title for link on user profile. -msgid "Edit profile settings" -msgstr "Edita la configuració del perfil" - -#. TRANS: Link text for link on user profile. -msgid "Edit" -msgstr "Edita" - -#. TRANS: Link title for link on user profile. -msgid "Send a direct message to this user" -msgstr "Envia un missatge directe a aquest usuari" - -#. TRANS: Link text for link on user profile. -msgid "Message" -msgstr "Missatge" - -#. TRANS: Label text on user profile to select a user role. -msgid "Moderate" -msgstr "Modera" - -#. TRANS: Label text on user profile to select a user role. -msgid "User role" -msgstr "Rol de l'usuari" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Administrator" -msgstr "Administrador" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Moderator" -msgstr "Moderador" - msgid "Not allowed to log in." msgstr "No es permet iniciar una sessió." @@ -8218,3 +8297,88 @@ msgstr "L'XML no és vàlid, hi manca l'arrel XRD." #, php-format msgid "Getting backup from file '%s'." msgstr "Es recupera la còpia de seguretat del fitxer '%s'." + +#~ msgid "Note" +#~ msgstr "Avisos" + +#~ msgid "" +#~ "Commands:\n" +#~ "on - turn on notifications\n" +#~ "off - turn off notifications\n" +#~ "help - show this help\n" +#~ "follow - subscribe to user\n" +#~ "groups - lists the groups you have joined\n" +#~ "subscriptions - list the people you follow\n" +#~ "subscribers - list the people that follow you\n" +#~ "leave - unsubscribe from user\n" +#~ "d - direct message to user\n" +#~ "get - get last notice from user\n" +#~ "whois - get profile info on user\n" +#~ "lose - force user to stop following you\n" +#~ "fav - add user's last notice as a 'fave'\n" +#~ "fav # - add notice with the given id as a 'fave'\n" +#~ "repeat # - repeat a notice with a given id\n" +#~ "repeat - repeat the last notice from user\n" +#~ "reply # - reply to notice with a given id\n" +#~ "reply - reply to the last notice from user\n" +#~ "join - join group\n" +#~ "login - Get a link to login to the web interface\n" +#~ "drop - leave group\n" +#~ "stats - get your stats\n" +#~ "stop - same as 'off'\n" +#~ "quit - same as 'off'\n" +#~ "sub - same as 'follow'\n" +#~ "unsub - same as 'leave'\n" +#~ "last - same as 'get'\n" +#~ "on - not yet implemented.\n" +#~ "off - not yet implemented.\n" +#~ "nudge - remind a user to update.\n" +#~ "invite - not yet implemented.\n" +#~ "track - not yet implemented.\n" +#~ "untrack - not yet implemented.\n" +#~ "track off - not yet implemented.\n" +#~ "untrack all - not yet implemented.\n" +#~ "tracks - not yet implemented.\n" +#~ "tracking - not yet implemented.\n" +#~ msgstr "" +#~ "Ordres:\n" +#~ "on - activeu els avisos\n" +#~ "off - desactiveu els avisos\n" +#~ "help - mostra aquesta ajuda\n" +#~ "follow - se subscriu a l'usuari\n" +#~ "groups - llista els grups on us heu unit\n" +#~ "subscriptions - llista la gent que seguiu\n" +#~ "subscribers - llista la gent que us segueix\n" +#~ "leave - cancel·la la subscripció de l'usuari\n" +#~ "d - missatge directe a l'usuari\n" +#~ "get - s'obté el darrer avís de l'usuari\n" +#~ "whois - s'obté la informació del perfil de l'usuari\n" +#~ "lose - es força l'usuari a deixar de seguir-vos\n" +#~ "fav - afegeix el darrer avís de l'usuari com a «preferit»\n" +#~ "fav # - afegeix l'avís amb l'id donat com a «preferit»\n" +#~ "repeat # - repeteix l'avís amb l'id donat\n" +#~ "repeat - repeteix el darrer avís de l'usari\n" +#~ "reply # - respon l'avís amb l'id donat\n" +#~ "reply - respon el darrer avís de l'usuari\n" +#~ "join - s'uneix al grup\n" +#~ "login - s'obté un enllaç per iniciar una sessió des de la interfície web\n" +#~ "drop - es deixa el grup\n" +#~ "stats - s'obté el vostre estat\n" +#~ "stop - el mateix que «off»\n" +#~ "quit - el mateix que «off»\n" +#~ "sub - el mateix que «follow»\n" +#~ "unsub - el mateix que «leave»\n" +#~ "last - el mateix que «get»\n" +#~ "on - no s'ha implementat encara.\n" +#~ "off - no s'ha implementat encara.\n" +#~ "nudge - es recorda a l'usuari que actualitzi.\n" +#~ "invite - no s'ha implementat encara.\n" +#~ "track - no s'ha implementat encara.\n" +#~ "untrack - no s'ha implementat encara.\n" +#~ "track off - no s'ha implementat encara.\n" +#~ "untrack all - no s'ha implementat encara.\n" +#~ "tracks - no s'ha implementat encara.\n" +#~ "tracking - no s'ha implementat encara.\n" + +#~ msgid "Edit Avatar" +#~ msgstr "Edita l'avatar" diff --git a/locale/cs/LC_MESSAGES/statusnet.po b/locale/cs/LC_MESSAGES/statusnet.po index ec922736f3..6dc8c4efc7 100644 --- a/locale/cs/LC_MESSAGES/statusnet.po +++ b/locale/cs/LC_MESSAGES/statusnet.po @@ -11,18 +11,18 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-11 18:15+0000\n" -"PO-Revision-Date: 2011-03-11 18:16:59+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:49:27+0000\n" "Language-Team: Czech \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: cs\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ( (n >= 2 && n <= 4) ? 1 : " "2 );\n" -"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" +"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -600,7 +600,7 @@ msgstr "Nelze odebrat uživatele %1$S ze skupiny %2$s." msgid "%s's groups" msgstr "skupiny uživatele %s" -#. TRANS: Used as subtitle in check for group membership. %1$s is a user name, %2$s is the site name. +#. TRANS: Used as subtitle in check for group membership. %1$s is the site name, %2$s is a user name. #, php-format msgid "%1$s groups %2$s is a member of." msgstr "skupiny na %1$s, kterych je %2$s členem." @@ -4725,18 +4725,6 @@ msgstr "skupina %s" msgid "%1$s group, page %2$d" msgstr "skupina %1$s, str. %2$d" -#. TRANS: Label for group description or group note (dt). Text hidden by default. -msgid "Note" -msgstr "Poznámka" - -#. TRANS: Label for group aliases (dt). Text hidden by default. -msgid "Aliases" -msgstr "Aliasy" - -#. TRANS: Group actions header (h2). Text hidden by default. -msgid "Group actions" -msgstr "Akce skupiny" - #. TRANS: Tooltip for feed link. %s is a group nickname. #, php-format msgid "Notice feed for %s group (RSS 1.0)" @@ -4848,6 +4836,10 @@ msgstr "Zpráva od %1$s na %2$s" msgid "Notice deleted." msgstr "Oznámení smazáno." +#, fuzzy +msgid "Notice" +msgstr "Sdělení" + #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #, fuzzy, php-format msgid "%1$s tagged %2$s" @@ -5379,7 +5371,6 @@ msgstr "Žádný argument ID." msgid "Tag %s" msgstr "Otagujte %s" -#. TRANS: H2 for user profile information. msgid "User profile" msgstr "Uživatelský profil" @@ -6100,6 +6091,49 @@ msgstr "" msgid "No AtomPub API service for %s." msgstr "" +#. TRANS: H2 for user actions in a profile. +#. TRANS: H2 for entity actions in a profile. +msgid "User actions" +msgstr "Akce uživatele" + +#. TRANS: Text shown in user profile of not yet compeltely deleted users. +msgid "User deletion in progress..." +msgstr "Probíhá mazání uživatele..." + +#. TRANS: Link title for link on user profile. +msgid "Edit profile settings" +msgstr "Upravit nastavení profilu" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "Editovat" + +#. TRANS: Link title for link on user profile. +msgid "Send a direct message to this user" +msgstr "Odeslat přímou zprávu tomuto uživateli" + +#. TRANS: Link text for link on user profile. +msgid "Message" +msgstr "Zpráva" + +#. TRANS: Label text on user profile to select a user role. +msgid "Moderate" +msgstr "Moderovat" + +#. TRANS: Label text on user profile to select a user role. +msgid "User role" +msgstr "Role uživatele" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Administrator" +msgstr "Administrátor" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Moderator" +msgstr "Moderátor" + #. TRANS: Page title. %1$s is the title, %2$s is the site name. #, php-format msgid "%1$s - %2$s" @@ -6827,85 +6861,171 @@ msgstr[0] "Jste členem této skupiny:" msgstr[1] "Jste členem těchto skupin:" msgstr[2] "" -#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings. -msgid "" -"Commands:\n" -"on - turn on notifications\n" -"off - turn off notifications\n" -"help - show this help\n" -"follow - subscribe to user\n" -"groups - lists the groups you have joined\n" -"subscriptions - list the people you follow\n" -"subscribers - list the people that follow you\n" -"leave - unsubscribe from user\n" -"d - direct message to user\n" -"get - get last notice from user\n" -"whois - get profile info on user\n" -"lose - force user to stop following you\n" -"fav - add user's last notice as a 'fave'\n" -"fav # - add notice with the given id as a 'fave'\n" -"repeat # - repeat a notice with a given id\n" -"repeat - repeat the last notice from user\n" -"reply # - reply to notice with a given id\n" -"reply - reply to the last notice from user\n" -"join - join group\n" -"login - Get a link to login to the web interface\n" -"drop - leave group\n" -"stats - get your stats\n" -"stop - same as 'off'\n" -"quit - same as 'off'\n" -"sub - same as 'follow'\n" -"unsub - same as 'leave'\n" -"last - same as 'get'\n" -"on - not yet implemented.\n" -"off - not yet implemented.\n" -"nudge - remind a user to update.\n" -"invite - not yet implemented.\n" -"track - not yet implemented.\n" -"untrack - not yet implemented.\n" -"track off - not yet implemented.\n" -"untrack all - not yet implemented.\n" -"tracks - not yet implemented.\n" -"tracking - not yet implemented.\n" +#. TRANS: Header line of help text for commands. +#, fuzzy +msgctxt "COMMANDHELP" +msgid "Commands:" +msgstr "Výsledky příkazu" + +#. TRANS: Help message for IM/SMS command "on" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn on notifications" +msgstr "Nelze zapnout oznámení." + +#. TRANS: Help message for IM/SMS command "off" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn off notifications" +msgstr "Nelze vypnout oznámení." + +#. TRANS: Help message for IM/SMS command "help" +msgctxt "COMMANDHELP" +msgid "show this help" +msgstr "" + +#. TRANS: Help message for IM/SMS command "follow " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "subscribe to user" +msgstr "Přihlásit se k tomuto uživateli" + +#. TRANS: Help message for IM/SMS command "groups" +msgctxt "COMMANDHELP" +msgid "lists the groups you have joined" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscriptions" +msgctxt "COMMANDHELP" +msgid "list the people you follow" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscribers" +msgctxt "COMMANDHELP" +msgid "list the people that follow you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "leave " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "unsubscribe from user" +msgstr "Odhlásit se od tohoto uživatele" + +#. TRANS: Help message for IM/SMS command "d " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "direct message to user" +msgstr "Přímé zprávy uživateli %s" + +#. TRANS: Help message for IM/SMS command "get " +msgctxt "COMMANDHELP" +msgid "get last notice from user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "whois " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "get profile info on user" +msgstr "Nastavené Profilu" + +#. TRANS: Help message for IM/SMS command "lose " +msgctxt "COMMANDHELP" +msgid "force user to stop following you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav " +msgctxt "COMMANDHELP" +msgid "add user's last notice as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav #" +msgctxt "COMMANDHELP" +msgid "add notice with the given id as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat #" +msgctxt "COMMANDHELP" +msgid "repeat a notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "repeat the last notice from user" +msgstr "Opakovat toto oznámení" + +#. TRANS: Help message for IM/SMS command "reply #" +msgctxt "COMMANDHELP" +msgid "reply to notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "reply " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "reply to the last notice from user" +msgstr "Odpovědět na toto oznámení" + +#. TRANS: Help message for IM/SMS command "join " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "join group" +msgstr "Neznámé" + +#. TRANS: Help message for IM/SMS command "login" +msgctxt "COMMANDHELP" +msgid "Get a link to login to the web interface" +msgstr "" + +#. TRANS: Help message for IM/SMS command "drop " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "leave group" +msgstr "Smazat uživatele" + +#. TRANS: Help message for IM/SMS command "stats" +msgctxt "COMMANDHELP" +msgid "get your stats" +msgstr "" + +#. TRANS: Help message for IM/SMS command "stop" +#. TRANS: Help message for IM/SMS command "quit" +msgctxt "COMMANDHELP" +msgid "same as 'off'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "sub " +msgctxt "COMMANDHELP" +msgid "same as 'follow'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "unsub " +msgctxt "COMMANDHELP" +msgid "same as 'leave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "last " +msgctxt "COMMANDHELP" +msgid "same as 'get'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "on " +#. TRANS: Help message for IM/SMS command "off " +#. TRANS: Help message for IM/SMS command "invite " +#. TRANS: Help message for IM/SMS command "track " +#. TRANS: Help message for IM/SMS command "untrack " +#. TRANS: Help message for IM/SMS command "track off" +#. TRANS: Help message for IM/SMS command "untrack all" +#. TRANS: Help message for IM/SMS command "tracks" +#. TRANS: Help message for IM/SMS command "tracking" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "not yet implemented." +msgstr "Příkaz ještě nebyl implementován." + +#. TRANS: Help message for IM/SMS command "nudge " +msgctxt "COMMANDHELP" +msgid "remind a user to update." msgstr "" -"Příkazy:\n" -"on - zapnout oznámení\n" -"off - vypnout oznámení\n" -"help - zobrazí tuto nápovědu\n" -"follow - Přihlásit se k uživatel\n" -"groups - seznam skupin, ke kterým jste připojen\n" -"subscriptions - seznam lidí, které sledujete\n" -"subscribers - seznam osob, které vás sledují\n" -"leave - Odhlásit se od uživatele\n" -"d - Přímá zpráva uživateli\n" -"get - Dostanete poslední upozornění od uživatele\n" -"whois - Získat informace o profilu uživatele\n" -"lose - Donutit uživatele přestat vás sledovat\n" -"fav - Přidejte uživatelovo poslední oznámení jako 'Oblíbené'\n" -"fav # - Přidat upozornění s daným id jako 'Oblíbené'\n" -"repeat # - Opakovat oznámení s daným id\n" -"repeat - Opakovat poslední oznámení od uživatele\n" -"reply # - Odpověď na oznámení s daným id\n" -"reply - Odpověď na poslední oznámení od uživatele\n" -"join - Připojit se ke skupině\n" -"login - Získat odkaz pro přihlášení k webovému rozhraní\n" -"drop - Opustit skupinu\n" -"stats - získejte Vaše statistiky\n" -"stop - stejné jako 'off'\n" -"quit - stejné jako 'off'\n" -"sub - Stejné jako 'follow'\n" -"unsub - Stejné jako 'leave'\n" -"last - Stejné jako 'get'\n" -"on - Dosud neimplementován.\n" -"off - Dosud neimplementován.\n" -"nudge - Připomenout uživateli aby něco poslal.\n" -"invite - Dosud neimplementován.\n" -"track - Dosud neimplementován.\n" -"untrack -Dosud neimplementován.\n" -"track off - Dosud neimplementován.\n" -"untrack all - Dosud neimplementován.\n" -"tracks - Dosud neimplementován.\n" -"tracking - Dosud neimplementován.\n" #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. #, fuzzy @@ -7091,6 +7211,9 @@ msgstr "" "Umístění skupiny, pokud je nějaké, ve stylu \"město, stát (nebo region), země" "\"" +msgid "Aliases" +msgstr "Aliasy" + #, fuzzy, php-format msgid "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " @@ -7169,6 +7292,10 @@ msgctxt "TOOLTIP" msgid "Add or edit %s design" msgstr "" +#. TRANS: Group actions header (h2). Text hidden by default. +msgid "Group actions" +msgstr "Akce skupiny" + #. TRANS: Title for groups with the most members section. msgid "Groups with most members" msgstr "Skupiny s nejvíce členy" @@ -7739,6 +7866,7 @@ msgstr "Poslat oznámení" msgid "What's up, %s?" msgstr "Co se děje, %s?" +#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Připojit" @@ -8202,52 +8330,6 @@ msgstr "Odhlásit" msgid "User %1$s (%2$d) has no profile record." msgstr "Uživatel nemá profil." -msgid "Edit Avatar" -msgstr "Upravit avatar" - -#. TRANS: H2 for user actions in a profile. -#. TRANS: H2 for entity actions in a profile. -msgid "User actions" -msgstr "Akce uživatele" - -#. TRANS: Text shown in user profile of not yet compeltely deleted users. -msgid "User deletion in progress..." -msgstr "Probíhá mazání uživatele..." - -#. TRANS: Link title for link on user profile. -msgid "Edit profile settings" -msgstr "Upravit nastavení profilu" - -#. TRANS: Link text for link on user profile. -msgid "Edit" -msgstr "Editovat" - -#. TRANS: Link title for link on user profile. -msgid "Send a direct message to this user" -msgstr "Odeslat přímou zprávu tomuto uživateli" - -#. TRANS: Link text for link on user profile. -msgid "Message" -msgstr "Zpráva" - -#. TRANS: Label text on user profile to select a user role. -msgid "Moderate" -msgstr "Moderovat" - -#. TRANS: Label text on user profile to select a user role. -msgid "User role" -msgstr "Role uživatele" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Administrator" -msgstr "Administrátor" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Moderator" -msgstr "Moderátor" - #, fuzzy msgid "Not allowed to log in." msgstr "Nejste přihlášen(a)." @@ -8327,3 +8409,88 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" + +#~ msgid "Note" +#~ msgstr "Poznámka" + +#~ msgid "" +#~ "Commands:\n" +#~ "on - turn on notifications\n" +#~ "off - turn off notifications\n" +#~ "help - show this help\n" +#~ "follow - subscribe to user\n" +#~ "groups - lists the groups you have joined\n" +#~ "subscriptions - list the people you follow\n" +#~ "subscribers - list the people that follow you\n" +#~ "leave - unsubscribe from user\n" +#~ "d - direct message to user\n" +#~ "get - get last notice from user\n" +#~ "whois - get profile info on user\n" +#~ "lose - force user to stop following you\n" +#~ "fav - add user's last notice as a 'fave'\n" +#~ "fav # - add notice with the given id as a 'fave'\n" +#~ "repeat # - repeat a notice with a given id\n" +#~ "repeat - repeat the last notice from user\n" +#~ "reply # - reply to notice with a given id\n" +#~ "reply - reply to the last notice from user\n" +#~ "join - join group\n" +#~ "login - Get a link to login to the web interface\n" +#~ "drop - leave group\n" +#~ "stats - get your stats\n" +#~ "stop - same as 'off'\n" +#~ "quit - same as 'off'\n" +#~ "sub - same as 'follow'\n" +#~ "unsub - same as 'leave'\n" +#~ "last - same as 'get'\n" +#~ "on - not yet implemented.\n" +#~ "off - not yet implemented.\n" +#~ "nudge - remind a user to update.\n" +#~ "invite - not yet implemented.\n" +#~ "track - not yet implemented.\n" +#~ "untrack - not yet implemented.\n" +#~ "track off - not yet implemented.\n" +#~ "untrack all - not yet implemented.\n" +#~ "tracks - not yet implemented.\n" +#~ "tracking - not yet implemented.\n" +#~ msgstr "" +#~ "Příkazy:\n" +#~ "on - zapnout oznámení\n" +#~ "off - vypnout oznámení\n" +#~ "help - zobrazí tuto nápovědu\n" +#~ "follow - Přihlásit se k uživatel\n" +#~ "groups - seznam skupin, ke kterým jste připojen\n" +#~ "subscriptions - seznam lidí, které sledujete\n" +#~ "subscribers - seznam osob, které vás sledují\n" +#~ "leave - Odhlásit se od uživatele\n" +#~ "d - Přímá zpráva uživateli\n" +#~ "get - Dostanete poslední upozornění od uživatele\n" +#~ "whois - Získat informace o profilu uživatele\n" +#~ "lose - Donutit uživatele přestat vás sledovat\n" +#~ "fav - Přidejte uživatelovo poslední oznámení jako 'Oblíbené'\n" +#~ "fav # - Přidat upozornění s daným id jako 'Oblíbené'\n" +#~ "repeat # - Opakovat oznámení s daným id\n" +#~ "repeat - Opakovat poslední oznámení od uživatele\n" +#~ "reply # - Odpověď na oznámení s daným id\n" +#~ "reply - Odpověď na poslední oznámení od uživatele\n" +#~ "join - Připojit se ke skupině\n" +#~ "login - Získat odkaz pro přihlášení k webovému rozhraní\n" +#~ "drop - Opustit skupinu\n" +#~ "stats - získejte Vaše statistiky\n" +#~ "stop - stejné jako 'off'\n" +#~ "quit - stejné jako 'off'\n" +#~ "sub - Stejné jako 'follow'\n" +#~ "unsub - Stejné jako 'leave'\n" +#~ "last - Stejné jako 'get'\n" +#~ "on - Dosud neimplementován.\n" +#~ "off - Dosud neimplementován.\n" +#~ "nudge - Připomenout uživateli aby něco poslal.\n" +#~ "invite - Dosud neimplementován.\n" +#~ "track - Dosud neimplementován.\n" +#~ "untrack -Dosud neimplementován.\n" +#~ "track off - Dosud neimplementován.\n" +#~ "untrack all - Dosud neimplementován.\n" +#~ "tracks - Dosud neimplementován.\n" +#~ "tracking - Dosud neimplementován.\n" + +#~ msgid "Edit Avatar" +#~ msgstr "Upravit avatar" diff --git a/locale/de/LC_MESSAGES/statusnet.po b/locale/de/LC_MESSAGES/statusnet.po index 3fc5e059c2..0ef7232dc1 100644 --- a/locale/de/LC_MESSAGES/statusnet.po +++ b/locale/de/LC_MESSAGES/statusnet.po @@ -22,17 +22,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-11 18:15+0000\n" -"PO-Revision-Date: 2011-03-11 18:17:00+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:49:28+0000\n" "Language-Team: German \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: de\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" +"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -608,7 +608,7 @@ msgstr "Konnte Benutzer %1$s nicht aus der Gruppe %2$s entfernen." msgid "%s's groups" msgstr "Gruppen von %s" -#. TRANS: Used as subtitle in check for group membership. %1$s is a user name, %2$s is the site name. +#. TRANS: Used as subtitle in check for group membership. %1$s is the site name, %2$s is a user name. #, php-format msgid "%1$s groups %2$s is a member of." msgstr "%1$s Gruppen in denen %2$s Mitglied ist" @@ -4730,18 +4730,6 @@ msgstr "%s-Gruppe" msgid "%1$s group, page %2$d" msgstr "%1$s Gruppe, Seite %d" -#. TRANS: Label for group description or group note (dt). Text hidden by default. -msgid "Note" -msgstr "Nachricht" - -#. TRANS: Label for group aliases (dt). Text hidden by default. -msgid "Aliases" -msgstr "Pseudonyme" - -#. TRANS: Group actions header (h2). Text hidden by default. -msgid "Group actions" -msgstr "Gruppenaktionen" - #. TRANS: Tooltip for feed link. %s is a group nickname. #, php-format msgid "Notice feed for %s group (RSS 1.0)" @@ -4851,6 +4839,10 @@ msgstr "Nachricht von %1$s auf %2$s" msgid "Notice deleted." msgstr "Nachricht gelöscht." +#, fuzzy +msgid "Notice" +msgstr "Nachrichten" + #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #, php-format msgid "%1$s tagged %2$s" @@ -5387,7 +5379,6 @@ msgstr "Kein ID-Argument." msgid "Tag %s" msgstr "Tag „%s“" -#. TRANS: H2 for user profile information. msgid "User profile" msgstr "Benutzerprofil" @@ -6114,6 +6105,49 @@ msgstr "XRD für %s kann nicht gefunden werden." msgid "No AtomPub API service for %s." msgstr "AtomPub API für %s kann nicht gefunden werden." +#. TRANS: H2 for user actions in a profile. +#. TRANS: H2 for entity actions in a profile. +msgid "User actions" +msgstr "Benutzeraktionen" + +#. TRANS: Text shown in user profile of not yet compeltely deleted users. +msgid "User deletion in progress..." +msgstr "Löschung des Benutzers in Arbeit …" + +#. TRANS: Link title for link on user profile. +msgid "Edit profile settings" +msgstr "Profil-Einstellungen ändern" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "Bearbeiten" + +#. TRANS: Link title for link on user profile. +msgid "Send a direct message to this user" +msgstr "Direkte Nachricht an Benutzer versenden" + +#. TRANS: Link text for link on user profile. +msgid "Message" +msgstr "Nachricht" + +#. TRANS: Label text on user profile to select a user role. +msgid "Moderate" +msgstr "Moderieren" + +#. TRANS: Label text on user profile to select a user role. +msgid "User role" +msgstr "Benutzerrolle" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Administrator" +msgstr "Administrator" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Moderator" +msgstr "Moderator" + #. TRANS: Page title. %1$s is the title, %2$s is the site name. #, php-format msgid "%1$s - %2$s" @@ -6838,85 +6872,171 @@ msgid_plural "You are a member of these groups:" msgstr[0] "Du bist Mitglied dieser Gruppe:" msgstr[1] "Du bist Mitglied dieser Gruppen:" -#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings. -msgid "" -"Commands:\n" -"on - turn on notifications\n" -"off - turn off notifications\n" -"help - show this help\n" -"follow - subscribe to user\n" -"groups - lists the groups you have joined\n" -"subscriptions - list the people you follow\n" -"subscribers - list the people that follow you\n" -"leave - unsubscribe from user\n" -"d - direct message to user\n" -"get - get last notice from user\n" -"whois - get profile info on user\n" -"lose - force user to stop following you\n" -"fav - add user's last notice as a 'fave'\n" -"fav # - add notice with the given id as a 'fave'\n" -"repeat # - repeat a notice with a given id\n" -"repeat - repeat the last notice from user\n" -"reply # - reply to notice with a given id\n" -"reply - reply to the last notice from user\n" -"join - join group\n" -"login - Get a link to login to the web interface\n" -"drop - leave group\n" -"stats - get your stats\n" -"stop - same as 'off'\n" -"quit - same as 'off'\n" -"sub - same as 'follow'\n" -"unsub - same as 'leave'\n" -"last - same as 'get'\n" -"on - not yet implemented.\n" -"off - not yet implemented.\n" -"nudge - remind a user to update.\n" -"invite - not yet implemented.\n" -"track - not yet implemented.\n" -"untrack - not yet implemented.\n" -"track off - not yet implemented.\n" -"untrack all - not yet implemented.\n" -"tracks - not yet implemented.\n" -"tracking - not yet implemented.\n" +#. TRANS: Header line of help text for commands. +#, fuzzy +msgctxt "COMMANDHELP" +msgid "Commands:" +msgstr "Befehl-Ergebnisse" + +#. TRANS: Help message for IM/SMS command "on" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn on notifications" +msgstr "Konnte Benachrichtigung nicht aktivieren." + +#. TRANS: Help message for IM/SMS command "off" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn off notifications" +msgstr "Konnte Benachrichtigung nicht deaktivieren." + +#. TRANS: Help message for IM/SMS command "help" +msgctxt "COMMANDHELP" +msgid "show this help" +msgstr "" + +#. TRANS: Help message for IM/SMS command "follow " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "subscribe to user" +msgstr "Abonniere diesen Benutzer" + +#. TRANS: Help message for IM/SMS command "groups" +msgctxt "COMMANDHELP" +msgid "lists the groups you have joined" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscriptions" +msgctxt "COMMANDHELP" +msgid "list the people you follow" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscribers" +msgctxt "COMMANDHELP" +msgid "list the people that follow you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "leave " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "unsubscribe from user" +msgstr "Abonnement von diesem Benutzer abbestellen" + +#. TRANS: Help message for IM/SMS command "d " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "direct message to user" +msgstr "Direkte Nachrichten an %s" + +#. TRANS: Help message for IM/SMS command "get " +msgctxt "COMMANDHELP" +msgid "get last notice from user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "whois " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "get profile info on user" +msgstr "Entferntes Profil ist keine Gruppe!" + +#. TRANS: Help message for IM/SMS command "lose " +msgctxt "COMMANDHELP" +msgid "force user to stop following you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav " +msgctxt "COMMANDHELP" +msgid "add user's last notice as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav #" +msgctxt "COMMANDHELP" +msgid "add notice with the given id as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat #" +msgctxt "COMMANDHELP" +msgid "repeat a notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "repeat the last notice from user" +msgstr "Diese Nachricht wiederholen" + +#. TRANS: Help message for IM/SMS command "reply #" +msgctxt "COMMANDHELP" +msgid "reply to notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "reply " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "reply to the last notice from user" +msgstr "Auf diese Nachricht antworten" + +#. TRANS: Help message for IM/SMS command "join " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "join group" +msgstr "Unbekannte Gruppe." + +#. TRANS: Help message for IM/SMS command "login" +msgctxt "COMMANDHELP" +msgid "Get a link to login to the web interface" +msgstr "" + +#. TRANS: Help message for IM/SMS command "drop " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "leave group" +msgstr "Gruppe löschen" + +#. TRANS: Help message for IM/SMS command "stats" +msgctxt "COMMANDHELP" +msgid "get your stats" +msgstr "" + +#. TRANS: Help message for IM/SMS command "stop" +#. TRANS: Help message for IM/SMS command "quit" +msgctxt "COMMANDHELP" +msgid "same as 'off'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "sub " +msgctxt "COMMANDHELP" +msgid "same as 'follow'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "unsub " +msgctxt "COMMANDHELP" +msgid "same as 'leave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "last " +msgctxt "COMMANDHELP" +msgid "same as 'get'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "on " +#. TRANS: Help message for IM/SMS command "off " +#. TRANS: Help message for IM/SMS command "invite " +#. TRANS: Help message for IM/SMS command "track " +#. TRANS: Help message for IM/SMS command "untrack " +#. TRANS: Help message for IM/SMS command "track off" +#. TRANS: Help message for IM/SMS command "untrack all" +#. TRANS: Help message for IM/SMS command "tracks" +#. TRANS: Help message for IM/SMS command "tracking" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "not yet implemented." +msgstr "Befehl noch nicht implementiert." + +#. TRANS: Help message for IM/SMS command "nudge " +msgctxt "COMMANDHELP" +msgid "remind a user to update." msgstr "" -"Befehle:\n" -"on - Benachrichtigung einschalten\n" -"off - Benachrichtigung ausschalten\n" -"help - diese Hilfe anzeigen\n" -"follow - einem Benutzer folgen\n" -"groups - Gruppen auflisten in denen du Mitglied bist\n" -"subscriptions - Leute auflisten denen du folgst\n" -"subscribers - Leute auflisten die dir folgen\n" -"leave - einem Benutzer nicht mehr folgen\n" -"d - Direkte Nachricht an einen Benutzer schicken\n" -"get - letzte Nachricht eines Benutzers abrufen\n" -"whois - Profil eines Benutzers abrufen\n" -"lose - Benutzer zwingen dir nicht mehr zu folgen\n" -"fav - letzte Nachricht eines Benutzers als Favorit markieren\n" -"fav # - Nachricht mit bestimmter ID als Favorit markieren\n" -"repeat # - Nachricht mit bestimmter ID wiederholen\n" -"repeat - letzte Nachricht eines Benutzers wiederholen\n" -"reply # - Nachricht mit bestimmter ID beantworten\n" -"reply - letzte Nachricht eines Benutzers beantworten\n" -"join - Gruppe beitreten\n" -"login - Link zum Anmelden auf der Webseite anfordern\n" -"drop - Gruppe verlassen\n" -"stats - deine Statistik abrufen\n" -"stop - Äquivalent zu „off“\n" -"quit - Äquivalent zu „off“\n" -"sub - Äquivalent zu „follow“\n" -"unsub - Äquivalent zu „leave“\n" -"last - Äquivalent zu „get“\n" -"on - noch nicht implementiert\n" -"off - noch nicht implementiert\n" -"nudge - einen Benutzer ans Aktualisieren erinnern\n" -"invite - noch nicht implementiert\n" -"track - noch nicht implementiert\n" -"untrack - noch nicht implementiert\n" -"track off - noch nicht implementiert\n" -"untrack all - noch nicht implementiert\n" -"tracks - noch nicht implementiert\n" -"tracking - noch nicht implementiert\n" #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. msgid "No configuration file found." @@ -7093,6 +7213,9 @@ msgid "" "Location for the group, if any, like \"City, State (or Region), Country\"." msgstr "Ort der Gruppe, optional, beispielsweise „Stadt, Region, Land“." +msgid "Aliases" +msgstr "Pseudonyme" + #, php-format msgid "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " @@ -7174,6 +7297,10 @@ msgctxt "TOOLTIP" msgid "Add or edit %s design" msgstr "%s-Design hinzufügen oder bearbeiten" +#. TRANS: Group actions header (h2). Text hidden by default. +msgid "Group actions" +msgstr "Gruppenaktionen" + #. TRANS: Title for groups with the most members section. msgid "Groups with most members" msgstr "Gruppen mit den meisten Mitgliedern" @@ -7743,6 +7870,7 @@ msgstr "Nachricht senden" msgid "What's up, %s?" msgstr "Was geht, %s?" +#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Anhängen" @@ -8202,52 +8330,6 @@ msgstr "Abbestellen" msgid "User %1$s (%2$d) has no profile record." msgstr "Benutzer „%1$s“ (%2$d) hat kein Profil." -msgid "Edit Avatar" -msgstr "Avatar bearbeiten" - -#. TRANS: H2 for user actions in a profile. -#. TRANS: H2 for entity actions in a profile. -msgid "User actions" -msgstr "Benutzeraktionen" - -#. TRANS: Text shown in user profile of not yet compeltely deleted users. -msgid "User deletion in progress..." -msgstr "Löschung des Benutzers in Arbeit …" - -#. TRANS: Link title for link on user profile. -msgid "Edit profile settings" -msgstr "Profil-Einstellungen ändern" - -#. TRANS: Link text for link on user profile. -msgid "Edit" -msgstr "Bearbeiten" - -#. TRANS: Link title for link on user profile. -msgid "Send a direct message to this user" -msgstr "Direkte Nachricht an Benutzer versenden" - -#. TRANS: Link text for link on user profile. -msgid "Message" -msgstr "Nachricht" - -#. TRANS: Label text on user profile to select a user role. -msgid "Moderate" -msgstr "Moderieren" - -#. TRANS: Label text on user profile to select a user role. -msgid "User role" -msgstr "Benutzerrolle" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Administrator" -msgstr "Administrator" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Moderator" -msgstr "Moderator" - #, fuzzy msgid "Not allowed to log in." msgstr "Nicht angemeldet." @@ -8322,3 +8404,88 @@ msgstr "Ungültiges XML, XRD-Root fehlt." #, php-format msgid "Getting backup from file '%s'." msgstr "Hole Backup von der Datei „%s“." + +#~ msgid "Note" +#~ msgstr "Nachricht" + +#~ msgid "" +#~ "Commands:\n" +#~ "on - turn on notifications\n" +#~ "off - turn off notifications\n" +#~ "help - show this help\n" +#~ "follow - subscribe to user\n" +#~ "groups - lists the groups you have joined\n" +#~ "subscriptions - list the people you follow\n" +#~ "subscribers - list the people that follow you\n" +#~ "leave - unsubscribe from user\n" +#~ "d - direct message to user\n" +#~ "get - get last notice from user\n" +#~ "whois - get profile info on user\n" +#~ "lose - force user to stop following you\n" +#~ "fav - add user's last notice as a 'fave'\n" +#~ "fav # - add notice with the given id as a 'fave'\n" +#~ "repeat # - repeat a notice with a given id\n" +#~ "repeat - repeat the last notice from user\n" +#~ "reply # - reply to notice with a given id\n" +#~ "reply - reply to the last notice from user\n" +#~ "join - join group\n" +#~ "login - Get a link to login to the web interface\n" +#~ "drop - leave group\n" +#~ "stats - get your stats\n" +#~ "stop - same as 'off'\n" +#~ "quit - same as 'off'\n" +#~ "sub - same as 'follow'\n" +#~ "unsub - same as 'leave'\n" +#~ "last - same as 'get'\n" +#~ "on - not yet implemented.\n" +#~ "off - not yet implemented.\n" +#~ "nudge - remind a user to update.\n" +#~ "invite - not yet implemented.\n" +#~ "track - not yet implemented.\n" +#~ "untrack - not yet implemented.\n" +#~ "track off - not yet implemented.\n" +#~ "untrack all - not yet implemented.\n" +#~ "tracks - not yet implemented.\n" +#~ "tracking - not yet implemented.\n" +#~ msgstr "" +#~ "Befehle:\n" +#~ "on - Benachrichtigung einschalten\n" +#~ "off - Benachrichtigung ausschalten\n" +#~ "help - diese Hilfe anzeigen\n" +#~ "follow - einem Benutzer folgen\n" +#~ "groups - Gruppen auflisten in denen du Mitglied bist\n" +#~ "subscriptions - Leute auflisten denen du folgst\n" +#~ "subscribers - Leute auflisten die dir folgen\n" +#~ "leave - einem Benutzer nicht mehr folgen\n" +#~ "d - Direkte Nachricht an einen Benutzer schicken\n" +#~ "get - letzte Nachricht eines Benutzers abrufen\n" +#~ "whois - Profil eines Benutzers abrufen\n" +#~ "lose - Benutzer zwingen dir nicht mehr zu folgen\n" +#~ "fav - letzte Nachricht eines Benutzers als Favorit markieren\n" +#~ "fav # - Nachricht mit bestimmter ID als Favorit markieren\n" +#~ "repeat # - Nachricht mit bestimmter ID wiederholen\n" +#~ "repeat - letzte Nachricht eines Benutzers wiederholen\n" +#~ "reply # - Nachricht mit bestimmter ID beantworten\n" +#~ "reply - letzte Nachricht eines Benutzers beantworten\n" +#~ "join - Gruppe beitreten\n" +#~ "login - Link zum Anmelden auf der Webseite anfordern\n" +#~ "drop - Gruppe verlassen\n" +#~ "stats - deine Statistik abrufen\n" +#~ "stop - Äquivalent zu „off“\n" +#~ "quit - Äquivalent zu „off“\n" +#~ "sub - Äquivalent zu „follow“\n" +#~ "unsub - Äquivalent zu „leave“\n" +#~ "last - Äquivalent zu „get“\n" +#~ "on - noch nicht implementiert\n" +#~ "off - noch nicht implementiert\n" +#~ "nudge - einen Benutzer ans Aktualisieren erinnern\n" +#~ "invite - noch nicht implementiert\n" +#~ "track - noch nicht implementiert\n" +#~ "untrack - noch nicht implementiert\n" +#~ "track off - noch nicht implementiert\n" +#~ "untrack all - noch nicht implementiert\n" +#~ "tracks - noch nicht implementiert\n" +#~ "tracking - noch nicht implementiert\n" + +#~ msgid "Edit Avatar" +#~ msgstr "Avatar bearbeiten" diff --git a/locale/en_GB/LC_MESSAGES/statusnet.po b/locale/en_GB/LC_MESSAGES/statusnet.po index c08f5a607f..7289070638 100644 --- a/locale/en_GB/LC_MESSAGES/statusnet.po +++ b/locale/en_GB/LC_MESSAGES/statusnet.po @@ -13,17 +13,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-11 18:15+0000\n" -"PO-Revision-Date: 2011-03-11 18:17:01+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:49:29+0000\n" "Language-Team: British English \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: en-gb\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" +"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -595,7 +595,7 @@ msgstr "Could not remove user %1$s from group %2$s." msgid "%s's groups" msgstr "%s's groups" -#. TRANS: Used as subtitle in check for group membership. %1$s is a user name, %2$s is the site name. +#. TRANS: Used as subtitle in check for group membership. %1$s is the site name, %2$s is a user name. #, php-format msgid "%1$s groups %2$s is a member of." msgstr "%1$s groups %2$s is a member of." @@ -4678,18 +4678,6 @@ msgstr "%s group" msgid "%1$s group, page %2$d" msgstr "%1$s group, page %2$d" -#. TRANS: Label for group description or group note (dt). Text hidden by default. -msgid "Note" -msgstr "Note" - -#. TRANS: Label for group aliases (dt). Text hidden by default. -msgid "Aliases" -msgstr "" - -#. TRANS: Group actions header (h2). Text hidden by default. -msgid "Group actions" -msgstr "Group actions" - #. TRANS: Tooltip for feed link. %s is a group nickname. #, php-format msgid "Notice feed for %s group (RSS 1.0)" @@ -4801,6 +4789,10 @@ msgstr "Message from %1$s on %2$s" msgid "Notice deleted." msgstr "Notice deleted." +#, fuzzy +msgid "Notice" +msgstr "Notices" + #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #, fuzzy, php-format msgid "%1$s tagged %2$s" @@ -5321,7 +5313,6 @@ msgstr "No ID argument." msgid "Tag %s" msgstr "Tag %s" -#. TRANS: H2 for user profile information. msgid "User profile" msgstr "User profile" @@ -6025,6 +6016,49 @@ msgstr "" msgid "No AtomPub API service for %s." msgstr "" +#. TRANS: H2 for user actions in a profile. +#. TRANS: H2 for entity actions in a profile. +msgid "User actions" +msgstr "User actions" + +#. TRANS: Text shown in user profile of not yet compeltely deleted users. +msgid "User deletion in progress..." +msgstr "" + +#. TRANS: Link title for link on user profile. +msgid "Edit profile settings" +msgstr "Edit profile settings" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "Edit" + +#. TRANS: Link title for link on user profile. +msgid "Send a direct message to this user" +msgstr "Send a direct message to this user" + +#. TRANS: Link text for link on user profile. +msgid "Message" +msgstr "Message" + +#. TRANS: Label text on user profile to select a user role. +msgid "Moderate" +msgstr "Moderate" + +#. TRANS: Label text on user profile to select a user role. +msgid "User role" +msgstr "User role" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Administrator" +msgstr "Administrator" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Moderator" +msgstr "Moderator" + #. TRANS: Page title. %1$s is the title, %2$s is the site name. #, php-format msgid "%1$s - %2$s" @@ -6735,85 +6769,171 @@ msgid_plural "You are a member of these groups:" msgstr[0] "You are a member of this group:" msgstr[1] "You are a member of these groups:" -#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings. -msgid "" -"Commands:\n" -"on - turn on notifications\n" -"off - turn off notifications\n" -"help - show this help\n" -"follow - subscribe to user\n" -"groups - lists the groups you have joined\n" -"subscriptions - list the people you follow\n" -"subscribers - list the people that follow you\n" -"leave - unsubscribe from user\n" -"d - direct message to user\n" -"get - get last notice from user\n" -"whois - get profile info on user\n" -"lose - force user to stop following you\n" -"fav - add user's last notice as a 'fave'\n" -"fav # - add notice with the given id as a 'fave'\n" -"repeat # - repeat a notice with a given id\n" -"repeat - repeat the last notice from user\n" -"reply # - reply to notice with a given id\n" -"reply - reply to the last notice from user\n" -"join - join group\n" -"login - Get a link to login to the web interface\n" -"drop - leave group\n" -"stats - get your stats\n" -"stop - same as 'off'\n" -"quit - same as 'off'\n" -"sub - same as 'follow'\n" -"unsub - same as 'leave'\n" -"last - same as 'get'\n" -"on - not yet implemented.\n" -"off - not yet implemented.\n" -"nudge - remind a user to update.\n" -"invite - not yet implemented.\n" -"track - not yet implemented.\n" -"untrack - not yet implemented.\n" -"track off - not yet implemented.\n" -"untrack all - not yet implemented.\n" -"tracks - not yet implemented.\n" -"tracking - not yet implemented.\n" +#. TRANS: Header line of help text for commands. +#, fuzzy +msgctxt "COMMANDHELP" +msgid "Commands:" +msgstr "Command results" + +#. TRANS: Help message for IM/SMS command "on" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn on notifications" +msgstr "Can't turn on notification." + +#. TRANS: Help message for IM/SMS command "off" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn off notifications" +msgstr "Can't turn off notification." + +#. TRANS: Help message for IM/SMS command "help" +msgctxt "COMMANDHELP" +msgid "show this help" +msgstr "" + +#. TRANS: Help message for IM/SMS command "follow " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "subscribe to user" +msgstr "Subscribe to this user" + +#. TRANS: Help message for IM/SMS command "groups" +msgctxt "COMMANDHELP" +msgid "lists the groups you have joined" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscriptions" +msgctxt "COMMANDHELP" +msgid "list the people you follow" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscribers" +msgctxt "COMMANDHELP" +msgid "list the people that follow you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "leave " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "unsubscribe from user" +msgstr "Unsubscribe from this user" + +#. TRANS: Help message for IM/SMS command "d " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "direct message to user" +msgstr "Direct messages to %s" + +#. TRANS: Help message for IM/SMS command "get " +msgctxt "COMMANDHELP" +msgid "get last notice from user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "whois " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "get profile info on user" +msgstr "Profile information" + +#. TRANS: Help message for IM/SMS command "lose " +msgctxt "COMMANDHELP" +msgid "force user to stop following you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav " +msgctxt "COMMANDHELP" +msgid "add user's last notice as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav #" +msgctxt "COMMANDHELP" +msgid "add notice with the given id as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat #" +msgctxt "COMMANDHELP" +msgid "repeat a notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "repeat the last notice from user" +msgstr "Repeat this notice" + +#. TRANS: Help message for IM/SMS command "reply #" +msgctxt "COMMANDHELP" +msgid "reply to notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "reply " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "reply to the last notice from user" +msgstr "Reply to this notice" + +#. TRANS: Help message for IM/SMS command "join " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "join group" +msgstr "Unknown" + +#. TRANS: Help message for IM/SMS command "login" +msgctxt "COMMANDHELP" +msgid "Get a link to login to the web interface" +msgstr "" + +#. TRANS: Help message for IM/SMS command "drop " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "leave group" +msgstr "Delete group" + +#. TRANS: Help message for IM/SMS command "stats" +msgctxt "COMMANDHELP" +msgid "get your stats" +msgstr "" + +#. TRANS: Help message for IM/SMS command "stop" +#. TRANS: Help message for IM/SMS command "quit" +msgctxt "COMMANDHELP" +msgid "same as 'off'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "sub " +msgctxt "COMMANDHELP" +msgid "same as 'follow'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "unsub " +msgctxt "COMMANDHELP" +msgid "same as 'leave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "last " +msgctxt "COMMANDHELP" +msgid "same as 'get'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "on " +#. TRANS: Help message for IM/SMS command "off " +#. TRANS: Help message for IM/SMS command "invite " +#. TRANS: Help message for IM/SMS command "track " +#. TRANS: Help message for IM/SMS command "untrack " +#. TRANS: Help message for IM/SMS command "track off" +#. TRANS: Help message for IM/SMS command "untrack all" +#. TRANS: Help message for IM/SMS command "tracks" +#. TRANS: Help message for IM/SMS command "tracking" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "not yet implemented." +msgstr "Command not yet implemented." + +#. TRANS: Help message for IM/SMS command "nudge " +msgctxt "COMMANDHELP" +msgid "remind a user to update." msgstr "" -"Commands:\n" -"on - turn on notifications\n" -"off - turn off notifications\n" -"help - show this help\n" -"follow - subscribe to user\n" -"groups - lists the groups you have joined\n" -"subscriptions - list the people you follow\n" -"subscribers - list the people that follow you\n" -"leave - unsubscribe from user\n" -"d - direct message to user\n" -"get - get last notice from user\n" -"whois - get profile info on user\n" -"lose - force user to stop following you\n" -"fav - add user's last notice as a 'fave'\n" -"fav # - add notice with the given id as a 'fave'\n" -"repeat # - repeat a notice with a given id\n" -"repeat - repeat the last notice from user\n" -"reply # - reply to notice with a given id\n" -"reply - reply to the last notice from user\n" -"join - join group\n" -"login - Get a link to login to the web interface\n" -"drop - leave group\n" -"stats - get your stats\n" -"stop - same as 'off'\n" -"quit - same as 'off'\n" -"sub - same as 'follow'\n" -"unsub - same as 'leave'\n" -"last - same as 'get'\n" -"on - not yet implemented.\n" -"off - not yet implemented.\n" -"nudge - remind a user to update.\n" -"invite - not yet implemented.\n" -"track - not yet implemented.\n" -"untrack - not yet implemented.\n" -"track off - not yet implemented.\n" -"untrack all - not yet implemented.\n" -"tracks - not yet implemented.\n" -"tracking - not yet implemented.\n" #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. #, fuzzy @@ -6996,6 +7116,9 @@ msgid "" msgstr "" "Location for the group, if any, like \"City, State (or Region), Country\"" +msgid "Aliases" +msgstr "" + #, php-format msgid "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " @@ -7073,6 +7196,10 @@ msgctxt "TOOLTIP" msgid "Add or edit %s design" msgstr "" +#. TRANS: Group actions header (h2). Text hidden by default. +msgid "Group actions" +msgstr "Group actions" + #. TRANS: Title for groups with the most members section. msgid "Groups with most members" msgstr "Groups with most members" @@ -7553,6 +7680,7 @@ msgstr "Send a notice" msgid "What's up, %s?" msgstr "What's up, %s?" +#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "" @@ -8005,52 +8133,6 @@ msgstr "Unsubscribe" msgid "User %1$s (%2$d) has no profile record." msgstr "User %1$s (%2$d) has no profile record." -msgid "Edit Avatar" -msgstr "Edit Avatar" - -#. TRANS: H2 for user actions in a profile. -#. TRANS: H2 for entity actions in a profile. -msgid "User actions" -msgstr "User actions" - -#. TRANS: Text shown in user profile of not yet compeltely deleted users. -msgid "User deletion in progress..." -msgstr "" - -#. TRANS: Link title for link on user profile. -msgid "Edit profile settings" -msgstr "Edit profile settings" - -#. TRANS: Link text for link on user profile. -msgid "Edit" -msgstr "Edit" - -#. TRANS: Link title for link on user profile. -msgid "Send a direct message to this user" -msgstr "Send a direct message to this user" - -#. TRANS: Link text for link on user profile. -msgid "Message" -msgstr "Message" - -#. TRANS: Label text on user profile to select a user role. -msgid "Moderate" -msgstr "Moderate" - -#. TRANS: Label text on user profile to select a user role. -msgid "User role" -msgstr "User role" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Administrator" -msgstr "Administrator" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Moderator" -msgstr "Moderator" - #, fuzzy msgid "Not allowed to log in." msgstr "Not logged in." @@ -8126,3 +8208,88 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" + +#~ msgid "Note" +#~ msgstr "Note" + +#~ msgid "" +#~ "Commands:\n" +#~ "on - turn on notifications\n" +#~ "off - turn off notifications\n" +#~ "help - show this help\n" +#~ "follow - subscribe to user\n" +#~ "groups - lists the groups you have joined\n" +#~ "subscriptions - list the people you follow\n" +#~ "subscribers - list the people that follow you\n" +#~ "leave - unsubscribe from user\n" +#~ "d - direct message to user\n" +#~ "get - get last notice from user\n" +#~ "whois - get profile info on user\n" +#~ "lose - force user to stop following you\n" +#~ "fav - add user's last notice as a 'fave'\n" +#~ "fav # - add notice with the given id as a 'fave'\n" +#~ "repeat # - repeat a notice with a given id\n" +#~ "repeat - repeat the last notice from user\n" +#~ "reply # - reply to notice with a given id\n" +#~ "reply - reply to the last notice from user\n" +#~ "join - join group\n" +#~ "login - Get a link to login to the web interface\n" +#~ "drop - leave group\n" +#~ "stats - get your stats\n" +#~ "stop - same as 'off'\n" +#~ "quit - same as 'off'\n" +#~ "sub - same as 'follow'\n" +#~ "unsub - same as 'leave'\n" +#~ "last - same as 'get'\n" +#~ "on - not yet implemented.\n" +#~ "off - not yet implemented.\n" +#~ "nudge - remind a user to update.\n" +#~ "invite - not yet implemented.\n" +#~ "track - not yet implemented.\n" +#~ "untrack - not yet implemented.\n" +#~ "track off - not yet implemented.\n" +#~ "untrack all - not yet implemented.\n" +#~ "tracks - not yet implemented.\n" +#~ "tracking - not yet implemented.\n" +#~ msgstr "" +#~ "Commands:\n" +#~ "on - turn on notifications\n" +#~ "off - turn off notifications\n" +#~ "help - show this help\n" +#~ "follow - subscribe to user\n" +#~ "groups - lists the groups you have joined\n" +#~ "subscriptions - list the people you follow\n" +#~ "subscribers - list the people that follow you\n" +#~ "leave - unsubscribe from user\n" +#~ "d - direct message to user\n" +#~ "get - get last notice from user\n" +#~ "whois - get profile info on user\n" +#~ "lose - force user to stop following you\n" +#~ "fav - add user's last notice as a 'fave'\n" +#~ "fav # - add notice with the given id as a 'fave'\n" +#~ "repeat # - repeat a notice with a given id\n" +#~ "repeat - repeat the last notice from user\n" +#~ "reply # - reply to notice with a given id\n" +#~ "reply - reply to the last notice from user\n" +#~ "join - join group\n" +#~ "login - Get a link to login to the web interface\n" +#~ "drop - leave group\n" +#~ "stats - get your stats\n" +#~ "stop - same as 'off'\n" +#~ "quit - same as 'off'\n" +#~ "sub - same as 'follow'\n" +#~ "unsub - same as 'leave'\n" +#~ "last - same as 'get'\n" +#~ "on - not yet implemented.\n" +#~ "off - not yet implemented.\n" +#~ "nudge - remind a user to update.\n" +#~ "invite - not yet implemented.\n" +#~ "track - not yet implemented.\n" +#~ "untrack - not yet implemented.\n" +#~ "track off - not yet implemented.\n" +#~ "untrack all - not yet implemented.\n" +#~ "tracks - not yet implemented.\n" +#~ "tracking - not yet implemented.\n" + +#~ msgid "Edit Avatar" +#~ msgstr "Edit Avatar" diff --git a/locale/eo/LC_MESSAGES/statusnet.po b/locale/eo/LC_MESSAGES/statusnet.po index 2b24b835bf..029c3231b7 100644 --- a/locale/eo/LC_MESSAGES/statusnet.po +++ b/locale/eo/LC_MESSAGES/statusnet.po @@ -17,17 +17,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-11 18:15+0000\n" -"PO-Revision-Date: 2011-03-11 18:17:02+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:49:30+0000\n" "Language-Team: Esperanto \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: eo\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" +"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -596,7 +596,7 @@ msgstr "Malsukcesis forigi uzanton %1$s de grupo %2$s." msgid "%s's groups" msgstr "Grupoj de %s" -#. TRANS: Used as subtitle in check for group membership. %1$s is a user name, %2$s is the site name. +#. TRANS: Used as subtitle in check for group membership. %1$s is the site name, %2$s is a user name. #, php-format msgid "%1$s groups %2$s is a member of." msgstr "Grupoj de %2$s ĉe %1$s." @@ -4651,18 +4651,6 @@ msgstr "Grupo %s" msgid "%1$s group, page %2$d" msgstr "Grupo %1$s, paĝo %2$d" -#. TRANS: Label for group description or group note (dt). Text hidden by default. -msgid "Note" -msgstr "Noto" - -#. TRANS: Label for group aliases (dt). Text hidden by default. -msgid "Aliases" -msgstr "Alnomo" - -#. TRANS: Group actions header (h2). Text hidden by default. -msgid "Group actions" -msgstr "Grupaj agoj" - #. TRANS: Tooltip for feed link. %s is a group nickname. #, php-format msgid "Notice feed for %s group (RSS 1.0)" @@ -4773,6 +4761,10 @@ msgstr "Mesaĝo de %1$s ĉe %2$s" msgid "Notice deleted." msgstr "Avizo viŝiĝas" +#, fuzzy +msgid "Notice" +msgstr "Avizoj" + #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #, fuzzy, php-format msgid "%1$s tagged %2$s" @@ -5299,7 +5291,6 @@ msgstr "Neniu ID-argumento" msgid "Tag %s" msgstr "Etikedo %s" -#. TRANS: H2 for user profile information. msgid "User profile" msgstr "Uzanta profilo" @@ -6007,6 +5998,49 @@ msgstr "" msgid "No AtomPub API service for %s." msgstr "" +#. TRANS: H2 for user actions in a profile. +#. TRANS: H2 for entity actions in a profile. +msgid "User actions" +msgstr "Nekonata ago" + +#. TRANS: Text shown in user profile of not yet compeltely deleted users. +msgid "User deletion in progress..." +msgstr "Forigante uzanton..." + +#. TRANS: Link title for link on user profile. +msgid "Edit profile settings" +msgstr "Redakti profilan agordon" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "Redakti" + +#. TRANS: Link title for link on user profile. +msgid "Send a direct message to this user" +msgstr "Sendi rektan mesaĝon a ĉi tiu uzanto" + +#. TRANS: Link text for link on user profile. +msgid "Message" +msgstr "Mesaĝo" + +#. TRANS: Label text on user profile to select a user role. +msgid "Moderate" +msgstr "Moderigi" + +#. TRANS: Label text on user profile to select a user role. +msgid "User role" +msgstr "Uzanta rolo" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Administrator" +msgstr "Administranto" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Moderator" +msgstr "Moderanto" + #. TRANS: Page title. %1$s is the title, %2$s is the site name. #, php-format msgid "%1$s - %2$s" @@ -6733,85 +6767,171 @@ msgid_plural "You are a member of these groups:" msgstr[0] "Vi estas grupano de jena grupo:" msgstr[1] "Vi estas grupano de jenaj grupoj:" -#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings. -msgid "" -"Commands:\n" -"on - turn on notifications\n" -"off - turn off notifications\n" -"help - show this help\n" -"follow - subscribe to user\n" -"groups - lists the groups you have joined\n" -"subscriptions - list the people you follow\n" -"subscribers - list the people that follow you\n" -"leave - unsubscribe from user\n" -"d - direct message to user\n" -"get - get last notice from user\n" -"whois - get profile info on user\n" -"lose - force user to stop following you\n" -"fav - add user's last notice as a 'fave'\n" -"fav # - add notice with the given id as a 'fave'\n" -"repeat # - repeat a notice with a given id\n" -"repeat - repeat the last notice from user\n" -"reply # - reply to notice with a given id\n" -"reply - reply to the last notice from user\n" -"join - join group\n" -"login - Get a link to login to the web interface\n" -"drop - leave group\n" -"stats - get your stats\n" -"stop - same as 'off'\n" -"quit - same as 'off'\n" -"sub - same as 'follow'\n" -"unsub - same as 'leave'\n" -"last - same as 'get'\n" -"on - not yet implemented.\n" -"off - not yet implemented.\n" -"nudge - remind a user to update.\n" -"invite - not yet implemented.\n" -"track - not yet implemented.\n" -"untrack - not yet implemented.\n" -"track off - not yet implemented.\n" -"untrack all - not yet implemented.\n" -"tracks - not yet implemented.\n" -"tracking - not yet implemented.\n" +#. TRANS: Header line of help text for commands. +#, fuzzy +msgctxt "COMMANDHELP" +msgid "Commands:" +msgstr "Komandaj rezultoj" + +#. TRANS: Help message for IM/SMS command "on" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn on notifications" +msgstr "Malsukcesis ŝalti sciigon." + +#. TRANS: Help message for IM/SMS command "off" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn off notifications" +msgstr "Malsukcesis malŝalti sciigon." + +#. TRANS: Help message for IM/SMS command "help" +msgctxt "COMMANDHELP" +msgid "show this help" +msgstr "" + +#. TRANS: Help message for IM/SMS command "follow " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "subscribe to user" +msgstr "Aboni la uzanton" + +#. TRANS: Help message for IM/SMS command "groups" +msgctxt "COMMANDHELP" +msgid "lists the groups you have joined" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscriptions" +msgctxt "COMMANDHELP" +msgid "list the people you follow" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscribers" +msgctxt "COMMANDHELP" +msgid "list the people that follow you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "leave " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "unsubscribe from user" +msgstr "Malaboni la uzanton" + +#. TRANS: Help message for IM/SMS command "d " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "direct message to user" +msgstr "Rektaj mesaĝoj al %s" + +#. TRANS: Help message for IM/SMS command "get " +msgctxt "COMMANDHELP" +msgid "get last notice from user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "whois " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "get profile info on user" +msgstr "Profila informo" + +#. TRANS: Help message for IM/SMS command "lose " +msgctxt "COMMANDHELP" +msgid "force user to stop following you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav " +msgctxt "COMMANDHELP" +msgid "add user's last notice as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav #" +msgctxt "COMMANDHELP" +msgid "add notice with the given id as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat #" +msgctxt "COMMANDHELP" +msgid "repeat a notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "repeat the last notice from user" +msgstr "Ripeti la avizon" + +#. TRANS: Help message for IM/SMS command "reply #" +msgctxt "COMMANDHELP" +msgid "reply to notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "reply " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "reply to the last notice from user" +msgstr "Respondi ĉi tiun avizon" + +#. TRANS: Help message for IM/SMS command "join " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "join group" +msgstr "Nekonata grupo." + +#. TRANS: Help message for IM/SMS command "login" +msgctxt "COMMANDHELP" +msgid "Get a link to login to the web interface" +msgstr "" + +#. TRANS: Help message for IM/SMS command "drop " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "leave group" +msgstr "Forigo de grupo" + +#. TRANS: Help message for IM/SMS command "stats" +msgctxt "COMMANDHELP" +msgid "get your stats" +msgstr "" + +#. TRANS: Help message for IM/SMS command "stop" +#. TRANS: Help message for IM/SMS command "quit" +msgctxt "COMMANDHELP" +msgid "same as 'off'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "sub " +msgctxt "COMMANDHELP" +msgid "same as 'follow'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "unsub " +msgctxt "COMMANDHELP" +msgid "same as 'leave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "last " +msgctxt "COMMANDHELP" +msgid "same as 'get'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "on " +#. TRANS: Help message for IM/SMS command "off " +#. TRANS: Help message for IM/SMS command "invite " +#. TRANS: Help message for IM/SMS command "track " +#. TRANS: Help message for IM/SMS command "untrack " +#. TRANS: Help message for IM/SMS command "track off" +#. TRANS: Help message for IM/SMS command "untrack all" +#. TRANS: Help message for IM/SMS command "tracks" +#. TRANS: Help message for IM/SMS command "tracking" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "not yet implemented." +msgstr "Komando ankoraŭ ne realigita." + +#. TRANS: Help message for IM/SMS command "nudge " +msgctxt "COMMANDHELP" +msgid "remind a user to update." msgstr "" -"Komandoj:\n" -"on — ŝalti sciigon;\n" -"off — malŝalti sciigon;\n" -"help — montri ĉi tiun helpon;\n" -"follow — aboni uzanton;\n" -"groups — listigi grupojn, kiujn vi aniĝis;\n" -"subscriptions — listigi viajn abonatojn;\n" -"subscribers — listigi viajn abonantojn;\n" -"leave — malaboni uzanton;\n" -"d — sendi rektan mesaĝon al uzanto;\n" -"get — legi la lastan avizon de uzanto;\n" -"whois — legi profilan informon pri uzanto;\n" -"lose — ĉesigi la uzanton de sekvi vin;\n" -"fav — ŝati la lastan avizon de uzanto;\n" -"fav # — ŝati la avizon kun la ID;\n" -"repeat # — ripeti la avizon kun la ID;\n" -"repeat — ripeti la lastan avizon de uzanto;\n" -"reply # — respondi la avizon kun la ID;\n" -"reply — respondi la lastan avizon de uzanto;\n" -"join — aniĝi al grupo;\n" -"login — havi ligilon por ensaluti al reta interfaco;\n" -"drop — foriri el grupo;\n" -"stats — legi vian staton;\n" -"stop — same kiel «off»;\n" -"quit — same kiel «off»;\n" -"sub — same kiel «follow»;\n" -"unsub — same kiel «leave»;\n" -"last — same kiel «get»;\n" -"on — ankoraŭ ne realigita;\n" -"off — ankoraŭ ne realigita;\n" -"nudge — puŝeti la uzanton, ke li ĝisdatigu!\n" -"invite — ankoraŭ ne realigita;\n" -"track — ankoraŭ ne realigita;\n" -"untrack — ankoraŭ ne realigita;\n" -"track off — ankoraŭ ne realigita;\n" -"untrack all — ankoraŭ ne realigita;\n" -"tracks — ankoraŭ ne realigita;\n" -"tracking — ankoraŭ ne realigita;\n" #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. #, fuzzy @@ -6994,6 +7114,9 @@ msgid "" msgstr "" "Loko de la grupo, se iu ajn, ekzemple \"Urbo, Stato (aŭ Regiono), Lando\"" +msgid "Aliases" +msgstr "Alnomo" + #, fuzzy, php-format msgid "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " @@ -7073,6 +7196,10 @@ msgctxt "TOOLTIP" msgid "Add or edit %s design" msgstr "Aldoni aŭ redakti desegnon de %s" +#. TRANS: Group actions header (h2). Text hidden by default. +msgid "Group actions" +msgstr "Grupaj agoj" + #. TRANS: Title for groups with the most members section. msgid "Groups with most members" msgstr "Grupoj kun plej multe da membroj" @@ -7639,6 +7766,7 @@ msgstr "Sendi avizon" msgid "What's up, %s?" msgstr "Kio novas, %s?" +#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Aldoni" @@ -8095,52 +8223,6 @@ msgstr "Malaboni" msgid "User %1$s (%2$d) has no profile record." msgstr "La uzanto ne havas profilon." -msgid "Edit Avatar" -msgstr "Redakti vizaĝbildon" - -#. TRANS: H2 for user actions in a profile. -#. TRANS: H2 for entity actions in a profile. -msgid "User actions" -msgstr "Nekonata ago" - -#. TRANS: Text shown in user profile of not yet compeltely deleted users. -msgid "User deletion in progress..." -msgstr "Forigante uzanton..." - -#. TRANS: Link title for link on user profile. -msgid "Edit profile settings" -msgstr "Redakti profilan agordon" - -#. TRANS: Link text for link on user profile. -msgid "Edit" -msgstr "Redakti" - -#. TRANS: Link title for link on user profile. -msgid "Send a direct message to this user" -msgstr "Sendi rektan mesaĝon a ĉi tiu uzanto" - -#. TRANS: Link text for link on user profile. -msgid "Message" -msgstr "Mesaĝo" - -#. TRANS: Label text on user profile to select a user role. -msgid "Moderate" -msgstr "Moderigi" - -#. TRANS: Label text on user profile to select a user role. -msgid "User role" -msgstr "Uzanta rolo" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Administrator" -msgstr "Administranto" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Moderator" -msgstr "Moderanto" - #, fuzzy msgid "Not allowed to log in." msgstr "Ne konektita." @@ -8216,3 +8298,88 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" + +#~ msgid "Note" +#~ msgstr "Noto" + +#~ msgid "" +#~ "Commands:\n" +#~ "on - turn on notifications\n" +#~ "off - turn off notifications\n" +#~ "help - show this help\n" +#~ "follow - subscribe to user\n" +#~ "groups - lists the groups you have joined\n" +#~ "subscriptions - list the people you follow\n" +#~ "subscribers - list the people that follow you\n" +#~ "leave - unsubscribe from user\n" +#~ "d - direct message to user\n" +#~ "get - get last notice from user\n" +#~ "whois - get profile info on user\n" +#~ "lose - force user to stop following you\n" +#~ "fav - add user's last notice as a 'fave'\n" +#~ "fav # - add notice with the given id as a 'fave'\n" +#~ "repeat # - repeat a notice with a given id\n" +#~ "repeat - repeat the last notice from user\n" +#~ "reply # - reply to notice with a given id\n" +#~ "reply - reply to the last notice from user\n" +#~ "join - join group\n" +#~ "login - Get a link to login to the web interface\n" +#~ "drop - leave group\n" +#~ "stats - get your stats\n" +#~ "stop - same as 'off'\n" +#~ "quit - same as 'off'\n" +#~ "sub - same as 'follow'\n" +#~ "unsub - same as 'leave'\n" +#~ "last - same as 'get'\n" +#~ "on - not yet implemented.\n" +#~ "off - not yet implemented.\n" +#~ "nudge - remind a user to update.\n" +#~ "invite - not yet implemented.\n" +#~ "track - not yet implemented.\n" +#~ "untrack - not yet implemented.\n" +#~ "track off - not yet implemented.\n" +#~ "untrack all - not yet implemented.\n" +#~ "tracks - not yet implemented.\n" +#~ "tracking - not yet implemented.\n" +#~ msgstr "" +#~ "Komandoj:\n" +#~ "on — ŝalti sciigon;\n" +#~ "off — malŝalti sciigon;\n" +#~ "help — montri ĉi tiun helpon;\n" +#~ "follow — aboni uzanton;\n" +#~ "groups — listigi grupojn, kiujn vi aniĝis;\n" +#~ "subscriptions — listigi viajn abonatojn;\n" +#~ "subscribers — listigi viajn abonantojn;\n" +#~ "leave — malaboni uzanton;\n" +#~ "d — sendi rektan mesaĝon al uzanto;\n" +#~ "get — legi la lastan avizon de uzanto;\n" +#~ "whois — legi profilan informon pri uzanto;\n" +#~ "lose — ĉesigi la uzanton de sekvi vin;\n" +#~ "fav — ŝati la lastan avizon de uzanto;\n" +#~ "fav # — ŝati la avizon kun la ID;\n" +#~ "repeat # — ripeti la avizon kun la ID;\n" +#~ "repeat — ripeti la lastan avizon de uzanto;\n" +#~ "reply # — respondi la avizon kun la ID;\n" +#~ "reply — respondi la lastan avizon de uzanto;\n" +#~ "join — aniĝi al grupo;\n" +#~ "login — havi ligilon por ensaluti al reta interfaco;\n" +#~ "drop — foriri el grupo;\n" +#~ "stats — legi vian staton;\n" +#~ "stop — same kiel «off»;\n" +#~ "quit — same kiel «off»;\n" +#~ "sub — same kiel «follow»;\n" +#~ "unsub — same kiel «leave»;\n" +#~ "last — same kiel «get»;\n" +#~ "on — ankoraŭ ne realigita;\n" +#~ "off — ankoraŭ ne realigita;\n" +#~ "nudge — puŝeti la uzanton, ke li ĝisdatigu!\n" +#~ "invite — ankoraŭ ne realigita;\n" +#~ "track — ankoraŭ ne realigita;\n" +#~ "untrack — ankoraŭ ne realigita;\n" +#~ "track off — ankoraŭ ne realigita;\n" +#~ "untrack all — ankoraŭ ne realigita;\n" +#~ "tracks — ankoraŭ ne realigita;\n" +#~ "tracking — ankoraŭ ne realigita;\n" + +#~ msgid "Edit Avatar" +#~ msgstr "Redakti vizaĝbildon" diff --git a/locale/es/LC_MESSAGES/statusnet.po b/locale/es/LC_MESSAGES/statusnet.po index 7319a67351..5ece490d2e 100644 --- a/locale/es/LC_MESSAGES/statusnet.po +++ b/locale/es/LC_MESSAGES/statusnet.po @@ -4,6 +4,7 @@ # Author: Brion # Author: Crazymadlover # Author: Fitoschido +# Author: Johnarupire # Author: Locos epraix # Author: McDutchie # Author: Ovruni @@ -18,17 +19,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-11 18:15+0000\n" -"PO-Revision-Date: 2011-03-11 18:17:03+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:49:32+0000\n" "Language-Team: Spanish \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: es\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" +"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -278,7 +279,7 @@ msgstr "No se pudo guardar el perfil." #. TRANS: Client error displayed when the number of bytes in a POST request exceeds a limit. #. TRANS: %s is the number of bytes of the CONTENT_LENGTH. #. TRANS: Form validation error in design settings form. POST should remain untranslated. -#, fuzzy, php-format +#, php-format msgid "" "The server was unable to handle that much POST data (%s byte) due to its " "current configuration." @@ -286,10 +287,10 @@ msgid_plural "" "The server was unable to handle that much POST data (%s bytes) due to its " "current configuration." msgstr[0] "" -"El servidor no ha podido manejar tanta información del tipo POST (% de " +"El servidor no ha podido manejar tanta información del tipo POST (%s de " "bytes) a causa de su configuración actual." msgstr[1] "" -"El servidor no ha podido manejar tanta información del tipo POST (% de " +"El servidor no ha podido manejar tanta información del tipo POST (%s de " "bytes) a causa de su configuración actual." #. TRANS: Client error displayed when saving design settings fails because of an empty id. @@ -308,7 +309,7 @@ msgstr "No se pudo actualizar tu diseño." #. TRANS: Title for Atom feed. msgctxt "ATOM" msgid "Main" -msgstr "" +msgstr "Principal" #. TRANS: Title for Atom feed. %s is a user nickname. #. TRANS: Message is used as link title. %s is a user nickname. @@ -330,14 +331,14 @@ msgstr "Suscripciones %s" #. TRANS: Title for Atom feed with a user's favorite notices. %s is a user nickname. #. TRANS: Title for Atom favorites feed. #. TRANS: %s is a user nickname. -#, fuzzy, php-format +#, php-format msgid "%s favorites" -msgstr "Favoritos" +msgstr "%s Favoritos" #. TRANS: Title for Atom feed with a user's memberships. %s is a user nickname. -#, fuzzy, php-format +#, php-format msgid "%s memberships" -msgstr "Miembros del grupo %s" +msgstr "%s miembros del grupo" #. TRANS: Client error displayed when users try to block themselves. msgid "You cannot block yourself!" @@ -379,26 +380,24 @@ msgstr "¡Sin texto de mensaje!" #. TRANS: %d is the maximum number of characters for a message. #. TRANS: Form validation error displayed when message content is too long. #. TRANS: %d is the maximum number of characters for a message. -#, fuzzy, php-format +#, php-format msgid "That's too long. Maximum message size is %d character." msgid_plural "That's too long. Maximum message size is %d characters." -msgstr[0] "Demasiado largo. Tamaño máx. de los mensajes es %d caracteres." -msgstr[1] "Demasiado largo. Tamaño máx. de los mensajes es %d caracteres." +msgstr[0] "Muy largo. El tamaño máx. por mensaje es de %d caracteres." +msgstr[1] "Muy largo. El tamaño máx. por mensaje es de %d caracteres." #. TRANS: Client error displayed if a recipient user could not be found (403). msgid "Recipient user not found." msgstr "No se encuentra usuario receptor." #. TRANS: Client error displayed trying to direct message another user who's not a friend (403). -#, fuzzy msgid "Cannot send direct messages to users who aren't your friend." -msgstr "No se puede enviar mensajes directos a usuarios que no son tu amigo." +msgstr "No puedes enviar mensajes directos a usuarios que no son tus amigos." #. TRANS: Client error displayed trying to direct message self (403). -#, fuzzy msgid "" "Do not send a message to yourself; just say it to yourself quietly instead." -msgstr "No te auto envíes un mensaje; dícetelo a ti mismo." +msgstr "No te envíes un mensaje a ti mismo; sólo dilo para ti en voz baja." #. TRANS: Client error displayed when requesting a status with a non-existing ID. #. TRANS: Client error displayed when trying to remove a favourite with an invalid ID. @@ -444,9 +443,8 @@ msgid "You cannot unfollow yourself." msgstr "No puedes dejar de seguirte a ti mismo." #. TRANS: Client error displayed when supplying invalid parameters to an API call checking if a friendship exists. -#, fuzzy msgid "Two valid IDs or nick names must be supplied." -msgstr "Deben proveerse dos IDs válidos o nombres en pantalla." +msgstr "Son necesarios dos nombres de usuario o IDs válidos." #. TRANS: Client error displayed when a source user could not be determined showing friendship. msgid "Could not determine source user." @@ -487,9 +485,8 @@ msgstr "La página de inicio no es un URL válido." #. TRANS: Group edit form validation error. #. TRANS: Group create form validation error. #. TRANS: Validation error in form for profile settings. -#, fuzzy msgid "Full name is too long (maximum 255 characters)." -msgstr "Tu nombre es demasiado largo (max. 255 carac.)" +msgstr "Nombre demasiado largo (max. 255 carac.)" #. TRANS: Client error shown when providing too long a description during group creation. #. TRANS: %d is the maximum number of allowed characters. @@ -502,20 +499,19 @@ msgstr "Tu nombre es demasiado largo (max. 255 carac.)" #. TRANS: %d is the maximum number of characters for the description. #. TRANS: Group create form validation error. #. TRANS: %d is the maximum number of allowed characters. -#, fuzzy, php-format +#, php-format msgid "Description is too long (maximum %d character)." msgid_plural "Description is too long (maximum %d characters)." -msgstr[0] "La descripción es demasiado larga (máx. %d caracteres)." -msgstr[1] "La descripción es demasiado larga (máx. %d caracteres)." +msgstr[0] "Descripción demasiado larga (máx. %d caracteres)." +msgstr[1] "Descripción demasiado larga (máx. %d caracteres)." #. TRANS: Client error shown when providing too long a location during group creation. #. TRANS: API validation exception thrown when location does not validate. #. TRANS: Group edit form validation error. #. TRANS: Group create form validation error. #. TRANS: Validation error in form for profile settings. -#, fuzzy msgid "Location is too long (maximum 255 characters)." -msgstr "La ubicación es demasiado larga (máx. 255 caracteres)." +msgstr "Ubicación demasiado larga (máx. 255 caracteres)." #. TRANS: Client error shown when providing too many aliases during group creation. #. TRANS: %d is the maximum number of allowed aliases. @@ -525,11 +521,11 @@ msgstr "La ubicación es demasiado larga (máx. 255 caracteres)." #. TRANS: %d is the maximum number of allowed aliases. #. TRANS: Group create form validation error. #. TRANS: %d is the maximum number of allowed aliases. -#, fuzzy, php-format +#, php-format msgid "Too many aliases! Maximum %d allowed." msgid_plural "Too many aliases! Maximum %d allowed." -msgstr[0] "¡Muchos seudónimos! El máximo es %d." -msgstr[1] "¡Muchos seudónimos! El máximo es %d." +msgstr[0] "¡Muchos seudónimos! el máximo es %d." +msgstr[1] "¡Muchos seudónimos! el máximo permitido es %d." #. TRANS: Client error shown when providing an invalid alias during group creation. #. TRANS: %s is the invalid alias. @@ -601,8 +597,8 @@ msgstr "No se pudo eliminar al usuario %1$s del grupo %2$s." msgid "%s's groups" msgstr "Grupos de %s" -#. TRANS: Used as subtitle in check for group membership. %1$s is a user name, %2$s is the site name. -#, php-format +#. TRANS: Used as subtitle in check for group membership. %1$s is the site name, %2$s is a user name. +#, fuzzy, php-format msgid "%1$s groups %2$s is a member of." msgstr "%1$s grupos %2$s es un miembro de." @@ -644,9 +640,8 @@ msgstr "" #. TRANS: API validation exception thrown when alias is the same as nickname. #. TRANS: Group create form validation error. -#, fuzzy msgid "Alias cannot be the same as nickname." -msgstr "El alias no puede ser el mismo que el usuario." +msgstr "El alias no puede ser el igual al nombre de usuario." #. TRANS: Client error displayed when uploading a media file has failed. msgid "Upload failed." @@ -765,20 +760,17 @@ msgid "Cancel" msgstr "Cancelar" #. TRANS: Button text that when clicked will allow access to an account by an external application. -#, fuzzy msgctxt "BUTTON" msgid "Allow" msgstr "Permitir" #. TRANS: Form instructions. -#, fuzzy msgid "Authorize access to your account information." -msgstr "Permitir o denegar el acceso a la información de tu cuenta." +msgstr "Permitir el acceso a la información de tu cuenta." #. TRANS: Header for user notification after revoking OAuth access to an application. -#, fuzzy msgid "Authorization canceled." -msgstr "Confirmación de mensajería instantánea cancelada." +msgstr "Autorización cancelada" #. TRANS: User notification after revoking OAuth access to an application. #. TRANS: %s is an OAuth token. @@ -787,21 +779,22 @@ msgid "The request token %s has been revoked." msgstr "El token de solicitud %2 ha sido denegado y revocado." #. TRANS: Title of the page notifying the user that an anonymous client application was successfully authorized to access the user's account with OAuth. -#, fuzzy msgid "You have successfully authorized the application" -msgstr "No estás autorizado." +msgstr "Has autorizado satisfactoriamente la aplicación." #. TRANS: Message notifying the user that an anonymous client application was successfully authorized to access the user's account with OAuth. msgid "" "Please return to the application and enter the following security code to " "complete the process." msgstr "" +"Por favor, vuelva a la aplicación e introduzca el siguiente código de " +"seguridad para terminar el proceso." #. TRANS: Title of the page notifying the user that the client application was successfully authorized to access the user's account with OAuth. #. TRANS: %s is the authorised application name. -#, fuzzy, php-format +#, php-format msgid "You have successfully authorized %s" -msgstr "No estás autorizado." +msgstr "Has sido autorizado correctamente %s" #. TRANS: Message notifying the user that the client application was successfully authorized to access the user's account with OAuth. #. TRANS: %s is the authorised application name. @@ -810,6 +803,8 @@ msgid "" "Please return to %s and enter the following security code to complete the " "process." msgstr "" +"Por favor, regrese a %s e ingrese el siguiente código de seguridad para " +"completar el proceso." #. TRANS: Client error displayed trying to delete a status not using POST or DELETE. #. TRANS: POST and DELETE should not be translated. @@ -849,9 +844,9 @@ msgstr "Método de API no encontrado." #. TRANS: Exception thrown requesting an unsupported notice output format. #. TRANS: %s is the requested output format. -#, fuzzy, php-format +#, php-format msgid "Unsupported format: %s." -msgstr "Formato no soportado." +msgstr "Formato no soportado: %s" #. TRANS: Client error displayed requesting a deleted status. msgid "Status deleted." @@ -863,18 +858,17 @@ msgstr "No hay estado para ese ID" #. TRANS: Client error displayed when trying to delete a notice not using the Atom format. msgid "Can only delete using the Atom format." -msgstr "" +msgstr "Sólo se puede eliminar usando el formato Atom." #. TRANS: Client error displayed when a user has no rights to delete notices of other users. #. TRANS: Error message displayed trying to delete a notice that was not made by the current user. -#, fuzzy msgid "Cannot delete this notice." msgstr "No se puede eliminar este mensaje." #. TRANS: Confirmation of notice deletion in API. %d is the ID (number) of the deleted notice. -#, fuzzy, php-format +#, php-format msgid "Deleted notice %d" -msgstr "Borrar mensaje" +msgstr "Aviso eliminado %d" #. TRANS: Client error displayed when the parameter "status" is missing. msgid "Client must provide a 'status' parameter with a value." @@ -882,11 +876,11 @@ msgstr "El cliente debe proveer un parámetro de 'status' con un valor." #. TRANS: Client error displayed when the parameter "status" is missing. #. TRANS: %d is the maximum number of character for a notice. -#, fuzzy, php-format +#, php-format msgid "That's too long. Maximum notice size is %d character." msgid_plural "That's too long. Maximum notice size is %d characters." -msgstr[0] "El mensaje es muy largo. El tamaño máximo es de %d caracteres." -msgstr[1] "El mensaje es muy largo. El tamaño máximo es de %d caracteres." +msgstr[0] "Demasiado largo. El tamaño máximo es de %d caracteres." +msgstr[1] "Demasiado largo. El tamaño máximo es de %d caracteres." #. TRANS: Client error displayed when replying to a non-existing notice. #, fuzzy @@ -984,9 +978,8 @@ msgid "Updates tagged with %1$s on %2$s!" msgstr "Actualizaciones etiquetadas con %1$s en %2$s!" #. TRANS: Client error displayed trying to add a notice to another user's timeline. -#, fuzzy msgid "Only the user can add to their own timeline." -msgstr "Sólo el usuario puede leer sus bandejas de correo." +msgstr "Sólo el usuario puede leer su línea de tiempo." #. TRANS: Client error displayed when using another format than AtomPub. msgid "Only accept AtomPub for Atom feeds." @@ -1006,7 +999,7 @@ msgstr "La publicación Atom debe ser una entrada Atom." #. TRANS: Client error displayed when not using the POST verb. Do not translate POST. msgid "Can only handle POST activities." -msgstr "" +msgstr "Solo se puede gestionar las actividades en POST" #. TRANS: Client error displayed when using an unsupported activity object type. #. TRANS: %s is the unsupported activity object type. @@ -1060,9 +1053,8 @@ msgid "Can only fave notices." msgstr "Sólo se pueden preferir los avisos." #. TRANS: Client exception thrown when trying favorite a notice without content. -#, fuzzy msgid "Unknown notice." -msgstr "Nota desconocida." +msgstr "Aviso desconocido." #. TRANS: Client exception thrown when trying favorite an already favorited notice. msgid "Already a favorite." @@ -1103,7 +1095,7 @@ msgstr "Todos los miembros" #. TRANS: Client exception thrown when trying to subscribe to group while blocked from that group. msgid "Blocked by admin." -msgstr "" +msgstr "Bloqueado por el administrador" #. TRANS: Client exception thrown when referencing a non-existing favorite. #, fuzzy @@ -1180,11 +1172,11 @@ msgstr "Personas suscritas a %s" #. TRANS: Client error displayed when not using the follow verb. msgid "Can only handle Follow activities." -msgstr "" +msgstr "Sólo es posible gestionar las actividades que sigues" #. TRANS: Client exception thrown when subscribing to an object that is not a person. msgid "Can only follow people." -msgstr "" +msgstr "Sólo puede seguir personas" #. TRANS: Client exception thrown when subscribing to a non-existing profile. #. TRANS: %s is the unknown profile ID. @@ -1194,9 +1186,9 @@ msgstr "Tipo de archivo desconocido" #. TRANS: Client error displayed trying to subscribe to an already subscribed profile. #. TRANS: %s is the profile the user already has a subscription on. -#, fuzzy, php-format +#, php-format msgid "Already subscribed to %s." -msgstr "¡Ya te has suscrito!" +msgstr "Ya está suscrito a %s" #. TRANS: Client error displayed trying to get a non-existing attachment. msgid "No such attachment." @@ -1281,9 +1273,8 @@ msgid "No file uploaded." msgstr "Ningún archivo fue subido." #. TRANS: Avatar upload form instruction after uploading a file. -#, fuzzy msgid "Pick a square area of the image to be your avatar." -msgstr "Elige un área cuadrada para que sea tu imagen" +msgstr "Selecciona un área de la imagen para que sea tu avatar." #. TRANS: Server error displayed if an avatar upload went wrong somehow server side. #. TRANS: Server error displayed trying to crop an uploaded group logo that is no longer present. @@ -1305,12 +1296,13 @@ msgstr "Imagen borrada." #. TRANS: Title for backup account page. #. TRANS: Option in profile settings to create a backup of the account of the currently logged in user. msgid "Backup account" -msgstr "" +msgstr "Cuenta de respaldo (backup)" #. TRANS: Client exception thrown when trying to backup an account while not logged in. -#, fuzzy msgid "Only logged-in users can backup their account." -msgstr "Sólo los usuarios que hayan accedido pueden repetir mensajes." +msgstr "" +"Sólo los usuarios que hayan accedido pueden hacer una copia de seguridad " +"(backup) de sus cuentas." #. TRANS: Client exception thrown when trying to backup an account without having backup rights. msgid "You may not backup your account." @@ -1333,7 +1325,7 @@ msgstr "Fondo" #. TRANS: Title for submit button to backup an account on the backup account page. msgid "Backup your account." -msgstr "" +msgstr "Hacer una copia de seguridad de su cuenta" #. TRANS: Client error displayed when blocking a user that has already been blocked. msgid "You already blocked that user." @@ -1366,7 +1358,6 @@ msgid "No" msgstr "No" #. TRANS: Submit button title for 'No' when blocking a user. -#, fuzzy msgid "Do not block this user." msgstr "No bloquear a este usuario" @@ -1411,7 +1402,6 @@ msgid "Unblock user from group" msgstr "Desbloquear usuario de grupo" #. TRANS: Button text for unblocking a user from a group. -#, fuzzy msgctxt "BUTTON" msgid "Unblock" msgstr "Desbloquear" @@ -1635,9 +1625,8 @@ msgid "Do not delete this group." msgstr "No eliminar este grupo" #. TRANS: Submit button title for 'Yes' when deleting a group. -#, fuzzy msgid "Delete this group." -msgstr "Borrar este grupo" +msgstr "Eliminar este grupo." #. TRANS: Error message displayed trying to delete a notice while not logged in. #. TRANS: Client error displayed when trying to remove a favorite while not logged in. @@ -1675,14 +1664,12 @@ msgid "Are you sure you want to delete this notice?" msgstr "¿Estás seguro de que quieres eliminar este aviso?" #. TRANS: Submit button title for 'No' when deleting a notice. -#, fuzzy msgid "Do not delete this notice." -msgstr "No eliminar este mensaje" +msgstr "No eliminar este mensaje." #. TRANS: Submit button title for 'Yes' when deleting a notice. -#, fuzzy msgid "Delete this notice." -msgstr "Borrar este mensaje" +msgstr "Eliminar este mensaje" #. TRANS: Client error displayed when trying to delete a user without having the right to delete users. msgid "You cannot delete users." @@ -2054,6 +2041,8 @@ msgid "" "To send notices via email, we need to create a unique email address for you " "on this server:" msgstr "" +"Para enviar avisos vía correo electrónico, necesitamos crear una dirección " +"de correo electrónico exclusiva para usted en este servidor." #. TRANS: Button label for adding an e-mail address to send notices from. #. TRANS: Button label for adding an SMS e-mail address to send notices from. @@ -2493,7 +2482,7 @@ msgstr "Bloquear" #. TRANS: Submit button title. msgctxt "TOOLTIP" msgid "Block this user" -msgstr "" +msgstr "Bloquear a este usuario" #. TRANS: Form legend for form to make a user a group admin. msgid "Make user an admin of the group" @@ -2515,7 +2504,6 @@ msgid "Updates from members of %1$s on %2$s!" msgstr "¡Actualizaciones de miembros de %1$s en %2$s!" #. TRANS: Title for first page of the groups list. -#, fuzzy msgctxt "TITLE" msgid "Groups" msgstr "Grupos" @@ -2569,13 +2557,13 @@ msgstr "No se obtuvo resultados." #. TRANS: Additional text on page where groups can be searched if no results were found for a query for a logged in user. #. TRANS: This message contains Markdown links in the form [link text](link). -#, fuzzy, php-format +#, php-format msgid "" "If you cannot find the group you're looking for, you can [create it](%%" "action.newgroup%%) yourself." msgstr "" -"Si no puedes encontrar el grupo que estás buscando, puedes [crearlo](%%" -"action.newgroup%%) tú mismo." +"Si no encuentras el grupo que estás buscando, puedes [crearlo](%%action." +"newgroup%%) tú mismo." #. TRANS: Additional text on page where groups can be searched if no results were found for a query for a not logged in user. #. TRANS: This message contains Markdown links in the form [link text](link). @@ -2607,32 +2595,31 @@ msgstr "Configuración de mensajería instantánea" #. TRANS: Instant messaging settings page instructions. #. TRANS: [instant messages] is link text, "(%%doc.im%%)" is the link. #. TRANS: the order and formatting of link text and link should remain unchanged. -#, fuzzy, php-format +#, php-format msgid "" "You can send and receive notices through instant messaging [instant messages]" "(%%doc.im%%). Configure your addresses and settings below." msgstr "" -"Puedes enviar y recibir avisos vía [mensajes instantáneos](%%doc.im%%) de " +"Puedes enviar y recibir mensajes vía [mensajería instantána](%%doc.im%%) de " "Jabber/GTalk. Configura tu dirección y opciones abajo." #. TRANS: Message given in the IM settings if IM is not enabled on the site. msgid "IM is not available." msgstr "La mensajería instantánea no está disponible." -#, fuzzy, php-format +#, php-format msgid "Current confirmed %s address." -msgstr "Actual dirección de correo electrónico confirmada" +msgstr "Actual dirección de correo electrónico %s confirmada" #. TRANS: Form note in IM settings form. #. TRANS: %s is the IM address set for the site. -#, fuzzy, php-format +#, php-format msgid "" "Awaiting confirmation on this address. Check your %s account for a message " "with further instructions. (Did you add %s to your buddy list?)" msgstr "" -"A la espera de una confirmación para esta dirección. Busca en tu cuenta " -"Jabber/GTalk un mensaje con más instrucciones. (¿Has añadido a %s a tu lista " -"de amigos?)" +"Esperando confirmación para esta dirección. Revisa tu cuenta Jabber/GTalk un " +"mensaje con más instrucciones. (¿Has añadido a %s a tu lista de amigos?)" msgid "IM address" msgstr "Dirección de mensajería instantánea" @@ -2766,14 +2753,13 @@ msgstr "Debes estar conectado para invitar otros usuarios a usar %s." #. TRANS: Form validation message when providing an e-mail address that does not validate. #. TRANS: %s is an invalid e-mail address. -#, fuzzy, php-format +#, php-format msgid "Invalid email address: %s." msgstr "Dirección de correo electrónico inválida: %s" #. TRANS: Page title when invitations have been sent. -#, fuzzy msgid "Invitations sent" -msgstr "Invitacion(es) enviada(s)" +msgstr "Invitación(es) enviada(s)" #. TRANS: Page title when inviting potential users. msgid "Invite new users" @@ -2955,11 +2941,11 @@ msgstr "Licencia" #. TRANS: Form instructions for the site license admin panel. msgid "License for this StatusNet site" -msgstr "" +msgstr "Licencia para este sitio de StatusNet" #. TRANS: Client error displayed selecting an invalid license in the license admin panel. msgid "Invalid license selection." -msgstr "" +msgstr "Selección de licencia incorrecta" #. TRANS: Client error displayed when not specifying an owner for the all rights reserved license in the license admin panel. msgid "" @@ -2990,7 +2976,7 @@ msgstr "" #. TRANS: Form legend in the license admin panel. msgid "License selection" -msgstr "" +msgstr "Selección de Licencia" #. TRANS: License option in the license admin panel. msgid "Private" @@ -2998,11 +2984,11 @@ msgstr "Privado" #. TRANS: License option in the license admin panel. msgid "All Rights Reserved" -msgstr "" +msgstr "Todos los derechos reservados" #. TRANS: License option in the license admin panel. msgid "Creative Commons" -msgstr "" +msgstr "Creative Commons" #. TRANS: Dropdown field label in the license admin panel. msgid "Type" @@ -3015,11 +3001,11 @@ msgstr "Seleccione un operador móvil" #. TRANS: Form legend in the license admin panel. msgid "License details" -msgstr "" +msgstr "Detalles de la licencia" #. TRANS: Field label in the license admin panel. msgid "Owner" -msgstr "" +msgstr "Propietario" #. TRANS: Field title in the license admin panel. msgid "Name of the owner of the site's content (if applicable)." @@ -3087,10 +3073,9 @@ msgstr "" "compartidos! " #. TRANS: Button text for log in on login page. -#, fuzzy msgctxt "BUTTON" msgid "Login" -msgstr "Inicio de sesión" +msgstr "Iniciar sesión" #. TRANS: Link text for link to "reset password" on login page. msgid "Lost or forgotten password?" @@ -3456,7 +3441,6 @@ msgstr "" "Ésta es tu bandeja de salida, incluye la lista de mensajes privados enviados." #. TRANS: Title for page where to change password. -#, fuzzy msgctxt "TITLE" msgid "Change password" msgstr "Cambiar contraseña" @@ -3480,24 +3464,20 @@ msgid "New password" msgstr "Nueva contraseña" #. TRANS: Field title on page where to change password. -#, fuzzy msgid "6 or more characters." -msgstr "6 o más caracteres" +msgstr "6 o más caracteres." #. TRANS: Field label on page where to change password. In this field the new password should be typed a second time. -#, fuzzy msgctxt "LABEL" msgid "Confirm" msgstr "Confirmar" #. TRANS: Field title on page where to change password. #. TRANS: Ttile for field label for password reset form where the password has to be typed again. -#, fuzzy msgid "Same as password above." -msgstr "Igual a la contraseña de arriba" +msgstr "Igual a la contraseña de arriba." #. TRANS: Button text on page where to change password. -#, fuzzy msgctxt "BUTTON" msgid "Change" msgstr "Cambiar" @@ -3510,7 +3490,6 @@ msgid "Passwords don't match." msgstr "Las contraseñas no coinciden" #. TRANS: Form validation error on page where to change password. -#, fuzzy msgid "Incorrect old password." msgstr "Contraseña antigua incorrecta." @@ -3521,7 +3500,6 @@ msgstr "Error al guardar el usuario; inválido." #. TRANS: Server error displayed on page where to change password when password change #. TRANS: could not be made because of a server error. #. TRANS: Reset password form validation error message. -#, fuzzy msgid "Cannot save new password." msgstr "No se puede guardar la nueva contraseña." @@ -3608,7 +3586,6 @@ msgid "Use fancy URLs (more readable and memorable)?" msgstr "¿Usar URL amigables (más legibles y memorizables)?" #. TRANS: Fieldset legend in Paths admin panel. -#, fuzzy msgctxt "LEGEND" msgid "Theme" msgstr "Tema" @@ -3716,9 +3693,8 @@ msgid "Server for attachments." msgstr "Tema para el sitio." #. TRANS: Tooltip for field label in Paths admin panel. -#, fuzzy msgid "Web path to attachments." -msgstr "Sin archivo adjunto" +msgstr "Ruta de acceso a los adjuntos" #. TRANS: Tooltip for field label in Paths admin panel. #, fuzzy @@ -3735,7 +3711,6 @@ msgid "Directory where attachments are located." msgstr "Ruta del directorio de las configuraciones locales" #. TRANS: Fieldset legend in Paths admin panel. -#, fuzzy msgctxt "LEGEND" msgid "SSL" msgstr "SSL" @@ -3756,14 +3731,12 @@ msgid "Use SSL" msgstr "Usar SSL" #. TRANS: Tooltip for field label in Paths admin panel. -#, fuzzy msgid "When to use SSL." -msgstr "Cuándo utilizar SSL" +msgstr "Cuándo utilizar SSL." #. TRANS: Tooltip for field label in Paths admin panel. -#, fuzzy msgid "Server to direct SSL requests to." -msgstr "Servidor hacia el cual dirigir las solicitudes SSL" +msgstr "Servidor hacia el cual dirigir las solicitudes SSL." #. TRANS: Button title text to store form data in the Paths admin panel. msgid "Save paths" @@ -3798,7 +3771,7 @@ msgstr "Usuarios auto etiquetados con %1$s - página %2$d" #. TRANS: Page title for AJAX form return when a disabling a plugin. msgctxt "plugin" msgid "Disabled" -msgstr "" +msgstr "Deshabilitado" #. TRANS: Client error displayed when trying to use another method than POST. #. TRANS: Do not translate POST. @@ -3808,25 +3781,22 @@ msgid "This action only accepts POST requests." msgstr "Esta acción sólo acepta solicitudes POST." #. TRANS: Client error displayed when trying to enable or disable a plugin without access rights. -#, fuzzy msgid "You cannot administer plugins." -msgstr "No puedes borrar usuarios." +msgstr "Usted no puede administrar los plugins." #. TRANS: Client error displayed when trying to enable or disable a non-existing plugin. -#, fuzzy msgid "No such plugin." -msgstr "No existe tal página." +msgstr "El plugin no existe." #. TRANS: Page title for AJAX form return when enabling a plugin. msgctxt "plugin" msgid "Enabled" -msgstr "" +msgstr "Habilitado" #. TRANS: Tab and title for plugins admin panel. -#, fuzzy msgctxt "TITLE" msgid "Plugins" -msgstr "Complementos" +msgstr "Plugins" #. TRANS: Instructions at top of plugin admin page. msgid "" @@ -4006,9 +3976,8 @@ msgstr "Se guardó configuración." #. TRANS: Option in profile settings to restore the account of the currently logged in user from a backup. #. TRANS: Page title for page where a user account can be restored from backup. -#, fuzzy msgid "Restore account" -msgstr "Crear una cuenta" +msgstr "Restaurar cuenta" #. TRANS: Client error displayed when requesting a public timeline page beyond the page limit. #. TRANS: %s is the page limit. @@ -4101,9 +4070,9 @@ msgstr "Nube de etiquetas pública" #. TRANS: Instructions (more used like an explanation/header). #. TRANS: %s is the StatusNet sitename. -#, fuzzy, php-format +#, php-format msgid "These are most popular recent tags on %s" -msgstr "Estas son las etiquetas recientes más populares en %s " +msgstr "Estas son las etiquetas recientes más populares en %s" #. TRANS: This message contains a Markdown URL. The link description is between #. TRANS: square brackets, and the link between parentheses. Do not separate "](" @@ -4193,7 +4162,6 @@ msgid "Recover" msgstr "Recuperar" #. TRANS: Button text on password recovery page. -#, fuzzy msgctxt "BUTTON" msgid "Recover" msgstr "Recuperar" @@ -4212,22 +4180,19 @@ msgid "Password recovery requested" msgstr "Recuperación de contraseña solicitada" #. TRANS: Title for password recovery page in password saved mode. -#, fuzzy msgid "Password saved" -msgstr "Se guardó la contraseña." +msgstr "Contraseña guardada." #. TRANS: Title for password recovery page when an unknown action has been specified. msgid "Unknown action" msgstr "Acción desconocida" #. TRANS: Title for field label for password reset form. -#, fuzzy msgid "6 or more characters, and do not forget it!" -msgstr "6 o más caracteres, ¡no te olvides!" +msgstr "6 o más caracteres, ¡y no la olvides!" #. TRANS: Button text for password reset form. #. TRANS: Button text on profile design page to reset all colour settings to default without saving. -#, fuzzy msgctxt "BUTTON" msgid "Reset" msgstr "Restablecer" @@ -4261,7 +4226,6 @@ msgid "Unexpected password reset." msgstr "Restablecimiento de contraseña inesperado." #. TRANS: Reset password form validation error message. -#, fuzzy msgid "Password must be 6 characters or more." msgstr "La contraseña debe tener 6 o más caracteres." @@ -4281,9 +4245,9 @@ msgstr "Nueva contraseña guardada correctamente. Has iniciado una sesión." msgid "No id parameter" msgstr "No existe argumento de ID." -#, fuzzy, php-format +#, php-format msgid "No such file \"%d\"" -msgstr "No existe tal archivo." +msgstr "No existe el archivo %d" msgid "Sorry, only invited people can register." msgstr "Disculpa, sólo personas invitadas pueden registrarse." @@ -4300,7 +4264,6 @@ msgstr "Registrarse" msgid "Registration not allowed." msgstr "Registro de usuario no permitido." -#, fuzzy msgid "You cannot register if you don't agree to the license." msgstr "No puedes registrarte si no estás de acuerdo con la licencia." @@ -4310,27 +4273,23 @@ msgstr "La dirección de correo electrónico ya existe." msgid "Invalid username or password." msgstr "Usuario o contraseña inválidos." -#, fuzzy msgid "" "With this form you can create a new account. You can then post notices and " "link up to friends and colleagues." msgstr "" "Con este formulario puedes crear una nueva cuenta. Después podrás publicar " -"avisos y enviar vínculos de ellos a tus amigos y colegas. " +"mensajes y enviar vínculos de ellos a tus amigos y colegas." msgid "Email" msgstr "Correo electrónico" -#, fuzzy msgid "Used only for updates, announcements, and password recovery." msgstr "" -"Se usa sólo para actualizaciones, anuncios y recuperación de contraseñas" +"Sólo se usa para actualizaciones, anuncios y recuperación de contraseñas" -#, fuzzy msgid "Longer name, preferably your \"real\" name." -msgstr "Nombre más largo, preferiblemente tu nombre \"real\"" +msgstr "Nombre largo, preferiblemente tu nombre \"real\"" -#, fuzzy msgid "Where you are, like \"City, State (or Region), Country\"." msgstr "Dónde estás, por ejemplo \"Ciudad, Estado (o Región), País\"" @@ -4422,7 +4381,6 @@ msgstr "Suscribirse a un usuario remoto" msgid "User nickname" msgstr "Usuario" -#, fuzzy msgid "Nickname of the user you want to follow." msgstr "Usuario a quien quieres seguir" @@ -4597,9 +4555,8 @@ msgid "" msgstr "" #. TRANS: Title for submit button to confirm upload of a user backup file for account restore. -#, fuzzy msgid "Upload the file" -msgstr "Subir archivo" +msgstr "Subir el archivo" msgid "You cannot revoke user roles on this site." msgstr "No puedes revocar funciones de usuario en este sitio." @@ -4746,18 +4703,6 @@ msgstr "Grupo %s" msgid "%1$s group, page %2$d" msgstr "grupo %1$s, página %2$d" -#. TRANS: Label for group description or group note (dt). Text hidden by default. -msgid "Note" -msgstr "Nota" - -#. TRANS: Label for group aliases (dt). Text hidden by default. -msgid "Aliases" -msgstr "Alias" - -#. TRANS: Group actions header (h2). Text hidden by default. -msgid "Group actions" -msgstr "Acciones del grupo" - #. TRANS: Tooltip for feed link. %s is a group nickname. #, php-format msgid "Notice feed for %s group (RSS 1.0)" @@ -4798,7 +4743,6 @@ msgstr "Todos los miembros" msgid "Statistics" msgstr "Estadísticas" -#, fuzzy msgctxt "LABEL" msgid "Created" msgstr "Creado" @@ -4869,6 +4813,10 @@ msgstr "Mensaje de %1$s en %2$s" msgid "Notice deleted." msgstr "Mensaje borrado" +#, fuzzy +msgid "Notice" +msgstr "Mensajes" + #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #, fuzzy, php-format msgid "%1$s tagged %2$s" @@ -5212,9 +5160,8 @@ msgstr "" "informarnos al %s." #. TRANS: Message given saving SMS phone number confirmation code without having provided one. -#, fuzzy msgid "No code entered." -msgstr "No ingresó código" +msgstr "No ingresó el código" #. TRANS: Menu item for site administration msgid "Snapshots" @@ -5300,13 +5247,12 @@ msgid "These are the people who listen to %s's notices." msgstr "Estas son las personas que escuchan los avisos de %s." #. TRANS: Subscriber list text when the logged in user has no subscribers. -#, fuzzy msgid "" "You have no subscribers. Try subscribing to people you know and they might " "return the favor." msgstr "" "No tienes suscriptores. Intenta suscribirte a gente que conozcas y puede que " -"te devuelvan el favor" +"te devuelvan el favor." #. TRANS: Subscriber list text when looking at the subscribers for a of a user other #. TRANS: than the logged in user that has no subscribers. %s is the user nickname. @@ -5409,7 +5355,6 @@ msgstr "No existe argumento de ID." msgid "Tag %s" msgstr "%s etiqueta" -#. TRANS: H2 for user profile information. msgid "User profile" msgstr "Perfil de usuario" @@ -5610,26 +5555,22 @@ msgstr "" "haz clic en \"Cancelar\"." #. TRANS: Button text on Authorise Subscription page. -#, fuzzy msgctxt "BUTTON" msgid "Accept" msgstr "Aceptar" #. TRANS: Title for button on Authorise Subscription page. -#, fuzzy msgid "Subscribe to this user." -msgstr "Suscribirse a este usuario" +msgstr "Suscribirse a este usuario." #. TRANS: Button text on Authorise Subscription page. -#, fuzzy msgctxt "BUTTON" msgid "Reject" msgstr "Rechazar" #. TRANS: Title for button on Authorise Subscription page. -#, fuzzy msgid "Reject this subscription." -msgstr "Rechazar esta suscripción" +msgstr "Rechazar esta suscripción." #. TRANS: Client error displayed for an empty authorisation request. msgid "No authorization request!" @@ -6133,6 +6074,49 @@ msgstr "" msgid "No AtomPub API service for %s." msgstr "" +#. TRANS: H2 for user actions in a profile. +#. TRANS: H2 for entity actions in a profile. +msgid "User actions" +msgstr "Acciones de usuario" + +#. TRANS: Text shown in user profile of not yet compeltely deleted users. +msgid "User deletion in progress..." +msgstr "Eliminación de usuario en curso..." + +#. TRANS: Link title for link on user profile. +msgid "Edit profile settings" +msgstr "Editar configuración del perfil" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "Editar" + +#. TRANS: Link title for link on user profile. +msgid "Send a direct message to this user" +msgstr "Enviar un mensaje directo a este usuario" + +#. TRANS: Link text for link on user profile. +msgid "Message" +msgstr "Mensaje" + +#. TRANS: Label text on user profile to select a user role. +msgid "Moderate" +msgstr "Moderar" + +#. TRANS: Label text on user profile to select a user role. +msgid "User role" +msgstr "Rol de usuario" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Administrator" +msgstr "Administrador" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Moderator" +msgstr "Moderador" + #. TRANS: Page title. %1$s is the title, %2$s is the site name. #, php-format msgid "%1$s - %2$s" @@ -6145,10 +6129,9 @@ msgstr "Página sin título" #. TRANS: Localized tooltip for '...' expansion button on overlong remote messages. msgctxt "TOOLTIP" msgid "Show more" -msgstr "" +msgstr "Ver más" #. TRANS: Inline reply form submit button: submits a reply comment. -#, fuzzy msgctxt "BUTTON" msgid "Reply" msgstr "Responder" @@ -6157,9 +6140,8 @@ msgstr "Responder" msgid "Write a reply..." msgstr "" -#, fuzzy msgid "Status" -msgstr "StatusNet" +msgstr "Estado" #. TRANS: First sentence of the StatusNet site license. Used if 'broughtby' is set. #. TRANS: Text between [] is a link description, text between () is the link itself. @@ -6283,9 +6265,9 @@ msgstr "" msgid "No content for notice %s." msgstr "Buscar en el contenido de mensajes" -#, fuzzy, php-format +#, php-format msgid "No such user %s." -msgstr "No existe ese usuario." +msgstr "Este usuario no existe %s" #. TRANS: Client exception thrown when post to collection fails with a 400 status. #. TRANS: %1$s is a URL, %2$s is the status, %s$s is the fail reason. @@ -6293,10 +6275,10 @@ msgstr "No existe ese usuario." #. TRANS: %1$s is a URL, %2$s is the status, %s$s is the fail reason. #. TRANS: Exception thrown when post to collection fails with a status that is not handled. #. TRANS: %1$s is a URL, %2$s is the status, %s$s is the fail reason. -#, fuzzy, php-format +#, php-format msgctxt "URLSTATUSREASON" msgid "%1$s %2$s %3$s" -msgstr "%1$s - %2$s" +msgstr "%1$s %2$s %3$s" #. TRANS: Client exception thrown when there is no source attribute. msgid "Can't handle remote content yet." @@ -6390,9 +6372,8 @@ msgid "Set site license" msgstr "" #. TRANS: Menu item title/tooltip -#, fuzzy msgid "Plugins configuration" -msgstr "Configuración de rutas" +msgstr "Configuración de plugins" #. TRANS: Client error 401. msgid "API resource requires read-write access, but you only have read access." @@ -6421,9 +6402,8 @@ msgid "Could not authenticate you." msgstr "No ha sido posible autenticarte." #. TRANS: Server error displayed when trying to create an anynymous OAuth consumer. -#, fuzzy msgid "Could not create anonymous consumer." -msgstr "No fue posible crear alias." +msgstr "No fue posible crear usuario anónimo." #. TRANS: Server error displayed when trying to create an anynymous OAuth application. #, fuzzy @@ -6529,7 +6509,7 @@ msgid "Cancel" msgstr "Cancelar" msgid " by " -msgstr "" +msgstr "por " #. TRANS: Application access type msgid "read-write" @@ -6577,9 +6557,8 @@ msgid "Password changing failed." msgstr "El cambio de contraseña ha fallado" #. TRANS: Exception thrown when a password change attempt fails because it is not allowed. -#, fuzzy msgid "Password changing is not allowed." -msgstr "No está permitido cambiar la contraseña" +msgstr "El cambio de contraseña no está permitido" #. TRANS: Title for the form to block a user. msgid "Block" @@ -6866,85 +6845,172 @@ msgid_plural "You are a member of these groups:" msgstr[0] "Eres miembro de este grupo:" msgstr[1] "Eres miembro de estos grupos:" -#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings. -msgid "" -"Commands:\n" -"on - turn on notifications\n" -"off - turn off notifications\n" -"help - show this help\n" -"follow - subscribe to user\n" -"groups - lists the groups you have joined\n" -"subscriptions - list the people you follow\n" -"subscribers - list the people that follow you\n" -"leave - unsubscribe from user\n" -"d - direct message to user\n" -"get - get last notice from user\n" -"whois - get profile info on user\n" -"lose - force user to stop following you\n" -"fav - add user's last notice as a 'fave'\n" -"fav # - add notice with the given id as a 'fave'\n" -"repeat # - repeat a notice with a given id\n" -"repeat - repeat the last notice from user\n" -"reply # - reply to notice with a given id\n" -"reply - reply to the last notice from user\n" -"join - join group\n" -"login - Get a link to login to the web interface\n" -"drop - leave group\n" -"stats - get your stats\n" -"stop - same as 'off'\n" -"quit - same as 'off'\n" -"sub - same as 'follow'\n" -"unsub - same as 'leave'\n" -"last - same as 'get'\n" -"on - not yet implemented.\n" -"off - not yet implemented.\n" -"nudge - remind a user to update.\n" -"invite - not yet implemented.\n" -"track - not yet implemented.\n" -"untrack - not yet implemented.\n" -"track off - not yet implemented.\n" -"untrack all - not yet implemented.\n" -"tracks - not yet implemented.\n" -"tracking - not yet implemented.\n" +#. TRANS: Header line of help text for commands. +#, fuzzy +msgctxt "COMMANDHELP" +msgid "Commands:" +msgstr "Resultados de comando" + +#. TRANS: Help message for IM/SMS command "on" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn on notifications" +msgstr "No se puede activar notificación." + +#. TRANS: Help message for IM/SMS command "off" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn off notifications" +msgstr "No se puede desactivar notificación." + +#. TRANS: Help message for IM/SMS command "help" +msgctxt "COMMANDHELP" +msgid "show this help" +msgstr "" + +#. TRANS: Help message for IM/SMS command "follow " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "subscribe to user" +msgstr "Suscribirse a este usuario" + +#. TRANS: Help message for IM/SMS command "groups" +msgctxt "COMMANDHELP" +msgid "lists the groups you have joined" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscriptions" +msgctxt "COMMANDHELP" +msgid "list the people you follow" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscribers" +msgctxt "COMMANDHELP" +msgid "list the people that follow you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "leave " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "unsubscribe from user" +msgstr "Desuscribirse de este usuario" + +#. TRANS: Help message for IM/SMS command "d " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "direct message to user" +msgstr "Mensajes directos a %s" + +#. TRANS: Help message for IM/SMS command "get " +msgctxt "COMMANDHELP" +msgid "get last notice from user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "whois " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "get profile info on user" +msgstr "Información del perfil" + +#. TRANS: Help message for IM/SMS command "lose " +msgctxt "COMMANDHELP" +msgid "force user to stop following you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav " +msgctxt "COMMANDHELP" +msgid "add user's last notice as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav #" +msgctxt "COMMANDHELP" +msgid "add notice with the given id as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat #" +msgctxt "COMMANDHELP" +msgid "repeat a notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "repeat the last notice from user" +msgstr "Repetir este mensaje." + +#. TRANS: Help message for IM/SMS command "reply #" +msgctxt "COMMANDHELP" +msgid "reply to notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "reply " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "reply to the last notice from user" +msgstr "Responder a este mensaje." + +#. TRANS: Help message for IM/SMS command "join " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "join group" +msgstr "Desconocido" + +#. TRANS: Help message for IM/SMS command "login" +msgctxt "COMMANDHELP" +msgid "Get a link to login to the web interface" +msgstr "" + +#. TRANS: Help message for IM/SMS command "drop " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "leave group" +msgstr "Borrar grupo" + +#. TRANS: Help message for IM/SMS command "stats" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "get your stats" +msgstr "Actualiza tu estado." + +#. TRANS: Help message for IM/SMS command "stop" +#. TRANS: Help message for IM/SMS command "quit" +msgctxt "COMMANDHELP" +msgid "same as 'off'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "sub " +msgctxt "COMMANDHELP" +msgid "same as 'follow'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "unsub " +msgctxt "COMMANDHELP" +msgid "same as 'leave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "last " +msgctxt "COMMANDHELP" +msgid "same as 'get'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "on " +#. TRANS: Help message for IM/SMS command "off " +#. TRANS: Help message for IM/SMS command "invite " +#. TRANS: Help message for IM/SMS command "track " +#. TRANS: Help message for IM/SMS command "untrack " +#. TRANS: Help message for IM/SMS command "track off" +#. TRANS: Help message for IM/SMS command "untrack all" +#. TRANS: Help message for IM/SMS command "tracks" +#. TRANS: Help message for IM/SMS command "tracking" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "not yet implemented." +msgstr "Todavía no se implementa comando." + +#. TRANS: Help message for IM/SMS command "nudge " +msgctxt "COMMANDHELP" +msgid "remind a user to update." msgstr "" -"comandos:\n" -"on - activar notificaciones\n" -"off - desactivar notificaciones\n" -"help - mostrar esta ayuda\n" -"follow - suscribirse al usuario\n" -"groups - listar los grupos que sigues\n" -"subscriptions - listar las personas que sigues\n" -"subscribers - listar los grupos que te siguen\n" -"leave - cancelar la suscripción al usuario\n" -"d - dirigir mensaje al usuario\n" -"get - obtener último aviso del usuario\n" -"whois - obtener información del perfil del usuario\n" -"lose - obligar al usuario a que deje de seguirte\n" -"fav - añadir el último aviso del usario a tus favoritos\n" -"fav # - añadir el aviso con el ID dado a tus favoritos\n" -"repeat # - repetir el aviso con el ID dado\n" -"repeat - repetir el último aviso del usuario\n" -"reply # - responder al aviso del ID dado\n" -"reply - responder al último aviso del usuario\n" -"join - unirse a un grupo\n" -"login - obtener un vínculo para iniciar sesión en la interfaz Web\n" -"drop - abandonar el grupo\n" -"stats - obtener tus estadísticas\n" -"stop - igual que 'desactivar'\n" -"quit - igual que 'desactivar'\n" -"sub - igual que 'seguir'\n" -"unsub - igual que 'abandonar'\n" -"last - igual que 'obtener'\n" -"on - aún sin implementar.\n" -"off - aún sin implementar.\n" -"nudge - recordarle a un ausuario que actualice.\n" -"invite - aún sin implementar.\n" -"track - aún sin implementar.\n" -"untrack - aún sin implementar.\n" -"track off - aún sin implementar.\n" -"untrack all - aún sin implementar.\n" -"tracks - aún sin implementar.\n" -"tracking - aún sin implementar.\n" #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. #, fuzzy @@ -7010,13 +7076,11 @@ msgstr "" "permitido es 2 MB." #. TRANS: Radio button on profile design page that will enable use of the uploaded profile image. -#, fuzzy msgctxt "RADIO" msgid "On" msgstr "Activar" #. TRANS: Radio button on profile design page that will disable use of the uploaded profile image. -#, fuzzy msgctxt "RADIO" msgid "Off" msgstr "Desactivar" @@ -7085,7 +7149,7 @@ msgstr "" #. TRANS: Header for feed links (h2). msgid "Feeds" -msgstr "" +msgstr "Feeds" msgid "All" msgstr "Todo" @@ -7130,6 +7194,9 @@ msgstr "" "Ubicación del grupo, si existe, por ejemplo \"Ciudad, Estado (o Región), País" "\"" +msgid "Aliases" +msgstr "Alias" + #, fuzzy, php-format msgid "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " @@ -7209,6 +7276,10 @@ msgctxt "TOOLTIP" msgid "Add or edit %s design" msgstr "Añadir o modificar el diseño %s" +#. TRANS: Group actions header (h2). Text hidden by default. +msgid "Group actions" +msgstr "Acciones del grupo" + #. TRANS: Title for groups with the most members section. msgid "Groups with most members" msgstr "Grupos con mayor cantidad de miembros" @@ -7320,7 +7391,7 @@ msgstr "Confirmación de correo electrónico" #. TRANS: Body for address confirmation email. #. TRANS: %1$s is the addressed user's nickname, %2$s is the StatusNet sitename, #. TRANS: %3$s is the URL to confirm at. -#, fuzzy, php-format +#, php-format msgid "" "Hey, %1$s.\n" "\n" @@ -7335,19 +7406,19 @@ msgid "" "Thanks for your time, \n" "%2$s\n" msgstr "" -"¡Hola, %s!\n" +"Hola, %1$s !\n" "\n" -"Hace un momento, alguien introdujo esta dirección de correo electrónico en %" -"s.\n" +"Hace un momento, alguien introdujo esta dirección de correo electrónico en %2" +"$s.\n" "\n" -"Si has sido tú y deseas confirmarlo, haz clic en el vínculo de abajo:\n" +"Si fuiste tú y deseas confirmarlo, haz clic en el vínculo de abajo:\n" "\n" -"%s\n" +"%3$s\n" "\n" "Si no, simplemente ignora este mensaje.\n" "\n" "Gracias por tu tiempo, \n" -"%s\n" +"%2$s\n" #. TRANS: Subject of new-subscriber notification e-mail. #. TRANS: %1$s is the subscribing user's nickname, %2$s is the StatusNet sitename. @@ -7371,7 +7442,7 @@ msgstr "" #. TRANS: %3$s is the subscriber's profile URL, %4$s is the subscriber's location (or empty) #. TRANS: %5$s is the subscriber's homepage URL (or empty), %6%s is the subscriber's bio (or empty) #. TRANS: %7$s is a link to the addressed user's e-mail settings. -#, fuzzy, php-format +#, php-format msgid "" "%1$s is now listening to your notices on %2$s.\n" "\n" @@ -7395,7 +7466,7 @@ msgstr "" "%7$s.\n" "\n" "----\n" -"Cambia tus preferencias de notificaciones a tu correo electrónico en %8$s\n" +"Cambia tu correo electrónico o las opciones de notificación en %7$s\n" #. TRANS: Profile info line in new-subscriber notification e-mail. #. TRANS: %s is biographical information. @@ -7450,7 +7521,7 @@ msgstr "%s: Confirma que este es tu número de teléfono mediante este código:" #. TRANS: Subject for 'nudge' notification email. #. TRANS: %s is the nudging user. -#, fuzzy, php-format +#, php-format msgid "You have been nudged by %s" msgstr "%s te ha dado un toque" @@ -7527,9 +7598,9 @@ msgstr "" #. TRANS: Subject for favorite notification e-mail. #. TRANS: %1$s is the adding user's long name, %2$s is the adding user's nickname. -#, fuzzy, php-format +#, php-format msgid "%1$s (@%2$s) added your notice as a favorite" -msgstr "%s (@%s) agregó tu mensaje a los favoritos" +msgstr "%1$s (@%2$s) agregó tu mensaje como favorito." #. TRANS: Body for favorite notification e-mail. #. TRANS: %1$s is the adding user's long name, $2$s is the date the notice was created, @@ -7585,9 +7656,9 @@ msgstr "" #. TRANS: E-mail subject for notice notification. #. TRANS: %1$s is the sending user's long name, %2$s is the adding user's nickname. -#, fuzzy, php-format +#, php-format msgid "%1$s (@%2$s) sent a notice to your attention" -msgstr "%s (@%s) ha enviado un aviso a tu atención" +msgstr "%1$s (@%2$s) ha enviado un aviso para tu atención" #. TRANS: Body of @-reply notification e-mail. #. TRANS: %1$s is the sending user's long name, $2$s is the StatusNet sitename, @@ -7729,9 +7800,8 @@ msgid "Select recipient:" msgstr "Seleccione un operador móvil" #. TRANS Entry in drop-down selection box in direct-message inbox/outbox when no one is available to message. -#, fuzzy msgid "No mutual subscribers." -msgstr "¡No estás suscrito!" +msgstr "Sin suscripción mutua" msgid "To" msgstr "Para" @@ -7740,9 +7810,8 @@ msgctxt "Send button for sending notice" msgid "Send" msgstr "Enviar" -#, fuzzy msgid "Messages" -msgstr "Mensaje" +msgstr "Mensajes" msgid "from" msgstr "desde" @@ -7781,13 +7850,13 @@ msgstr "Enviar un mensaje" msgid "What's up, %s?" msgstr "¿Qué tal, %s?" +#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Adjuntar" #. TRANS: Title for input field to attach a file to a notice. -#, fuzzy msgid "Attach a file." -msgstr "Adjuntar un archivo" +msgstr "Adjuntar archivo" #. TRANS: Field label to add location to a notice. msgid "Share my location" @@ -7850,7 +7919,7 @@ msgid "Notice repeated" msgstr "Mensaje repetido" msgid "Update your status..." -msgstr "" +msgstr "Actualiza tu estado." msgid "Nudge this user" msgstr "Dar un toque a este usuario" @@ -7898,12 +7967,12 @@ msgstr "Desconocido" #. TRANS: Plugin admin panel controls msgctxt "plugin" msgid "Disable" -msgstr "" +msgstr "Deshabilitado" #. TRANS: Plugin admin panel controls msgctxt "plugin" msgid "Enable" -msgstr "" +msgstr "Habilitado" msgctxt "plugin-description" msgid "(Plugin descriptions unavailable when disabled.)" @@ -7932,9 +8001,8 @@ msgstr "Iniciar sesión en el sitio" msgid "Search" msgstr "Buscar" -#, fuzzy msgid "Search the site" -msgstr "Buscar sitio" +msgstr "Buscar en el sitio" #. TRANS: H2 text for user subscription statistics. #. TRANS: Label for user statistics. @@ -8212,7 +8280,6 @@ msgid "Top posters" msgstr "Principales posteadores" #. TRANS: Title for the form to unblock a user. -#, fuzzy msgctxt "TITLE" msgid "Unblock" msgstr "Desbloquear" @@ -8241,52 +8308,6 @@ msgstr "Cancelar suscripción" msgid "User %1$s (%2$d) has no profile record." msgstr "El usuario no tiene un perfil." -msgid "Edit Avatar" -msgstr "Editar imagen" - -#. TRANS: H2 for user actions in a profile. -#. TRANS: H2 for entity actions in a profile. -msgid "User actions" -msgstr "Acciones de usuario" - -#. TRANS: Text shown in user profile of not yet compeltely deleted users. -msgid "User deletion in progress..." -msgstr "Eliminación de usuario en curso..." - -#. TRANS: Link title for link on user profile. -msgid "Edit profile settings" -msgstr "Editar configuración del perfil" - -#. TRANS: Link text for link on user profile. -msgid "Edit" -msgstr "Editar" - -#. TRANS: Link title for link on user profile. -msgid "Send a direct message to this user" -msgstr "Enviar un mensaje directo a este usuario" - -#. TRANS: Link text for link on user profile. -msgid "Message" -msgstr "Mensaje" - -#. TRANS: Label text on user profile to select a user role. -msgid "Moderate" -msgstr "Moderar" - -#. TRANS: Label text on user profile to select a user role. -msgid "User role" -msgstr "Rol de usuario" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Administrator" -msgstr "Administrador" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Moderator" -msgstr "Moderador" - #, fuzzy msgid "Not allowed to log in." msgstr "No conectado." @@ -8362,3 +8383,88 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" + +#~ msgid "Note" +#~ msgstr "Nota" + +#~ msgid "" +#~ "Commands:\n" +#~ "on - turn on notifications\n" +#~ "off - turn off notifications\n" +#~ "help - show this help\n" +#~ "follow - subscribe to user\n" +#~ "groups - lists the groups you have joined\n" +#~ "subscriptions - list the people you follow\n" +#~ "subscribers - list the people that follow you\n" +#~ "leave - unsubscribe from user\n" +#~ "d - direct message to user\n" +#~ "get - get last notice from user\n" +#~ "whois - get profile info on user\n" +#~ "lose - force user to stop following you\n" +#~ "fav - add user's last notice as a 'fave'\n" +#~ "fav # - add notice with the given id as a 'fave'\n" +#~ "repeat # - repeat a notice with a given id\n" +#~ "repeat - repeat the last notice from user\n" +#~ "reply # - reply to notice with a given id\n" +#~ "reply - reply to the last notice from user\n" +#~ "join - join group\n" +#~ "login - Get a link to login to the web interface\n" +#~ "drop - leave group\n" +#~ "stats - get your stats\n" +#~ "stop - same as 'off'\n" +#~ "quit - same as 'off'\n" +#~ "sub - same as 'follow'\n" +#~ "unsub - same as 'leave'\n" +#~ "last - same as 'get'\n" +#~ "on - not yet implemented.\n" +#~ "off - not yet implemented.\n" +#~ "nudge - remind a user to update.\n" +#~ "invite - not yet implemented.\n" +#~ "track - not yet implemented.\n" +#~ "untrack - not yet implemented.\n" +#~ "track off - not yet implemented.\n" +#~ "untrack all - not yet implemented.\n" +#~ "tracks - not yet implemented.\n" +#~ "tracking - not yet implemented.\n" +#~ msgstr "" +#~ "comandos:\n" +#~ "on - activar notificaciones\n" +#~ "off - desactivar notificaciones\n" +#~ "help - mostrar esta ayuda\n" +#~ "follow - suscribirse al usuario\n" +#~ "groups - listar los grupos que sigues\n" +#~ "subscriptions - listar las personas que sigues\n" +#~ "subscribers - listar los grupos que te siguen\n" +#~ "leave - cancelar la suscripción al usuario\n" +#~ "d - dirigir mensaje al usuario\n" +#~ "get - obtener último aviso del usuario\n" +#~ "whois - obtener información del perfil del usuario\n" +#~ "lose - obligar al usuario a que deje de seguirte\n" +#~ "fav - añadir el último aviso del usario a tus favoritos\n" +#~ "fav # - añadir el aviso con el ID dado a tus favoritos\n" +#~ "repeat # - repetir el aviso con el ID dado\n" +#~ "repeat - repetir el último aviso del usuario\n" +#~ "reply # - responder al aviso del ID dado\n" +#~ "reply - responder al último aviso del usuario\n" +#~ "join - unirse a un grupo\n" +#~ "login - obtener un vínculo para iniciar sesión en la interfaz Web\n" +#~ "drop - abandonar el grupo\n" +#~ "stats - obtener tus estadísticas\n" +#~ "stop - igual que 'desactivar'\n" +#~ "quit - igual que 'desactivar'\n" +#~ "sub - igual que 'seguir'\n" +#~ "unsub - igual que 'abandonar'\n" +#~ "last - igual que 'obtener'\n" +#~ "on - aún sin implementar.\n" +#~ "off - aún sin implementar.\n" +#~ "nudge - recordarle a un ausuario que actualice.\n" +#~ "invite - aún sin implementar.\n" +#~ "track - aún sin implementar.\n" +#~ "untrack - aún sin implementar.\n" +#~ "track off - aún sin implementar.\n" +#~ "untrack all - aún sin implementar.\n" +#~ "tracks - aún sin implementar.\n" +#~ "tracking - aún sin implementar.\n" + +#~ msgid "Edit Avatar" +#~ msgstr "Editar imagen" diff --git a/locale/fa/LC_MESSAGES/statusnet.po b/locale/fa/LC_MESSAGES/statusnet.po index 443e410308..5dc14bc11d 100644 --- a/locale/fa/LC_MESSAGES/statusnet.po +++ b/locale/fa/LC_MESSAGES/statusnet.po @@ -4,6 +4,7 @@ # Author: ArianHT # Author: Brion # Author: Choxos +# Author: Ebraminio # Author: Everplays # Author: Mjbmr # Author: Narcissus @@ -16,8 +17,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-11 18:15+0000\n" -"PO-Revision-Date: 2011-03-11 18:17:04+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:49:33+0000\n" "Last-Translator: Ahmad Sufi Mahmudi\n" "Language-Team: Persian \n" "MIME-Version: 1.0\n" @@ -26,9 +27,9 @@ msgstr "" "X-Language-Code: fa\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" -"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" +"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -299,7 +300,6 @@ msgid "Could not update your design." msgstr "نمی‌توان طرح‌تان به‌هنگام‌سازی کرد." #. TRANS: Title for Atom feed. -#, fuzzy msgctxt "ATOM" msgid "Main" msgstr "اصلی" @@ -324,14 +324,14 @@ msgstr "%s اشتراک" #. TRANS: Title for Atom feed with a user's favorite notices. %s is a user nickname. #. TRANS: Title for Atom favorites feed. #. TRANS: %s is a user nickname. -#, fuzzy, php-format +#, php-format msgid "%s favorites" -msgstr "برگزیده‌ها" +msgstr "%s مورد علاقهٔ شما" #. TRANS: Title for Atom feed with a user's memberships. %s is a user nickname. -#, fuzzy, php-format +#, php-format msgid "%s memberships" -msgstr "اعضای گروه %s" +msgstr "%s عضو" #. TRANS: Client error displayed when users try to block themselves. msgid "You cannot block yourself!" @@ -592,7 +592,7 @@ msgstr "خارج شدن %s از گروه %s نا موفق بود" msgid "%s's groups" msgstr "گروه‌های %s" -#. TRANS: Used as subtitle in check for group membership. %1$s is a user name, %2$s is the site name. +#. TRANS: Used as subtitle in check for group membership. %1$s is the site name, %2$s is a user name. #, fuzzy, php-format msgid "%1$s groups %2$s is a member of." msgstr "هست عضو %s گروه" @@ -1051,9 +1051,8 @@ msgid "Can only fave notices." msgstr "پیدا کردن محتوای پیام‌ها" #. TRANS: Client exception thrown when trying favorite a notice without content. -#, fuzzy msgid "Unknown notice." -msgstr "ناشناخته" +msgstr "اعلان ناشناخته." #. TRANS: Client exception thrown when trying favorite an already favorited notice. #, fuzzy @@ -1084,9 +1083,8 @@ msgid "Can only handle join activities." msgstr "پیدا کردن محتوای پیام‌ها" #. TRANS: Client exception thrown when trying to subscribe to a non-existing group. -#, fuzzy msgid "Unknown group." -msgstr "ناشناخته" +msgstr "گروه ناشناخته." #. TRANS: Client exception thrown when trying to subscribe to an already subscribed group. #, fuzzy @@ -1260,13 +1258,11 @@ msgstr "حذف" #. TRANS: Button on avatar upload page to upload an avatar. #. TRANS: Submit button to confirm upload of a user backup file for account restore. -#, fuzzy msgctxt "BUTTON" msgid "Upload" -msgstr "پایین‌گذاری" +msgstr "بارگذاری" #. TRANS: Button on avatar upload crop form to confirm a selected crop as avatar. -#, fuzzy msgctxt "BUTTON" msgid "Crop" msgstr "برش" @@ -1322,10 +1318,9 @@ msgid "" msgstr "" #. TRANS: Submit button to backup an account on the backup account page. -#, fuzzy msgctxt "BUTTON" msgid "Backup" -msgstr "پیش‌زمینه" +msgstr "پشتیبان‌گیری" #. TRANS: Title for submit button to backup an account on the backup account page. msgid "Backup your account." @@ -1492,7 +1487,7 @@ msgstr "شما نمی‌توانید کاربران را پاک کنید." #. TRANS: Confirmation text for user deletion. The user has to type this exactly the same, including punctuation. msgid "I am sure." -msgstr "" +msgstr "من مطمئن هستم." #. TRANS: Notification for user about the text that must be input to be able to delete a user account. #. TRANS: %s is the text that needs to be input. @@ -1501,15 +1496,13 @@ msgid "You must write \"%s\" exactly in the box." msgstr "" #. TRANS: Confirmation that a user account has been deleted. -#, fuzzy msgid "Account deleted." -msgstr "چهره پاک شد." +msgstr "حساب کاربری حذف شد." #. TRANS: Page title for page on which a user account can be deleted. #. TRANS: Option in profile settings to delete the account of the currently logged in user. -#, fuzzy msgid "Delete account" -msgstr "ساختن یک جساب‌کاربری" +msgstr "حذف حساب کاربری" #. TRANS: Form text for user deletion form. msgid "" @@ -1532,9 +1525,9 @@ msgstr "تایید" #. TRANS: Input title for the delete account field. #. TRANS: %s is the text that needs to be input. -#, fuzzy, php-format +#, php-format msgid "Enter \"%s\" to confirm that you want to delete your account." -msgstr "شما نمی‌توانید کاربران را پاک کنید." +msgstr "«%s» را برای تأیید اینکه می‌خواهید حسابتان حذف شود وارد کنید." #. TRANS: Button title for user account deletion. #, fuzzy @@ -1613,9 +1606,8 @@ msgstr "%1$s گروه %2$s را ترک کرد" #. TRANS: Title of delete group page. #. TRANS: Form legend for deleting a group. -#, fuzzy msgid "Delete group" -msgstr "حذف کاربر" +msgstr "حذف گروه" #. TRANS: Warning in form for deleleting a group. #, fuzzy @@ -4710,18 +4702,6 @@ msgstr "گروه %s" msgid "%1$s group, page %2$d" msgstr "گروه %1$s، صفحهٔ %2$d" -#. TRANS: Label for group description or group note (dt). Text hidden by default. -msgid "Note" -msgstr "یادداشت" - -#. TRANS: Label for group aliases (dt). Text hidden by default. -msgid "Aliases" -msgstr "نام های مستعار" - -#. TRANS: Group actions header (h2). Text hidden by default. -msgid "Group actions" -msgstr "اعمال گروه" - #. TRANS: Tooltip for feed link. %s is a group nickname. #, php-format msgid "Notice feed for %s group (RSS 1.0)" @@ -4835,6 +4815,10 @@ msgstr "پیام از %1$s در %2$s" msgid "Notice deleted." msgstr "پیام پاک شد." +#, fuzzy +msgid "Notice" +msgstr "پیام‌ها" + #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #, fuzzy, php-format msgid "%1$s tagged %2$s" @@ -5371,7 +5355,6 @@ msgstr "هیچ پیوستی وجود ندارد." msgid "Tag %s" msgstr "برچسب %s" -#. TRANS: H2 for user profile information. msgid "User profile" msgstr "نمایهٔ کاربر" @@ -6076,6 +6059,49 @@ msgstr "" msgid "No AtomPub API service for %s." msgstr "" +#. TRANS: H2 for user actions in a profile. +#. TRANS: H2 for entity actions in a profile. +msgid "User actions" +msgstr "اعمال کاربر" + +#. TRANS: Text shown in user profile of not yet compeltely deleted users. +msgid "User deletion in progress..." +msgstr "پاک‌کردن کاربر در حالت اجرا است..." + +#. TRANS: Link title for link on user profile. +msgid "Edit profile settings" +msgstr "ویرایش تنظیمات نمایه" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "ویرایش" + +#. TRANS: Link title for link on user profile. +msgid "Send a direct message to this user" +msgstr "پیام مستقیم به این کاربر بفرستید" + +#. TRANS: Link text for link on user profile. +msgid "Message" +msgstr "پیام" + +#. TRANS: Label text on user profile to select a user role. +msgid "Moderate" +msgstr "اداره کردن" + +#. TRANS: Label text on user profile to select a user role. +msgid "User role" +msgstr "وظیفهٔ کاربر" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Administrator" +msgstr "رئیس" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Moderator" +msgstr "مدیر" + #. TRANS: Page title. %1$s is the title, %2$s is the site name. #, php-format msgid "%1$s - %2$s" @@ -6797,85 +6823,171 @@ msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "شما یک عضو این گروه هستید:" -#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings. -msgid "" -"Commands:\n" -"on - turn on notifications\n" -"off - turn off notifications\n" -"help - show this help\n" -"follow - subscribe to user\n" -"groups - lists the groups you have joined\n" -"subscriptions - list the people you follow\n" -"subscribers - list the people that follow you\n" -"leave - unsubscribe from user\n" -"d - direct message to user\n" -"get - get last notice from user\n" -"whois - get profile info on user\n" -"lose - force user to stop following you\n" -"fav - add user's last notice as a 'fave'\n" -"fav # - add notice with the given id as a 'fave'\n" -"repeat # - repeat a notice with a given id\n" -"repeat - repeat the last notice from user\n" -"reply # - reply to notice with a given id\n" -"reply - reply to the last notice from user\n" -"join - join group\n" -"login - Get a link to login to the web interface\n" -"drop - leave group\n" -"stats - get your stats\n" -"stop - same as 'off'\n" -"quit - same as 'off'\n" -"sub - same as 'follow'\n" -"unsub - same as 'leave'\n" -"last - same as 'get'\n" -"on - not yet implemented.\n" -"off - not yet implemented.\n" -"nudge - remind a user to update.\n" -"invite - not yet implemented.\n" -"track - not yet implemented.\n" -"untrack - not yet implemented.\n" -"track off - not yet implemented.\n" -"untrack all - not yet implemented.\n" -"tracks - not yet implemented.\n" -"tracking - not yet implemented.\n" +#. TRANS: Header line of help text for commands. +#, fuzzy +msgctxt "COMMANDHELP" +msgid "Commands:" +msgstr "نتیجه دستور" + +#. TRANS: Help message for IM/SMS command "on" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn on notifications" +msgstr "ناتوان در روشن کردن آگاه سازی." + +#. TRANS: Help message for IM/SMS command "off" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn off notifications" +msgstr "ناتوان در خاموش کردن آگاه سازی." + +#. TRANS: Help message for IM/SMS command "help" +msgctxt "COMMANDHELP" +msgid "show this help" +msgstr "" + +#. TRANS: Help message for IM/SMS command "follow " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "subscribe to user" +msgstr "مشترک شدن این کاربر" + +#. TRANS: Help message for IM/SMS command "groups" +msgctxt "COMMANDHELP" +msgid "lists the groups you have joined" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscriptions" +msgctxt "COMMANDHELP" +msgid "list the people you follow" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscribers" +msgctxt "COMMANDHELP" +msgid "list the people that follow you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "leave " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "unsubscribe from user" +msgstr "لغو مشترک‌شدن از این کاربر" + +#. TRANS: Help message for IM/SMS command "d " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "direct message to user" +msgstr "پیام‌های مستقیم به %s" + +#. TRANS: Help message for IM/SMS command "get " +msgctxt "COMMANDHELP" +msgid "get last notice from user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "whois " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "get profile info on user" +msgstr "اطلاعات نمایه" + +#. TRANS: Help message for IM/SMS command "lose " +msgctxt "COMMANDHELP" +msgid "force user to stop following you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav " +msgctxt "COMMANDHELP" +msgid "add user's last notice as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav #" +msgctxt "COMMANDHELP" +msgid "add notice with the given id as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat #" +msgctxt "COMMANDHELP" +msgid "repeat a notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "repeat the last notice from user" +msgstr "تکرار این پیام" + +#. TRANS: Help message for IM/SMS command "reply #" +msgctxt "COMMANDHELP" +msgid "reply to notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "reply " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "reply to the last notice from user" +msgstr "به این پیام پاسخ دهید" + +#. TRANS: Help message for IM/SMS command "join " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "join group" +msgstr "گروه ناشناخته." + +#. TRANS: Help message for IM/SMS command "login" +msgctxt "COMMANDHELP" +msgid "Get a link to login to the web interface" +msgstr "" + +#. TRANS: Help message for IM/SMS command "drop " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "leave group" +msgstr "حذف گروه" + +#. TRANS: Help message for IM/SMS command "stats" +msgctxt "COMMANDHELP" +msgid "get your stats" +msgstr "" + +#. TRANS: Help message for IM/SMS command "stop" +#. TRANS: Help message for IM/SMS command "quit" +msgctxt "COMMANDHELP" +msgid "same as 'off'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "sub " +msgctxt "COMMANDHELP" +msgid "same as 'follow'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "unsub " +msgctxt "COMMANDHELP" +msgid "same as 'leave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "last " +msgctxt "COMMANDHELP" +msgid "same as 'get'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "on " +#. TRANS: Help message for IM/SMS command "off " +#. TRANS: Help message for IM/SMS command "invite " +#. TRANS: Help message for IM/SMS command "track " +#. TRANS: Help message for IM/SMS command "untrack " +#. TRANS: Help message for IM/SMS command "track off" +#. TRANS: Help message for IM/SMS command "untrack all" +#. TRANS: Help message for IM/SMS command "tracks" +#. TRANS: Help message for IM/SMS command "tracking" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "not yet implemented." +msgstr "دستور هنوز پیاده نشده است." + +#. TRANS: Help message for IM/SMS command "nudge " +msgctxt "COMMANDHELP" +msgid "remind a user to update." msgstr "" -"دستورات:\n" -"on - روشن‌کردن آگاه‌سازی‌ها\n" -"off - خاموش‌کردن آگاه‌سازی‌ها\n" -"help - نشان دادن این کمک\n" -"follow - مشترک کاربر شدن\n" -"groups - گروه‌هایی را که به آن‌ها پیوسته‌اید، فهرست می‌کند\n" -"subscriptions - افرادی را که دنبال می‌کنید، فهرست می‌کند\n" -"subscribers - کاربرانی را که شما را دنبال می‌کنند، فهرست می‌کند\n" -"leave - لغو اشتراک از کاربر\n" -"d - پیام مستقیم به کاربر\n" -"get - دریافت آخرین پیام از کاربر\n" -"whois - دریافت اطلاعات نمایهٔ کاربر\n" -"lose - وادار کردن کاربر به توقف دنبال‌کردن شما\n" -"fav - افزودن آخرین پیام کاربر به عنوان برگزیده\n" -"fav # - افزودن پیام با یک شناسهٔ داده‌شده به عنوان برگزیده\n" -"repeat # - تکرار کردن یک پیام با یک شناسهٔ داده‌شده\n" -"repeat - تکرار کردن آخرین پیام از کاربر\n" -"reply # - پاسخ‌دادن به یک پیام با یک شناسهٔ داده‌شده\n" -"reply - پاسخ‌دادن به آخرین پیام از کاربر\n" -"join - پیوستن به گروه\n" -"login - دریافت یک پیوند برای واردشدن به رابط وب\n" -"drop - ترک‌کردن گروه\n" -"stats - دریافت آمار شما\n" -"stop - مانند «off»\n" -"quit - مانند «off»\n" -"sub - مانند «follow»\n" -"unsub - مانند «leave»\n" -"last - مانند «get»\n" -"on - هنوز پیاده نشده است.\n" -"off - هنوز پیاده نشده است.\n" -"nudge - یادآوری‌کردن به یک کاربر برای به‌روز کردن\n" -"invite - هنوز پیاده نشده است.\n" -"track - هنوز پیاده نشده است.\n" -"untrack - هنوز پیاده نشده است.\n" -"track off - هنوز پیاده نشده است.\n" -"untrack all - هنوز پیاده نشده است.\n" -"tracks - هنوز پیاده نشده است.\n" -"tracking - هنوز پیاده نشده است.\n" #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. #, fuzzy @@ -7058,6 +7170,9 @@ msgid "" "Location for the group, if any, like \"City, State (or Region), Country\"." msgstr "مکان گروه، در صورت وجود داشتن، مانند «شهر، ایالت (یا استان)، کشور»" +msgid "Aliases" +msgstr "نام های مستعار" + #, fuzzy, php-format msgid "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " @@ -7135,6 +7250,10 @@ msgctxt "TOOLTIP" msgid "Add or edit %s design" msgstr "" +#. TRANS: Group actions header (h2). Text hidden by default. +msgid "Group actions" +msgstr "اعمال گروه" + #. TRANS: Title for groups with the most members section. msgid "Groups with most members" msgstr "گروه های با اعضاء بیشتر" @@ -7698,6 +7817,7 @@ msgstr "فرستادن یک پیام" msgid "What's up, %s?" msgstr "چه خبر، %s؟" +#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "پیوست کردن" @@ -8159,52 +8279,6 @@ msgstr "لغو اشتراک" msgid "User %1$s (%2$d) has no profile record." msgstr "کاربر هیچ نمایه‌ای ندارد." -msgid "Edit Avatar" -msgstr "ویرایش اواتور" - -#. TRANS: H2 for user actions in a profile. -#. TRANS: H2 for entity actions in a profile. -msgid "User actions" -msgstr "اعمال کاربر" - -#. TRANS: Text shown in user profile of not yet compeltely deleted users. -msgid "User deletion in progress..." -msgstr "پاک‌کردن کاربر در حالت اجرا است..." - -#. TRANS: Link title for link on user profile. -msgid "Edit profile settings" -msgstr "ویرایش تنظیمات نمایه" - -#. TRANS: Link text for link on user profile. -msgid "Edit" -msgstr "ویرایش" - -#. TRANS: Link title for link on user profile. -msgid "Send a direct message to this user" -msgstr "پیام مستقیم به این کاربر بفرستید" - -#. TRANS: Link text for link on user profile. -msgid "Message" -msgstr "پیام" - -#. TRANS: Label text on user profile to select a user role. -msgid "Moderate" -msgstr "اداره کردن" - -#. TRANS: Label text on user profile to select a user role. -msgid "User role" -msgstr "وظیفهٔ کاربر" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Administrator" -msgstr "رئیس" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Moderator" -msgstr "مدیر" - #, fuzzy msgid "Not allowed to log in." msgstr "شما به سیستم وارد نشده اید." @@ -8276,3 +8350,88 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" + +#~ msgid "Note" +#~ msgstr "یادداشت" + +#~ msgid "" +#~ "Commands:\n" +#~ "on - turn on notifications\n" +#~ "off - turn off notifications\n" +#~ "help - show this help\n" +#~ "follow - subscribe to user\n" +#~ "groups - lists the groups you have joined\n" +#~ "subscriptions - list the people you follow\n" +#~ "subscribers - list the people that follow you\n" +#~ "leave - unsubscribe from user\n" +#~ "d - direct message to user\n" +#~ "get - get last notice from user\n" +#~ "whois - get profile info on user\n" +#~ "lose - force user to stop following you\n" +#~ "fav - add user's last notice as a 'fave'\n" +#~ "fav # - add notice with the given id as a 'fave'\n" +#~ "repeat # - repeat a notice with a given id\n" +#~ "repeat - repeat the last notice from user\n" +#~ "reply # - reply to notice with a given id\n" +#~ "reply - reply to the last notice from user\n" +#~ "join - join group\n" +#~ "login - Get a link to login to the web interface\n" +#~ "drop - leave group\n" +#~ "stats - get your stats\n" +#~ "stop - same as 'off'\n" +#~ "quit - same as 'off'\n" +#~ "sub - same as 'follow'\n" +#~ "unsub - same as 'leave'\n" +#~ "last - same as 'get'\n" +#~ "on - not yet implemented.\n" +#~ "off - not yet implemented.\n" +#~ "nudge - remind a user to update.\n" +#~ "invite - not yet implemented.\n" +#~ "track - not yet implemented.\n" +#~ "untrack - not yet implemented.\n" +#~ "track off - not yet implemented.\n" +#~ "untrack all - not yet implemented.\n" +#~ "tracks - not yet implemented.\n" +#~ "tracking - not yet implemented.\n" +#~ msgstr "" +#~ "دستورات:\n" +#~ "on - روشن‌کردن آگاه‌سازی‌ها\n" +#~ "off - خاموش‌کردن آگاه‌سازی‌ها\n" +#~ "help - نشان دادن این کمک\n" +#~ "follow - مشترک کاربر شدن\n" +#~ "groups - گروه‌هایی را که به آن‌ها پیوسته‌اید، فهرست می‌کند\n" +#~ "subscriptions - افرادی را که دنبال می‌کنید، فهرست می‌کند\n" +#~ "subscribers - کاربرانی را که شما را دنبال می‌کنند، فهرست می‌کند\n" +#~ "leave - لغو اشتراک از کاربر\n" +#~ "d - پیام مستقیم به کاربر\n" +#~ "get - دریافت آخرین پیام از کاربر\n" +#~ "whois - دریافت اطلاعات نمایهٔ کاربر\n" +#~ "lose - وادار کردن کاربر به توقف دنبال‌کردن شما\n" +#~ "fav - افزودن آخرین پیام کاربر به عنوان برگزیده\n" +#~ "fav # - افزودن پیام با یک شناسهٔ داده‌شده به عنوان برگزیده\n" +#~ "repeat # - تکرار کردن یک پیام با یک شناسهٔ داده‌شده\n" +#~ "repeat - تکرار کردن آخرین پیام از کاربر\n" +#~ "reply # - پاسخ‌دادن به یک پیام با یک شناسهٔ داده‌شده\n" +#~ "reply - پاسخ‌دادن به آخرین پیام از کاربر\n" +#~ "join - پیوستن به گروه\n" +#~ "login - دریافت یک پیوند برای واردشدن به رابط وب\n" +#~ "drop - ترک‌کردن گروه\n" +#~ "stats - دریافت آمار شما\n" +#~ "stop - مانند «off»\n" +#~ "quit - مانند «off»\n" +#~ "sub - مانند «follow»\n" +#~ "unsub - مانند «leave»\n" +#~ "last - مانند «get»\n" +#~ "on - هنوز پیاده نشده است.\n" +#~ "off - هنوز پیاده نشده است.\n" +#~ "nudge - یادآوری‌کردن به یک کاربر برای به‌روز کردن\n" +#~ "invite - هنوز پیاده نشده است.\n" +#~ "track - هنوز پیاده نشده است.\n" +#~ "untrack - هنوز پیاده نشده است.\n" +#~ "track off - هنوز پیاده نشده است.\n" +#~ "untrack all - هنوز پیاده نشده است.\n" +#~ "tracks - هنوز پیاده نشده است.\n" +#~ "tracking - هنوز پیاده نشده است.\n" + +#~ msgid "Edit Avatar" +#~ msgstr "ویرایش اواتور" diff --git a/locale/fi/LC_MESSAGES/statusnet.po b/locale/fi/LC_MESSAGES/statusnet.po index 98f6370d3e..fcde77fab6 100644 --- a/locale/fi/LC_MESSAGES/statusnet.po +++ b/locale/fi/LC_MESSAGES/statusnet.po @@ -15,17 +15,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-11 18:15+0000\n" -"PO-Revision-Date: 2011-03-11 18:17:06+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:49:34+0000\n" "Language-Team: Finnish \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: fi\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" +"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -388,7 +388,7 @@ msgstr "" #. TRANS: Client error displayed trying to direct message self (403). msgid "" "Do not send a message to yourself; just say it to yourself quietly instead." -msgstr "Älä lähetä viestiä itsellesi, vaan kuiskaa se vain hiljaa itsellesi." +msgstr "Et voi lähettää viestiä itsellesi. Kuiskaa se hiljaa itsellesi." #. TRANS: Client error displayed when requesting a status with a non-existing ID. #. TRANS: Client error displayed when trying to remove a favourite with an invalid ID. @@ -588,10 +588,10 @@ msgstr "Käyttäjä %s ei voinut liittyä ryhmään %s." msgid "%s's groups" msgstr "Käyttäjän %s ryhmät" -#. TRANS: Used as subtitle in check for group membership. %1$s is a user name, %2$s is the site name. +#. TRANS: Used as subtitle in check for group membership. %1$s is the site name, %2$s is a user name. #, php-format msgid "%1$s groups %2$s is a member of." -msgstr "%1$s ryhmät, joiden jäsen %2$s on." +msgstr "Sivuston %1$s ryhmät, joiden jäsen %2$s on." #. TRANS: Message is used as a title when listing the lastest 20 groups. %s is a site name. #. TRANS: Message is used as a page title. %s is a nick name. @@ -1244,7 +1244,7 @@ msgstr "Poista" #. TRANS: Submit button to confirm upload of a user backup file for account restore. msgctxt "BUTTON" msgid "Upload" -msgstr "Lataa" +msgstr "Tallenna" #. TRANS: Button on avatar upload crop form to confirm a selected crop as avatar. msgctxt "BUTTON" @@ -1512,11 +1512,11 @@ msgstr "Vahvista" #. TRANS: %s is the text that needs to be input. #, php-format msgid "Enter \"%s\" to confirm that you want to delete your account." -msgstr "Anna \"%s\" varmistaaksesi että haluat todella poistaa käyttäjätilisi." +msgstr "Kirjoita ”%s”, jos haluat todella poistaa käyttäjätilisi." #. TRANS: Button title for user account deletion. msgid "Permanently delete your account" -msgstr "Poista käyttäjätilisi lopullisesti" +msgstr "Poista käyttäjätilini lopullisesti" #. TRANS: Client error displayed trying to delete an application while not logged in. msgid "You must be logged in to delete an application." @@ -1839,7 +1839,7 @@ msgstr "Lisää suosikkeihin" #. TRANS: %s is the non-existing document. #, php-format msgid "No such document \"%s\"." -msgstr "Dokumenttia \"%s\" ei ole." +msgstr "Dokumenttia ”%s” ei ole." #. TRANS: Title for "Edit application" form. #. TRANS: Form legend. @@ -1858,7 +1858,7 @@ msgstr "Sovellusta ei ole." #. TRANS: Instructions for "Edit application" form. msgid "Use this form to edit your application." -msgstr "Käytä tätä lomaketta muokataksesi sovellustasi." +msgstr "Käytä tätä lomaketta sovelluksesi muokkaamiseen." #. TRANS: Validation error shown when not providing a name in the "Edit application" form. #. TRANS: Validation error shown when not providing a name in the "New application" form. @@ -2339,9 +2339,8 @@ msgid "" "will be removed from the group, unable to post, and unable to subscribe to " "the group in the future." msgstr "" -"Haluatko varmasti estää käyttäjän \"%1$s\" ryhmästä \"%2$s\"? Heidät " -"poistetaan ryhmästä, eivät voi lähettää päivityksiä, ja eivät voi enää " -"liittyä ryhmään." +"Haluatko varmasti estää käyttäjän %1$s ryhmästä %2$s? Estetty käyttäjä " +"poistetaan ryhmästä, hän ei voi lähettää päivityksiä, eikä liittyä ryhmään." #. TRANS: Submit button title for 'No' when blocking a user from a group. msgid "Do not block this user from this group." @@ -2395,7 +2394,7 @@ msgstr "Ryhmän logo" #, php-format msgid "" "You can upload a logo image for your group. The maximum file size is %s." -msgstr "Voit ladata ryhmälle logokuvan. Maksimikoko on %s." +msgstr "Voit ladata ryhmälle logokuvan. Kuvan enimmäiskoko on %s." #. TRANS: Submit button for uploading a group logo. msgid "Upload" @@ -4688,18 +4687,6 @@ msgstr "Ryhmä %s" msgid "%1$s group, page %2$d" msgstr "Ryhmät, sivu %d" -#. TRANS: Label for group description or group note (dt). Text hidden by default. -msgid "Note" -msgstr "Huomaa" - -#. TRANS: Label for group aliases (dt). Text hidden by default. -msgid "Aliases" -msgstr "Aliakset" - -#. TRANS: Group actions header (h2). Text hidden by default. -msgid "Group actions" -msgstr "Ryhmän toiminnot" - #. TRANS: Tooltip for feed link. %s is a group nickname. #, php-format msgid "Notice feed for %s group (RSS 1.0)" @@ -4805,6 +4792,10 @@ msgstr "Viesti käyttäjältä %1$s, %2$s" msgid "Notice deleted." msgstr "Päivitys on poistettu." +#, fuzzy +msgid "Notice" +msgstr "Päivitykset" + #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #, fuzzy, php-format msgid "%1$s tagged %2$s" @@ -5336,7 +5327,6 @@ msgstr "Ei id parametria." msgid "Tag %s" msgstr "Tagi %s" -#. TRANS: H2 for user profile information. msgid "User profile" msgstr "Käyttäjän profiili" @@ -6057,6 +6047,52 @@ msgstr "" msgid "No AtomPub API service for %s." msgstr "" +#. TRANS: H2 for user actions in a profile. +#. TRANS: H2 for entity actions in a profile. +msgid "User actions" +msgstr "Käyttäjän toiminnot" + +#. TRANS: Text shown in user profile of not yet compeltely deleted users. +msgid "User deletion in progress..." +msgstr "" + +#. TRANS: Link title for link on user profile. +#, fuzzy +msgid "Edit profile settings" +msgstr "Profiiliasetukset" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "" + +#. TRANS: Link title for link on user profile. +msgid "Send a direct message to this user" +msgstr "Lähetä suora viesti tälle käyttäjälle" + +#. TRANS: Link text for link on user profile. +msgid "Message" +msgstr "Viesti" + +#. TRANS: Label text on user profile to select a user role. +msgid "Moderate" +msgstr "" + +#. TRANS: Label text on user profile to select a user role. +#, fuzzy +msgid "User role" +msgstr "Käyttäjän profiili" + +#. TRANS: Role that can be set for a user profile. +#, fuzzy +msgctxt "role" +msgid "Administrator" +msgstr "Ylläpitäjät" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Moderator" +msgstr "" + #. TRANS: Page title. %1$s is the title, %2$s is the site name. #, fuzzy, php-format msgid "%1$s - %2$s" @@ -6803,46 +6839,170 @@ msgid_plural "You are a member of these groups:" msgstr[0] "Sinä et kuulu tähän ryhmään." msgstr[1] "Sinä et kuulu tähän ryhmään." -#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings. -msgid "" -"Commands:\n" -"on - turn on notifications\n" -"off - turn off notifications\n" -"help - show this help\n" -"follow - subscribe to user\n" -"groups - lists the groups you have joined\n" -"subscriptions - list the people you follow\n" -"subscribers - list the people that follow you\n" -"leave - unsubscribe from user\n" -"d - direct message to user\n" -"get - get last notice from user\n" -"whois - get profile info on user\n" -"lose - force user to stop following you\n" -"fav - add user's last notice as a 'fave'\n" -"fav # - add notice with the given id as a 'fave'\n" -"repeat # - repeat a notice with a given id\n" -"repeat - repeat the last notice from user\n" -"reply # - reply to notice with a given id\n" -"reply - reply to the last notice from user\n" -"join - join group\n" -"login - Get a link to login to the web interface\n" -"drop - leave group\n" -"stats - get your stats\n" -"stop - same as 'off'\n" -"quit - same as 'off'\n" -"sub - same as 'follow'\n" -"unsub - same as 'leave'\n" -"last - same as 'get'\n" -"on - not yet implemented.\n" -"off - not yet implemented.\n" -"nudge - remind a user to update.\n" -"invite - not yet implemented.\n" -"track - not yet implemented.\n" -"untrack - not yet implemented.\n" -"track off - not yet implemented.\n" -"untrack all - not yet implemented.\n" -"tracks - not yet implemented.\n" -"tracking - not yet implemented.\n" +#. TRANS: Header line of help text for commands. +#, fuzzy +msgctxt "COMMANDHELP" +msgid "Commands:" +msgstr "Komennon tulos" + +#. TRANS: Help message for IM/SMS command "on" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn on notifications" +msgstr "Ilmoituksia ei voi pistää päälle." + +#. TRANS: Help message for IM/SMS command "off" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn off notifications" +msgstr "Ilmoituksia ei voi pistää pois päältä." + +#. TRANS: Help message for IM/SMS command "help" +msgctxt "COMMANDHELP" +msgid "show this help" +msgstr "" + +#. TRANS: Help message for IM/SMS command "follow " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "subscribe to user" +msgstr "Tilaa tämä käyttäjä" + +#. TRANS: Help message for IM/SMS command "groups" +msgctxt "COMMANDHELP" +msgid "lists the groups you have joined" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscriptions" +msgctxt "COMMANDHELP" +msgid "list the people you follow" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscribers" +msgctxt "COMMANDHELP" +msgid "list the people that follow you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "leave " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "unsubscribe from user" +msgstr "Peruuta tämän käyttäjän tilaus" + +#. TRANS: Help message for IM/SMS command "d " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "direct message to user" +msgstr "Suorat viestit käyttäjälle %s" + +#. TRANS: Help message for IM/SMS command "get " +msgctxt "COMMANDHELP" +msgid "get last notice from user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "whois " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "get profile info on user" +msgstr "Profiilitieto" + +#. TRANS: Help message for IM/SMS command "lose " +msgctxt "COMMANDHELP" +msgid "force user to stop following you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav " +msgctxt "COMMANDHELP" +msgid "add user's last notice as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav #" +msgctxt "COMMANDHELP" +msgid "add notice with the given id as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat #" +msgctxt "COMMANDHELP" +msgid "repeat a notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "repeat the last notice from user" +msgstr "Vastaa tähän päivitykseen" + +#. TRANS: Help message for IM/SMS command "reply #" +msgctxt "COMMANDHELP" +msgid "reply to notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "reply " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "reply to the last notice from user" +msgstr "Vastaa tähän päivitykseen" + +#. TRANS: Help message for IM/SMS command "join " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "join group" +msgstr "Tuntematon ryhmä." + +#. TRANS: Help message for IM/SMS command "login" +msgctxt "COMMANDHELP" +msgid "Get a link to login to the web interface" +msgstr "" + +#. TRANS: Help message for IM/SMS command "drop " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "leave group" +msgstr "Poista ryhmä" + +#. TRANS: Help message for IM/SMS command "stats" +msgctxt "COMMANDHELP" +msgid "get your stats" +msgstr "" + +#. TRANS: Help message for IM/SMS command "stop" +#. TRANS: Help message for IM/SMS command "quit" +msgctxt "COMMANDHELP" +msgid "same as 'off'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "sub " +msgctxt "COMMANDHELP" +msgid "same as 'follow'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "unsub " +msgctxt "COMMANDHELP" +msgid "same as 'leave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "last " +msgctxt "COMMANDHELP" +msgid "same as 'get'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "on " +#. TRANS: Help message for IM/SMS command "off " +#. TRANS: Help message for IM/SMS command "invite " +#. TRANS: Help message for IM/SMS command "track " +#. TRANS: Help message for IM/SMS command "untrack " +#. TRANS: Help message for IM/SMS command "track off" +#. TRANS: Help message for IM/SMS command "untrack all" +#. TRANS: Help message for IM/SMS command "tracks" +#. TRANS: Help message for IM/SMS command "tracking" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "not yet implemented." +msgstr "Komentoa ei ole vielä toteutettu." + +#. TRANS: Help message for IM/SMS command "nudge " +msgctxt "COMMANDHELP" +msgid "remind a user to update." msgstr "" #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. @@ -7036,6 +7196,9 @@ msgstr "" "Ryhmän paikka, jos sellainen on, kuten \"Kaupunki, Maakunta (tai Lääni), Maa" "\"" +msgid "Aliases" +msgstr "Aliakset" + #, php-format msgid "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " @@ -7114,6 +7277,10 @@ msgctxt "TOOLTIP" msgid "Add or edit %s design" msgstr "" +#. TRANS: Group actions header (h2). Text hidden by default. +msgid "Group actions" +msgstr "Ryhmän toiminnot" + #. TRANS: Title for groups with the most members section. msgid "Groups with most members" msgstr "Ryhmät, joissa eniten jäseniä" @@ -7597,6 +7764,7 @@ msgstr "Lähetä päivitys" msgid "What's up, %s?" msgstr "Mitä teet juuri nyt, %s?" +#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "" @@ -8070,56 +8238,6 @@ msgstr "Peruuta tilaus" msgid "User %1$s (%2$d) has no profile record." msgstr "Käyttäjällä ei ole profiilia." -#, fuzzy -msgid "Edit Avatar" -msgstr "Kuva" - -#. TRANS: H2 for user actions in a profile. -#. TRANS: H2 for entity actions in a profile. -msgid "User actions" -msgstr "Käyttäjän toiminnot" - -#. TRANS: Text shown in user profile of not yet compeltely deleted users. -msgid "User deletion in progress..." -msgstr "" - -#. TRANS: Link title for link on user profile. -#, fuzzy -msgid "Edit profile settings" -msgstr "Profiiliasetukset" - -#. TRANS: Link text for link on user profile. -msgid "Edit" -msgstr "" - -#. TRANS: Link title for link on user profile. -msgid "Send a direct message to this user" -msgstr "Lähetä suora viesti tälle käyttäjälle" - -#. TRANS: Link text for link on user profile. -msgid "Message" -msgstr "Viesti" - -#. TRANS: Label text on user profile to select a user role. -msgid "Moderate" -msgstr "" - -#. TRANS: Label text on user profile to select a user role. -#, fuzzy -msgid "User role" -msgstr "Käyttäjän profiili" - -#. TRANS: Role that can be set for a user profile. -#, fuzzy -msgctxt "role" -msgid "Administrator" -msgstr "Ylläpitäjät" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Moderator" -msgstr "" - #, fuzzy msgid "Not allowed to log in." msgstr "Et ole kirjautunut sisään." @@ -8195,3 +8313,10 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" + +#~ msgid "Note" +#~ msgstr "Huomaa" + +#, fuzzy +#~ msgid "Edit Avatar" +#~ msgstr "Kuva" diff --git a/locale/fr/LC_MESSAGES/statusnet.po b/locale/fr/LC_MESSAGES/statusnet.po index f63f26d5f4..cba78330be 100644 --- a/locale/fr/LC_MESSAGES/statusnet.po +++ b/locale/fr/LC_MESSAGES/statusnet.po @@ -21,17 +21,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-11 18:15+0000\n" -"PO-Revision-Date: 2011-03-11 18:17:07+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:49:35+0000\n" "Language-Team: French \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: fr\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" +"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -605,7 +605,7 @@ msgstr "Impossible de retirer l’utilisateur %1$s du groupe %2$s." msgid "%s's groups" msgstr "Groupes de %s" -#. TRANS: Used as subtitle in check for group membership. %1$s is a user name, %2$s is the site name. +#. TRANS: Used as subtitle in check for group membership. %1$s is the site name, %2$s is a user name. #, php-format msgid "%1$s groups %2$s is a member of." msgstr "Groupes de %1$s dont %2$s est membre." @@ -4750,18 +4750,6 @@ msgstr "Groupe %s" msgid "%1$s group, page %2$d" msgstr "Groupe %1$s, page %2$d" -#. TRANS: Label for group description or group note (dt). Text hidden by default. -msgid "Note" -msgstr "Note" - -#. TRANS: Label for group aliases (dt). Text hidden by default. -msgid "Aliases" -msgstr "Alias" - -#. TRANS: Group actions header (h2). Text hidden by default. -msgid "Group actions" -msgstr "Actions du groupe" - #. TRANS: Tooltip for feed link. %s is a group nickname. #, php-format msgid "Notice feed for %s group (RSS 1.0)" @@ -4874,6 +4862,10 @@ msgstr "Message reçu de %1$s le %2$s" msgid "Notice deleted." msgstr "Avis supprimé." +#, fuzzy +msgid "Notice" +msgstr "Avis" + #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #, php-format msgid "%1$s tagged %2$s" @@ -5418,7 +5410,6 @@ msgstr "Aucun argument d’identifiant." msgid "Tag %s" msgstr "Marque %s" -#. TRANS: H2 for user profile information. msgid "User profile" msgstr "Profil de l’utilisateur" @@ -6144,6 +6135,49 @@ msgstr "" msgid "No AtomPub API service for %s." msgstr "" +#. TRANS: H2 for user actions in a profile. +#. TRANS: H2 for entity actions in a profile. +msgid "User actions" +msgstr "Actions de l’utilisateur" + +#. TRANS: Text shown in user profile of not yet compeltely deleted users. +msgid "User deletion in progress..." +msgstr "Suppression de l'utilisateur en cours..." + +#. TRANS: Link title for link on user profile. +msgid "Edit profile settings" +msgstr "Modifier les paramètres du profil" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "Modifier" + +#. TRANS: Link title for link on user profile. +msgid "Send a direct message to this user" +msgstr "Envoyer un message à cet utilisateur" + +#. TRANS: Link text for link on user profile. +msgid "Message" +msgstr "Message" + +#. TRANS: Label text on user profile to select a user role. +msgid "Moderate" +msgstr "Modérer" + +#. TRANS: Label text on user profile to select a user role. +msgid "User role" +msgstr "Rôle de l'utilisateur" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Administrator" +msgstr "Administrateur" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Moderator" +msgstr "Modérateur" + #. TRANS: Page title. %1$s is the title, %2$s is the site name. #, php-format msgid "%1$s - %2$s" @@ -6881,86 +6915,171 @@ msgid_plural "You are a member of these groups:" msgstr[0] "Vous êtes membre de ce groupe :" msgstr[1] "Vous êtes membre de ces groupes :" -#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings. -msgid "" -"Commands:\n" -"on - turn on notifications\n" -"off - turn off notifications\n" -"help - show this help\n" -"follow - subscribe to user\n" -"groups - lists the groups you have joined\n" -"subscriptions - list the people you follow\n" -"subscribers - list the people that follow you\n" -"leave - unsubscribe from user\n" -"d - direct message to user\n" -"get - get last notice from user\n" -"whois - get profile info on user\n" -"lose - force user to stop following you\n" -"fav - add user's last notice as a 'fave'\n" -"fav # - add notice with the given id as a 'fave'\n" -"repeat # - repeat a notice with a given id\n" -"repeat - repeat the last notice from user\n" -"reply # - reply to notice with a given id\n" -"reply - reply to the last notice from user\n" -"join - join group\n" -"login - Get a link to login to the web interface\n" -"drop - leave group\n" -"stats - get your stats\n" -"stop - same as 'off'\n" -"quit - same as 'off'\n" -"sub - same as 'follow'\n" -"unsub - same as 'leave'\n" -"last - same as 'get'\n" -"on - not yet implemented.\n" -"off - not yet implemented.\n" -"nudge - remind a user to update.\n" -"invite - not yet implemented.\n" -"track - not yet implemented.\n" -"untrack - not yet implemented.\n" -"track off - not yet implemented.\n" -"untrack all - not yet implemented.\n" -"tracks - not yet implemented.\n" -"tracking - not yet implemented.\n" +#. TRANS: Header line of help text for commands. +#, fuzzy +msgctxt "COMMANDHELP" +msgid "Commands:" +msgstr "Résultats de la commande" + +#. TRANS: Help message for IM/SMS command "on" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn on notifications" +msgstr "Impossible d’activer les avertissements." + +#. TRANS: Help message for IM/SMS command "off" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn off notifications" +msgstr "Impossible de désactiver les avertissements." + +#. TRANS: Help message for IM/SMS command "help" +msgctxt "COMMANDHELP" +msgid "show this help" +msgstr "" + +#. TRANS: Help message for IM/SMS command "follow " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "subscribe to user" +msgstr "S’abonner à cet utilisateur" + +#. TRANS: Help message for IM/SMS command "groups" +msgctxt "COMMANDHELP" +msgid "lists the groups you have joined" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscriptions" +msgctxt "COMMANDHELP" +msgid "list the people you follow" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscribers" +msgctxt "COMMANDHELP" +msgid "list the people that follow you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "leave " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "unsubscribe from user" +msgstr "Ne plus suivre cet utilisateur" + +#. TRANS: Help message for IM/SMS command "d " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "direct message to user" +msgstr "Messages directs envoyés à %s" + +#. TRANS: Help message for IM/SMS command "get " +msgctxt "COMMANDHELP" +msgid "get last notice from user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "whois " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "get profile info on user" +msgstr "Information de profil" + +#. TRANS: Help message for IM/SMS command "lose " +msgctxt "COMMANDHELP" +msgid "force user to stop following you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav " +msgctxt "COMMANDHELP" +msgid "add user's last notice as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav #" +msgctxt "COMMANDHELP" +msgid "add notice with the given id as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat #" +msgctxt "COMMANDHELP" +msgid "repeat a notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "repeat the last notice from user" +msgstr "Reprendre cet avis" + +#. TRANS: Help message for IM/SMS command "reply #" +msgctxt "COMMANDHELP" +msgid "reply to notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "reply " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "reply to the last notice from user" +msgstr "Répondre à cet avis" + +#. TRANS: Help message for IM/SMS command "join " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "join group" +msgstr "Inconnu" + +#. TRANS: Help message for IM/SMS command "login" +msgctxt "COMMANDHELP" +msgid "Get a link to login to the web interface" +msgstr "" + +#. TRANS: Help message for IM/SMS command "drop " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "leave group" +msgstr "Supprimer le groupe" + +#. TRANS: Help message for IM/SMS command "stats" +msgctxt "COMMANDHELP" +msgid "get your stats" +msgstr "" + +#. TRANS: Help message for IM/SMS command "stop" +#. TRANS: Help message for IM/SMS command "quit" +msgctxt "COMMANDHELP" +msgid "same as 'off'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "sub " +msgctxt "COMMANDHELP" +msgid "same as 'follow'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "unsub " +msgctxt "COMMANDHELP" +msgid "same as 'leave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "last " +msgctxt "COMMANDHELP" +msgid "same as 'get'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "on " +#. TRANS: Help message for IM/SMS command "off " +#. TRANS: Help message for IM/SMS command "invite " +#. TRANS: Help message for IM/SMS command "track " +#. TRANS: Help message for IM/SMS command "untrack " +#. TRANS: Help message for IM/SMS command "track off" +#. TRANS: Help message for IM/SMS command "untrack all" +#. TRANS: Help message for IM/SMS command "tracks" +#. TRANS: Help message for IM/SMS command "tracking" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "not yet implemented." +msgstr "Cette commande n’a pas encore été implémentée." + +#. TRANS: Help message for IM/SMS command "nudge " +msgctxt "COMMANDHELP" +msgid "remind a user to update." msgstr "" -"Commandes :\n" -"on - activer les notifications\n" -"off - désactiver les notifications\n" -"help - montrer cette aide\n" -"follow - s’abonner à l’utilisateur\n" -"groups - lister les groupes que vous avez rejoints\n" -"subscriptions - lister les personnes que vous suivez\n" -"subscribers - lister les personnes qui vous suivent\n" -"leave - se désabonner de l’utilisateur\n" -"d - message direct à l’utilisateur\n" -"get - obtenir le dernier avis de l’utilisateur\n" -"whois - obtenir le profil de l’utilisateur\n" -"lose - forcer un utilisateur à arrêter de vous suivre\n" -"fav - ajouter de dernier avis de l’utilisateur comme favori\n" -"fav # - ajouter l’avis correspondant à l’identifiant comme " -"favori\n" -"repeat # - reprendre l’avis correspondant à l’identifiant\n" -"repeat - reprendre le dernier avis de l’utilisateur\n" -"reply # - répondre à l’avis correspondant à l’identifiant\n" -"reply - répondre au dernier avis de l’utilisateur\n" -"join - rejoindre le groupe\n" -"login - Obtenir un lien pour s’identifier sur l’interface web\n" -"drop - quitter le groupe\n" -"stats - obtenir vos statistiques\n" -"stop - même effet que 'off'\n" -"quit - même effet que 'off'\n" -"sub - même effet que 'follow'\n" -"unsub - même effet que 'leave'\n" -"last - même effet que 'get'\n" -"on - pas encore implémenté.\n" -"off - pas encore implémenté.\n" -"nudge - envoyer un clin d’œil à l’utilisateur.\n" -"invite - pas encore implémenté.\n" -"track - pas encore implémenté.\n" -"untrack - pas encore implémenté.\n" -"track off - pas encore implémenté.\n" -"untrack all - pas encore implémenté.\n" -"tracks - pas encore implémenté.\n" -"tracking - pas encore implémenté.\n" #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. msgid "No configuration file found." @@ -7139,6 +7258,9 @@ msgstr "" "Emplacement du groupe, s’il y a lieu, de la forme « Ville, État (ou région), " "pays »" +msgid "Aliases" +msgstr "Alias" + #, php-format msgid "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " @@ -7220,6 +7342,10 @@ msgctxt "TOOLTIP" msgid "Add or edit %s design" msgstr "Ajouter ou modifier l’apparence du groupe « %s »" +#. TRANS: Group actions header (h2). Text hidden by default. +msgid "Group actions" +msgstr "Actions du groupe" + #. TRANS: Title for groups with the most members section. msgid "Groups with most members" msgstr "Groupes avec le plus de membres" @@ -7794,6 +7920,7 @@ msgstr "Envoyer un avis" msgid "What's up, %s?" msgstr "Quoi de neuf, %s ?" +#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Attacher" @@ -8255,52 +8382,6 @@ msgstr "Désabonnement" msgid "User %1$s (%2$d) has no profile record." msgstr "L’utilisateur %1$s (%2$d) n’a pas de profil." -msgid "Edit Avatar" -msgstr "Modifier l’avatar" - -#. TRANS: H2 for user actions in a profile. -#. TRANS: H2 for entity actions in a profile. -msgid "User actions" -msgstr "Actions de l’utilisateur" - -#. TRANS: Text shown in user profile of not yet compeltely deleted users. -msgid "User deletion in progress..." -msgstr "Suppression de l'utilisateur en cours..." - -#. TRANS: Link title for link on user profile. -msgid "Edit profile settings" -msgstr "Modifier les paramètres du profil" - -#. TRANS: Link text for link on user profile. -msgid "Edit" -msgstr "Modifier" - -#. TRANS: Link title for link on user profile. -msgid "Send a direct message to this user" -msgstr "Envoyer un message à cet utilisateur" - -#. TRANS: Link text for link on user profile. -msgid "Message" -msgstr "Message" - -#. TRANS: Label text on user profile to select a user role. -msgid "Moderate" -msgstr "Modérer" - -#. TRANS: Label text on user profile to select a user role. -msgid "User role" -msgstr "Rôle de l'utilisateur" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Administrator" -msgstr "Administrateur" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Moderator" -msgstr "Modérateur" - #, fuzzy msgid "Not allowed to log in." msgstr "Non connecté." @@ -8376,3 +8457,89 @@ msgstr "XML invalide, racine XRD manquante." #, php-format msgid "Getting backup from file '%s'." msgstr "Obtention de la sauvegarde depuis le fichier « %s »." + +#~ msgid "Note" +#~ msgstr "Note" + +#~ msgid "" +#~ "Commands:\n" +#~ "on - turn on notifications\n" +#~ "off - turn off notifications\n" +#~ "help - show this help\n" +#~ "follow - subscribe to user\n" +#~ "groups - lists the groups you have joined\n" +#~ "subscriptions - list the people you follow\n" +#~ "subscribers - list the people that follow you\n" +#~ "leave - unsubscribe from user\n" +#~ "d - direct message to user\n" +#~ "get - get last notice from user\n" +#~ "whois - get profile info on user\n" +#~ "lose - force user to stop following you\n" +#~ "fav - add user's last notice as a 'fave'\n" +#~ "fav # - add notice with the given id as a 'fave'\n" +#~ "repeat # - repeat a notice with a given id\n" +#~ "repeat - repeat the last notice from user\n" +#~ "reply # - reply to notice with a given id\n" +#~ "reply - reply to the last notice from user\n" +#~ "join - join group\n" +#~ "login - Get a link to login to the web interface\n" +#~ "drop - leave group\n" +#~ "stats - get your stats\n" +#~ "stop - same as 'off'\n" +#~ "quit - same as 'off'\n" +#~ "sub - same as 'follow'\n" +#~ "unsub - same as 'leave'\n" +#~ "last - same as 'get'\n" +#~ "on - not yet implemented.\n" +#~ "off - not yet implemented.\n" +#~ "nudge - remind a user to update.\n" +#~ "invite - not yet implemented.\n" +#~ "track - not yet implemented.\n" +#~ "untrack - not yet implemented.\n" +#~ "track off - not yet implemented.\n" +#~ "untrack all - not yet implemented.\n" +#~ "tracks - not yet implemented.\n" +#~ "tracking - not yet implemented.\n" +#~ msgstr "" +#~ "Commandes :\n" +#~ "on - activer les notifications\n" +#~ "off - désactiver les notifications\n" +#~ "help - montrer cette aide\n" +#~ "follow - s’abonner à l’utilisateur\n" +#~ "groups - lister les groupes que vous avez rejoints\n" +#~ "subscriptions - lister les personnes que vous suivez\n" +#~ "subscribers - lister les personnes qui vous suivent\n" +#~ "leave - se désabonner de l’utilisateur\n" +#~ "d - message direct à l’utilisateur\n" +#~ "get - obtenir le dernier avis de l’utilisateur\n" +#~ "whois - obtenir le profil de l’utilisateur\n" +#~ "lose - forcer un utilisateur à arrêter de vous suivre\n" +#~ "fav - ajouter de dernier avis de l’utilisateur comme favori\n" +#~ "fav # - ajouter l’avis correspondant à l’identifiant comme " +#~ "favori\n" +#~ "repeat # - reprendre l’avis correspondant à l’identifiant\n" +#~ "repeat - reprendre le dernier avis de l’utilisateur\n" +#~ "reply # - répondre à l’avis correspondant à l’identifiant\n" +#~ "reply - répondre au dernier avis de l’utilisateur\n" +#~ "join - rejoindre le groupe\n" +#~ "login - Obtenir un lien pour s’identifier sur l’interface web\n" +#~ "drop - quitter le groupe\n" +#~ "stats - obtenir vos statistiques\n" +#~ "stop - même effet que 'off'\n" +#~ "quit - même effet que 'off'\n" +#~ "sub - même effet que 'follow'\n" +#~ "unsub - même effet que 'leave'\n" +#~ "last - même effet que 'get'\n" +#~ "on - pas encore implémenté.\n" +#~ "off - pas encore implémenté.\n" +#~ "nudge - envoyer un clin d’œil à l’utilisateur.\n" +#~ "invite - pas encore implémenté.\n" +#~ "track - pas encore implémenté.\n" +#~ "untrack - pas encore implémenté.\n" +#~ "track off - pas encore implémenté.\n" +#~ "untrack all - pas encore implémenté.\n" +#~ "tracks - pas encore implémenté.\n" +#~ "tracking - pas encore implémenté.\n" + +#~ msgid "Edit Avatar" +#~ msgstr "Modifier l’avatar" diff --git a/locale/fur/LC_MESSAGES/statusnet.po b/locale/fur/LC_MESSAGES/statusnet.po index 12cca595ec..94f77eb11c 100644 --- a/locale/fur/LC_MESSAGES/statusnet.po +++ b/locale/fur/LC_MESSAGES/statusnet.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-11 18:15+0000\n" -"PO-Revision-Date: 2011-03-11 18:17:08+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:49:36+0000\n" "Language-Team: Friulian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" -"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: fur\n" "X-Message-Group: #out-statusnet-core\n" @@ -577,7 +577,7 @@ msgstr "" msgid "%s's groups" msgstr "Grups di %s" -#. TRANS: Used as subtitle in check for group membership. %1$s is a user name, %2$s is the site name. +#. TRANS: Used as subtitle in check for group membership. %1$s is the site name, %2$s is a user name. #, php-format msgid "%1$s groups %2$s is a member of." msgstr "" @@ -4441,18 +4441,6 @@ msgstr "Grup %s" msgid "%1$s group, page %2$d" msgstr "Grup %1$s, pagjine %2$d" -#. TRANS: Label for group description or group note (dt). Text hidden by default. -msgid "Note" -msgstr "Note" - -#. TRANS: Label for group aliases (dt). Text hidden by default. -msgid "Aliases" -msgstr "" - -#. TRANS: Group actions header (h2). Text hidden by default. -msgid "Group actions" -msgstr "Azions dal grup" - #. TRANS: Tooltip for feed link. %s is a group nickname. #, php-format msgid "Notice feed for %s group (RSS 1.0)" @@ -4563,6 +4551,10 @@ msgstr "Messaç di %1$s su %2$s" msgid "Notice deleted." msgstr "L'avîs al è stât eliminât." +#, fuzzy +msgid "Notice" +msgstr "Avîs" + #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #, php-format msgid "%1$s tagged %2$s" @@ -5072,7 +5064,6 @@ msgstr "" msgid "Tag %s" msgstr "Etichete %s" -#. TRANS: H2 for user profile information. msgid "User profile" msgstr "Profîl dal utent" @@ -5740,6 +5731,49 @@ msgstr "" msgid "No AtomPub API service for %s." msgstr "" +#. TRANS: H2 for user actions in a profile. +#. TRANS: H2 for entity actions in a profile. +msgid "User actions" +msgstr "Azions dal utent" + +#. TRANS: Text shown in user profile of not yet compeltely deleted users. +msgid "User deletion in progress..." +msgstr "" + +#. TRANS: Link title for link on user profile. +msgid "Edit profile settings" +msgstr "Cambie lis impuestazions dal profîl" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "Cambie" + +#. TRANS: Link title for link on user profile. +msgid "Send a direct message to this user" +msgstr "Mande un messaç diret a chest utent" + +#. TRANS: Link text for link on user profile. +msgid "Message" +msgstr "Messaç" + +#. TRANS: Label text on user profile to select a user role. +msgid "Moderate" +msgstr "" + +#. TRANS: Label text on user profile to select a user role. +msgid "User role" +msgstr "Rûl dal utent" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Administrator" +msgstr "Aministradôr" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Moderator" +msgstr "Moderatôr" + #. TRANS: Page title. %1$s is the title, %2$s is the site name. #, php-format msgid "%1$s - %2$s" @@ -6457,46 +6491,166 @@ msgid_plural "You are a member of these groups:" msgstr[0] "Tu sês un membri di chest grup:" msgstr[1] "Tu sês un membri di chescj grups:" -#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings. -msgid "" -"Commands:\n" -"on - turn on notifications\n" -"off - turn off notifications\n" -"help - show this help\n" -"follow - subscribe to user\n" -"groups - lists the groups you have joined\n" -"subscriptions - list the people you follow\n" -"subscribers - list the people that follow you\n" -"leave - unsubscribe from user\n" -"d - direct message to user\n" -"get - get last notice from user\n" -"whois - get profile info on user\n" -"lose - force user to stop following you\n" -"fav - add user's last notice as a 'fave'\n" -"fav # - add notice with the given id as a 'fave'\n" -"repeat # - repeat a notice with a given id\n" -"repeat - repeat the last notice from user\n" -"reply # - reply to notice with a given id\n" -"reply - reply to the last notice from user\n" -"join - join group\n" -"login - Get a link to login to the web interface\n" -"drop - leave group\n" -"stats - get your stats\n" -"stop - same as 'off'\n" -"quit - same as 'off'\n" -"sub - same as 'follow'\n" -"unsub - same as 'leave'\n" -"last - same as 'get'\n" -"on - not yet implemented.\n" -"off - not yet implemented.\n" -"nudge - remind a user to update.\n" -"invite - not yet implemented.\n" -"track - not yet implemented.\n" -"untrack - not yet implemented.\n" -"track off - not yet implemented.\n" -"untrack all - not yet implemented.\n" -"tracks - not yet implemented.\n" -"tracking - not yet implemented.\n" +#. TRANS: Header line of help text for commands. +msgctxt "COMMANDHELP" +msgid "Commands:" +msgstr "" + +#. TRANS: Help message for IM/SMS command "on" +msgctxt "COMMANDHELP" +msgid "turn on notifications" +msgstr "" + +#. TRANS: Help message for IM/SMS command "off" +msgctxt "COMMANDHELP" +msgid "turn off notifications" +msgstr "" + +#. TRANS: Help message for IM/SMS command "help" +msgctxt "COMMANDHELP" +msgid "show this help" +msgstr "" + +#. TRANS: Help message for IM/SMS command "follow " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "subscribe to user" +msgstr "Sotscrivimi a chest utent" + +#. TRANS: Help message for IM/SMS command "groups" +msgctxt "COMMANDHELP" +msgid "lists the groups you have joined" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscriptions" +msgctxt "COMMANDHELP" +msgid "list the people you follow" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscribers" +msgctxt "COMMANDHELP" +msgid "list the people that follow you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "leave " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "unsubscribe from user" +msgstr "No tu sês plui sotscrit a %s." + +#. TRANS: Help message for IM/SMS command "d " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "direct message to user" +msgstr "Messaçs direts par %s" + +#. TRANS: Help message for IM/SMS command "get " +msgctxt "COMMANDHELP" +msgid "get last notice from user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "whois " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "get profile info on user" +msgstr "Informazions sul profîl" + +#. TRANS: Help message for IM/SMS command "lose " +msgctxt "COMMANDHELP" +msgid "force user to stop following you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav " +msgctxt "COMMANDHELP" +msgid "add user's last notice as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav #" +msgctxt "COMMANDHELP" +msgid "add notice with the given id as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat #" +msgctxt "COMMANDHELP" +msgid "repeat a notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "repeat the last notice from user" +msgstr "Ripet chest avîs" + +#. TRANS: Help message for IM/SMS command "reply #" +msgctxt "COMMANDHELP" +msgid "reply to notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "reply " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "reply to the last notice from user" +msgstr "Rispuint a chest avîs" + +#. TRANS: Help message for IM/SMS command "join " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "join group" +msgstr "Grup %s" + +#. TRANS: Help message for IM/SMS command "login" +msgctxt "COMMANDHELP" +msgid "Get a link to login to the web interface" +msgstr "" + +#. TRANS: Help message for IM/SMS command "drop " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "leave group" +msgstr "Elimine il grup" + +#. TRANS: Help message for IM/SMS command "stats" +msgctxt "COMMANDHELP" +msgid "get your stats" +msgstr "" + +#. TRANS: Help message for IM/SMS command "stop" +#. TRANS: Help message for IM/SMS command "quit" +msgctxt "COMMANDHELP" +msgid "same as 'off'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "sub " +msgctxt "COMMANDHELP" +msgid "same as 'follow'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "unsub " +msgctxt "COMMANDHELP" +msgid "same as 'leave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "last " +msgctxt "COMMANDHELP" +msgid "same as 'get'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "on " +#. TRANS: Help message for IM/SMS command "off " +#. TRANS: Help message for IM/SMS command "invite " +#. TRANS: Help message for IM/SMS command "track " +#. TRANS: Help message for IM/SMS command "untrack " +#. TRANS: Help message for IM/SMS command "track off" +#. TRANS: Help message for IM/SMS command "untrack all" +#. TRANS: Help message for IM/SMS command "tracks" +#. TRANS: Help message for IM/SMS command "tracking" +msgctxt "COMMANDHELP" +msgid "not yet implemented." +msgstr "" + +#. TRANS: Help message for IM/SMS command "nudge " +msgctxt "COMMANDHELP" +msgid "remind a user to update." msgstr "" #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. @@ -6670,6 +6824,9 @@ msgid "" "Location for the group, if any, like \"City, State (or Region), Country\"." msgstr "Lûc dal grup, se al esist, come \"Citât, Regjon, Stât\"." +msgid "Aliases" +msgstr "" + #, php-format msgid "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " @@ -6747,6 +6904,10 @@ msgctxt "TOOLTIP" msgid "Add or edit %s design" msgstr "" +#. TRANS: Group actions header (h2). Text hidden by default. +msgid "Group actions" +msgstr "Azions dal grup" + #. TRANS: Title for groups with the most members section. msgid "Groups with most members" msgstr "Grups cun plui membris" @@ -7209,6 +7370,7 @@ msgstr "Mande un avîs" msgid "What's up, %s?" msgstr "Ce sucedial, %s?" +#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Aleghe" @@ -7667,52 +7829,6 @@ msgstr "" msgid "User %1$s (%2$d) has no profile record." msgstr "" -msgid "Edit Avatar" -msgstr "Modifiche l'avatar" - -#. TRANS: H2 for user actions in a profile. -#. TRANS: H2 for entity actions in a profile. -msgid "User actions" -msgstr "Azions dal utent" - -#. TRANS: Text shown in user profile of not yet compeltely deleted users. -msgid "User deletion in progress..." -msgstr "" - -#. TRANS: Link title for link on user profile. -msgid "Edit profile settings" -msgstr "Cambie lis impuestazions dal profîl" - -#. TRANS: Link text for link on user profile. -msgid "Edit" -msgstr "Cambie" - -#. TRANS: Link title for link on user profile. -msgid "Send a direct message to this user" -msgstr "Mande un messaç diret a chest utent" - -#. TRANS: Link text for link on user profile. -msgid "Message" -msgstr "Messaç" - -#. TRANS: Label text on user profile to select a user role. -msgid "Moderate" -msgstr "" - -#. TRANS: Label text on user profile to select a user role. -msgid "User role" -msgstr "Rûl dal utent" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Administrator" -msgstr "Aministradôr" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Moderator" -msgstr "Moderatôr" - #, fuzzy msgid "Not allowed to log in." msgstr "No tu sês jentrât." @@ -7787,3 +7903,9 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" + +#~ msgid "Note" +#~ msgstr "Note" + +#~ msgid "Edit Avatar" +#~ msgstr "Modifiche l'avatar" diff --git a/locale/gl/LC_MESSAGES/statusnet.po b/locale/gl/LC_MESSAGES/statusnet.po index f189cd13b7..98903771ff 100644 --- a/locale/gl/LC_MESSAGES/statusnet.po +++ b/locale/gl/LC_MESSAGES/statusnet.po @@ -12,17 +12,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-11 18:15+0000\n" -"PO-Revision-Date: 2011-03-11 18:17:09+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:49:37+0000\n" "Language-Team: Galician \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: gl\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" +"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -593,7 +593,7 @@ msgstr "O usuario %1$s non se puido eliminar do grupo %2$s." msgid "%s's groups" msgstr "Os grupos de %s" -#. TRANS: Used as subtitle in check for group membership. %1$s is a user name, %2$s is the site name. +#. TRANS: Used as subtitle in check for group membership. %1$s is the site name, %2$s is a user name. #, php-format msgid "%1$s groups %2$s is a member of." msgstr "Grupos de %1$s aos que pertence %2$s." @@ -4739,18 +4739,6 @@ msgstr "Grupo %s" msgid "%1$s group, page %2$d" msgstr "Grupo %1$s, páxina %2$d" -#. TRANS: Label for group description or group note (dt). Text hidden by default. -msgid "Note" -msgstr "Nota" - -#. TRANS: Label for group aliases (dt). Text hidden by default. -msgid "Aliases" -msgstr "Pseudónimos" - -#. TRANS: Group actions header (h2). Text hidden by default. -msgid "Group actions" -msgstr "Accións do grupo" - #. TRANS: Tooltip for feed link. %s is a group nickname. #, php-format msgid "Notice feed for %s group (RSS 1.0)" @@ -4862,6 +4850,10 @@ msgstr "Mensaxe de %1$s en %2$s" msgid "Notice deleted." msgstr "Borrouse a nota." +#, fuzzy +msgid "Notice" +msgstr "Notas" + #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #, fuzzy, php-format msgid "%1$s tagged %2$s" @@ -5402,7 +5394,6 @@ msgstr "Sen argumento ID." msgid "Tag %s" msgstr "Etiqueta %s" -#. TRANS: H2 for user profile information. msgid "User profile" msgstr "Perfil do usuario" @@ -6126,6 +6117,49 @@ msgstr "" msgid "No AtomPub API service for %s." msgstr "" +#. TRANS: H2 for user actions in a profile. +#. TRANS: H2 for entity actions in a profile. +msgid "User actions" +msgstr "Accións do usuario" + +#. TRANS: Text shown in user profile of not yet compeltely deleted users. +msgid "User deletion in progress..." +msgstr "Procedendo a borrar o usuario..." + +#. TRANS: Link title for link on user profile. +msgid "Edit profile settings" +msgstr "Modificar a configuración do perfil" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "Modificar" + +#. TRANS: Link title for link on user profile. +msgid "Send a direct message to this user" +msgstr "Enviarlle unha mensaxe directa a este usuario" + +#. TRANS: Link text for link on user profile. +msgid "Message" +msgstr "Mensaxe" + +#. TRANS: Label text on user profile to select a user role. +msgid "Moderate" +msgstr "Moderar" + +#. TRANS: Label text on user profile to select a user role. +msgid "User role" +msgstr "Rol do usuario" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Administrator" +msgstr "Administrador" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Moderator" +msgstr "Moderador" + #. TRANS: Page title. %1$s is the title, %2$s is the site name. #, php-format msgid "%1$s - %2$s" @@ -6865,85 +6899,171 @@ msgid_plural "You are a member of these groups:" msgstr[0] "Vostede pertence a este grupo:" msgstr[1] "Vostede pertence a estes grupos:" -#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings. -msgid "" -"Commands:\n" -"on - turn on notifications\n" -"off - turn off notifications\n" -"help - show this help\n" -"follow - subscribe to user\n" -"groups - lists the groups you have joined\n" -"subscriptions - list the people you follow\n" -"subscribers - list the people that follow you\n" -"leave - unsubscribe from user\n" -"d - direct message to user\n" -"get - get last notice from user\n" -"whois - get profile info on user\n" -"lose - force user to stop following you\n" -"fav - add user's last notice as a 'fave'\n" -"fav # - add notice with the given id as a 'fave'\n" -"repeat # - repeat a notice with a given id\n" -"repeat - repeat the last notice from user\n" -"reply # - reply to notice with a given id\n" -"reply - reply to the last notice from user\n" -"join - join group\n" -"login - Get a link to login to the web interface\n" -"drop - leave group\n" -"stats - get your stats\n" -"stop - same as 'off'\n" -"quit - same as 'off'\n" -"sub - same as 'follow'\n" -"unsub - same as 'leave'\n" -"last - same as 'get'\n" -"on - not yet implemented.\n" -"off - not yet implemented.\n" -"nudge - remind a user to update.\n" -"invite - not yet implemented.\n" -"track - not yet implemented.\n" -"untrack - not yet implemented.\n" -"track off - not yet implemented.\n" -"untrack all - not yet implemented.\n" -"tracks - not yet implemented.\n" -"tracking - not yet implemented.\n" +#. TRANS: Header line of help text for commands. +#, fuzzy +msgctxt "COMMANDHELP" +msgid "Commands:" +msgstr "Resultados da orde" + +#. TRANS: Help message for IM/SMS command "on" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn on notifications" +msgstr "Non se pode activar a notificación." + +#. TRANS: Help message for IM/SMS command "off" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn off notifications" +msgstr "Non se pode desactivar a notificación." + +#. TRANS: Help message for IM/SMS command "help" +msgctxt "COMMANDHELP" +msgid "show this help" +msgstr "" + +#. TRANS: Help message for IM/SMS command "follow " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "subscribe to user" +msgstr "Subscribirse a este usuario" + +#. TRANS: Help message for IM/SMS command "groups" +msgctxt "COMMANDHELP" +msgid "lists the groups you have joined" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscriptions" +msgctxt "COMMANDHELP" +msgid "list the people you follow" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscribers" +msgctxt "COMMANDHELP" +msgid "list the people that follow you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "leave " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "unsubscribe from user" +msgstr "Cancelar a subscrición a este usuario" + +#. TRANS: Help message for IM/SMS command "d " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "direct message to user" +msgstr "Mensaxes directas a %s" + +#. TRANS: Help message for IM/SMS command "get " +msgctxt "COMMANDHELP" +msgid "get last notice from user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "whois " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "get profile info on user" +msgstr "Información do perfil" + +#. TRANS: Help message for IM/SMS command "lose " +msgctxt "COMMANDHELP" +msgid "force user to stop following you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav " +msgctxt "COMMANDHELP" +msgid "add user's last notice as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav #" +msgctxt "COMMANDHELP" +msgid "add notice with the given id as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat #" +msgctxt "COMMANDHELP" +msgid "repeat a notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "repeat the last notice from user" +msgstr "Repetir esta nota" + +#. TRANS: Help message for IM/SMS command "reply #" +msgctxt "COMMANDHELP" +msgid "reply to notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "reply " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "reply to the last notice from user" +msgstr "Responder a esta nota" + +#. TRANS: Help message for IM/SMS command "join " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "join group" +msgstr "Descoñecida" + +#. TRANS: Help message for IM/SMS command "login" +msgctxt "COMMANDHELP" +msgid "Get a link to login to the web interface" +msgstr "" + +#. TRANS: Help message for IM/SMS command "drop " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "leave group" +msgstr "Borrar un grupo" + +#. TRANS: Help message for IM/SMS command "stats" +msgctxt "COMMANDHELP" +msgid "get your stats" +msgstr "" + +#. TRANS: Help message for IM/SMS command "stop" +#. TRANS: Help message for IM/SMS command "quit" +msgctxt "COMMANDHELP" +msgid "same as 'off'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "sub " +msgctxt "COMMANDHELP" +msgid "same as 'follow'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "unsub " +msgctxt "COMMANDHELP" +msgid "same as 'leave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "last " +msgctxt "COMMANDHELP" +msgid "same as 'get'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "on " +#. TRANS: Help message for IM/SMS command "off " +#. TRANS: Help message for IM/SMS command "invite " +#. TRANS: Help message for IM/SMS command "track " +#. TRANS: Help message for IM/SMS command "untrack " +#. TRANS: Help message for IM/SMS command "track off" +#. TRANS: Help message for IM/SMS command "untrack all" +#. TRANS: Help message for IM/SMS command "tracks" +#. TRANS: Help message for IM/SMS command "tracking" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "not yet implemented." +msgstr "Aínda non se integrou esa orde." + +#. TRANS: Help message for IM/SMS command "nudge " +msgctxt "COMMANDHELP" +msgid "remind a user to update." msgstr "" -"Ordes:\n" -"on - activa as notificacións\n" -"off - desactiva as notificacións\n" -"help - amosa esta axuda\n" -"follow - subscribirse ao usuario\n" -"groups - lista os grupos nos que está\n" -"subscriptions - lista a xente á que segue\n" -"subscribers - lista a xente que o segue\n" -"leave - cancela a subscrición ao usuario\n" -"d - mensaxe directa a un usuario\n" -"get - obter a última nota do usuario\n" -"whois - obtén a información do perfil do usuario\n" -"lose - facer que o usuario deixe de seguilo\n" -"fav - marcar como \"favorita\" a última nota do usuario\n" -"fav # - marcar como \"favorita\" a nota coa id indicada\n" -"repeat # - repetir a nota doa id indicada\n" -"repeat - repetir a última nota do usuario\n" -"reply # - responder a unha nota coa id indicada\n" -"reply - responder á última nota do usuario\n" -"join - unirse ao grupo indicado\n" -"login - obter un enderezo para identificarse na interface web\n" -"drop - deixar o grupo indicado\n" -"stats - obter as súas estatísticas\n" -"stop - idéntico a \"off\"\n" -"quit - idéntico a \"off\"\n" -"sub - idéntico a \"follow\"\n" -"unsub - idéntico a \"leave\"\n" -"last - idéntico a \"get\"\n" -"on - aínda non se integrou\n" -"off - aínda non se integrou\n" -"nudge - facerlle un aceno ao usuario indicado\n" -"invite - aínda non se integrou\n" -"track - aínda non se integrou\n" -"untrack - aínda non se integrou\n" -"track off - aínda non se integrou\n" -"untrack all - aínda non se integrou\n" -"tracks - aínda non se integrou\n" -"tracking - aínda non se integrou\n" #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. #, fuzzy @@ -7130,6 +7250,9 @@ msgstr "" "Localidade do grupo, se a ten, como por exemplo \"Cidade, Provincia, " "Comunidade, País\"" +msgid "Aliases" +msgstr "Pseudónimos" + #, fuzzy, php-format msgid "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " @@ -7211,6 +7334,10 @@ msgctxt "TOOLTIP" msgid "Add or edit %s design" msgstr "Engadir ou modificar o deseño de %s" +#. TRANS: Group actions header (h2). Text hidden by default. +msgid "Group actions" +msgstr "Accións do grupo" + #. TRANS: Title for groups with the most members section. msgid "Groups with most members" msgstr "Grupos con máis membros" @@ -7781,6 +7908,7 @@ msgstr "Enviar unha nota" msgid "What's up, %s?" msgstr "Que hai de novo, %s?" +#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Anexar" @@ -8248,52 +8376,6 @@ msgstr "Cancelar a subscrición" msgid "User %1$s (%2$d) has no profile record." msgstr "O usuario %1$s (%2$d) non ten perfil." -msgid "Edit Avatar" -msgstr "Modificar o avatar" - -#. TRANS: H2 for user actions in a profile. -#. TRANS: H2 for entity actions in a profile. -msgid "User actions" -msgstr "Accións do usuario" - -#. TRANS: Text shown in user profile of not yet compeltely deleted users. -msgid "User deletion in progress..." -msgstr "Procedendo a borrar o usuario..." - -#. TRANS: Link title for link on user profile. -msgid "Edit profile settings" -msgstr "Modificar a configuración do perfil" - -#. TRANS: Link text for link on user profile. -msgid "Edit" -msgstr "Modificar" - -#. TRANS: Link title for link on user profile. -msgid "Send a direct message to this user" -msgstr "Enviarlle unha mensaxe directa a este usuario" - -#. TRANS: Link text for link on user profile. -msgid "Message" -msgstr "Mensaxe" - -#. TRANS: Label text on user profile to select a user role. -msgid "Moderate" -msgstr "Moderar" - -#. TRANS: Label text on user profile to select a user role. -msgid "User role" -msgstr "Rol do usuario" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Administrator" -msgstr "Administrador" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Moderator" -msgstr "Moderador" - #, fuzzy msgid "Not allowed to log in." msgstr "Non iniciou sesión." @@ -8369,3 +8451,88 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" + +#~ msgid "Note" +#~ msgstr "Nota" + +#~ msgid "" +#~ "Commands:\n" +#~ "on - turn on notifications\n" +#~ "off - turn off notifications\n" +#~ "help - show this help\n" +#~ "follow - subscribe to user\n" +#~ "groups - lists the groups you have joined\n" +#~ "subscriptions - list the people you follow\n" +#~ "subscribers - list the people that follow you\n" +#~ "leave - unsubscribe from user\n" +#~ "d - direct message to user\n" +#~ "get - get last notice from user\n" +#~ "whois - get profile info on user\n" +#~ "lose - force user to stop following you\n" +#~ "fav - add user's last notice as a 'fave'\n" +#~ "fav # - add notice with the given id as a 'fave'\n" +#~ "repeat # - repeat a notice with a given id\n" +#~ "repeat - repeat the last notice from user\n" +#~ "reply # - reply to notice with a given id\n" +#~ "reply - reply to the last notice from user\n" +#~ "join - join group\n" +#~ "login - Get a link to login to the web interface\n" +#~ "drop - leave group\n" +#~ "stats - get your stats\n" +#~ "stop - same as 'off'\n" +#~ "quit - same as 'off'\n" +#~ "sub - same as 'follow'\n" +#~ "unsub - same as 'leave'\n" +#~ "last - same as 'get'\n" +#~ "on - not yet implemented.\n" +#~ "off - not yet implemented.\n" +#~ "nudge - remind a user to update.\n" +#~ "invite - not yet implemented.\n" +#~ "track - not yet implemented.\n" +#~ "untrack - not yet implemented.\n" +#~ "track off - not yet implemented.\n" +#~ "untrack all - not yet implemented.\n" +#~ "tracks - not yet implemented.\n" +#~ "tracking - not yet implemented.\n" +#~ msgstr "" +#~ "Ordes:\n" +#~ "on - activa as notificacións\n" +#~ "off - desactiva as notificacións\n" +#~ "help - amosa esta axuda\n" +#~ "follow - subscribirse ao usuario\n" +#~ "groups - lista os grupos nos que está\n" +#~ "subscriptions - lista a xente á que segue\n" +#~ "subscribers - lista a xente que o segue\n" +#~ "leave - cancela a subscrición ao usuario\n" +#~ "d - mensaxe directa a un usuario\n" +#~ "get - obter a última nota do usuario\n" +#~ "whois - obtén a información do perfil do usuario\n" +#~ "lose - facer que o usuario deixe de seguilo\n" +#~ "fav - marcar como \"favorita\" a última nota do usuario\n" +#~ "fav # - marcar como \"favorita\" a nota coa id indicada\n" +#~ "repeat # - repetir a nota doa id indicada\n" +#~ "repeat - repetir a última nota do usuario\n" +#~ "reply # - responder a unha nota coa id indicada\n" +#~ "reply - responder á última nota do usuario\n" +#~ "join - unirse ao grupo indicado\n" +#~ "login - obter un enderezo para identificarse na interface web\n" +#~ "drop - deixar o grupo indicado\n" +#~ "stats - obter as súas estatísticas\n" +#~ "stop - idéntico a \"off\"\n" +#~ "quit - idéntico a \"off\"\n" +#~ "sub - idéntico a \"follow\"\n" +#~ "unsub - idéntico a \"leave\"\n" +#~ "last - idéntico a \"get\"\n" +#~ "on - aínda non se integrou\n" +#~ "off - aínda non se integrou\n" +#~ "nudge - facerlle un aceno ao usuario indicado\n" +#~ "invite - aínda non se integrou\n" +#~ "track - aínda non se integrou\n" +#~ "untrack - aínda non se integrou\n" +#~ "track off - aínda non se integrou\n" +#~ "untrack all - aínda non se integrou\n" +#~ "tracks - aínda non se integrou\n" +#~ "tracking - aínda non se integrou\n" + +#~ msgid "Edit Avatar" +#~ msgstr "Modificar o avatar" diff --git a/locale/hsb/LC_MESSAGES/statusnet.po b/locale/hsb/LC_MESSAGES/statusnet.po index c878043d4b..c61a1d5452 100644 --- a/locale/hsb/LC_MESSAGES/statusnet.po +++ b/locale/hsb/LC_MESSAGES/statusnet.po @@ -11,18 +11,18 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-11 18:15+0000\n" -"PO-Revision-Date: 2011-03-11 18:17:10+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:49:39+0000\n" "Language-Team: Upper Sorbian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: hsb\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : (n%100==3 || " "n%100==4) ? 2 : 3)\n" -"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" +"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -588,7 +588,7 @@ msgstr "Njebě móžno wužiwarja %1$s ze skupiny %2$s wotstronić." msgid "%s's groups" msgstr "Skupiny wužiwarja %s" -#. TRANS: Used as subtitle in check for group membership. %1$s is a user name, %2$s is the site name. +#. TRANS: Used as subtitle in check for group membership. %1$s is the site name, %2$s is a user name. #, php-format msgid "%1$s groups %2$s is a member of." msgstr "Skupiny na %1$s, w kotrychž wužiwar %2$s je čłon." @@ -1027,7 +1027,6 @@ msgid "Can only fave notices." msgstr "Jenož zdźělenki dadźa so jako fawority składować." #. TRANS: Client exception thrown when trying favorite a notice without content. -#, fuzzy msgid "Unknown notice." msgstr "Njeznata notica." @@ -4455,18 +4454,6 @@ msgstr "skupina %s" msgid "%1$s group, page %2$d" msgstr "%1$s skupina, strona %2$d" -#. TRANS: Label for group description or group note (dt). Text hidden by default. -msgid "Note" -msgstr "Přispomnjenka" - -#. TRANS: Label for group aliases (dt). Text hidden by default. -msgid "Aliases" -msgstr "Aliasy" - -#. TRANS: Group actions header (h2). Text hidden by default. -msgid "Group actions" -msgstr "Skupinske akcije" - #. TRANS: Tooltip for feed link. %s is a group nickname. #, php-format msgid "Notice feed for %s group (RSS 1.0)" @@ -4567,6 +4554,10 @@ msgstr "Powěsć wot %1$s na %2$s" msgid "Notice deleted." msgstr "Zdźělenka zničena." +#, fuzzy +msgid "Notice" +msgstr "Zdźělenki" + #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #, php-format msgid "%1$s tagged %2$s" @@ -5068,7 +5059,6 @@ msgstr "Žadyn argument ID." msgid "Tag %s" msgstr "" -#. TRANS: H2 for user profile information. msgid "User profile" msgstr "Wužiwarski profil" @@ -5742,6 +5732,49 @@ msgstr "XRD za %s njeda so namakać." msgid "No AtomPub API service for %s." msgstr "Žana słužba AtomPub API za %s." +#. TRANS: H2 for user actions in a profile. +#. TRANS: H2 for entity actions in a profile. +msgid "User actions" +msgstr "Wužiwarske akcije" + +#. TRANS: Text shown in user profile of not yet compeltely deleted users. +msgid "User deletion in progress..." +msgstr "Wužiwar so haša..." + +#. TRANS: Link title for link on user profile. +msgid "Edit profile settings" +msgstr "Profilowe nastajenja wobdźěłać" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "Wobdźěłać" + +#. TRANS: Link title for link on user profile. +msgid "Send a direct message to this user" +msgstr "Tutomu wužiwarja direktnu powěsć pósłać" + +#. TRANS: Link text for link on user profile. +msgid "Message" +msgstr "Powěsć" + +#. TRANS: Label text on user profile to select a user role. +msgid "Moderate" +msgstr "Moderěrować" + +#. TRANS: Label text on user profile to select a user role. +msgid "User role" +msgstr "Wužiwarska róla" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Administrator" +msgstr "Administrator" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Moderator" +msgstr "Moderator" + #. TRANS: Page title. %1$s is the title, %2$s is the site name. #, php-format msgid "%1$s - %2$s" @@ -6469,46 +6502,170 @@ msgstr[1] "Sy čłon tuteju skupinow:" msgstr[2] "Sy čłon tutych skupinow:" msgstr[3] "Sy čłon tutych skupinow:" -#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings. -msgid "" -"Commands:\n" -"on - turn on notifications\n" -"off - turn off notifications\n" -"help - show this help\n" -"follow - subscribe to user\n" -"groups - lists the groups you have joined\n" -"subscriptions - list the people you follow\n" -"subscribers - list the people that follow you\n" -"leave - unsubscribe from user\n" -"d - direct message to user\n" -"get - get last notice from user\n" -"whois - get profile info on user\n" -"lose - force user to stop following you\n" -"fav - add user's last notice as a 'fave'\n" -"fav # - add notice with the given id as a 'fave'\n" -"repeat # - repeat a notice with a given id\n" -"repeat - repeat the last notice from user\n" -"reply # - reply to notice with a given id\n" -"reply - reply to the last notice from user\n" -"join - join group\n" -"login - Get a link to login to the web interface\n" -"drop - leave group\n" -"stats - get your stats\n" -"stop - same as 'off'\n" -"quit - same as 'off'\n" -"sub - same as 'follow'\n" -"unsub - same as 'leave'\n" -"last - same as 'get'\n" -"on - not yet implemented.\n" -"off - not yet implemented.\n" -"nudge - remind a user to update.\n" -"invite - not yet implemented.\n" -"track - not yet implemented.\n" -"untrack - not yet implemented.\n" -"track off - not yet implemented.\n" -"untrack all - not yet implemented.\n" -"tracks - not yet implemented.\n" -"tracking - not yet implemented.\n" +#. TRANS: Header line of help text for commands. +#, fuzzy +msgctxt "COMMANDHELP" +msgid "Commands:" +msgstr "Přikazowe wuslědki" + +#. TRANS: Help message for IM/SMS command "on" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn on notifications" +msgstr "Zdźělenje njeda so zmóžnić." + +#. TRANS: Help message for IM/SMS command "off" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn off notifications" +msgstr "Zdźělenje njeda so znjemóžnić." + +#. TRANS: Help message for IM/SMS command "help" +msgctxt "COMMANDHELP" +msgid "show this help" +msgstr "" + +#. TRANS: Help message for IM/SMS command "follow " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "subscribe to user" +msgstr "Tutoho wužiwarja abonować" + +#. TRANS: Help message for IM/SMS command "groups" +msgctxt "COMMANDHELP" +msgid "lists the groups you have joined" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscriptions" +msgctxt "COMMANDHELP" +msgid "list the people you follow" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscribers" +msgctxt "COMMANDHELP" +msgid "list the people that follow you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "leave " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "unsubscribe from user" +msgstr "Tutoho wužiwarja wotskazać" + +#. TRANS: Help message for IM/SMS command "d " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "direct message to user" +msgstr "Direktne powěsće do %s" + +#. TRANS: Help message for IM/SMS command "get " +msgctxt "COMMANDHELP" +msgid "get last notice from user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "whois " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "get profile info on user" +msgstr "Zdaleny profil skupina njeje!" + +#. TRANS: Help message for IM/SMS command "lose " +msgctxt "COMMANDHELP" +msgid "force user to stop following you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav " +msgctxt "COMMANDHELP" +msgid "add user's last notice as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav #" +msgctxt "COMMANDHELP" +msgid "add notice with the given id as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat #" +msgctxt "COMMANDHELP" +msgid "repeat a notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "repeat the last notice from user" +msgstr "Tutu zdźělenku wospjetować" + +#. TRANS: Help message for IM/SMS command "reply #" +msgctxt "COMMANDHELP" +msgid "reply to notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "reply " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "reply to the last notice from user" +msgstr "Na tutu zdźělenku wotmołwić" + +#. TRANS: Help message for IM/SMS command "join " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "join group" +msgstr "Njeznata skupina" + +#. TRANS: Help message for IM/SMS command "login" +msgctxt "COMMANDHELP" +msgid "Get a link to login to the web interface" +msgstr "" + +#. TRANS: Help message for IM/SMS command "drop " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "leave group" +msgstr "Skupinu zhašeć" + +#. TRANS: Help message for IM/SMS command "stats" +msgctxt "COMMANDHELP" +msgid "get your stats" +msgstr "" + +#. TRANS: Help message for IM/SMS command "stop" +#. TRANS: Help message for IM/SMS command "quit" +msgctxt "COMMANDHELP" +msgid "same as 'off'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "sub " +msgctxt "COMMANDHELP" +msgid "same as 'follow'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "unsub " +msgctxt "COMMANDHELP" +msgid "same as 'leave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "last " +msgctxt "COMMANDHELP" +msgid "same as 'get'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "on " +#. TRANS: Help message for IM/SMS command "off " +#. TRANS: Help message for IM/SMS command "invite " +#. TRANS: Help message for IM/SMS command "track " +#. TRANS: Help message for IM/SMS command "untrack " +#. TRANS: Help message for IM/SMS command "track off" +#. TRANS: Help message for IM/SMS command "untrack all" +#. TRANS: Help message for IM/SMS command "tracks" +#. TRANS: Help message for IM/SMS command "tracking" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "not yet implemented." +msgstr "Přikaz hišće njeimplementowany." + +#. TRANS: Help message for IM/SMS command "nudge " +msgctxt "COMMANDHELP" +msgid "remind a user to update." msgstr "" #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. @@ -6689,6 +6846,9 @@ msgstr "" "Městno za skupinu, jeli eksistuje, na př. \"město, zwjazkowy kraj (abo " "region), kraj\"." +msgid "Aliases" +msgstr "Aliasy" + #, php-format msgid "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " @@ -6768,6 +6928,10 @@ msgctxt "TOOLTIP" msgid "Add or edit %s design" msgstr "Design skupiny %s přidać abo wobdźěłać" +#. TRANS: Group actions header (h2). Text hidden by default. +msgid "Group actions" +msgstr "Skupinske akcije" + #. TRANS: Title for groups with the most members section. msgid "Groups with most members" msgstr "Skupiny z najwjace čłonami" @@ -7249,6 +7413,7 @@ msgstr "Zdźělenku pósłać" msgid "What's up, %s?" msgstr "Što je, %s?" +#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Připowěsnyć" @@ -7707,52 +7872,6 @@ msgstr "Wotskazać" msgid "User %1$s (%2$d) has no profile record." msgstr "Wužiwar %1$s (%2$d) nima profilowu datowu sadźbu." -msgid "Edit Avatar" -msgstr "Awatar wobdźěłać" - -#. TRANS: H2 for user actions in a profile. -#. TRANS: H2 for entity actions in a profile. -msgid "User actions" -msgstr "Wužiwarske akcije" - -#. TRANS: Text shown in user profile of not yet compeltely deleted users. -msgid "User deletion in progress..." -msgstr "Wužiwar so haša..." - -#. TRANS: Link title for link on user profile. -msgid "Edit profile settings" -msgstr "Profilowe nastajenja wobdźěłać" - -#. TRANS: Link text for link on user profile. -msgid "Edit" -msgstr "Wobdźěłać" - -#. TRANS: Link title for link on user profile. -msgid "Send a direct message to this user" -msgstr "Tutomu wužiwarja direktnu powěsć pósłać" - -#. TRANS: Link text for link on user profile. -msgid "Message" -msgstr "Powěsć" - -#. TRANS: Label text on user profile to select a user role. -msgid "Moderate" -msgstr "Moderěrować" - -#. TRANS: Label text on user profile to select a user role. -msgid "User role" -msgstr "Wužiwarska róla" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Administrator" -msgstr "Administrator" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Moderator" -msgstr "Moderator" - msgid "Not allowed to log in." msgstr "Přizjewjenje njedowolene." @@ -7836,3 +7955,9 @@ msgstr "Njepłaćiwy XML, korjeń XRD faluje." #, php-format msgid "Getting backup from file '%s'." msgstr "Wobstaruje so zawěsćenje z dataje \"%s\"-" + +#~ msgid "Note" +#~ msgstr "Přispomnjenka" + +#~ msgid "Edit Avatar" +#~ msgstr "Awatar wobdźěłać" diff --git a/locale/hu/LC_MESSAGES/statusnet.po b/locale/hu/LC_MESSAGES/statusnet.po index f05265f38e..a3515effa3 100644 --- a/locale/hu/LC_MESSAGES/statusnet.po +++ b/locale/hu/LC_MESSAGES/statusnet.po @@ -12,13 +12,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-11 18:15+0000\n" -"PO-Revision-Date: 2011-03-11 18:17:11+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:49:40+0000\n" "Language-Team: Hungarian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" -"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: hu\n" "X-Message-Group: #out-statusnet-core\n" @@ -591,7 +591,7 @@ msgstr "Nem sikerült %1$s felhasználót eltávolítani a %2$s csoportból." msgid "%s's groups" msgstr "%s csoportjai" -#. TRANS: Used as subtitle in check for group membership. %1$s is a user name, %2$s is the site name. +#. TRANS: Used as subtitle in check for group membership. %1$s is the site name, %2$s is a user name. #, php-format msgid "%1$s groups %2$s is a member of." msgstr "" @@ -4586,18 +4586,6 @@ msgstr "%s csoport" msgid "%1$s group, page %2$d" msgstr "%1$s csoport, %2$d. oldal" -#. TRANS: Label for group description or group note (dt). Text hidden by default. -msgid "Note" -msgstr "Megjegyzés" - -#. TRANS: Label for group aliases (dt). Text hidden by default. -msgid "Aliases" -msgstr "Álnevek" - -#. TRANS: Group actions header (h2). Text hidden by default. -msgid "Group actions" -msgstr "Csoport-tevékenységek" - #. TRANS: Tooltip for feed link. %s is a group nickname. #, php-format msgid "Notice feed for %s group (RSS 1.0)" @@ -4706,6 +4694,10 @@ msgstr "" msgid "Notice deleted." msgstr "A hírt töröltük." +#, fuzzy +msgid "Notice" +msgstr "Hírek" + #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #, fuzzy, php-format msgid "%1$s tagged %2$s" @@ -5214,7 +5206,6 @@ msgstr "" msgid "Tag %s" msgstr "" -#. TRANS: H2 for user profile information. msgid "User profile" msgstr "Felhasználói profil" @@ -5888,6 +5879,49 @@ msgstr "" msgid "No AtomPub API service for %s." msgstr "" +#. TRANS: H2 for user actions in a profile. +#. TRANS: H2 for entity actions in a profile. +msgid "User actions" +msgstr "Felhasználói műveletek" + +#. TRANS: Text shown in user profile of not yet compeltely deleted users. +msgid "User deletion in progress..." +msgstr "" + +#. TRANS: Link title for link on user profile. +msgid "Edit profile settings" +msgstr "" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "Szerkesztés" + +#. TRANS: Link title for link on user profile. +msgid "Send a direct message to this user" +msgstr "" + +#. TRANS: Link text for link on user profile. +msgid "Message" +msgstr "Üzenet" + +#. TRANS: Label text on user profile to select a user role. +msgid "Moderate" +msgstr "Moderálás" + +#. TRANS: Label text on user profile to select a user role. +msgid "User role" +msgstr "Felhasználói szerepkör" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Administrator" +msgstr "Adminisztrátor" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Moderator" +msgstr "Moderátor" + #. TRANS: Page title. %1$s is the title, %2$s is the site name. #, php-format msgid "%1$s - %2$s" @@ -6598,46 +6632,166 @@ msgid_plural "You are a member of these groups:" msgstr[0] "Ennek a csoportnak vagy tagja:" msgstr[1] "Ezeknek a csoportoknak vagy tagja:" -#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings. -msgid "" -"Commands:\n" -"on - turn on notifications\n" -"off - turn off notifications\n" -"help - show this help\n" -"follow - subscribe to user\n" -"groups - lists the groups you have joined\n" -"subscriptions - list the people you follow\n" -"subscribers - list the people that follow you\n" -"leave - unsubscribe from user\n" -"d - direct message to user\n" -"get - get last notice from user\n" -"whois - get profile info on user\n" -"lose - force user to stop following you\n" -"fav - add user's last notice as a 'fave'\n" -"fav # - add notice with the given id as a 'fave'\n" -"repeat # - repeat a notice with a given id\n" -"repeat - repeat the last notice from user\n" -"reply # - reply to notice with a given id\n" -"reply - reply to the last notice from user\n" -"join - join group\n" -"login - Get a link to login to the web interface\n" -"drop - leave group\n" -"stats - get your stats\n" -"stop - same as 'off'\n" -"quit - same as 'off'\n" -"sub - same as 'follow'\n" -"unsub - same as 'leave'\n" -"last - same as 'get'\n" -"on - not yet implemented.\n" -"off - not yet implemented.\n" -"nudge - remind a user to update.\n" -"invite - not yet implemented.\n" -"track - not yet implemented.\n" -"untrack - not yet implemented.\n" -"track off - not yet implemented.\n" -"untrack all - not yet implemented.\n" -"tracks - not yet implemented.\n" -"tracking - not yet implemented.\n" +#. TRANS: Header line of help text for commands. +msgctxt "COMMANDHELP" +msgid "Commands:" +msgstr "" + +#. TRANS: Help message for IM/SMS command "on" +msgctxt "COMMANDHELP" +msgid "turn on notifications" +msgstr "" + +#. TRANS: Help message for IM/SMS command "off" +msgctxt "COMMANDHELP" +msgid "turn off notifications" +msgstr "" + +#. TRANS: Help message for IM/SMS command "help" +msgctxt "COMMANDHELP" +msgid "show this help" +msgstr "" + +#. TRANS: Help message for IM/SMS command "follow " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "subscribe to user" +msgstr "Ezen felhasználók híreire már feliratkoztál:" + +#. TRANS: Help message for IM/SMS command "groups" +msgctxt "COMMANDHELP" +msgid "lists the groups you have joined" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscriptions" +msgctxt "COMMANDHELP" +msgid "list the people you follow" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscribers" +msgctxt "COMMANDHELP" +msgid "list the people that follow you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "leave " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "unsubscribe from user" +msgstr "Ezen felhasználók híreire már feliratkoztál:" + +#. TRANS: Help message for IM/SMS command "d " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "direct message to user" +msgstr "Közvetlen üzenetek neki: %s" + +#. TRANS: Help message for IM/SMS command "get " +msgctxt "COMMANDHELP" +msgid "get last notice from user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "whois " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "get profile info on user" +msgstr "Személyes profil" + +#. TRANS: Help message for IM/SMS command "lose " +msgctxt "COMMANDHELP" +msgid "force user to stop following you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav " +msgctxt "COMMANDHELP" +msgid "add user's last notice as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav #" +msgctxt "COMMANDHELP" +msgid "add notice with the given id as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat #" +msgctxt "COMMANDHELP" +msgid "repeat a notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "repeat the last notice from user" +msgstr "Ismételjük meg ezt a hírt" + +#. TRANS: Help message for IM/SMS command "reply #" +msgctxt "COMMANDHELP" +msgid "reply to notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "reply " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "reply to the last notice from user" +msgstr "Válaszoljunk erre a hírre" + +#. TRANS: Help message for IM/SMS command "join " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "join group" +msgstr "Ismeretlen művelet" + +#. TRANS: Help message for IM/SMS command "login" +msgctxt "COMMANDHELP" +msgid "Get a link to login to the web interface" +msgstr "" + +#. TRANS: Help message for IM/SMS command "drop " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "leave group" +msgstr "Felhasználó törlése" + +#. TRANS: Help message for IM/SMS command "stats" +msgctxt "COMMANDHELP" +msgid "get your stats" +msgstr "" + +#. TRANS: Help message for IM/SMS command "stop" +#. TRANS: Help message for IM/SMS command "quit" +msgctxt "COMMANDHELP" +msgid "same as 'off'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "sub " +msgctxt "COMMANDHELP" +msgid "same as 'follow'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "unsub " +msgctxt "COMMANDHELP" +msgid "same as 'leave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "last " +msgctxt "COMMANDHELP" +msgid "same as 'get'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "on " +#. TRANS: Help message for IM/SMS command "off " +#. TRANS: Help message for IM/SMS command "invite " +#. TRANS: Help message for IM/SMS command "track " +#. TRANS: Help message for IM/SMS command "untrack " +#. TRANS: Help message for IM/SMS command "track off" +#. TRANS: Help message for IM/SMS command "untrack all" +#. TRANS: Help message for IM/SMS command "tracks" +#. TRANS: Help message for IM/SMS command "tracking" +msgctxt "COMMANDHELP" +msgid "not yet implemented." +msgstr "" + +#. TRANS: Help message for IM/SMS command "nudge " +msgctxt "COMMANDHELP" +msgid "remind a user to update." msgstr "" #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. @@ -6821,6 +6975,9 @@ msgstr "" "A csoport földrajzi elhelyezkedése, ha van ilyen, pl. \"Város, Megye, Ország" "\"" +msgid "Aliases" +msgstr "Álnevek" + #, fuzzy, php-format msgid "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " @@ -6902,6 +7059,10 @@ msgctxt "TOOLTIP" msgid "Add or edit %s design" msgstr "" +#. TRANS: Group actions header (h2). Text hidden by default. +msgid "Group actions" +msgstr "Csoport-tevékenységek" + #. TRANS: Title for groups with the most members section. msgid "Groups with most members" msgstr "A legtöbb tagból álló csoportok" @@ -7434,6 +7595,7 @@ msgstr "Küldjünk egy hírt" msgid "What's up, %s?" msgstr "Mi hír, %s?" +#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Csatolás" @@ -7888,52 +8050,6 @@ msgstr "" msgid "User %1$s (%2$d) has no profile record." msgstr "A felhasználónak nincs profilja." -msgid "Edit Avatar" -msgstr "" - -#. TRANS: H2 for user actions in a profile. -#. TRANS: H2 for entity actions in a profile. -msgid "User actions" -msgstr "Felhasználói műveletek" - -#. TRANS: Text shown in user profile of not yet compeltely deleted users. -msgid "User deletion in progress..." -msgstr "" - -#. TRANS: Link title for link on user profile. -msgid "Edit profile settings" -msgstr "" - -#. TRANS: Link text for link on user profile. -msgid "Edit" -msgstr "Szerkesztés" - -#. TRANS: Link title for link on user profile. -msgid "Send a direct message to this user" -msgstr "" - -#. TRANS: Link text for link on user profile. -msgid "Message" -msgstr "Üzenet" - -#. TRANS: Label text on user profile to select a user role. -msgid "Moderate" -msgstr "Moderálás" - -#. TRANS: Label text on user profile to select a user role. -msgid "User role" -msgstr "Felhasználói szerepkör" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Administrator" -msgstr "Adminisztrátor" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Moderator" -msgstr "Moderátor" - #, fuzzy msgid "Not allowed to log in." msgstr "Nem vagy bejelentkezve." @@ -8009,3 +8125,6 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" + +#~ msgid "Note" +#~ msgstr "Megjegyzés" diff --git a/locale/ia/LC_MESSAGES/statusnet.po b/locale/ia/LC_MESSAGES/statusnet.po index a56aa7c5c8..653cf949bd 100644 --- a/locale/ia/LC_MESSAGES/statusnet.po +++ b/locale/ia/LC_MESSAGES/statusnet.po @@ -9,17 +9,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-11 18:15+0000\n" -"PO-Revision-Date: 2011-03-11 18:17:12+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:49:41+0000\n" "Language-Team: Interlingua \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ia\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" +"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -589,7 +589,7 @@ msgstr "Non poteva remover le usator %1$s del gruppo %2$s." msgid "%s's groups" msgstr "Gruppos de %s" -#. TRANS: Used as subtitle in check for group membership. %1$s is a user name, %2$s is the site name. +#. TRANS: Used as subtitle in check for group membership. %1$s is the site name, %2$s is a user name. #, php-format msgid "%1$s groups %2$s is a member of." msgstr "Gruppos de %1$s del quales %2$s es membro." @@ -1039,7 +1039,6 @@ msgid "Can only fave notices." msgstr "Solmente notas pote esser addite al favorites." #. TRANS: Client exception thrown when trying favorite a notice without content. -#, fuzzy msgid "Unknown notice." msgstr "Nota incognite." @@ -3083,9 +3082,8 @@ msgstr "Le URL de origine es requirite." msgid "Could not create application." msgstr "Non poteva crear application." -#, fuzzy msgid "Invalid image." -msgstr "Dimension invalide." +msgstr "Imagine invalide." #. TRANS: Title for form to create a group. msgid "New group" @@ -3372,7 +3370,6 @@ msgstr "" "Isto es tu cassa de exito, que lista le messages private que tu ha inviate." #. TRANS: Title for page where to change password. -#, fuzzy msgctxt "TITLE" msgid "Change password" msgstr "Cambiar contrasigno" @@ -3400,7 +3397,6 @@ msgid "6 or more characters." msgstr "6 o plus characteres." #. TRANS: Field label on page where to change password. In this field the new password should be typed a second time. -#, fuzzy msgctxt "LABEL" msgid "Confirm" msgstr "Confirmar" @@ -3411,7 +3407,6 @@ msgid "Same as password above." msgstr "Identic al contrasigno hic supra." #. TRANS: Button text on page where to change password. -#, fuzzy msgctxt "BUTTON" msgid "Change" msgstr "Cambiar" @@ -3424,9 +3419,8 @@ msgid "Passwords don't match." msgstr "Le contrasignos non corresponde." #. TRANS: Form validation error on page where to change password. -#, fuzzy msgid "Incorrect old password." -msgstr "Ancian contrasigno incorrecte" +msgstr "Ancian contrasigno incorrecte." #. TRANS: Form validation error on page where to change password. msgid "Error saving user; invalid." @@ -3513,12 +3507,10 @@ msgid "Fancy URLs" msgstr "URLs de luxo" #. TRANS: Field title in Paths admin panel. -#, fuzzy msgid "Use fancy URLs (more readable and memorable)?" msgstr "Usar URLs de luxo (plus legibile e memorabile)?" #. TRANS: Fieldset legend in Paths admin panel. -#, fuzzy msgctxt "LEGEND" msgid "Theme" msgstr "Thema" @@ -3632,7 +3624,6 @@ msgid "Directory where attachments are located." msgstr "Cammino a ubi se trova le annexos." #. TRANS: Fieldset legend in Paths admin panel. -#, fuzzy msgctxt "LEGEND" msgid "SSL" msgstr "SSL" @@ -3716,7 +3707,6 @@ msgid "Enabled" msgstr "Activate" #. TRANS: Tab and title for plugins admin panel. -#, fuzzy msgctxt "TITLE" msgid "Plugins" msgstr "Plug-ins" @@ -3748,11 +3738,11 @@ msgstr "Le contento del nota es invalide." #. TRANS: Exception thrown if a notice's license is not compatible with the StatusNet site license. #. TRANS: %1$s is the notice license, %2$s is the StatusNet site's license. -#, fuzzy, php-format +#, php-format msgid "Notice license \"%1$s\" is not compatible with site license \"%2$s\"." msgstr "" -"Le licentia del nota ‘%1$s’ non es compatibile con le licentia del sito ‘%2" -"$s’." +"Le licentia del nota \"%1$s\" non es compatibile con le licentia del sito \"%" +"2$s\"." #. TRANS: Page title for profile settings. msgid "Profile settings" @@ -4606,18 +4596,6 @@ msgstr "Gruppo %s" msgid "%1$s group, page %2$d" msgstr "Gruppo %1$s, pagina %2$d" -#. TRANS: Label for group description or group note (dt). Text hidden by default. -msgid "Note" -msgstr "Nota" - -#. TRANS: Label for group aliases (dt). Text hidden by default. -msgid "Aliases" -msgstr "Aliases" - -#. TRANS: Group actions header (h2). Text hidden by default. -msgid "Group actions" -msgstr "Actiones del gruppo" - #. TRANS: Tooltip for feed link. %s is a group nickname. #, php-format msgid "Notice feed for %s group (RSS 1.0)" @@ -4727,6 +4705,10 @@ msgstr "Message de %1$s in %2$s" msgid "Notice deleted." msgstr "Nota delite." +#, fuzzy +msgid "Notice" +msgstr "Notas" + #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #, php-format msgid "%1$s tagged %2$s" @@ -5259,7 +5241,6 @@ msgstr "Nulle parametro de ID." msgid "Tag %s" msgstr "Etiquetta %s" -#. TRANS: H2 for user profile information. msgid "User profile" msgstr "Profilo del usator" @@ -5970,6 +5951,49 @@ msgstr "Non pote trovar XRD pro %s." msgid "No AtomPub API service for %s." msgstr "Il non ha un servicio API AtomPub pro %s." +#. TRANS: H2 for user actions in a profile. +#. TRANS: H2 for entity actions in a profile. +msgid "User actions" +msgstr "Actiones de usator" + +#. TRANS: Text shown in user profile of not yet compeltely deleted users. +msgid "User deletion in progress..." +msgstr "Deletion del usator in curso…" + +#. TRANS: Link title for link on user profile. +msgid "Edit profile settings" +msgstr "Modificar configuration de profilo" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "Modificar" + +#. TRANS: Link title for link on user profile. +msgid "Send a direct message to this user" +msgstr "Inviar un message directe a iste usator" + +#. TRANS: Link text for link on user profile. +msgid "Message" +msgstr "Message" + +#. TRANS: Label text on user profile to select a user role. +msgid "Moderate" +msgstr "Moderar" + +#. TRANS: Label text on user profile to select a user role. +msgid "User role" +msgstr "Rolo de usator" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Administrator" +msgstr "Administrator" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Moderator" +msgstr "Moderator" + #. TRANS: Page title. %1$s is the title, %2$s is the site name. #, php-format msgid "%1$s - %2$s" @@ -6690,85 +6714,172 @@ msgid_plural "You are a member of these groups:" msgstr[0] "Tu es membro de iste gruppo:" msgstr[1] "Tu es membro de iste gruppos:" -#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings. -msgid "" -"Commands:\n" -"on - turn on notifications\n" -"off - turn off notifications\n" -"help - show this help\n" -"follow - subscribe to user\n" -"groups - lists the groups you have joined\n" -"subscriptions - list the people you follow\n" -"subscribers - list the people that follow you\n" -"leave - unsubscribe from user\n" -"d - direct message to user\n" -"get - get last notice from user\n" -"whois - get profile info on user\n" -"lose - force user to stop following you\n" -"fav - add user's last notice as a 'fave'\n" -"fav # - add notice with the given id as a 'fave'\n" -"repeat # - repeat a notice with a given id\n" -"repeat - repeat the last notice from user\n" -"reply # - reply to notice with a given id\n" -"reply - reply to the last notice from user\n" -"join - join group\n" -"login - Get a link to login to the web interface\n" -"drop - leave group\n" -"stats - get your stats\n" -"stop - same as 'off'\n" -"quit - same as 'off'\n" -"sub - same as 'follow'\n" -"unsub - same as 'leave'\n" -"last - same as 'get'\n" -"on - not yet implemented.\n" -"off - not yet implemented.\n" -"nudge - remind a user to update.\n" -"invite - not yet implemented.\n" -"track - not yet implemented.\n" -"untrack - not yet implemented.\n" -"track off - not yet implemented.\n" -"untrack all - not yet implemented.\n" -"tracks - not yet implemented.\n" -"tracking - not yet implemented.\n" +#. TRANS: Header line of help text for commands. +#, fuzzy +msgctxt "COMMANDHELP" +msgid "Commands:" +msgstr "Resultatos del commando" + +#. TRANS: Help message for IM/SMS command "on" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn on notifications" +msgstr "Non pote activar notification." + +#. TRANS: Help message for IM/SMS command "off" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn off notifications" +msgstr "Non pote disactivar notification." + +#. TRANS: Help message for IM/SMS command "help" +msgctxt "COMMANDHELP" +msgid "show this help" +msgstr "" + +#. TRANS: Help message for IM/SMS command "follow " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "subscribe to user" +msgstr "Subscriber a iste usator" + +#. TRANS: Help message for IM/SMS command "groups" +msgctxt "COMMANDHELP" +msgid "lists the groups you have joined" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscriptions" +msgctxt "COMMANDHELP" +msgid "list the people you follow" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscribers" +msgctxt "COMMANDHELP" +msgid "list the people that follow you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "leave " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "unsubscribe from user" +msgstr "Cancellar subscription a iste usator" + +#. TRANS: Help message for IM/SMS command "d " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "direct message to user" +msgstr "Messages directe a %s" + +#. TRANS: Help message for IM/SMS command "get " +msgctxt "COMMANDHELP" +msgid "get last notice from user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "whois " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "get profile info on user" +msgstr "Le profilo remote non es un gruppo!" + +#. TRANS: Help message for IM/SMS command "lose " +msgctxt "COMMANDHELP" +msgid "force user to stop following you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav " +msgctxt "COMMANDHELP" +msgid "add user's last notice as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav #" +msgctxt "COMMANDHELP" +msgid "add notice with the given id as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat #" +msgctxt "COMMANDHELP" +msgid "repeat a notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "repeat the last notice from user" +msgstr "Repeter iste nota" + +#. TRANS: Help message for IM/SMS command "reply #" +msgctxt "COMMANDHELP" +msgid "reply to notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "reply " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "reply to the last notice from user" +msgstr "Responder a iste nota" + +#. TRANS: Help message for IM/SMS command "join " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "join group" +msgstr "Gruppo incognite." + +#. TRANS: Help message for IM/SMS command "login" +msgctxt "COMMANDHELP" +msgid "Get a link to login to the web interface" +msgstr "" + +#. TRANS: Help message for IM/SMS command "drop " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "leave group" +msgstr "Deler gruppo" + +#. TRANS: Help message for IM/SMS command "stats" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "get your stats" +msgstr "Actualisar tu stato..." + +#. TRANS: Help message for IM/SMS command "stop" +#. TRANS: Help message for IM/SMS command "quit" +msgctxt "COMMANDHELP" +msgid "same as 'off'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "sub " +msgctxt "COMMANDHELP" +msgid "same as 'follow'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "unsub " +msgctxt "COMMANDHELP" +msgid "same as 'leave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "last " +msgctxt "COMMANDHELP" +msgid "same as 'get'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "on " +#. TRANS: Help message for IM/SMS command "off " +#. TRANS: Help message for IM/SMS command "invite " +#. TRANS: Help message for IM/SMS command "track " +#. TRANS: Help message for IM/SMS command "untrack " +#. TRANS: Help message for IM/SMS command "track off" +#. TRANS: Help message for IM/SMS command "untrack all" +#. TRANS: Help message for IM/SMS command "tracks" +#. TRANS: Help message for IM/SMS command "tracking" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "not yet implemented." +msgstr "Commando non ancora implementate." + +#. TRANS: Help message for IM/SMS command "nudge " +msgctxt "COMMANDHELP" +msgid "remind a user to update." msgstr "" -"Commandos:\n" -"on - activar notificationes\n" -"off - disactivar notificationes\n" -"help - monstrar iste adjuta\n" -"follow - subscriber te al usator\n" -"groups - listar le gruppos del quales tu es membro\n" -"subscriptions - listar le personas que tu seque\n" -"subscribers - listar le personas qui te seque\n" -"leave - cancellar subscription al usator\n" -"d - diriger un message al usator\n" -"get - obtener le ultime nota del usator\n" -"whois - obtener info de profilo del usator\n" -"lose - fortiar le usator de cessar de sequer te\n" -"fav - adder ultime nota del usator como favorite\n" -"fav # - adder nota con le ID date como favorite\n" -"repeat # - repeter le nota con le ID date\n" -"repeat - repeter le ultime nota del usator\n" -"reply # - responder al nota con le ID date\n" -"reply - responder al ultime nota del usator\n" -"join - facer te membro del gruppo\n" -"login - obtener ligamine pro aperir session al interfacie web\n" -"drop - quitar gruppo\n" -"stats - obtener tu statisticas\n" -"stop - como 'off'\n" -"quit - como 'off'\n" -"sub - como 'follow'\n" -"unsub - como 'leave'\n" -"last - como 'get'\n" -"on - non ancora implementate.\n" -"off - non ancora implementate.\n" -"nudge - rememorar un usator de scriber alique.\n" -"invite - non ancora implementate.\n" -"track - non ancora implementate.\n" -"untrack - non ancora implementate.\n" -"track off - non ancora implementate.\n" -"untrack all - non ancora implementate.\n" -"tracks - non ancora implementate.\n" -"tracking - non ancora implementate.\n" #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. msgid "No configuration file found." @@ -6941,6 +7052,9 @@ msgid "" msgstr "" "Loco del gruppo, si existe, como \"Citate, Provincia (o Region), Pais\"." +msgid "Aliases" +msgstr "Aliases" + #, php-format msgid "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " @@ -7021,6 +7135,10 @@ msgctxt "TOOLTIP" msgid "Add or edit %s design" msgstr "Adder o modificar apparentia de %s" +#. TRANS: Group actions header (h2). Text hidden by default. +msgid "Group actions" +msgstr "Actiones del gruppo" + #. TRANS: Title for groups with the most members section. msgid "Groups with most members" msgstr "Gruppos con le plus membros" @@ -7590,6 +7708,7 @@ msgstr "Inviar un nota" msgid "What's up, %s?" msgstr "Como sta, %s?" +#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Annexar" @@ -7658,7 +7777,7 @@ msgid "Notice repeated" msgstr "Nota repetite" msgid "Update your status..." -msgstr "" +msgstr "Actualisar tu stato..." msgid "Nudge this user" msgstr "Pulsar iste usator" @@ -8047,52 +8166,6 @@ msgstr "Cancellar subscription" msgid "User %1$s (%2$d) has no profile record." msgstr "Le usator %1$s (%2$d) non ha un registro de profilo." -msgid "Edit Avatar" -msgstr "Modificar avatar" - -#. TRANS: H2 for user actions in a profile. -#. TRANS: H2 for entity actions in a profile. -msgid "User actions" -msgstr "Actiones de usator" - -#. TRANS: Text shown in user profile of not yet compeltely deleted users. -msgid "User deletion in progress..." -msgstr "Deletion del usator in curso…" - -#. TRANS: Link title for link on user profile. -msgid "Edit profile settings" -msgstr "Modificar configuration de profilo" - -#. TRANS: Link text for link on user profile. -msgid "Edit" -msgstr "Modificar" - -#. TRANS: Link title for link on user profile. -msgid "Send a direct message to this user" -msgstr "Inviar un message directe a iste usator" - -#. TRANS: Link text for link on user profile. -msgid "Message" -msgstr "Message" - -#. TRANS: Label text on user profile to select a user role. -msgid "Moderate" -msgstr "Moderar" - -#. TRANS: Label text on user profile to select a user role. -msgid "User role" -msgstr "Rolo de usator" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Administrator" -msgstr "Administrator" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Moderator" -msgstr "Moderator" - msgid "Not allowed to log in." msgstr "Apertura de session non permittite." @@ -8166,3 +8239,88 @@ msgstr "XML invalide, radice XRD mancante." #, php-format msgid "Getting backup from file '%s'." msgstr "Obtene copia de reserva ex file '%s'." + +#~ msgid "Note" +#~ msgstr "Nota" + +#~ msgid "" +#~ "Commands:\n" +#~ "on - turn on notifications\n" +#~ "off - turn off notifications\n" +#~ "help - show this help\n" +#~ "follow - subscribe to user\n" +#~ "groups - lists the groups you have joined\n" +#~ "subscriptions - list the people you follow\n" +#~ "subscribers - list the people that follow you\n" +#~ "leave - unsubscribe from user\n" +#~ "d - direct message to user\n" +#~ "get - get last notice from user\n" +#~ "whois - get profile info on user\n" +#~ "lose - force user to stop following you\n" +#~ "fav - add user's last notice as a 'fave'\n" +#~ "fav # - add notice with the given id as a 'fave'\n" +#~ "repeat # - repeat a notice with a given id\n" +#~ "repeat - repeat the last notice from user\n" +#~ "reply # - reply to notice with a given id\n" +#~ "reply - reply to the last notice from user\n" +#~ "join - join group\n" +#~ "login - Get a link to login to the web interface\n" +#~ "drop - leave group\n" +#~ "stats - get your stats\n" +#~ "stop - same as 'off'\n" +#~ "quit - same as 'off'\n" +#~ "sub - same as 'follow'\n" +#~ "unsub - same as 'leave'\n" +#~ "last - same as 'get'\n" +#~ "on - not yet implemented.\n" +#~ "off - not yet implemented.\n" +#~ "nudge - remind a user to update.\n" +#~ "invite - not yet implemented.\n" +#~ "track - not yet implemented.\n" +#~ "untrack - not yet implemented.\n" +#~ "track off - not yet implemented.\n" +#~ "untrack all - not yet implemented.\n" +#~ "tracks - not yet implemented.\n" +#~ "tracking - not yet implemented.\n" +#~ msgstr "" +#~ "Commandos:\n" +#~ "on - activar notificationes\n" +#~ "off - disactivar notificationes\n" +#~ "help - monstrar iste adjuta\n" +#~ "follow - subscriber te al usator\n" +#~ "groups - listar le gruppos del quales tu es membro\n" +#~ "subscriptions - listar le personas que tu seque\n" +#~ "subscribers - listar le personas qui te seque\n" +#~ "leave - cancellar subscription al usator\n" +#~ "d - diriger un message al usator\n" +#~ "get - obtener le ultime nota del usator\n" +#~ "whois - obtener info de profilo del usator\n" +#~ "lose - fortiar le usator de cessar de sequer te\n" +#~ "fav - adder ultime nota del usator como favorite\n" +#~ "fav # - adder nota con le ID date como favorite\n" +#~ "repeat # - repeter le nota con le ID date\n" +#~ "repeat - repeter le ultime nota del usator\n" +#~ "reply # - responder al nota con le ID date\n" +#~ "reply - responder al ultime nota del usator\n" +#~ "join - facer te membro del gruppo\n" +#~ "login - obtener ligamine pro aperir session al interfacie web\n" +#~ "drop - quitar gruppo\n" +#~ "stats - obtener tu statisticas\n" +#~ "stop - como 'off'\n" +#~ "quit - como 'off'\n" +#~ "sub - como 'follow'\n" +#~ "unsub - como 'leave'\n" +#~ "last - como 'get'\n" +#~ "on - non ancora implementate.\n" +#~ "off - non ancora implementate.\n" +#~ "nudge - rememorar un usator de scriber alique.\n" +#~ "invite - non ancora implementate.\n" +#~ "track - non ancora implementate.\n" +#~ "untrack - non ancora implementate.\n" +#~ "track off - non ancora implementate.\n" +#~ "untrack all - non ancora implementate.\n" +#~ "tracks - non ancora implementate.\n" +#~ "tracking - non ancora implementate.\n" + +#~ msgid "Edit Avatar" +#~ msgstr "Modificar avatar" diff --git a/locale/it/LC_MESSAGES/statusnet.po b/locale/it/LC_MESSAGES/statusnet.po index 78b07bbdfc..3306a48eaa 100644 --- a/locale/it/LC_MESSAGES/statusnet.po +++ b/locale/it/LC_MESSAGES/statusnet.po @@ -11,17 +11,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-11 18:15+0000\n" -"PO-Revision-Date: 2011-03-11 18:17:13+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:49:42+0000\n" "Language-Team: Italian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: it\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" +"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -596,7 +596,7 @@ msgstr "Impossibile rimuovere l'utente %1$s dal gruppo %2$s." msgid "%s's groups" msgstr "Gruppi di %s" -#. TRANS: Used as subtitle in check for group membership. %1$s is a user name, %2$s is the site name. +#. TRANS: Used as subtitle in check for group membership. %1$s is the site name, %2$s is a user name. #, php-format msgid "%1$s groups %2$s is a member of." msgstr "Gruppi del sito %1$s a cui %2$s è iscritto." @@ -4738,18 +4738,6 @@ msgstr "Gruppo %s" msgid "%1$s group, page %2$d" msgstr "Gruppi di %1$s, pagina %2$d" -#. TRANS: Label for group description or group note (dt). Text hidden by default. -msgid "Note" -msgstr "Nota" - -#. TRANS: Label for group aliases (dt). Text hidden by default. -msgid "Aliases" -msgstr "Alias" - -#. TRANS: Group actions header (h2). Text hidden by default. -msgid "Group actions" -msgstr "Azioni dei gruppi" - #. TRANS: Tooltip for feed link. %s is a group nickname. #, php-format msgid "Notice feed for %s group (RSS 1.0)" @@ -4861,6 +4849,10 @@ msgstr "Messaggio da %1$s su %2$s" msgid "Notice deleted." msgstr "Messaggio eliminato." +#, fuzzy +msgid "Notice" +msgstr "Messaggi" + #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #, fuzzy, php-format msgid "%1$s tagged %2$s" @@ -5397,7 +5389,6 @@ msgstr "Nessun argomento ID." msgid "Tag %s" msgstr "Etichetta %s" -#. TRANS: H2 for user profile information. msgid "User profile" msgstr "Profilo utente" @@ -6122,6 +6113,49 @@ msgstr "" msgid "No AtomPub API service for %s." msgstr "" +#. TRANS: H2 for user actions in a profile. +#. TRANS: H2 for entity actions in a profile. +msgid "User actions" +msgstr "Azioni utente" + +#. TRANS: Text shown in user profile of not yet compeltely deleted users. +msgid "User deletion in progress..." +msgstr "Eliminazione utente..." + +#. TRANS: Link title for link on user profile. +msgid "Edit profile settings" +msgstr "Modifica impostazioni del profilo" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "Modifica" + +#. TRANS: Link title for link on user profile. +msgid "Send a direct message to this user" +msgstr "Invia un messaggio diretto a questo utente" + +#. TRANS: Link text for link on user profile. +msgid "Message" +msgstr "Messaggio" + +#. TRANS: Label text on user profile to select a user role. +msgid "Moderate" +msgstr "Modera" + +#. TRANS: Label text on user profile to select a user role. +msgid "User role" +msgstr "Ruolo dell'utente" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Administrator" +msgstr "Amministratore" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Moderator" +msgstr "Moderatore" + #. TRANS: Page title. %1$s is the title, %2$s is the site name. #, php-format msgid "%1$s - %2$s" @@ -6851,87 +6885,171 @@ msgid_plural "You are a member of these groups:" msgstr[0] "Non fai parte di questo gruppo:" msgstr[1] "Non fai parte di questi gruppi:" -#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings. -msgid "" -"Commands:\n" -"on - turn on notifications\n" -"off - turn off notifications\n" -"help - show this help\n" -"follow - subscribe to user\n" -"groups - lists the groups you have joined\n" -"subscriptions - list the people you follow\n" -"subscribers - list the people that follow you\n" -"leave - unsubscribe from user\n" -"d - direct message to user\n" -"get - get last notice from user\n" -"whois - get profile info on user\n" -"lose - force user to stop following you\n" -"fav - add user's last notice as a 'fave'\n" -"fav # - add notice with the given id as a 'fave'\n" -"repeat # - repeat a notice with a given id\n" -"repeat - repeat the last notice from user\n" -"reply # - reply to notice with a given id\n" -"reply - reply to the last notice from user\n" -"join - join group\n" -"login - Get a link to login to the web interface\n" -"drop - leave group\n" -"stats - get your stats\n" -"stop - same as 'off'\n" -"quit - same as 'off'\n" -"sub - same as 'follow'\n" -"unsub - same as 'leave'\n" -"last - same as 'get'\n" -"on - not yet implemented.\n" -"off - not yet implemented.\n" -"nudge - remind a user to update.\n" -"invite - not yet implemented.\n" -"track - not yet implemented.\n" -"untrack - not yet implemented.\n" -"track off - not yet implemented.\n" -"untrack all - not yet implemented.\n" -"tracks - not yet implemented.\n" -"tracking - not yet implemented.\n" +#. TRANS: Header line of help text for commands. +#, fuzzy +msgctxt "COMMANDHELP" +msgid "Commands:" +msgstr "Risultati comando" + +#. TRANS: Help message for IM/SMS command "on" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn on notifications" +msgstr "Impossibile attivare le notifiche." + +#. TRANS: Help message for IM/SMS command "off" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn off notifications" +msgstr "Impossibile disattivare le notifiche." + +#. TRANS: Help message for IM/SMS command "help" +msgctxt "COMMANDHELP" +msgid "show this help" +msgstr "" + +#. TRANS: Help message for IM/SMS command "follow " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "subscribe to user" +msgstr "Abbonati a questo utente" + +#. TRANS: Help message for IM/SMS command "groups" +msgctxt "COMMANDHELP" +msgid "lists the groups you have joined" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscriptions" +msgctxt "COMMANDHELP" +msgid "list the people you follow" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscribers" +msgctxt "COMMANDHELP" +msgid "list the people that follow you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "leave " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "unsubscribe from user" +msgstr "Annulla l'abbonamento da questo utente" + +#. TRANS: Help message for IM/SMS command "d " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "direct message to user" +msgstr "Messaggi diretti a %s" + +#. TRANS: Help message for IM/SMS command "get " +msgctxt "COMMANDHELP" +msgid "get last notice from user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "whois " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "get profile info on user" +msgstr "Informazioni sul profilo" + +#. TRANS: Help message for IM/SMS command "lose " +msgctxt "COMMANDHELP" +msgid "force user to stop following you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav " +msgctxt "COMMANDHELP" +msgid "add user's last notice as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav #" +msgctxt "COMMANDHELP" +msgid "add notice with the given id as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat #" +msgctxt "COMMANDHELP" +msgid "repeat a notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "repeat the last notice from user" +msgstr "Ripeti questo messaggio" + +#. TRANS: Help message for IM/SMS command "reply #" +msgctxt "COMMANDHELP" +msgid "reply to notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "reply " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "reply to the last notice from user" +msgstr "Rispondi a questo messaggio" + +#. TRANS: Help message for IM/SMS command "join " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "join group" +msgstr "Sconosciuto" + +#. TRANS: Help message for IM/SMS command "login" +msgctxt "COMMANDHELP" +msgid "Get a link to login to the web interface" +msgstr "" + +#. TRANS: Help message for IM/SMS command "drop " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "leave group" +msgstr "Elimina utente" + +#. TRANS: Help message for IM/SMS command "stats" +msgctxt "COMMANDHELP" +msgid "get your stats" +msgstr "" + +#. TRANS: Help message for IM/SMS command "stop" +#. TRANS: Help message for IM/SMS command "quit" +msgctxt "COMMANDHELP" +msgid "same as 'off'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "sub " +msgctxt "COMMANDHELP" +msgid "same as 'follow'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "unsub " +msgctxt "COMMANDHELP" +msgid "same as 'leave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "last " +msgctxt "COMMANDHELP" +msgid "same as 'get'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "on " +#. TRANS: Help message for IM/SMS command "off " +#. TRANS: Help message for IM/SMS command "invite " +#. TRANS: Help message for IM/SMS command "track " +#. TRANS: Help message for IM/SMS command "untrack " +#. TRANS: Help message for IM/SMS command "track off" +#. TRANS: Help message for IM/SMS command "untrack all" +#. TRANS: Help message for IM/SMS command "tracks" +#. TRANS: Help message for IM/SMS command "tracking" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "not yet implemented." +msgstr "Comando non ancora implementato." + +#. TRANS: Help message for IM/SMS command "nudge " +msgctxt "COMMANDHELP" +msgid "remind a user to update." msgstr "" -"Comandi:\n" -"on - abilita le notifiche\n" -"off - disabilita le notifiche\n" -"help - mostra questo aiuto\n" -"follow - ti abbona all'utente\n" -"groups - elenca i gruppi di cui fai parte\n" -"subscriptions - elenca le persone che segui\n" -"subscribers - elenca le persone che ti seguono\n" -"leave - annulla l'abbonamento dall'utente\n" -"d - invia un messaggio diretto all'utente\n" -"get - recupera l'ultimo messaggio dell'utente\n" -"whois - recupera le informazioni del profilo dell'utente\n" -"lose - forza un utente nel non seguirti più\n" -"fav - aggiunge l'ultimo messaggio dell'utente tra i tuoi " -"preferiti\n" -"fav # - aggiunge un messaggio con quell'ID tra i tuoi " -"preferiti\n" -"repeat # - ripete un messaggio con quell'ID\n" -"repeat - ripete l'ultimo messaggio dell'utente\n" -"reply # - risponde al messaggio con quell'ID\n" -"reply - risponde all'ultimo messaggio dell'utente\n" -"join - ti iscrive al gruppo\n" -"login - recupera un collegamento all'interfaccia web per eseguire l'accesso\n" -"drop - annulla la tua iscrizione al gruppo\n" -"stats - recupera il tuo stato\n" -"stop - stessa azione del comando \"off\"\n" -"quit - stessa azione del comando \"on\"\n" -"sub - stessa azione del comando \"follow\"\n" -"unsub - stessa azione del comando \"leave\"\n" -"last - stessa azione del comando \"get\"\n" -"on -non ancora implementato\n" -"off - non ancora implementato\n" -"nudge - ricorda a un utente di scrivere qualche cosa\n" -"invite - non ancora implementato\n" -"track - non ancora implementato\n" -"untrack - non ancora implementato\n" -"track off - non ancora implementato\n" -"untrack all - non ancora implementato\n" -"tracks - non ancora implementato\n" -"tracking - non ancora implementato\n" #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. #, fuzzy @@ -7117,6 +7235,9 @@ msgid "" "Location for the group, if any, like \"City, State (or Region), Country\"." msgstr "Dove è situato il gruppo, tipo \"città, regione, stato\"" +msgid "Aliases" +msgstr "Alias" + #, fuzzy, php-format msgid "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " @@ -7196,6 +7317,10 @@ msgctxt "TOOLTIP" msgid "Add or edit %s design" msgstr "Aggiungi o modifica l'aspetto di %s" +#. TRANS: Group actions header (h2). Text hidden by default. +msgid "Group actions" +msgstr "Azioni dei gruppi" + #. TRANS: Title for groups with the most members section. msgid "Groups with most members" msgstr "I gruppi più numerosi" @@ -7767,6 +7892,7 @@ msgstr "Invia un messaggio" msgid "What's up, %s?" msgstr "Cosa succede, %s?" +#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Allega" @@ -8228,52 +8354,6 @@ msgstr "Disabbonati" msgid "User %1$s (%2$d) has no profile record." msgstr "L'utente non ha un profilo." -msgid "Edit Avatar" -msgstr "Modifica immagine" - -#. TRANS: H2 for user actions in a profile. -#. TRANS: H2 for entity actions in a profile. -msgid "User actions" -msgstr "Azioni utente" - -#. TRANS: Text shown in user profile of not yet compeltely deleted users. -msgid "User deletion in progress..." -msgstr "Eliminazione utente..." - -#. TRANS: Link title for link on user profile. -msgid "Edit profile settings" -msgstr "Modifica impostazioni del profilo" - -#. TRANS: Link text for link on user profile. -msgid "Edit" -msgstr "Modifica" - -#. TRANS: Link title for link on user profile. -msgid "Send a direct message to this user" -msgstr "Invia un messaggio diretto a questo utente" - -#. TRANS: Link text for link on user profile. -msgid "Message" -msgstr "Messaggio" - -#. TRANS: Label text on user profile to select a user role. -msgid "Moderate" -msgstr "Modera" - -#. TRANS: Label text on user profile to select a user role. -msgid "User role" -msgstr "Ruolo dell'utente" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Administrator" -msgstr "Amministratore" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Moderator" -msgstr "Moderatore" - #, fuzzy msgid "Not allowed to log in." msgstr "Accesso non effettuato." @@ -8349,3 +8429,91 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" + +#~ msgid "Note" +#~ msgstr "Nota" + +#~ msgid "" +#~ "Commands:\n" +#~ "on - turn on notifications\n" +#~ "off - turn off notifications\n" +#~ "help - show this help\n" +#~ "follow - subscribe to user\n" +#~ "groups - lists the groups you have joined\n" +#~ "subscriptions - list the people you follow\n" +#~ "subscribers - list the people that follow you\n" +#~ "leave - unsubscribe from user\n" +#~ "d - direct message to user\n" +#~ "get - get last notice from user\n" +#~ "whois - get profile info on user\n" +#~ "lose - force user to stop following you\n" +#~ "fav - add user's last notice as a 'fave'\n" +#~ "fav # - add notice with the given id as a 'fave'\n" +#~ "repeat # - repeat a notice with a given id\n" +#~ "repeat - repeat the last notice from user\n" +#~ "reply # - reply to notice with a given id\n" +#~ "reply - reply to the last notice from user\n" +#~ "join - join group\n" +#~ "login - Get a link to login to the web interface\n" +#~ "drop - leave group\n" +#~ "stats - get your stats\n" +#~ "stop - same as 'off'\n" +#~ "quit - same as 'off'\n" +#~ "sub - same as 'follow'\n" +#~ "unsub - same as 'leave'\n" +#~ "last - same as 'get'\n" +#~ "on - not yet implemented.\n" +#~ "off - not yet implemented.\n" +#~ "nudge - remind a user to update.\n" +#~ "invite - not yet implemented.\n" +#~ "track - not yet implemented.\n" +#~ "untrack - not yet implemented.\n" +#~ "track off - not yet implemented.\n" +#~ "untrack all - not yet implemented.\n" +#~ "tracks - not yet implemented.\n" +#~ "tracking - not yet implemented.\n" +#~ msgstr "" +#~ "Comandi:\n" +#~ "on - abilita le notifiche\n" +#~ "off - disabilita le notifiche\n" +#~ "help - mostra questo aiuto\n" +#~ "follow - ti abbona all'utente\n" +#~ "groups - elenca i gruppi di cui fai parte\n" +#~ "subscriptions - elenca le persone che segui\n" +#~ "subscribers - elenca le persone che ti seguono\n" +#~ "leave - annulla l'abbonamento dall'utente\n" +#~ "d - invia un messaggio diretto all'utente\n" +#~ "get - recupera l'ultimo messaggio dell'utente\n" +#~ "whois - recupera le informazioni del profilo dell'utente\n" +#~ "lose - forza un utente nel non seguirti più\n" +#~ "fav - aggiunge l'ultimo messaggio dell'utente tra i tuoi " +#~ "preferiti\n" +#~ "fav # - aggiunge un messaggio con quell'ID tra i tuoi " +#~ "preferiti\n" +#~ "repeat # - ripete un messaggio con quell'ID\n" +#~ "repeat - ripete l'ultimo messaggio dell'utente\n" +#~ "reply # - risponde al messaggio con quell'ID\n" +#~ "reply - risponde all'ultimo messaggio dell'utente\n" +#~ "join - ti iscrive al gruppo\n" +#~ "login - recupera un collegamento all'interfaccia web per eseguire " +#~ "l'accesso\n" +#~ "drop - annulla la tua iscrizione al gruppo\n" +#~ "stats - recupera il tuo stato\n" +#~ "stop - stessa azione del comando \"off\"\n" +#~ "quit - stessa azione del comando \"on\"\n" +#~ "sub - stessa azione del comando \"follow\"\n" +#~ "unsub - stessa azione del comando \"leave\"\n" +#~ "last - stessa azione del comando \"get\"\n" +#~ "on -non ancora implementato\n" +#~ "off - non ancora implementato\n" +#~ "nudge - ricorda a un utente di scrivere qualche cosa\n" +#~ "invite - non ancora implementato\n" +#~ "track - non ancora implementato\n" +#~ "untrack - non ancora implementato\n" +#~ "track off - non ancora implementato\n" +#~ "untrack all - non ancora implementato\n" +#~ "tracks - non ancora implementato\n" +#~ "tracking - non ancora implementato\n" + +#~ msgid "Edit Avatar" +#~ msgstr "Modifica immagine" diff --git a/locale/ja/LC_MESSAGES/statusnet.po b/locale/ja/LC_MESSAGES/statusnet.po index 00de07045f..2f58935de5 100644 --- a/locale/ja/LC_MESSAGES/statusnet.po +++ b/locale/ja/LC_MESSAGES/statusnet.po @@ -14,17 +14,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-11 18:15+0000\n" -"PO-Revision-Date: 2011-03-11 18:17:15+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:49:43+0000\n" "Language-Team: Japanese \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ja\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" +"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -593,7 +593,7 @@ msgstr "ユーザ %1$s をグループ %2$s から削除できません。" msgid "%s's groups" msgstr "%s のグループ" -#. TRANS: Used as subtitle in check for group membership. %1$s is a user name, %2$s is the site name. +#. TRANS: Used as subtitle in check for group membership. %1$s is the site name, %2$s is a user name. #, fuzzy, php-format msgid "%1$s groups %2$s is a member of." msgstr "グループ %s はメンバー" @@ -4732,18 +4732,6 @@ msgstr "%s グループ" msgid "%1$s group, page %2$d" msgstr "%1$s グループ、ページ %2$d" -#. TRANS: Label for group description or group note (dt). Text hidden by default. -msgid "Note" -msgstr "ノート" - -#. TRANS: Label for group aliases (dt). Text hidden by default. -msgid "Aliases" -msgstr "別名" - -#. TRANS: Group actions header (h2). Text hidden by default. -msgid "Group actions" -msgstr "グループアクション" - #. TRANS: Tooltip for feed link. %s is a group nickname. #, php-format msgid "Notice feed for %s group (RSS 1.0)" @@ -4855,6 +4843,10 @@ msgstr "%2$s 上の %1$s からのメッセージ" msgid "Notice deleted." msgstr "つぶやきを削除しました。" +#, fuzzy +msgid "Notice" +msgstr "つぶやき" + #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #, fuzzy, php-format msgid "%1$s tagged %2$s" @@ -5404,7 +5396,6 @@ msgstr "ID引数がありません。" msgid "Tag %s" msgstr "タグ %s" -#. TRANS: H2 for user profile information. msgid "User profile" msgstr "ユーザプロファイル" @@ -6110,6 +6101,53 @@ msgstr "" msgid "No AtomPub API service for %s." msgstr "" +#. TRANS: H2 for user actions in a profile. +#. TRANS: H2 for entity actions in a profile. +msgid "User actions" +msgstr "利用者アクション" + +#. TRANS: Text shown in user profile of not yet compeltely deleted users. +msgid "User deletion in progress..." +msgstr "" + +#. TRANS: Link title for link on user profile. +msgid "Edit profile settings" +msgstr "プロファイル設定編集" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "編集" + +#. TRANS: Link title for link on user profile. +msgid "Send a direct message to this user" +msgstr "この利用者にダイレクトメッセージを送る" + +#. TRANS: Link text for link on user profile. +msgid "Message" +msgstr "メッセージ" + +#. TRANS: Label text on user profile to select a user role. +#, fuzzy +msgid "Moderate" +msgstr "管理" + +#. TRANS: Label text on user profile to select a user role. +#, fuzzy +msgid "User role" +msgstr "ユーザプロファイル" + +#. TRANS: Role that can be set for a user profile. +#, fuzzy +msgctxt "role" +msgid "Administrator" +msgstr "管理者" + +#. TRANS: Role that can be set for a user profile. +#, fuzzy +msgctxt "role" +msgid "Moderator" +msgstr "管理" + #. TRANS: Page title. %1$s is the title, %2$s is the site name. #, php-format msgid "%1$s - %2$s" @@ -6836,46 +6874,170 @@ msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "あなたはこのグループのメンバーではありません:" -#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings. -msgid "" -"Commands:\n" -"on - turn on notifications\n" -"off - turn off notifications\n" -"help - show this help\n" -"follow - subscribe to user\n" -"groups - lists the groups you have joined\n" -"subscriptions - list the people you follow\n" -"subscribers - list the people that follow you\n" -"leave - unsubscribe from user\n" -"d - direct message to user\n" -"get - get last notice from user\n" -"whois - get profile info on user\n" -"lose - force user to stop following you\n" -"fav - add user's last notice as a 'fave'\n" -"fav # - add notice with the given id as a 'fave'\n" -"repeat # - repeat a notice with a given id\n" -"repeat - repeat the last notice from user\n" -"reply # - reply to notice with a given id\n" -"reply - reply to the last notice from user\n" -"join - join group\n" -"login - Get a link to login to the web interface\n" -"drop - leave group\n" -"stats - get your stats\n" -"stop - same as 'off'\n" -"quit - same as 'off'\n" -"sub - same as 'follow'\n" -"unsub - same as 'leave'\n" -"last - same as 'get'\n" -"on - not yet implemented.\n" -"off - not yet implemented.\n" -"nudge - remind a user to update.\n" -"invite - not yet implemented.\n" -"track - not yet implemented.\n" -"untrack - not yet implemented.\n" -"track off - not yet implemented.\n" -"untrack all - not yet implemented.\n" -"tracks - not yet implemented.\n" -"tracking - not yet implemented.\n" +#. TRANS: Header line of help text for commands. +#, fuzzy +msgctxt "COMMANDHELP" +msgid "Commands:" +msgstr "コマンド結果" + +#. TRANS: Help message for IM/SMS command "on" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn on notifications" +msgstr "通知をオンできません。" + +#. TRANS: Help message for IM/SMS command "off" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn off notifications" +msgstr "通知をオフできません。" + +#. TRANS: Help message for IM/SMS command "help" +msgctxt "COMMANDHELP" +msgid "show this help" +msgstr "" + +#. TRANS: Help message for IM/SMS command "follow " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "subscribe to user" +msgstr "このユーザーをフォロー" + +#. TRANS: Help message for IM/SMS command "groups" +msgctxt "COMMANDHELP" +msgid "lists the groups you have joined" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscriptions" +msgctxt "COMMANDHELP" +msgid "list the people you follow" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscribers" +msgctxt "COMMANDHELP" +msgid "list the people that follow you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "leave " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "unsubscribe from user" +msgstr "この利用者からのフォローを解除する" + +#. TRANS: Help message for IM/SMS command "d " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "direct message to user" +msgstr "%s へのダイレクトメッセージ" + +#. TRANS: Help message for IM/SMS command "get " +msgctxt "COMMANDHELP" +msgid "get last notice from user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "whois " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "get profile info on user" +msgstr "プロファイル情報" + +#. TRANS: Help message for IM/SMS command "lose " +msgctxt "COMMANDHELP" +msgid "force user to stop following you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav " +msgctxt "COMMANDHELP" +msgid "add user's last notice as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav #" +msgctxt "COMMANDHELP" +msgid "add notice with the given id as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat #" +msgctxt "COMMANDHELP" +msgid "repeat a notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "repeat the last notice from user" +msgstr "このつぶやきを繰り返す" + +#. TRANS: Help message for IM/SMS command "reply #" +msgctxt "COMMANDHELP" +msgid "reply to notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "reply " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "reply to the last notice from user" +msgstr "このつぶやきへ返信" + +#. TRANS: Help message for IM/SMS command "join " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "join group" +msgstr "不明" + +#. TRANS: Help message for IM/SMS command "login" +msgctxt "COMMANDHELP" +msgid "Get a link to login to the web interface" +msgstr "" + +#. TRANS: Help message for IM/SMS command "drop " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "leave group" +msgstr "ユーザ削除" + +#. TRANS: Help message for IM/SMS command "stats" +msgctxt "COMMANDHELP" +msgid "get your stats" +msgstr "" + +#. TRANS: Help message for IM/SMS command "stop" +#. TRANS: Help message for IM/SMS command "quit" +msgctxt "COMMANDHELP" +msgid "same as 'off'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "sub " +msgctxt "COMMANDHELP" +msgid "same as 'follow'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "unsub " +msgctxt "COMMANDHELP" +msgid "same as 'leave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "last " +msgctxt "COMMANDHELP" +msgid "same as 'get'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "on " +#. TRANS: Help message for IM/SMS command "off " +#. TRANS: Help message for IM/SMS command "invite " +#. TRANS: Help message for IM/SMS command "track " +#. TRANS: Help message for IM/SMS command "untrack " +#. TRANS: Help message for IM/SMS command "track off" +#. TRANS: Help message for IM/SMS command "untrack all" +#. TRANS: Help message for IM/SMS command "tracks" +#. TRANS: Help message for IM/SMS command "tracking" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "not yet implemented." +msgstr "コマンドはまだ実装されていません。" + +#. TRANS: Help message for IM/SMS command "nudge " +msgctxt "COMMANDHELP" +msgid "remind a user to update." msgstr "" #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. @@ -7060,6 +7222,9 @@ msgid "" "Location for the group, if any, like \"City, State (or Region), Country\"." msgstr "グループの場所, 例えば \"都市, 都道府県 (または 地域), 国\"" +msgid "Aliases" +msgstr "別名" + #, fuzzy, php-format msgid "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " @@ -7138,6 +7303,10 @@ msgctxt "TOOLTIP" msgid "Add or edit %s design" msgstr "" +#. TRANS: Group actions header (h2). Text hidden by default. +msgid "Group actions" +msgstr "グループアクション" + #. TRANS: Title for groups with the most members section. msgid "Groups with most members" msgstr "メンバー数が多いグループ" @@ -7676,6 +7845,7 @@ msgstr "つぶやきを送る" msgid "What's up, %s?" msgstr "最近どう %s?" +#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "添付" @@ -8133,56 +8303,6 @@ msgstr "フォロー解除" msgid "User %1$s (%2$d) has no profile record." msgstr "ユーザはプロフィールをもっていません。" -msgid "Edit Avatar" -msgstr "アバターを編集する" - -#. TRANS: H2 for user actions in a profile. -#. TRANS: H2 for entity actions in a profile. -msgid "User actions" -msgstr "利用者アクション" - -#. TRANS: Text shown in user profile of not yet compeltely deleted users. -msgid "User deletion in progress..." -msgstr "" - -#. TRANS: Link title for link on user profile. -msgid "Edit profile settings" -msgstr "プロファイル設定編集" - -#. TRANS: Link text for link on user profile. -msgid "Edit" -msgstr "編集" - -#. TRANS: Link title for link on user profile. -msgid "Send a direct message to this user" -msgstr "この利用者にダイレクトメッセージを送る" - -#. TRANS: Link text for link on user profile. -msgid "Message" -msgstr "メッセージ" - -#. TRANS: Label text on user profile to select a user role. -#, fuzzy -msgid "Moderate" -msgstr "管理" - -#. TRANS: Label text on user profile to select a user role. -#, fuzzy -msgid "User role" -msgstr "ユーザプロファイル" - -#. TRANS: Role that can be set for a user profile. -#, fuzzy -msgctxt "role" -msgid "Administrator" -msgstr "管理者" - -#. TRANS: Role that can be set for a user profile. -#, fuzzy -msgctxt "role" -msgid "Moderator" -msgstr "管理" - #, fuzzy msgid "Not allowed to log in." msgstr "ログインしていません。" @@ -8254,3 +8374,9 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" + +#~ msgid "Note" +#~ msgstr "ノート" + +#~ msgid "Edit Avatar" +#~ msgstr "アバターを編集する" diff --git a/locale/ka/LC_MESSAGES/statusnet.po b/locale/ka/LC_MESSAGES/statusnet.po index c282ae94ac..2b54bf0f85 100644 --- a/locale/ka/LC_MESSAGES/statusnet.po +++ b/locale/ka/LC_MESSAGES/statusnet.po @@ -9,17 +9,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-11 18:15+0000\n" -"PO-Revision-Date: 2011-03-11 18:17:16+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:49:45+0000\n" "Language-Team: Georgian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ka\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" +"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -584,7 +584,7 @@ msgstr "მომხმარებლ %1$s-ის გარიცხვა ჯ msgid "%s's groups" msgstr "%s-ს ჯგუფები" -#. TRANS: Used as subtitle in check for group membership. %1$s is a user name, %2$s is the site name. +#. TRANS: Used as subtitle in check for group membership. %1$s is the site name, %2$s is a user name. #, php-format msgid "%1$s groups %2$s is a member of." msgstr "%1$s-ს ის ჯგუფები რომლებშიც გაერთიანებულია %2$s." @@ -4680,18 +4680,6 @@ msgstr "" msgid "%1$s group, page %2$d" msgstr "" -#. TRANS: Label for group description or group note (dt). Text hidden by default. -msgid "Note" -msgstr "შენიშვნა" - -#. TRANS: Label for group aliases (dt). Text hidden by default. -msgid "Aliases" -msgstr "" - -#. TRANS: Group actions header (h2). Text hidden by default. -msgid "Group actions" -msgstr "" - #. TRANS: Tooltip for feed link. %s is a group nickname. #, php-format msgid "Notice feed for %s group (RSS 1.0)" @@ -4794,6 +4782,10 @@ msgstr "" msgid "Notice deleted." msgstr "" +#, fuzzy +msgid "Notice" +msgstr "შეტყობინებები" + #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #, fuzzy, php-format msgid "%1$s tagged %2$s" @@ -5321,7 +5313,6 @@ msgstr "" msgid "Tag %s" msgstr "სანიშნე %s" -#. TRANS: H2 for user profile information. msgid "User profile" msgstr "მომხმარებლის პროფილი" @@ -6040,6 +6031,49 @@ msgstr "" msgid "No AtomPub API service for %s." msgstr "" +#. TRANS: H2 for user actions in a profile. +#. TRANS: H2 for entity actions in a profile. +msgid "User actions" +msgstr "მომხმარებლის მოქმედებები" + +#. TRANS: Text shown in user profile of not yet compeltely deleted users. +msgid "User deletion in progress..." +msgstr "მომხმარებლის წაშლა პროგრესშია..." + +#. TRANS: Link title for link on user profile. +msgid "Edit profile settings" +msgstr "პროფილის პარამეტრების რედაქტირება" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "რედაქტირება" + +#. TRANS: Link title for link on user profile. +msgid "Send a direct message to this user" +msgstr "გაუგზავნე პირდაპირი შეტყობინება ამ მომხმარებელს" + +#. TRANS: Link text for link on user profile. +msgid "Message" +msgstr "შეტყობინება" + +#. TRANS: Label text on user profile to select a user role. +msgid "Moderate" +msgstr "მოდერაცია" + +#. TRANS: Label text on user profile to select a user role. +msgid "User role" +msgstr "მომხმარებლის როლი" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Administrator" +msgstr "ადმინისტრატორი" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Moderator" +msgstr "მოდერატორი" + #. TRANS: Page title. %1$s is the title, %2$s is the site name. #, php-format msgid "%1$s - %2$s" @@ -6762,46 +6796,168 @@ msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "" -#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings. -msgid "" -"Commands:\n" -"on - turn on notifications\n" -"off - turn off notifications\n" -"help - show this help\n" -"follow - subscribe to user\n" -"groups - lists the groups you have joined\n" -"subscriptions - list the people you follow\n" -"subscribers - list the people that follow you\n" -"leave - unsubscribe from user\n" -"d - direct message to user\n" -"get - get last notice from user\n" -"whois - get profile info on user\n" -"lose - force user to stop following you\n" -"fav - add user's last notice as a 'fave'\n" -"fav # - add notice with the given id as a 'fave'\n" -"repeat # - repeat a notice with a given id\n" -"repeat - repeat the last notice from user\n" -"reply # - reply to notice with a given id\n" -"reply - reply to the last notice from user\n" -"join - join group\n" -"login - Get a link to login to the web interface\n" -"drop - leave group\n" -"stats - get your stats\n" -"stop - same as 'off'\n" -"quit - same as 'off'\n" -"sub - same as 'follow'\n" -"unsub - same as 'leave'\n" -"last - same as 'get'\n" -"on - not yet implemented.\n" -"off - not yet implemented.\n" -"nudge - remind a user to update.\n" -"invite - not yet implemented.\n" -"track - not yet implemented.\n" -"untrack - not yet implemented.\n" -"track off - not yet implemented.\n" -"untrack all - not yet implemented.\n" -"tracks - not yet implemented.\n" -"tracking - not yet implemented.\n" +#. TRANS: Header line of help text for commands. +#, fuzzy +msgctxt "COMMANDHELP" +msgid "Commands:" +msgstr "ბრძანების შედეგები" + +#. TRANS: Help message for IM/SMS command "on" +msgctxt "COMMANDHELP" +msgid "turn on notifications" +msgstr "" + +#. TRANS: Help message for IM/SMS command "off" +msgctxt "COMMANDHELP" +msgid "turn off notifications" +msgstr "" + +#. TRANS: Help message for IM/SMS command "help" +msgctxt "COMMANDHELP" +msgid "show this help" +msgstr "" + +#. TRANS: Help message for IM/SMS command "follow " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "subscribe to user" +msgstr "გამოიწერე ეს მომხმარებელი" + +#. TRANS: Help message for IM/SMS command "groups" +msgctxt "COMMANDHELP" +msgid "lists the groups you have joined" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscriptions" +msgctxt "COMMANDHELP" +msgid "list the people you follow" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscribers" +msgctxt "COMMANDHELP" +msgid "list the people that follow you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "leave " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "unsubscribe from user" +msgstr "ამ მომხმარებლის გამოწერის გაუქმება" + +#. TRANS: Help message for IM/SMS command "d " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "direct message to user" +msgstr "%s-სთვის გაგზავნილი პირდაპირი შეტყობინებები" + +#. TRANS: Help message for IM/SMS command "get " +msgctxt "COMMANDHELP" +msgid "get last notice from user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "whois " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "get profile info on user" +msgstr "ინფორმაცია პროფილზე" + +#. TRANS: Help message for IM/SMS command "lose " +msgctxt "COMMANDHELP" +msgid "force user to stop following you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav " +msgctxt "COMMANDHELP" +msgid "add user's last notice as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav #" +msgctxt "COMMANDHELP" +msgid "add notice with the given id as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat #" +msgctxt "COMMANDHELP" +msgid "repeat a notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "repeat the last notice from user" +msgstr "შეტყობინების გამეორება" + +#. TRANS: Help message for IM/SMS command "reply #" +msgctxt "COMMANDHELP" +msgid "reply to notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "reply " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "reply to the last notice from user" +msgstr "უპასუხე ამ შეტყობინებას" + +#. TRANS: Help message for IM/SMS command "join " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "join group" +msgstr "უცნობი" + +#. TRANS: Help message for IM/SMS command "login" +msgctxt "COMMANDHELP" +msgid "Get a link to login to the web interface" +msgstr "" + +#. TRANS: Help message for IM/SMS command "drop " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "leave group" +msgstr "მომხმარებლის წაშლა" + +#. TRANS: Help message for IM/SMS command "stats" +msgctxt "COMMANDHELP" +msgid "get your stats" +msgstr "" + +#. TRANS: Help message for IM/SMS command "stop" +#. TRANS: Help message for IM/SMS command "quit" +msgctxt "COMMANDHELP" +msgid "same as 'off'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "sub " +msgctxt "COMMANDHELP" +msgid "same as 'follow'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "unsub " +msgctxt "COMMANDHELP" +msgid "same as 'leave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "last " +msgctxt "COMMANDHELP" +msgid "same as 'get'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "on " +#. TRANS: Help message for IM/SMS command "off " +#. TRANS: Help message for IM/SMS command "invite " +#. TRANS: Help message for IM/SMS command "track " +#. TRANS: Help message for IM/SMS command "untrack " +#. TRANS: Help message for IM/SMS command "track off" +#. TRANS: Help message for IM/SMS command "untrack all" +#. TRANS: Help message for IM/SMS command "tracks" +#. TRANS: Help message for IM/SMS command "tracking" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "not yet implemented." +msgstr "ბრძანება ჯერ არ არის შემუშავებული." + +#. TRANS: Help message for IM/SMS command "nudge " +msgctxt "COMMANDHELP" +msgid "remind a user to update." msgstr "" #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. @@ -6985,6 +7141,9 @@ msgstr "" "ჯგუფის მდებარეობა არსებობის შემთხვევაში. მაგ.: \"ქალაქი, ქვეყანა (ან რეგიონი)" "\"" +msgid "Aliases" +msgstr "" + #, fuzzy, php-format msgid "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " @@ -7063,6 +7222,10 @@ msgctxt "TOOLTIP" msgid "Add or edit %s design" msgstr "" +#. TRANS: Group actions header (h2). Text hidden by default. +msgid "Group actions" +msgstr "" + #. TRANS: Title for groups with the most members section. msgid "Groups with most members" msgstr "ჯგუფები უმეტესი მომხმარებლებით" @@ -7607,6 +7770,7 @@ msgstr "შეტყობინების გაგზავნა" msgid "What's up, %s?" msgstr "რა არის ახალი %s?" +#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "ფაილის მიმაგრება" @@ -8068,52 +8232,6 @@ msgstr "გამოწერის გაუქმება" msgid "User %1$s (%2$d) has no profile record." msgstr "მომხმარებელს პროფილი არ გააჩნია." -msgid "Edit Avatar" -msgstr "ავატარის რედაქტირება" - -#. TRANS: H2 for user actions in a profile. -#. TRANS: H2 for entity actions in a profile. -msgid "User actions" -msgstr "მომხმარებლის მოქმედებები" - -#. TRANS: Text shown in user profile of not yet compeltely deleted users. -msgid "User deletion in progress..." -msgstr "მომხმარებლის წაშლა პროგრესშია..." - -#. TRANS: Link title for link on user profile. -msgid "Edit profile settings" -msgstr "პროფილის პარამეტრების რედაქტირება" - -#. TRANS: Link text for link on user profile. -msgid "Edit" -msgstr "რედაქტირება" - -#. TRANS: Link title for link on user profile. -msgid "Send a direct message to this user" -msgstr "გაუგზავნე პირდაპირი შეტყობინება ამ მომხმარებელს" - -#. TRANS: Link text for link on user profile. -msgid "Message" -msgstr "შეტყობინება" - -#. TRANS: Label text on user profile to select a user role. -msgid "Moderate" -msgstr "მოდერაცია" - -#. TRANS: Label text on user profile to select a user role. -msgid "User role" -msgstr "მომხმარებლის როლი" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Administrator" -msgstr "ადმინისტრატორი" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Moderator" -msgstr "მოდერატორი" - #, fuzzy msgid "Not allowed to log in." msgstr "ავტორიზებული არ ხართ." @@ -8186,3 +8304,9 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" + +#~ msgid "Note" +#~ msgstr "შენიშვნა" + +#~ msgid "Edit Avatar" +#~ msgstr "ავატარის რედაქტირება" diff --git a/locale/ko/LC_MESSAGES/statusnet.po b/locale/ko/LC_MESSAGES/statusnet.po index 8d0a52c16f..faead36164 100644 --- a/locale/ko/LC_MESSAGES/statusnet.po +++ b/locale/ko/LC_MESSAGES/statusnet.po @@ -11,17 +11,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-11 18:15+0000\n" -"PO-Revision-Date: 2011-03-11 18:17:17+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:49:46+0000\n" "Language-Team: Korean \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ko\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" +"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -581,7 +581,7 @@ msgstr "이용자 %1$s 의 그룹 %2$s 가입에 실패했습니다." msgid "%s's groups" msgstr "%s의 그룹" -#. TRANS: Used as subtitle in check for group membership. %1$s is a user name, %2$s is the site name. +#. TRANS: Used as subtitle in check for group membership. %1$s is the site name, %2$s is a user name. #, php-format msgid "%1$s groups %2$s is a member of." msgstr "%1$s 사이트의 그룹에 %2$s 사용자가 멤버입니다." @@ -4635,18 +4635,6 @@ msgstr "%s 그룹" msgid "%1$s group, page %2$d" msgstr "그룹, %d페이지" -#. TRANS: Label for group description or group note (dt). Text hidden by default. -msgid "Note" -msgstr "설명" - -#. TRANS: Label for group aliases (dt). Text hidden by default. -msgid "Aliases" -msgstr "" - -#. TRANS: Group actions header (h2). Text hidden by default. -msgid "Group actions" -msgstr "그룹 행동" - #. TRANS: Tooltip for feed link. %s is a group nickname. #, php-format msgid "Notice feed for %s group (RSS 1.0)" @@ -4753,6 +4741,10 @@ msgstr "%1$s에서 %2$s까지 메시지" msgid "Notice deleted." msgstr "게시글이 등록되었습니다." +#, fuzzy +msgid "Notice" +msgstr "통지" + #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #, fuzzy, php-format msgid "%1$s tagged %2$s" @@ -5272,7 +5264,6 @@ msgstr "첨부문서 없음" msgid "Tag %s" msgstr "태그 %s" -#. TRANS: H2 for user profile information. msgid "User profile" msgstr "이용자 프로필" @@ -5984,6 +5975,50 @@ msgstr "" msgid "No AtomPub API service for %s." msgstr "" +#. TRANS: H2 for user actions in a profile. +#. TRANS: H2 for entity actions in a profile. +msgid "User actions" +msgstr "사용자 동작" + +#. TRANS: Text shown in user profile of not yet compeltely deleted users. +msgid "User deletion in progress..." +msgstr "" + +#. TRANS: Link title for link on user profile. +msgid "Edit profile settings" +msgstr "프로필 설정" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "편집" + +#. TRANS: Link title for link on user profile. +msgid "Send a direct message to this user" +msgstr "이 회원에게 직접 메시지를 보냅니다." + +#. TRANS: Link text for link on user profile. +msgid "Message" +msgstr "메시지" + +#. TRANS: Label text on user profile to select a user role. +msgid "Moderate" +msgstr "" + +#. TRANS: Label text on user profile to select a user role. +#, fuzzy +msgid "User role" +msgstr "이용자 프로필" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Administrator" +msgstr "관리자" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Moderator" +msgstr "" + #. TRANS: Page title. %1$s is the title, %2$s is the site name. #, php-format msgid "%1$s - %2$s" @@ -6707,46 +6742,170 @@ msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "당신은 해당 그룹의 멤버가 아닙니다." -#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings. -msgid "" -"Commands:\n" -"on - turn on notifications\n" -"off - turn off notifications\n" -"help - show this help\n" -"follow - subscribe to user\n" -"groups - lists the groups you have joined\n" -"subscriptions - list the people you follow\n" -"subscribers - list the people that follow you\n" -"leave - unsubscribe from user\n" -"d - direct message to user\n" -"get - get last notice from user\n" -"whois - get profile info on user\n" -"lose - force user to stop following you\n" -"fav - add user's last notice as a 'fave'\n" -"fav # - add notice with the given id as a 'fave'\n" -"repeat # - repeat a notice with a given id\n" -"repeat - repeat the last notice from user\n" -"reply # - reply to notice with a given id\n" -"reply - reply to the last notice from user\n" -"join - join group\n" -"login - Get a link to login to the web interface\n" -"drop - leave group\n" -"stats - get your stats\n" -"stop - same as 'off'\n" -"quit - same as 'off'\n" -"sub - same as 'follow'\n" -"unsub - same as 'leave'\n" -"last - same as 'get'\n" -"on - not yet implemented.\n" -"off - not yet implemented.\n" -"nudge - remind a user to update.\n" -"invite - not yet implemented.\n" -"track - not yet implemented.\n" -"untrack - not yet implemented.\n" -"track off - not yet implemented.\n" -"untrack all - not yet implemented.\n" -"tracks - not yet implemented.\n" -"tracking - not yet implemented.\n" +#. TRANS: Header line of help text for commands. +#, fuzzy +msgctxt "COMMANDHELP" +msgid "Commands:" +msgstr "실행결과" + +#. TRANS: Help message for IM/SMS command "on" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn on notifications" +msgstr "알림을 켤 수 없습니다." + +#. TRANS: Help message for IM/SMS command "off" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn off notifications" +msgstr "알림을 끌 수 없습니다." + +#. TRANS: Help message for IM/SMS command "help" +msgctxt "COMMANDHELP" +msgid "show this help" +msgstr "" + +#. TRANS: Help message for IM/SMS command "follow " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "subscribe to user" +msgstr "이 회원을 구독합니다." + +#. TRANS: Help message for IM/SMS command "groups" +msgctxt "COMMANDHELP" +msgid "lists the groups you have joined" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscriptions" +msgctxt "COMMANDHELP" +msgid "list the people you follow" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscribers" +msgctxt "COMMANDHELP" +msgid "list the people that follow you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "leave " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "unsubscribe from user" +msgstr "이 사용자로부터 구독취소합니다." + +#. TRANS: Help message for IM/SMS command "d " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "direct message to user" +msgstr "%s에게 직접 메시지" + +#. TRANS: Help message for IM/SMS command "get " +msgctxt "COMMANDHELP" +msgid "get last notice from user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "whois " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "get profile info on user" +msgstr "프로필 정보" + +#. TRANS: Help message for IM/SMS command "lose " +msgctxt "COMMANDHELP" +msgid "force user to stop following you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav " +msgctxt "COMMANDHELP" +msgid "add user's last notice as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav #" +msgctxt "COMMANDHELP" +msgid "add notice with the given id as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat #" +msgctxt "COMMANDHELP" +msgid "repeat a notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "repeat the last notice from user" +msgstr "이 게시글에 대해 답장하기" + +#. TRANS: Help message for IM/SMS command "reply #" +msgctxt "COMMANDHELP" +msgid "reply to notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "reply " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "reply to the last notice from user" +msgstr "이 게시글에 대해 답장하기" + +#. TRANS: Help message for IM/SMS command "join " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "join group" +msgstr "알려지지 않은 행동" + +#. TRANS: Help message for IM/SMS command "login" +msgctxt "COMMANDHELP" +msgid "Get a link to login to the web interface" +msgstr "" + +#. TRANS: Help message for IM/SMS command "drop " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "leave group" +msgstr "이용자 삭제" + +#. TRANS: Help message for IM/SMS command "stats" +msgctxt "COMMANDHELP" +msgid "get your stats" +msgstr "" + +#. TRANS: Help message for IM/SMS command "stop" +#. TRANS: Help message for IM/SMS command "quit" +msgctxt "COMMANDHELP" +msgid "same as 'off'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "sub " +msgctxt "COMMANDHELP" +msgid "same as 'follow'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "unsub " +msgctxt "COMMANDHELP" +msgid "same as 'leave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "last " +msgctxt "COMMANDHELP" +msgid "same as 'get'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "on " +#. TRANS: Help message for IM/SMS command "off " +#. TRANS: Help message for IM/SMS command "invite " +#. TRANS: Help message for IM/SMS command "track " +#. TRANS: Help message for IM/SMS command "untrack " +#. TRANS: Help message for IM/SMS command "track off" +#. TRANS: Help message for IM/SMS command "untrack all" +#. TRANS: Help message for IM/SMS command "tracks" +#. TRANS: Help message for IM/SMS command "tracking" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "not yet implemented." +msgstr "명령이 아직 실행되지 않았습니다." + +#. TRANS: Help message for IM/SMS command "nudge " +msgctxt "COMMANDHELP" +msgid "remind a user to update." msgstr "" #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. @@ -6929,6 +7088,9 @@ msgid "" "Location for the group, if any, like \"City, State (or Region), Country\"." msgstr "그룹의 위치, \"시/군/구, 도, 국가\"" +msgid "Aliases" +msgstr "" + #, php-format msgid "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " @@ -7005,6 +7167,10 @@ msgctxt "TOOLTIP" msgid "Add or edit %s design" msgstr "" +#. TRANS: Group actions header (h2). Text hidden by default. +msgid "Group actions" +msgstr "그룹 행동" + #. TRANS: Title for groups with the most members section. msgid "Groups with most members" msgstr "가장 많은 회원수를 가진 그룹들" @@ -7469,6 +7635,7 @@ msgstr "게시글 보내기" msgid "What's up, %s?" msgstr "뭐하세요 %s님?" +#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "첨부" @@ -7931,53 +8098,6 @@ msgstr "구독 해제" msgid "User %1$s (%2$d) has no profile record." msgstr "이용자가 프로필을 가지고 있지 않습니다." -msgid "Edit Avatar" -msgstr "아바타 편집" - -#. TRANS: H2 for user actions in a profile. -#. TRANS: H2 for entity actions in a profile. -msgid "User actions" -msgstr "사용자 동작" - -#. TRANS: Text shown in user profile of not yet compeltely deleted users. -msgid "User deletion in progress..." -msgstr "" - -#. TRANS: Link title for link on user profile. -msgid "Edit profile settings" -msgstr "프로필 설정" - -#. TRANS: Link text for link on user profile. -msgid "Edit" -msgstr "편집" - -#. TRANS: Link title for link on user profile. -msgid "Send a direct message to this user" -msgstr "이 회원에게 직접 메시지를 보냅니다." - -#. TRANS: Link text for link on user profile. -msgid "Message" -msgstr "메시지" - -#. TRANS: Label text on user profile to select a user role. -msgid "Moderate" -msgstr "" - -#. TRANS: Label text on user profile to select a user role. -#, fuzzy -msgid "User role" -msgstr "이용자 프로필" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Administrator" -msgstr "관리자" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Moderator" -msgstr "" - #, fuzzy msgid "Not allowed to log in." msgstr "로그인하고 있지 않습니다." @@ -8049,3 +8169,9 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" + +#~ msgid "Note" +#~ msgstr "설명" + +#~ msgid "Edit Avatar" +#~ msgstr "아바타 편집" diff --git a/locale/mk/LC_MESSAGES/statusnet.po b/locale/mk/LC_MESSAGES/statusnet.po index 330d0022dc..f5298423de 100644 --- a/locale/mk/LC_MESSAGES/statusnet.po +++ b/locale/mk/LC_MESSAGES/statusnet.po @@ -10,17 +10,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-11 18:15+0000\n" -"PO-Revision-Date: 2011-03-11 18:17:18+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:49:47+0000\n" "Language-Team: Macedonian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: mk\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n == 1 || n%10 == 1) ? 0 : 1;\n" -"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" +"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -593,7 +593,7 @@ msgstr "Не можев да го отстранам корисникот %1$s msgid "%s's groups" msgstr "%s групи" -#. TRANS: Used as subtitle in check for group membership. %1$s is a user name, %2$s is the site name. +#. TRANS: Used as subtitle in check for group membership. %1$s is the site name, %2$s is a user name. #, php-format msgid "%1$s groups %2$s is a member of." msgstr "%1$s групи кадешто членува %2$s." @@ -1041,9 +1041,8 @@ msgid "Can only fave notices." msgstr "Може само да бендисува забелешки." #. TRANS: Client exception thrown when trying favorite a notice without content. -#, fuzzy msgid "Unknown notice." -msgstr "Непозната белешка." +msgstr "Непозната забелешка." #. TRANS: Client exception thrown when trying favorite an already favorited notice. msgid "Already a favorite." @@ -3090,9 +3089,8 @@ msgstr "Треба изворна URL-адреса." msgid "Could not create application." msgstr "Не можеше да се создаде програмот." -#, fuzzy msgid "Invalid image." -msgstr "Погрешна големина." +msgstr "Неважечка слика." #. TRANS: Title for form to create a group. msgid "New group" @@ -3381,10 +3379,9 @@ msgstr "" "имате испратено." #. TRANS: Title for page where to change password. -#, fuzzy msgctxt "TITLE" msgid "Change password" -msgstr "Промени ја лозинката" +msgstr "Смени лозинка" #. TRANS: Instructions for page where to change password. msgid "Change your password." @@ -3409,7 +3406,6 @@ msgid "6 or more characters." msgstr "6 или повеќе знаци." #. TRANS: Field label on page where to change password. In this field the new password should be typed a second time. -#, fuzzy msgctxt "LABEL" msgid "Confirm" msgstr "Потврди" @@ -3420,10 +3416,9 @@ msgid "Same as password above." msgstr "Исто како лозинката погоре." #. TRANS: Button text on page where to change password. -#, fuzzy msgctxt "BUTTON" msgid "Change" -msgstr "Промени" +msgstr "Измени" #. TRANS: Form validation error on page where to change password. msgid "Password must be 6 or more characters." @@ -3433,9 +3428,8 @@ msgid "Passwords don't match." msgstr "Лозинките не се совпаѓаат." #. TRANS: Form validation error on page where to change password. -#, fuzzy msgid "Incorrect old password." -msgstr "Неточна стара лозинка" +msgstr "Погрешна стара лозинка." #. TRANS: Form validation error on page where to change password. msgid "Error saving user; invalid." @@ -3522,12 +3516,10 @@ msgid "Fancy URLs" msgstr "Интересни URL-адреси" #. TRANS: Field title in Paths admin panel. -#, fuzzy msgid "Use fancy URLs (more readable and memorable)?" msgstr "Да користам интересни (почитливи и повпечатливи) URL-адреси?" #. TRANS: Fieldset legend in Paths admin panel. -#, fuzzy msgctxt "LEGEND" msgid "Theme" msgstr "Изглед" @@ -3641,7 +3633,6 @@ msgid "Directory where attachments are located." msgstr "Директориумот кадешто се сместени прилозите." #. TRANS: Fieldset legend in Paths admin panel. -#, fuzzy msgctxt "LEGEND" msgid "SSL" msgstr "SSL" @@ -3726,7 +3717,6 @@ msgid "Enabled" msgstr "Овозможено" #. TRANS: Tab and title for plugins admin panel. -#, fuzzy msgctxt "TITLE" msgid "Plugins" msgstr "Приклучоци" @@ -3757,7 +3747,7 @@ msgstr "Неважечка содржина на забелешката." #. TRANS: Exception thrown if a notice's license is not compatible with the StatusNet site license. #. TRANS: %1$s is the notice license, %2$s is the StatusNet site's license. -#, fuzzy, php-format +#, php-format msgid "Notice license \"%1$s\" is not compatible with site license \"%2$s\"." msgstr "" "Лиценцата на забелешката „%1$s“ не е соодветна на лиценцата на мрежното " @@ -4624,18 +4614,6 @@ msgstr "Група %s" msgid "%1$s group, page %2$d" msgstr "Група %1$s, стр. %2$d" -#. TRANS: Label for group description or group note (dt). Text hidden by default. -msgid "Note" -msgstr "Забелешка" - -#. TRANS: Label for group aliases (dt). Text hidden by default. -msgid "Aliases" -msgstr "Алијаси" - -#. TRANS: Group actions header (h2). Text hidden by default. -msgid "Group actions" -msgstr "Групни дејства" - #. TRANS: Tooltip for feed link. %s is a group nickname. #, php-format msgid "Notice feed for %s group (RSS 1.0)" @@ -4746,6 +4724,10 @@ msgstr "Порака од %1$s на %2$s" msgid "Notice deleted." msgstr "Избришана забелешка" +#, fuzzy +msgid "Notice" +msgstr "Забелешки" + #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #, php-format msgid "%1$s tagged %2$s" @@ -5282,7 +5264,6 @@ msgstr "Нема ID-аргумент." msgid "Tag %s" msgstr "Означи %s" -#. TRANS: H2 for user profile information. msgid "User profile" msgstr "Кориснички профил" @@ -5999,6 +5980,49 @@ msgstr "Не можам да најдам XRD за %s." msgid "No AtomPub API service for %s." msgstr "Нема служба за API на AtomPub за %s." +#. TRANS: H2 for user actions in a profile. +#. TRANS: H2 for entity actions in a profile. +msgid "User actions" +msgstr "Кориснички дејства" + +#. TRANS: Text shown in user profile of not yet compeltely deleted users. +msgid "User deletion in progress..." +msgstr "Бришењето на корисникот е во тек..." + +#. TRANS: Link title for link on user profile. +msgid "Edit profile settings" +msgstr "Уреди нагодувања на профилот" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "Уреди" + +#. TRANS: Link title for link on user profile. +msgid "Send a direct message to this user" +msgstr "Испрати му директна порака на корисников" + +#. TRANS: Link text for link on user profile. +msgid "Message" +msgstr "Порака" + +#. TRANS: Label text on user profile to select a user role. +msgid "Moderate" +msgstr "Модерирај" + +#. TRANS: Label text on user profile to select a user role. +msgid "User role" +msgstr "Корисничка улога" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Administrator" +msgstr "Администратор" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Moderator" +msgstr "Модератор" + #. TRANS: Page title. %1$s is the title, %2$s is the site name. #, php-format msgid "%1$s - %2$s" @@ -6718,84 +6742,172 @@ msgid_plural "You are a member of these groups:" msgstr[0] "Не ни го испративте тој профил." msgstr[1] "Не ни го испративте тој профил." -#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings. -msgid "" -"Commands:\n" -"on - turn on notifications\n" -"off - turn off notifications\n" -"help - show this help\n" -"follow - subscribe to user\n" -"groups - lists the groups you have joined\n" -"subscriptions - list the people you follow\n" -"subscribers - list the people that follow you\n" -"leave - unsubscribe from user\n" -"d - direct message to user\n" -"get - get last notice from user\n" -"whois - get profile info on user\n" -"lose - force user to stop following you\n" -"fav - add user's last notice as a 'fave'\n" -"fav # - add notice with the given id as a 'fave'\n" -"repeat # - repeat a notice with a given id\n" -"repeat - repeat the last notice from user\n" -"reply # - reply to notice with a given id\n" -"reply - reply to the last notice from user\n" -"join - join group\n" -"login - Get a link to login to the web interface\n" -"drop - leave group\n" -"stats - get your stats\n" -"stop - same as 'off'\n" -"quit - same as 'off'\n" -"sub - same as 'follow'\n" -"unsub - same as 'leave'\n" -"last - same as 'get'\n" -"on - not yet implemented.\n" -"off - not yet implemented.\n" -"nudge - remind a user to update.\n" -"invite - not yet implemented.\n" -"track - not yet implemented.\n" -"untrack - not yet implemented.\n" -"track off - not yet implemented.\n" -"untrack all - not yet implemented.\n" -"tracks - not yet implemented.\n" -"tracking - not yet implemented.\n" +#. TRANS: Header line of help text for commands. +#, fuzzy +msgctxt "COMMANDHELP" +msgid "Commands:" +msgstr "Резултати од наредбата" + +#. TRANS: Help message for IM/SMS command "on" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn on notifications" +msgstr "Не можам да вклучам известување." + +#. TRANS: Help message for IM/SMS command "off" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn off notifications" +msgstr "Не можам да исклучам известување." + +#. TRANS: Help message for IM/SMS command "help" +msgctxt "COMMANDHELP" +msgid "show this help" +msgstr "" + +#. TRANS: Help message for IM/SMS command "follow " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "subscribe to user" +msgstr "Претплати се на корисников" + +#. TRANS: Help message for IM/SMS command "groups" +msgctxt "COMMANDHELP" +msgid "lists the groups you have joined" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscriptions" +msgctxt "COMMANDHELP" +msgid "list the people you follow" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscribers" +msgctxt "COMMANDHELP" +msgid "list the people that follow you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "leave " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "unsubscribe from user" +msgstr "Откажи претплата од овој корсиник" + +#. TRANS: Help message for IM/SMS command "d " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "direct message to user" +msgstr "Директни пораки до %s" + +#. TRANS: Help message for IM/SMS command "get " +msgctxt "COMMANDHELP" +msgid "get last notice from user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "whois " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "get profile info on user" +msgstr "Далечинскиот профил не е група!" + +#. TRANS: Help message for IM/SMS command "lose " +msgctxt "COMMANDHELP" +msgid "force user to stop following you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav " +msgctxt "COMMANDHELP" +msgid "add user's last notice as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav #" +msgctxt "COMMANDHELP" +msgid "add notice with the given id as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat #" +msgctxt "COMMANDHELP" +msgid "repeat a notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "repeat the last notice from user" +msgstr "Повтори ја забелешкава" + +#. TRANS: Help message for IM/SMS command "reply #" +msgctxt "COMMANDHELP" +msgid "reply to notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "reply " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "reply to the last notice from user" +msgstr "Одговори на забелешкава" + +#. TRANS: Help message for IM/SMS command "join " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "join group" +msgstr "Непозната група." + +#. TRANS: Help message for IM/SMS command "login" +msgctxt "COMMANDHELP" +msgid "Get a link to login to the web interface" +msgstr "" + +#. TRANS: Help message for IM/SMS command "drop " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "leave group" +msgstr "Избриши група" + +#. TRANS: Help message for IM/SMS command "stats" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "get your stats" +msgstr "Подновете си го статусот..." + +#. TRANS: Help message for IM/SMS command "stop" +#. TRANS: Help message for IM/SMS command "quit" +msgctxt "COMMANDHELP" +msgid "same as 'off'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "sub " +msgctxt "COMMANDHELP" +msgid "same as 'follow'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "unsub " +msgctxt "COMMANDHELP" +msgid "same as 'leave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "last " +msgctxt "COMMANDHELP" +msgid "same as 'get'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "on " +#. TRANS: Help message for IM/SMS command "off " +#. TRANS: Help message for IM/SMS command "invite " +#. TRANS: Help message for IM/SMS command "track " +#. TRANS: Help message for IM/SMS command "untrack " +#. TRANS: Help message for IM/SMS command "track off" +#. TRANS: Help message for IM/SMS command "untrack all" +#. TRANS: Help message for IM/SMS command "tracks" +#. TRANS: Help message for IM/SMS command "tracking" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "not yet implemented." +msgstr "Наредбата сè уште не е имплементирана." + +#. TRANS: Help message for IM/SMS command "nudge " +msgctxt "COMMANDHELP" +msgid "remind a user to update." msgstr "" -"Наредби:\n" -"on - вклучи известувања\n" -"off - исклучи известувања\n" -"help - прикажи ја оваа помош\n" -"follow - претплати се на корисник\n" -"groups - список на групи кадешто членувате\n" -"subscriptions - список на луѓе кои ги следите\n" -"subscribers - список на луѓе кои Ве следат\n" -"leave - откажи претплата на корисник\n" -"d - директна порака за корисник\n" -"get - прикажи последна забелешка на корисник\n" -"whois - прикажи профилни информации за корисник\n" -"fav - додај ја последната забелешка на корисникот во бендисани\n" -"fav # - додај забелешка со даден id како бендисана\n" -"repeat # - повтори забелешка со даден id\n" -"repeat - повтори последна забелешка на корисник\n" -"reply # - одговори на забелешка со даден id\n" -"reply - одговори на последна забелешка на корисник\n" -"join - зачлени се во група\n" -"login - Дај врска за најавување на посредникот\n" -"drop - напушти група\n" -"stats - прикажи мои статистики\n" -"stop - исто што и 'off'\n" -"quit - исто што и 'off'\n" -"sub - исто што и 'follow'\n" -"unsub - исто што и 'leave'\n" -"last - исто што и 'get'\n" -"on - сè уште не е имплементирано.\n" -"off - сè уште не е имплементирано.\n" -"nudge - потсети корисник да поднови.\n" -"invite - сè уште не е имплементирано.\n" -"track - сè уште не е имплементирано.\n" -"untrack - сè уште не е имплементирано.\n" -"track off - сè уште не е имплементирано.\n" -"untrack all - сè уште не е имплементирано.\n" -"tracks - сè уште не е имплементирано.\n" -"tracking - сè уште не е имплементирано.\n" #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. msgid "No configuration file found." @@ -6968,6 +7080,9 @@ msgid "" msgstr "" "Местоположба на групата (ако има). На пр. „Град, Сој. држава/област, Земја“" +msgid "Aliases" +msgstr "Алијаси" + #, php-format msgid "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " @@ -7049,6 +7164,10 @@ msgctxt "TOOLTIP" msgid "Add or edit %s design" msgstr "Додавање или уредување на изгледот на групата „%s“" +#. TRANS: Group actions header (h2). Text hidden by default. +msgid "Group actions" +msgstr "Групни дејства" + #. TRANS: Title for groups with the most members section. msgid "Groups with most members" msgstr "Групи со највеќе членови" @@ -7621,6 +7740,7 @@ msgstr "Испрати забелешка" msgid "What's up, %s?" msgstr "Што има ново, %s?" +#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Приложи" @@ -7689,7 +7809,7 @@ msgid "Notice repeated" msgstr "Забелешката е повторена" msgid "Update your status..." -msgstr "" +msgstr "Подновете си го статусот..." msgid "Nudge this user" msgstr "Подбуцни го корисников" @@ -8073,52 +8193,6 @@ msgstr "Откажи ја претплатата" msgid "User %1$s (%2$d) has no profile record." msgstr "Корисникот %1$s (%2$d) нема профилен запис." -msgid "Edit Avatar" -msgstr "Уреди аватар" - -#. TRANS: H2 for user actions in a profile. -#. TRANS: H2 for entity actions in a profile. -msgid "User actions" -msgstr "Кориснички дејства" - -#. TRANS: Text shown in user profile of not yet compeltely deleted users. -msgid "User deletion in progress..." -msgstr "Бришењето на корисникот е во тек..." - -#. TRANS: Link title for link on user profile. -msgid "Edit profile settings" -msgstr "Уреди нагодувања на профилот" - -#. TRANS: Link text for link on user profile. -msgid "Edit" -msgstr "Уреди" - -#. TRANS: Link title for link on user profile. -msgid "Send a direct message to this user" -msgstr "Испрати му директна порака на корисников" - -#. TRANS: Link text for link on user profile. -msgid "Message" -msgstr "Порака" - -#. TRANS: Label text on user profile to select a user role. -msgid "Moderate" -msgstr "Модерирај" - -#. TRANS: Label text on user profile to select a user role. -msgid "User role" -msgstr "Корисничка улога" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Administrator" -msgstr "Администратор" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Moderator" -msgstr "Модератор" - msgid "Not allowed to log in." msgstr "Не Ви е дозволено да се најавите." @@ -8193,3 +8267,88 @@ msgstr "Неважечки XML. Нема XRD-корен." #, php-format msgid "Getting backup from file '%s'." msgstr "Земам резерва на податотеката „%s“." + +#~ msgid "Note" +#~ msgstr "Забелешка" + +#~ msgid "" +#~ "Commands:\n" +#~ "on - turn on notifications\n" +#~ "off - turn off notifications\n" +#~ "help - show this help\n" +#~ "follow - subscribe to user\n" +#~ "groups - lists the groups you have joined\n" +#~ "subscriptions - list the people you follow\n" +#~ "subscribers - list the people that follow you\n" +#~ "leave - unsubscribe from user\n" +#~ "d - direct message to user\n" +#~ "get - get last notice from user\n" +#~ "whois - get profile info on user\n" +#~ "lose - force user to stop following you\n" +#~ "fav - add user's last notice as a 'fave'\n" +#~ "fav # - add notice with the given id as a 'fave'\n" +#~ "repeat # - repeat a notice with a given id\n" +#~ "repeat - repeat the last notice from user\n" +#~ "reply # - reply to notice with a given id\n" +#~ "reply - reply to the last notice from user\n" +#~ "join - join group\n" +#~ "login - Get a link to login to the web interface\n" +#~ "drop - leave group\n" +#~ "stats - get your stats\n" +#~ "stop - same as 'off'\n" +#~ "quit - same as 'off'\n" +#~ "sub - same as 'follow'\n" +#~ "unsub - same as 'leave'\n" +#~ "last - same as 'get'\n" +#~ "on - not yet implemented.\n" +#~ "off - not yet implemented.\n" +#~ "nudge - remind a user to update.\n" +#~ "invite - not yet implemented.\n" +#~ "track - not yet implemented.\n" +#~ "untrack - not yet implemented.\n" +#~ "track off - not yet implemented.\n" +#~ "untrack all - not yet implemented.\n" +#~ "tracks - not yet implemented.\n" +#~ "tracking - not yet implemented.\n" +#~ msgstr "" +#~ "Наредби:\n" +#~ "on - вклучи известувања\n" +#~ "off - исклучи известувања\n" +#~ "help - прикажи ја оваа помош\n" +#~ "follow - претплати се на корисник\n" +#~ "groups - список на групи кадешто членувате\n" +#~ "subscriptions - список на луѓе кои ги следите\n" +#~ "subscribers - список на луѓе кои Ве следат\n" +#~ "leave - откажи претплата на корисник\n" +#~ "d - директна порака за корисник\n" +#~ "get - прикажи последна забелешка на корисник\n" +#~ "whois - прикажи профилни информации за корисник\n" +#~ "fav - додај ја последната забелешка на корисникот во " +#~ "бендисани\n" +#~ "fav # - додај забелешка со даден id како бендисана\n" +#~ "repeat # - повтори забелешка со даден id\n" +#~ "repeat - повтори последна забелешка на корисник\n" +#~ "reply # - одговори на забелешка со даден id\n" +#~ "reply - одговори на последна забелешка на корисник\n" +#~ "join - зачлени се во група\n" +#~ "login - Дај врска за најавување на посредникот\n" +#~ "drop - напушти група\n" +#~ "stats - прикажи мои статистики\n" +#~ "stop - исто што и 'off'\n" +#~ "quit - исто што и 'off'\n" +#~ "sub - исто што и 'follow'\n" +#~ "unsub - исто што и 'leave'\n" +#~ "last - исто што и 'get'\n" +#~ "on - сè уште не е имплементирано.\n" +#~ "off - сè уште не е имплементирано.\n" +#~ "nudge - потсети корисник да поднови.\n" +#~ "invite - сè уште не е имплементирано.\n" +#~ "track - сè уште не е имплементирано.\n" +#~ "untrack - сè уште не е имплементирано.\n" +#~ "track off - сè уште не е имплементирано.\n" +#~ "untrack all - сè уште не е имплементирано.\n" +#~ "tracks - сè уште не е имплементирано.\n" +#~ "tracking - сè уште не е имплементирано.\n" + +#~ msgid "Edit Avatar" +#~ msgstr "Уреди аватар" diff --git a/locale/ml/LC_MESSAGES/statusnet.po b/locale/ml/LC_MESSAGES/statusnet.po index 11c70d96e5..a3e79892f0 100644 --- a/locale/ml/LC_MESSAGES/statusnet.po +++ b/locale/ml/LC_MESSAGES/statusnet.po @@ -9,13 +9,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-11 18:15+0000\n" -"PO-Revision-Date: 2011-03-11 18:17:19+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:49:48+0000\n" "Language-Team: Malayalam \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" -"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ml\n" "X-Message-Group: #out-statusnet-core\n" @@ -573,7 +573,7 @@ msgstr "%2$s എന്ന സംഘത്തിൽ നിന്നും %1$s msgid "%s's groups" msgstr "%s എന്ന ഉപയോക്താവിന്റെ സംഘങ്ങൾ" -#. TRANS: Used as subtitle in check for group membership. %1$s is a user name, %2$s is the site name. +#. TRANS: Used as subtitle in check for group membership. %1$s is the site name, %2$s is a user name. #, php-format msgid "%1$s groups %2$s is a member of." msgstr "%2$s അംഗമായ %1$s സംഘങ്ങൾ." @@ -4482,18 +4482,6 @@ msgstr "%s സംഘം" msgid "%1$s group, page %2$d" msgstr "%1$s സംഘം, താൾ %2$d" -#. TRANS: Label for group description or group note (dt). Text hidden by default. -msgid "Note" -msgstr "കുറിപ്പ്" - -#. TRANS: Label for group aliases (dt). Text hidden by default. -msgid "Aliases" -msgstr "" - -#. TRANS: Group actions header (h2). Text hidden by default. -msgid "Group actions" -msgstr "സംഘത്തിന്റെ പ്രവൃത്തികൾ" - #. TRANS: Tooltip for feed link. %s is a group nickname. #, php-format msgid "Notice feed for %s group (RSS 1.0)" @@ -4594,6 +4582,10 @@ msgstr "%2$s സംരംഭത്തിൽ %1$s അയച്ച സന്ദേ msgid "Notice deleted." msgstr "അറിയിപ്പ് മായ്ച്ചിരിക്കുന്നു." +#, fuzzy +msgid "Notice" +msgstr "അറിയിപ്പുകൾ" + #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #, php-format msgid "%1$s tagged %2$s" @@ -5111,7 +5103,6 @@ msgstr "" msgid "Tag %s" msgstr "റ്റാഗ് %s" -#. TRANS: H2 for user profile information. msgid "User profile" msgstr "" @@ -5784,6 +5775,49 @@ msgstr "" msgid "No AtomPub API service for %s." msgstr "" +#. TRANS: H2 for user actions in a profile. +#. TRANS: H2 for entity actions in a profile. +msgid "User actions" +msgstr "ഉപയോക്തൃ പ്രവൃത്തികൾ" + +#. TRANS: Text shown in user profile of not yet compeltely deleted users. +msgid "User deletion in progress..." +msgstr "ഉപയോക്താവിനെ നീക്കം ചെയ്യൽ പുരോഗമിക്കുന്നു..." + +#. TRANS: Link title for link on user profile. +msgid "Edit profile settings" +msgstr "ക്രമീകരണങ്ങളുടെ സജ്ജീകരണം മാറ്റുക" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "തിരുത്തുക" + +#. TRANS: Link title for link on user profile. +msgid "Send a direct message to this user" +msgstr "ഈ ഉപയോക്താവിന് നേരിട്ട് സന്ദേശമയയ്ക്കുക" + +#. TRANS: Link text for link on user profile. +msgid "Message" +msgstr "സന്ദേശം" + +#. TRANS: Label text on user profile to select a user role. +msgid "Moderate" +msgstr "മാദ്ധ്യസ്ഥം വഹിക്കുക" + +#. TRANS: Label text on user profile to select a user role. +msgid "User role" +msgstr "" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Administrator" +msgstr "കാര്യനിർവ്വാഹക(ൻ)" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Moderator" +msgstr "മദ്ധ്യസ്ഥ(ൻ)" + #. TRANS: Page title. %1$s is the title, %2$s is the site name. #, php-format msgid "%1$s - %2$s" @@ -6488,46 +6522,166 @@ msgid_plural "You are a member of these groups:" msgstr[0] "താങ്കൾ ഈ സംഘത്തിലെ അംഗമാണ്:" msgstr[1] "താങ്കൾ ഈ സംഘങ്ങളിലെ അംഗമാണ്:" -#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings. -msgid "" -"Commands:\n" -"on - turn on notifications\n" -"off - turn off notifications\n" -"help - show this help\n" -"follow - subscribe to user\n" -"groups - lists the groups you have joined\n" -"subscriptions - list the people you follow\n" -"subscribers - list the people that follow you\n" -"leave - unsubscribe from user\n" -"d - direct message to user\n" -"get - get last notice from user\n" -"whois - get profile info on user\n" -"lose - force user to stop following you\n" -"fav - add user's last notice as a 'fave'\n" -"fav # - add notice with the given id as a 'fave'\n" -"repeat # - repeat a notice with a given id\n" -"repeat - repeat the last notice from user\n" -"reply # - reply to notice with a given id\n" -"reply - reply to the last notice from user\n" -"join - join group\n" -"login - Get a link to login to the web interface\n" -"drop - leave group\n" -"stats - get your stats\n" -"stop - same as 'off'\n" -"quit - same as 'off'\n" -"sub - same as 'follow'\n" -"unsub - same as 'leave'\n" -"last - same as 'get'\n" -"on - not yet implemented.\n" -"off - not yet implemented.\n" -"nudge - remind a user to update.\n" -"invite - not yet implemented.\n" -"track - not yet implemented.\n" -"untrack - not yet implemented.\n" -"track off - not yet implemented.\n" -"untrack all - not yet implemented.\n" -"tracks - not yet implemented.\n" -"tracking - not yet implemented.\n" +#. TRANS: Header line of help text for commands. +msgctxt "COMMANDHELP" +msgid "Commands:" +msgstr "" + +#. TRANS: Help message for IM/SMS command "on" +msgctxt "COMMANDHELP" +msgid "turn on notifications" +msgstr "" + +#. TRANS: Help message for IM/SMS command "off" +msgctxt "COMMANDHELP" +msgid "turn off notifications" +msgstr "" + +#. TRANS: Help message for IM/SMS command "help" +msgctxt "COMMANDHELP" +msgid "show this help" +msgstr "" + +#. TRANS: Help message for IM/SMS command "follow " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "subscribe to user" +msgstr "ഈ ഉപയോക്താവിന്റെ വരിക്കാരൻ/വരിക്കാരി ആകുക" + +#. TRANS: Help message for IM/SMS command "groups" +msgctxt "COMMANDHELP" +msgid "lists the groups you have joined" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscriptions" +msgctxt "COMMANDHELP" +msgid "list the people you follow" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscribers" +msgctxt "COMMANDHELP" +msgid "list the people that follow you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "leave " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "unsubscribe from user" +msgstr "ഈ ഉപയോക്താവിന്റെ വരിക്കാരൻ/വരിക്കാരി ആകുക" + +#. TRANS: Help message for IM/SMS command "d " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "direct message to user" +msgstr "%s എന്ന ഉപയോക്താവിന് നേരിട്ടുള്ള സന്ദേശങ്ങൾ" + +#. TRANS: Help message for IM/SMS command "get " +msgctxt "COMMANDHELP" +msgid "get last notice from user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "whois " +msgctxt "COMMANDHELP" +msgid "get profile info on user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "lose " +msgctxt "COMMANDHELP" +msgid "force user to stop following you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav " +msgctxt "COMMANDHELP" +msgid "add user's last notice as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav #" +msgctxt "COMMANDHELP" +msgid "add notice with the given id as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat #" +msgctxt "COMMANDHELP" +msgid "repeat a notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "repeat the last notice from user" +msgstr "ഈ അറിയിപ്പ് ആവർത്തിക്കുക" + +#. TRANS: Help message for IM/SMS command "reply #" +msgctxt "COMMANDHELP" +msgid "reply to notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "reply " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "reply to the last notice from user" +msgstr "ഈ അറിയിപ്പിന് മറുപടിയിടുക" + +#. TRANS: Help message for IM/SMS command "join " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "join group" +msgstr "അജ്ഞാത സംഘം." + +#. TRANS: Help message for IM/SMS command "login" +msgctxt "COMMANDHELP" +msgid "Get a link to login to the web interface" +msgstr "" + +#. TRANS: Help message for IM/SMS command "drop " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "leave group" +msgstr "സംഘം മായ്ക്കുക" + +#. TRANS: Help message for IM/SMS command "stats" +msgctxt "COMMANDHELP" +msgid "get your stats" +msgstr "" + +#. TRANS: Help message for IM/SMS command "stop" +#. TRANS: Help message for IM/SMS command "quit" +msgctxt "COMMANDHELP" +msgid "same as 'off'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "sub " +msgctxt "COMMANDHELP" +msgid "same as 'follow'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "unsub " +msgctxt "COMMANDHELP" +msgid "same as 'leave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "last " +msgctxt "COMMANDHELP" +msgid "same as 'get'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "on " +#. TRANS: Help message for IM/SMS command "off " +#. TRANS: Help message for IM/SMS command "invite " +#. TRANS: Help message for IM/SMS command "track " +#. TRANS: Help message for IM/SMS command "untrack " +#. TRANS: Help message for IM/SMS command "track off" +#. TRANS: Help message for IM/SMS command "untrack all" +#. TRANS: Help message for IM/SMS command "tracks" +#. TRANS: Help message for IM/SMS command "tracking" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "not yet implemented." +msgstr "പ്രാവർത്തികമാക്കിയിട്ടില്ല." + +#. TRANS: Help message for IM/SMS command "nudge " +msgctxt "COMMANDHELP" +msgid "remind a user to update." msgstr "" #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. @@ -6704,6 +6858,9 @@ msgstr "" "സംഘത്തിന്റെ പ്രദേശം, അങ്ങനെയൊന്നുണ്ടെങ്കിൽ - ഉദാ: \"പട്ടണം, സംസ്ഥാനം (അഥവാ പ്രദേശം), " "രാജ്യം\"." +msgid "Aliases" +msgstr "" + #, php-format msgid "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " @@ -6781,6 +6938,10 @@ msgctxt "TOOLTIP" msgid "Add or edit %s design" msgstr "%s എന്ന സംഘത്തിനു രൂപകല്പന കൂട്ടിച്ചേർക്കുക അല്ലെങ്കിൽ മാറ്റം വരുത്തുക" +#. TRANS: Group actions header (h2). Text hidden by default. +msgid "Group actions" +msgstr "സംഘത്തിന്റെ പ്രവൃത്തികൾ" + #. TRANS: Title for groups with the most members section. msgid "Groups with most members" msgstr "" @@ -7248,6 +7409,7 @@ msgstr "അറിയിപ്പ് അയയ്ക്കുക" msgid "What's up, %s?" msgstr "എന്തൊക്കെയുണ്ട്, %s?" +#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "ചേർത്തുവെയ്ക്കുക" @@ -7707,52 +7869,6 @@ msgstr "" msgid "User %1$s (%2$d) has no profile record." msgstr "" -msgid "Edit Avatar" -msgstr "" - -#. TRANS: H2 for user actions in a profile. -#. TRANS: H2 for entity actions in a profile. -msgid "User actions" -msgstr "ഉപയോക്തൃ പ്രവൃത്തികൾ" - -#. TRANS: Text shown in user profile of not yet compeltely deleted users. -msgid "User deletion in progress..." -msgstr "ഉപയോക്താവിനെ നീക്കം ചെയ്യൽ പുരോഗമിക്കുന്നു..." - -#. TRANS: Link title for link on user profile. -msgid "Edit profile settings" -msgstr "ക്രമീകരണങ്ങളുടെ സജ്ജീകരണം മാറ്റുക" - -#. TRANS: Link text for link on user profile. -msgid "Edit" -msgstr "തിരുത്തുക" - -#. TRANS: Link title for link on user profile. -msgid "Send a direct message to this user" -msgstr "ഈ ഉപയോക്താവിന് നേരിട്ട് സന്ദേശമയയ്ക്കുക" - -#. TRANS: Link text for link on user profile. -msgid "Message" -msgstr "സന്ദേശം" - -#. TRANS: Label text on user profile to select a user role. -msgid "Moderate" -msgstr "മാദ്ധ്യസ്ഥം വഹിക്കുക" - -#. TRANS: Label text on user profile to select a user role. -msgid "User role" -msgstr "" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Administrator" -msgstr "കാര്യനിർവ്വാഹക(ൻ)" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Moderator" -msgstr "മദ്ധ്യസ്ഥ(ൻ)" - #, fuzzy msgid "Not allowed to log in." msgstr "ലോഗിൻ ചെയ്തിട്ടില്ല" @@ -7827,3 +7943,6 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" + +#~ msgid "Note" +#~ msgstr "കുറിപ്പ്" diff --git a/locale/nb/LC_MESSAGES/statusnet.po b/locale/nb/LC_MESSAGES/statusnet.po index 9898feb7be..55d575a366 100644 --- a/locale/nb/LC_MESSAGES/statusnet.po +++ b/locale/nb/LC_MESSAGES/statusnet.po @@ -12,17 +12,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-11 18:15+0000\n" -"PO-Revision-Date: 2011-03-11 18:17:21+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:49:51+0000\n" "Language-Team: Norwegian (bokmål)‬ \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: no\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" +"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -589,7 +589,7 @@ msgstr "Kunne ikke fjerne bruker %1$s fra gruppe %2$s." msgid "%s's groups" msgstr "%s sine grupper" -#. TRANS: Used as subtitle in check for group membership. %1$s is a user name, %2$s is the site name. +#. TRANS: Used as subtitle in check for group membership. %1$s is the site name, %2$s is a user name. #, php-format msgid "%1$s groups %2$s is a member of." msgstr "%1$s grupper %2$s er et medlem av." @@ -4662,18 +4662,6 @@ msgstr "%s gruppe" msgid "%1$s group, page %2$d" msgstr "%1$s gruppe, side %2$d" -#. TRANS: Label for group description or group note (dt). Text hidden by default. -msgid "Note" -msgstr "Merk" - -#. TRANS: Label for group aliases (dt). Text hidden by default. -msgid "Aliases" -msgstr "Alias" - -#. TRANS: Group actions header (h2). Text hidden by default. -msgid "Group actions" -msgstr "Gruppehandlinger" - #. TRANS: Tooltip for feed link. %s is a group nickname. #, php-format msgid "Notice feed for %s group (RSS 1.0)" @@ -4784,6 +4772,10 @@ msgstr "Melding fra %1$s på %2$s" msgid "Notice deleted." msgstr "Notis slettet." +#, fuzzy +msgid "Notice" +msgstr "Notiser" + #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #, fuzzy, php-format msgid "%1$s tagged %2$s" @@ -5314,7 +5306,6 @@ msgstr "Ingen vedlegg." msgid "Tag %s" msgstr "Merk %s" -#. TRANS: H2 for user profile information. msgid "User profile" msgstr "Brukerprofil" @@ -6011,6 +6002,50 @@ msgstr "" msgid "No AtomPub API service for %s." msgstr "" +#. TRANS: H2 for user actions in a profile. +#. TRANS: H2 for entity actions in a profile. +#, fuzzy +msgid "User actions" +msgstr "Gruppehandlinger" + +#. TRANS: Text shown in user profile of not yet compeltely deleted users. +msgid "User deletion in progress..." +msgstr "" + +#. TRANS: Link title for link on user profile. +msgid "Edit profile settings" +msgstr "Endre profilinnstillinger" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "Rediger" + +#. TRANS: Link title for link on user profile. +msgid "Send a direct message to this user" +msgstr "Send en direktemelding til denne brukeren" + +#. TRANS: Link text for link on user profile. +msgid "Message" +msgstr "Melding" + +#. TRANS: Label text on user profile to select a user role. +msgid "Moderate" +msgstr "Moderer" + +#. TRANS: Label text on user profile to select a user role. +msgid "User role" +msgstr "Brukerrolle" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Administrator" +msgstr "Administrator" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Moderator" +msgstr "Moderator" + #. TRANS: Page title. %1$s is the title, %2$s is the site name. #, php-format msgid "%1$s - %2$s" @@ -6741,46 +6776,170 @@ msgid_plural "You are a member of these groups:" msgstr[0] "Du er allerede logget inn!" msgstr[1] "Du er allerede logget inn!" -#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings. -msgid "" -"Commands:\n" -"on - turn on notifications\n" -"off - turn off notifications\n" -"help - show this help\n" -"follow - subscribe to user\n" -"groups - lists the groups you have joined\n" -"subscriptions - list the people you follow\n" -"subscribers - list the people that follow you\n" -"leave - unsubscribe from user\n" -"d - direct message to user\n" -"get - get last notice from user\n" -"whois - get profile info on user\n" -"lose - force user to stop following you\n" -"fav - add user's last notice as a 'fave'\n" -"fav # - add notice with the given id as a 'fave'\n" -"repeat # - repeat a notice with a given id\n" -"repeat - repeat the last notice from user\n" -"reply # - reply to notice with a given id\n" -"reply - reply to the last notice from user\n" -"join - join group\n" -"login - Get a link to login to the web interface\n" -"drop - leave group\n" -"stats - get your stats\n" -"stop - same as 'off'\n" -"quit - same as 'off'\n" -"sub - same as 'follow'\n" -"unsub - same as 'leave'\n" -"last - same as 'get'\n" -"on - not yet implemented.\n" -"off - not yet implemented.\n" -"nudge - remind a user to update.\n" -"invite - not yet implemented.\n" -"track - not yet implemented.\n" -"untrack - not yet implemented.\n" -"track off - not yet implemented.\n" -"untrack all - not yet implemented.\n" -"tracks - not yet implemented.\n" -"tracking - not yet implemented.\n" +#. TRANS: Header line of help text for commands. +#, fuzzy +msgctxt "COMMANDHELP" +msgid "Commands:" +msgstr "Kommandoresultat" + +#. TRANS: Help message for IM/SMS command "on" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn on notifications" +msgstr "Kan ikke gjenta din egen notis." + +#. TRANS: Help message for IM/SMS command "off" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn off notifications" +msgstr "Kan ikke gjenta din egen notis." + +#. TRANS: Help message for IM/SMS command "help" +msgctxt "COMMANDHELP" +msgid "show this help" +msgstr "" + +#. TRANS: Help message for IM/SMS command "follow " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "subscribe to user" +msgstr "Abonner på denne brukeren" + +#. TRANS: Help message for IM/SMS command "groups" +msgctxt "COMMANDHELP" +msgid "lists the groups you have joined" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscriptions" +msgctxt "COMMANDHELP" +msgid "list the people you follow" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscribers" +msgctxt "COMMANDHELP" +msgid "list the people that follow you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "leave " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "unsubscribe from user" +msgstr "Abonner på denne brukeren" + +#. TRANS: Help message for IM/SMS command "d " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "direct message to user" +msgstr "Direktemeldinger til %s" + +#. TRANS: Help message for IM/SMS command "get " +msgctxt "COMMANDHELP" +msgid "get last notice from user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "whois " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "get profile info on user" +msgstr "Profilinformasjon" + +#. TRANS: Help message for IM/SMS command "lose " +msgctxt "COMMANDHELP" +msgid "force user to stop following you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav " +msgctxt "COMMANDHELP" +msgid "add user's last notice as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav #" +msgctxt "COMMANDHELP" +msgid "add notice with the given id as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat #" +msgctxt "COMMANDHELP" +msgid "repeat a notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "repeat the last notice from user" +msgstr "Repeter denne notisen" + +#. TRANS: Help message for IM/SMS command "reply #" +msgctxt "COMMANDHELP" +msgid "reply to notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "reply " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "reply to the last notice from user" +msgstr "Svar på denne notisen" + +#. TRANS: Help message for IM/SMS command "join " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "join group" +msgstr "Ukjent" + +#. TRANS: Help message for IM/SMS command "login" +msgctxt "COMMANDHELP" +msgid "Get a link to login to the web interface" +msgstr "" + +#. TRANS: Help message for IM/SMS command "drop " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "leave group" +msgstr "Slett gruppe" + +#. TRANS: Help message for IM/SMS command "stats" +msgctxt "COMMANDHELP" +msgid "get your stats" +msgstr "" + +#. TRANS: Help message for IM/SMS command "stop" +#. TRANS: Help message for IM/SMS command "quit" +msgctxt "COMMANDHELP" +msgid "same as 'off'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "sub " +msgctxt "COMMANDHELP" +msgid "same as 'follow'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "unsub " +msgctxt "COMMANDHELP" +msgid "same as 'leave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "last " +msgctxt "COMMANDHELP" +msgid "same as 'get'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "on " +#. TRANS: Help message for IM/SMS command "off " +#. TRANS: Help message for IM/SMS command "invite " +#. TRANS: Help message for IM/SMS command "track " +#. TRANS: Help message for IM/SMS command "untrack " +#. TRANS: Help message for IM/SMS command "track off" +#. TRANS: Help message for IM/SMS command "untrack all" +#. TRANS: Help message for IM/SMS command "tracks" +#. TRANS: Help message for IM/SMS command "tracking" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "not yet implemented." +msgstr "Beklager, denne kommandoen er ikke implementert ennå." + +#. TRANS: Help message for IM/SMS command "nudge " +msgctxt "COMMANDHELP" +msgid "remind a user to update." msgstr "" #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. @@ -6968,6 +7127,9 @@ msgid "" "Location for the group, if any, like \"City, State (or Region), Country\"." msgstr "Hvor du er, for eksempel «By, fylke (eller region), land»" +msgid "Aliases" +msgstr "Alias" + #, php-format msgid "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " @@ -7045,6 +7207,10 @@ msgctxt "TOOLTIP" msgid "Add or edit %s design" msgstr "" +#. TRANS: Group actions header (h2). Text hidden by default. +msgid "Group actions" +msgstr "Gruppehandlinger" + #. TRANS: Title for groups with the most members section. msgid "Groups with most members" msgstr "Grupper med flest medlemmer" @@ -7609,6 +7775,7 @@ msgstr "Send en notis" msgid "What's up, %s?" msgstr "Hva skjer %s?" +#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Legg ved" @@ -8082,54 +8249,6 @@ msgstr "Abonner" msgid "User %1$s (%2$d) has no profile record." msgstr "Brukeren har ingen profil." -#, fuzzy -msgid "Edit Avatar" -msgstr "Brukerbilde" - -#. TRANS: H2 for user actions in a profile. -#. TRANS: H2 for entity actions in a profile. -#, fuzzy -msgid "User actions" -msgstr "Gruppehandlinger" - -#. TRANS: Text shown in user profile of not yet compeltely deleted users. -msgid "User deletion in progress..." -msgstr "" - -#. TRANS: Link title for link on user profile. -msgid "Edit profile settings" -msgstr "Endre profilinnstillinger" - -#. TRANS: Link text for link on user profile. -msgid "Edit" -msgstr "Rediger" - -#. TRANS: Link title for link on user profile. -msgid "Send a direct message to this user" -msgstr "Send en direktemelding til denne brukeren" - -#. TRANS: Link text for link on user profile. -msgid "Message" -msgstr "Melding" - -#. TRANS: Label text on user profile to select a user role. -msgid "Moderate" -msgstr "Moderer" - -#. TRANS: Label text on user profile to select a user role. -msgid "User role" -msgstr "Brukerrolle" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Administrator" -msgstr "Administrator" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Moderator" -msgstr "Moderator" - #, fuzzy msgid "Not allowed to log in." msgstr "Ikke logget inn." @@ -8205,3 +8324,10 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" + +#~ msgid "Note" +#~ msgstr "Merk" + +#, fuzzy +#~ msgid "Edit Avatar" +#~ msgstr "Brukerbilde" diff --git a/locale/nl/LC_MESSAGES/statusnet.po b/locale/nl/LC_MESSAGES/statusnet.po index e8907c1baf..c427d1e703 100644 --- a/locale/nl/LC_MESSAGES/statusnet.po +++ b/locale/nl/LC_MESSAGES/statusnet.po @@ -12,17 +12,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-11 18:15+0000\n" -"PO-Revision-Date: 2011-03-11 18:17:20+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:49:49+0000\n" "Language-Team: Dutch \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: nl\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" +"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -597,7 +597,7 @@ msgstr "Het was niet mogelijk gebruiker %1$s uit de groep %2$s te verwijderen." msgid "%s's groups" msgstr "Groepen van %s" -#. TRANS: Used as subtitle in check for group membership. %1$s is a user name, %2$s is the site name. +#. TRANS: Used as subtitle in check for group membership. %1$s is the site name, %2$s is a user name. #, php-format msgid "%1$s groups %2$s is a member of." msgstr "Groepen op de site %1$s waar %2$s lid van is." @@ -1054,9 +1054,8 @@ msgid "Can only fave notices." msgstr "Het is alleen mogelijk om mededelingen als favoriet aan te merken." #. TRANS: Client exception thrown when trying favorite a notice without content. -#, fuzzy msgid "Unknown notice." -msgstr "Onbekend mededeling." +msgstr "Onbekende mededeling." #. TRANS: Client exception thrown when trying favorite an already favorited notice. msgid "Already a favorite." @@ -3116,9 +3115,8 @@ msgstr "Een bron-URL is verplicht." msgid "Could not create application." msgstr "Het was niet mogelijk de applicatie aan te maken." -#, fuzzy msgid "Invalid image." -msgstr "Ongeldige afmetingen." +msgstr "Ongeldige afbeelding." #. TRANS: Title for form to create a group. msgid "New group" @@ -3409,7 +3407,6 @@ msgid "This is your outbox, which lists private messages you have sent." msgstr "Dit is uw Postvak UIT waarin de door u verzonden privéberichten staan." #. TRANS: Title for page where to change password. -#, fuzzy msgctxt "TITLE" msgid "Change password" msgstr "Wachtwoord wijzigen" @@ -3437,7 +3434,6 @@ msgid "6 or more characters." msgstr "Zes of meer tekens" #. TRANS: Field label on page where to change password. In this field the new password should be typed a second time. -#, fuzzy msgctxt "LABEL" msgid "Confirm" msgstr "Bevestigen" @@ -3448,7 +3444,6 @@ msgid "Same as password above." msgstr "Gelijk aan het wachtwoord hierboven." #. TRANS: Button text on page where to change password. -#, fuzzy msgctxt "BUTTON" msgid "Change" msgstr "Wijzigen" @@ -3461,9 +3456,8 @@ msgid "Passwords don't match." msgstr "De wachtwoorden komen niet overeen." #. TRANS: Form validation error on page where to change password. -#, fuzzy msgid "Incorrect old password." -msgstr "Het oude wachtwoord is onjuist" +msgstr "Het oude wachtwoord is onjuist." #. TRANS: Form validation error on page where to change password. msgid "Error saving user; invalid." @@ -3550,12 +3544,10 @@ msgid "Fancy URLs" msgstr "Nette URL's" #. TRANS: Field title in Paths admin panel. -#, fuzzy msgid "Use fancy URLs (more readable and memorable)?" -msgstr "Nette URL's (meer leesbaar en beter te onthouden) gebruiken?" +msgstr "Nette URL's gebruiken (beter leesbaar en beter te onthouden)?" #. TRANS: Fieldset legend in Paths admin panel. -#, fuzzy msgctxt "LEGEND" msgid "Theme" msgstr "Vormgeving" @@ -3669,7 +3661,6 @@ msgid "Directory where attachments are located." msgstr "Map waar bijlagen worden opgeslagen." #. TRANS: Fieldset legend in Paths admin panel. -#, fuzzy msgctxt "LEGEND" msgid "SSL" msgstr "SSL" @@ -3754,7 +3745,6 @@ msgid "Enabled" msgstr "Ingeschakeld" #. TRANS: Tab and title for plugins admin panel. -#, fuzzy msgctxt "TITLE" msgid "Plugins" msgstr "Plug-ins" @@ -3786,7 +3776,7 @@ msgstr "Ongeldige mededelinginhoud." #. TRANS: Exception thrown if a notice's license is not compatible with the StatusNet site license. #. TRANS: %1$s is the notice license, %2$s is the StatusNet site's license. -#, fuzzy, php-format +#, php-format msgid "Notice license \"%1$s\" is not compatible with site license \"%2$s\"." msgstr "" "De mededelingenlicentie \"%1$s\" is niet compatibel met de licentie \"%2$s\" " @@ -4656,18 +4646,6 @@ msgstr "%s groep" msgid "%1$s group, page %2$d" msgstr "Groep %1$s, pagina %2$d" -#. TRANS: Label for group description or group note (dt). Text hidden by default. -msgid "Note" -msgstr "Opmerking" - -#. TRANS: Label for group aliases (dt). Text hidden by default. -msgid "Aliases" -msgstr "Aliassen" - -#. TRANS: Group actions header (h2). Text hidden by default. -msgid "Group actions" -msgstr "Groepshandelingen" - #. TRANS: Tooltip for feed link. %s is a group nickname. #, php-format msgid "Notice feed for %s group (RSS 1.0)" @@ -4778,6 +4756,10 @@ msgstr "Bericht van %1$s op %2$s" msgid "Notice deleted." msgstr "Deze mededeling is verwijderd." +#, fuzzy +msgid "Notice" +msgstr "Mededelingen" + #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #, php-format msgid "%1$s tagged %2$s" @@ -5319,7 +5301,6 @@ msgstr "Geen ID-argument." msgid "Tag %s" msgstr "Label %s" -#. TRANS: H2 for user profile information. msgid "User profile" msgstr "Gebruikersprofiel" @@ -6042,6 +6023,49 @@ msgstr "Er is geen XSD aangetroffen voor %s." msgid "No AtomPub API service for %s." msgstr "Er is geen AtomPub API-dienst voor %s." +#. TRANS: H2 for user actions in a profile. +#. TRANS: H2 for entity actions in a profile. +msgid "User actions" +msgstr "Gebruikershandelingen" + +#. TRANS: Text shown in user profile of not yet compeltely deleted users. +msgid "User deletion in progress..." +msgstr "Bezig met het verwijderen van de gebruiker..." + +#. TRANS: Link title for link on user profile. +msgid "Edit profile settings" +msgstr "Profielinstellingen bewerken" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "Bewerken" + +#. TRANS: Link title for link on user profile. +msgid "Send a direct message to this user" +msgstr "Deze gebruiker een direct bericht zenden" + +#. TRANS: Link text for link on user profile. +msgid "Message" +msgstr "Bericht" + +#. TRANS: Label text on user profile to select a user role. +msgid "Moderate" +msgstr "Modereren" + +#. TRANS: Label text on user profile to select a user role. +msgid "User role" +msgstr "Gebruikersrol" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Administrator" +msgstr "Beheerder" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Moderator" +msgstr "Moderator" + #. TRANS: Page title. %1$s is the title, %2$s is the site name. #, php-format msgid "%1$s - %2$s" @@ -6777,87 +6801,172 @@ msgid_plural "You are a member of these groups:" msgstr[0] "U bent lid van deze groep:" msgstr[1] "U bent lid van deze groepen:" -#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings. -msgid "" -"Commands:\n" -"on - turn on notifications\n" -"off - turn off notifications\n" -"help - show this help\n" -"follow - subscribe to user\n" -"groups - lists the groups you have joined\n" -"subscriptions - list the people you follow\n" -"subscribers - list the people that follow you\n" -"leave - unsubscribe from user\n" -"d - direct message to user\n" -"get - get last notice from user\n" -"whois - get profile info on user\n" -"lose - force user to stop following you\n" -"fav - add user's last notice as a 'fave'\n" -"fav # - add notice with the given id as a 'fave'\n" -"repeat # - repeat a notice with a given id\n" -"repeat - repeat the last notice from user\n" -"reply # - reply to notice with a given id\n" -"reply - reply to the last notice from user\n" -"join - join group\n" -"login - Get a link to login to the web interface\n" -"drop - leave group\n" -"stats - get your stats\n" -"stop - same as 'off'\n" -"quit - same as 'off'\n" -"sub - same as 'follow'\n" -"unsub - same as 'leave'\n" -"last - same as 'get'\n" -"on - not yet implemented.\n" -"off - not yet implemented.\n" -"nudge - remind a user to update.\n" -"invite - not yet implemented.\n" -"track - not yet implemented.\n" -"untrack - not yet implemented.\n" -"track off - not yet implemented.\n" -"untrack all - not yet implemented.\n" -"tracks - not yet implemented.\n" -"tracking - not yet implemented.\n" +#. TRANS: Header line of help text for commands. +#, fuzzy +msgctxt "COMMANDHELP" +msgid "Commands:" +msgstr "Commandoresultaten" + +#. TRANS: Help message for IM/SMS command "on" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn on notifications" +msgstr "Het is niet mogelijk de notificatie uit te schakelen." + +#. TRANS: Help message for IM/SMS command "off" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn off notifications" +msgstr "Het is niet mogelijk de mededelingen uit te schakelen." + +#. TRANS: Help message for IM/SMS command "help" +msgctxt "COMMANDHELP" +msgid "show this help" +msgstr "" + +#. TRANS: Help message for IM/SMS command "follow " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "subscribe to user" +msgstr "Abonneren op deze gebruiker" + +#. TRANS: Help message for IM/SMS command "groups" +msgctxt "COMMANDHELP" +msgid "lists the groups you have joined" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscriptions" +msgctxt "COMMANDHELP" +msgid "list the people you follow" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscribers" +msgctxt "COMMANDHELP" +msgid "list the people that follow you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "leave " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "unsubscribe from user" +msgstr "Uitschrijven van deze gebruiker" + +#. TRANS: Help message for IM/SMS command "d " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "direct message to user" +msgstr "Privéberichten aan %s" + +#. TRANS: Help message for IM/SMS command "get " +msgctxt "COMMANDHELP" +msgid "get last notice from user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "whois " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "get profile info on user" +msgstr "Het profiel op de andere server is geen groep!" + +#. TRANS: Help message for IM/SMS command "lose " +msgctxt "COMMANDHELP" +msgid "force user to stop following you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav " +msgctxt "COMMANDHELP" +msgid "add user's last notice as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav #" +msgctxt "COMMANDHELP" +msgid "add notice with the given id as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat #" +msgctxt "COMMANDHELP" +msgid "repeat a notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "repeat the last notice from user" +msgstr "Deze mededeling herhalen" + +#. TRANS: Help message for IM/SMS command "reply #" +msgctxt "COMMANDHELP" +msgid "reply to notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "reply " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "reply to the last notice from user" +msgstr "Op deze mededeling antwoorden" + +#. TRANS: Help message for IM/SMS command "join " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "join group" +msgstr "Onbekende groep." + +#. TRANS: Help message for IM/SMS command "login" +msgctxt "COMMANDHELP" +msgid "Get a link to login to the web interface" +msgstr "" + +#. TRANS: Help message for IM/SMS command "drop " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "leave group" +msgstr "Groep verwijderen" + +#. TRANS: Help message for IM/SMS command "stats" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "get your stats" +msgstr "Werk uw status bij..." + +#. TRANS: Help message for IM/SMS command "stop" +#. TRANS: Help message for IM/SMS command "quit" +msgctxt "COMMANDHELP" +msgid "same as 'off'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "sub " +msgctxt "COMMANDHELP" +msgid "same as 'follow'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "unsub " +msgctxt "COMMANDHELP" +msgid "same as 'leave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "last " +msgctxt "COMMANDHELP" +msgid "same as 'get'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "on " +#. TRANS: Help message for IM/SMS command "off " +#. TRANS: Help message for IM/SMS command "invite " +#. TRANS: Help message for IM/SMS command "track " +#. TRANS: Help message for IM/SMS command "untrack " +#. TRANS: Help message for IM/SMS command "track off" +#. TRANS: Help message for IM/SMS command "untrack all" +#. TRANS: Help message for IM/SMS command "tracks" +#. TRANS: Help message for IM/SMS command "tracking" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "not yet implemented." +msgstr "Dit commando is nog niet geïmplementeerd." + +#. TRANS: Help message for IM/SMS command "nudge " +msgctxt "COMMANDHELP" +msgid "remind a user to update." msgstr "" -"Commando's:\n" -"on - notificaties inschakelen\n" -"off - notificaties uitschakelen\n" -"help - deze hulptekst weergeven\n" -"follow - abonneren op gebruiker\n" -"groups - geef uw groepslidmaatschappen weer\n" -"subscriptions - geeft uw gebruikersabonnenmenten weer\n" -"subscribers - geeft de gebruikers die een abonnement op u hebben weer\n" -"leave - abonnement op gebruiker opzeggen\n" -"d - direct bericht aan gebruiker\n" -"get - laatste mededeling van gebruiker opvragen\n" -"whois - profielinformatie van gebruiker opvragen\n" -"lose - zorgt ervoor dat de gebruiker u niet meer volgt\n" -"fav - laatste mededeling van gebruiker op favorietenlijst " -"zetten\n" -"fav # - mededelingen met aangegeven ID op favorietenlijst " -"zetten\n" -"repeat # - herhaal een mededelingen met een opgegeven ID\n" -"repeat - herhaal de laatste mededelingen van gebruiker\n" -"reply # - antwoorden op de mededeling met het aangegeven ID\n" -"reply - antwoorden op de laatste mededeling van gebruiker\n" -"join - lid worden van groep\n" -"login - verwijzing opvragen naar de webpagina voor aanmelden\n" -"drop - groepslidmaatschap opzeggen\n" -"stats - uw statistieken opvragen\n" -"stop - zelfde als 'off'\n" -"quit - zelfde als 'off'\n" -"sub - zelfde als 'follow'\n" -"unsub - zelfde als 'leave'\n" -"last - zelfde als 'get'\n" -"on - nog niet beschikbaar\n" -"off - nog niet beschikbaar\n" -"nudge - gebruiker porren\n" -"invite - nog niet beschikbaar\n" -"track - nog niet beschikbaar\n" -"untrack - nog niet beschikbaar\n" -"track off - nog niet beschikbaar\n" -"untrack all - nog niet beschikbaar\n" -"tracks - nog niet beschikbaar\n" -"tracking - nog niet beschikbaar\n" #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. msgid "No configuration file found." @@ -7031,6 +7140,9 @@ msgid "" msgstr "" "Locatie voor de groep - als relevant. Iets als \"Plaats, regio, land\"." +msgid "Aliases" +msgstr "Aliassen" + #, php-format msgid "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " @@ -7110,6 +7222,10 @@ msgctxt "TOOLTIP" msgid "Add or edit %s design" msgstr "Vormgeving van de groep %s toevoegen of aanpassen" +#. TRANS: Group actions header (h2). Text hidden by default. +msgid "Group actions" +msgstr "Groepshandelingen" + #. TRANS: Title for groups with the most members section. msgid "Groups with most members" msgstr "Groepen met de meeste leden" @@ -7683,6 +7799,7 @@ msgstr "Mededeling verzenden" msgid "What's up, %s?" msgstr "Hallo, %s." +#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Toevoegen" @@ -7751,7 +7868,7 @@ msgid "Notice repeated" msgstr "Mededeling herhaald" msgid "Update your status..." -msgstr "" +msgstr "Werk uw status bij..." msgid "Nudge this user" msgstr "Deze gebruiker porren" @@ -8142,52 +8259,6 @@ msgstr "Abonnement opheffen" msgid "User %1$s (%2$d) has no profile record." msgstr "Gebruiker %1$s (%2$d) heeft geen profielrecord." -msgid "Edit Avatar" -msgstr "Avatar bewerken" - -#. TRANS: H2 for user actions in a profile. -#. TRANS: H2 for entity actions in a profile. -msgid "User actions" -msgstr "Gebruikershandelingen" - -#. TRANS: Text shown in user profile of not yet compeltely deleted users. -msgid "User deletion in progress..." -msgstr "Bezig met het verwijderen van de gebruiker..." - -#. TRANS: Link title for link on user profile. -msgid "Edit profile settings" -msgstr "Profielinstellingen bewerken" - -#. TRANS: Link text for link on user profile. -msgid "Edit" -msgstr "Bewerken" - -#. TRANS: Link title for link on user profile. -msgid "Send a direct message to this user" -msgstr "Deze gebruiker een direct bericht zenden" - -#. TRANS: Link text for link on user profile. -msgid "Message" -msgstr "Bericht" - -#. TRANS: Label text on user profile to select a user role. -msgid "Moderate" -msgstr "Modereren" - -#. TRANS: Label text on user profile to select a user role. -msgid "User role" -msgstr "Gebruikersrol" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Administrator" -msgstr "Beheerder" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Moderator" -msgstr "Moderator" - msgid "Not allowed to log in." msgstr "Aanmelden is niet toegestaan." @@ -8261,3 +8332,91 @@ msgstr "Ongeldige XML. De XRD-root mist." #, php-format msgid "Getting backup from file '%s'." msgstr "De back-up wordt uit het bestand \"%s\" geladen." + +#~ msgid "Note" +#~ msgstr "Opmerking" + +#~ msgid "" +#~ "Commands:\n" +#~ "on - turn on notifications\n" +#~ "off - turn off notifications\n" +#~ "help - show this help\n" +#~ "follow - subscribe to user\n" +#~ "groups - lists the groups you have joined\n" +#~ "subscriptions - list the people you follow\n" +#~ "subscribers - list the people that follow you\n" +#~ "leave - unsubscribe from user\n" +#~ "d - direct message to user\n" +#~ "get - get last notice from user\n" +#~ "whois - get profile info on user\n" +#~ "lose - force user to stop following you\n" +#~ "fav - add user's last notice as a 'fave'\n" +#~ "fav # - add notice with the given id as a 'fave'\n" +#~ "repeat # - repeat a notice with a given id\n" +#~ "repeat - repeat the last notice from user\n" +#~ "reply # - reply to notice with a given id\n" +#~ "reply - reply to the last notice from user\n" +#~ "join - join group\n" +#~ "login - Get a link to login to the web interface\n" +#~ "drop - leave group\n" +#~ "stats - get your stats\n" +#~ "stop - same as 'off'\n" +#~ "quit - same as 'off'\n" +#~ "sub - same as 'follow'\n" +#~ "unsub - same as 'leave'\n" +#~ "last - same as 'get'\n" +#~ "on - not yet implemented.\n" +#~ "off - not yet implemented.\n" +#~ "nudge - remind a user to update.\n" +#~ "invite - not yet implemented.\n" +#~ "track - not yet implemented.\n" +#~ "untrack - not yet implemented.\n" +#~ "track off - not yet implemented.\n" +#~ "untrack all - not yet implemented.\n" +#~ "tracks - not yet implemented.\n" +#~ "tracking - not yet implemented.\n" +#~ msgstr "" +#~ "Commando's:\n" +#~ "on - notificaties inschakelen\n" +#~ "off - notificaties uitschakelen\n" +#~ "help - deze hulptekst weergeven\n" +#~ "follow - abonneren op gebruiker\n" +#~ "groups - geef uw groepslidmaatschappen weer\n" +#~ "subscriptions - geeft uw gebruikersabonnenmenten weer\n" +#~ "subscribers - geeft de gebruikers die een abonnement op u hebben weer\n" +#~ "leave - abonnement op gebruiker opzeggen\n" +#~ "d - direct bericht aan gebruiker\n" +#~ "get - laatste mededeling van gebruiker opvragen\n" +#~ "whois - profielinformatie van gebruiker opvragen\n" +#~ "lose - zorgt ervoor dat de gebruiker u niet meer volgt\n" +#~ "fav - laatste mededeling van gebruiker op favorietenlijst " +#~ "zetten\n" +#~ "fav # - mededelingen met aangegeven ID op favorietenlijst " +#~ "zetten\n" +#~ "repeat # - herhaal een mededelingen met een opgegeven ID\n" +#~ "repeat - herhaal de laatste mededelingen van gebruiker\n" +#~ "reply # - antwoorden op de mededeling met het aangegeven " +#~ "ID\n" +#~ "reply - antwoorden op de laatste mededeling van gebruiker\n" +#~ "join - lid worden van groep\n" +#~ "login - verwijzing opvragen naar de webpagina voor aanmelden\n" +#~ "drop - groepslidmaatschap opzeggen\n" +#~ "stats - uw statistieken opvragen\n" +#~ "stop - zelfde als 'off'\n" +#~ "quit - zelfde als 'off'\n" +#~ "sub - zelfde als 'follow'\n" +#~ "unsub - zelfde als 'leave'\n" +#~ "last - zelfde als 'get'\n" +#~ "on - nog niet beschikbaar\n" +#~ "off - nog niet beschikbaar\n" +#~ "nudge - gebruiker porren\n" +#~ "invite - nog niet beschikbaar\n" +#~ "track - nog niet beschikbaar\n" +#~ "untrack - nog niet beschikbaar\n" +#~ "track off - nog niet beschikbaar\n" +#~ "untrack all - nog niet beschikbaar\n" +#~ "tracks - nog niet beschikbaar\n" +#~ "tracking - nog niet beschikbaar\n" + +#~ msgid "Edit Avatar" +#~ msgstr "Avatar bewerken" diff --git a/locale/pl/LC_MESSAGES/statusnet.po b/locale/pl/LC_MESSAGES/statusnet.po index b874633a6e..c656fd64bd 100644 --- a/locale/pl/LC_MESSAGES/statusnet.po +++ b/locale/pl/LC_MESSAGES/statusnet.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-11 18:15+0000\n" -"PO-Revision-Date: 2011-03-11 18:17:23+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:49:52+0000\n" "Last-Translator: Piotr Drąg \n" "Language-Team: Polish \n" "MIME-Version: 1.0\n" @@ -20,11 +20,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ( (n%10 >= 2 && n%10 <= 4 && " "(n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n" -"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: pl\n" "X-Message-Group: #out-statusnet-core\n" -"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" +"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -601,7 +601,7 @@ msgstr "Nie można usunąć użytkownika %1$s z grupy %2$s." msgid "%s's groups" msgstr "Grupy użytkownika %s" -#. TRANS: Used as subtitle in check for group membership. %1$s is a user name, %2$s is the site name. +#. TRANS: Used as subtitle in check for group membership. %1$s is the site name, %2$s is a user name. #, php-format msgid "%1$s groups %2$s is a member of." msgstr "%2$s jest członkiem grup %1$s." @@ -4667,18 +4667,6 @@ msgstr "Grupa %s" msgid "%1$s group, page %2$d" msgstr "Grupa %1$s, strona %2$d" -#. TRANS: Label for group description or group note (dt). Text hidden by default. -msgid "Note" -msgstr "Wpis" - -#. TRANS: Label for group aliases (dt). Text hidden by default. -msgid "Aliases" -msgstr "Aliasy" - -#. TRANS: Group actions header (h2). Text hidden by default. -msgid "Group actions" -msgstr "Działania grupy" - #. TRANS: Tooltip for feed link. %s is a group nickname. #, php-format msgid "Notice feed for %s group (RSS 1.0)" @@ -4789,6 +4777,10 @@ msgstr "Wiadomość od użytkownika %1$s na %2$s" msgid "Notice deleted." msgstr "Usunięto wpis." +#, fuzzy +msgid "Notice" +msgstr "Wpisy" + #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #, php-format msgid "%1$s tagged %2$s" @@ -5326,7 +5318,6 @@ msgstr "Brak parametru identyfikatora." msgid "Tag %s" msgstr "Znacznik %s" -#. TRANS: H2 for user profile information. msgid "User profile" msgstr "Profil użytkownika" @@ -6054,6 +6045,49 @@ msgstr "Nie można odnaleźć XRD dla %s." msgid "No AtomPub API service for %s." msgstr "Brak API usługi AtomPub dla %s." +#. TRANS: H2 for user actions in a profile. +#. TRANS: H2 for entity actions in a profile. +msgid "User actions" +msgstr "Czynności użytkownika" + +#. TRANS: Text shown in user profile of not yet compeltely deleted users. +msgid "User deletion in progress..." +msgstr "Trwa usuwanie użytkownika..." + +#. TRANS: Link title for link on user profile. +msgid "Edit profile settings" +msgstr "Zmodyfikuj ustawienia profilu" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "Edycja" + +#. TRANS: Link title for link on user profile. +msgid "Send a direct message to this user" +msgstr "Wyślij bezpośrednią wiadomość do tego użytkownika" + +#. TRANS: Link text for link on user profile. +msgid "Message" +msgstr "Wiadomość" + +#. TRANS: Label text on user profile to select a user role. +msgid "Moderate" +msgstr "Moderuj" + +#. TRANS: Label text on user profile to select a user role. +msgid "User role" +msgstr "Rola użytkownika" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Administrator" +msgstr "Administrator" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Moderator" +msgstr "Moderator" + #. TRANS: Page title. %1$s is the title, %2$s is the site name. #, php-format msgid "%1$s - %2$s" @@ -6778,87 +6812,171 @@ msgstr[0] "Jesteś członkiem tej grupy:" msgstr[1] "Jesteś członkiem tych grup:" msgstr[2] "Jesteś członkiem tych grup:" -#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings. -msgid "" -"Commands:\n" -"on - turn on notifications\n" -"off - turn off notifications\n" -"help - show this help\n" -"follow - subscribe to user\n" -"groups - lists the groups you have joined\n" -"subscriptions - list the people you follow\n" -"subscribers - list the people that follow you\n" -"leave - unsubscribe from user\n" -"d - direct message to user\n" -"get - get last notice from user\n" -"whois - get profile info on user\n" -"lose - force user to stop following you\n" -"fav - add user's last notice as a 'fave'\n" -"fav # - add notice with the given id as a 'fave'\n" -"repeat # - repeat a notice with a given id\n" -"repeat - repeat the last notice from user\n" -"reply # - reply to notice with a given id\n" -"reply - reply to the last notice from user\n" -"join - join group\n" -"login - Get a link to login to the web interface\n" -"drop - leave group\n" -"stats - get your stats\n" -"stop - same as 'off'\n" -"quit - same as 'off'\n" -"sub - same as 'follow'\n" -"unsub - same as 'leave'\n" -"last - same as 'get'\n" -"on - not yet implemented.\n" -"off - not yet implemented.\n" -"nudge - remind a user to update.\n" -"invite - not yet implemented.\n" -"track - not yet implemented.\n" -"untrack - not yet implemented.\n" -"track off - not yet implemented.\n" -"untrack all - not yet implemented.\n" -"tracks - not yet implemented.\n" -"tracking - not yet implemented.\n" +#. TRANS: Header line of help text for commands. +#, fuzzy +msgctxt "COMMANDHELP" +msgid "Commands:" +msgstr "Wyniki polecenia" + +#. TRANS: Help message for IM/SMS command "on" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn on notifications" +msgstr "Nie można włączyć powiadomień." + +#. TRANS: Help message for IM/SMS command "off" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn off notifications" +msgstr "Nie można wyłączyć powiadomień." + +#. TRANS: Help message for IM/SMS command "help" +msgctxt "COMMANDHELP" +msgid "show this help" +msgstr "" + +#. TRANS: Help message for IM/SMS command "follow " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "subscribe to user" +msgstr "Subskrybuj tego użytkownika" + +#. TRANS: Help message for IM/SMS command "groups" +msgctxt "COMMANDHELP" +msgid "lists the groups you have joined" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscriptions" +msgctxt "COMMANDHELP" +msgid "list the people you follow" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscribers" +msgctxt "COMMANDHELP" +msgid "list the people that follow you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "leave " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "unsubscribe from user" +msgstr "Zrezygnuj z subskrypcji tego użytkownika" + +#. TRANS: Help message for IM/SMS command "d " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "direct message to user" +msgstr "Bezpośrednia wiadomość do użytkownika %s" + +#. TRANS: Help message for IM/SMS command "get " +msgctxt "COMMANDHELP" +msgid "get last notice from user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "whois " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "get profile info on user" +msgstr "Zdalny profil nie jest grupą." + +#. TRANS: Help message for IM/SMS command "lose " +msgctxt "COMMANDHELP" +msgid "force user to stop following you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav " +msgctxt "COMMANDHELP" +msgid "add user's last notice as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav #" +msgctxt "COMMANDHELP" +msgid "add notice with the given id as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat #" +msgctxt "COMMANDHELP" +msgid "repeat a notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "repeat the last notice from user" +msgstr "Powtórz ten wpis" + +#. TRANS: Help message for IM/SMS command "reply #" +msgctxt "COMMANDHELP" +msgid "reply to notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "reply " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "reply to the last notice from user" +msgstr "Odpowiedz na ten wpis" + +#. TRANS: Help message for IM/SMS command "join " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "join group" +msgstr "Nieznana grupa." + +#. TRANS: Help message for IM/SMS command "login" +msgctxt "COMMANDHELP" +msgid "Get a link to login to the web interface" +msgstr "" + +#. TRANS: Help message for IM/SMS command "drop " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "leave group" +msgstr "Usuń grupę" + +#. TRANS: Help message for IM/SMS command "stats" +msgctxt "COMMANDHELP" +msgid "get your stats" +msgstr "" + +#. TRANS: Help message for IM/SMS command "stop" +#. TRANS: Help message for IM/SMS command "quit" +msgctxt "COMMANDHELP" +msgid "same as 'off'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "sub " +msgctxt "COMMANDHELP" +msgid "same as 'follow'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "unsub " +msgctxt "COMMANDHELP" +msgid "same as 'leave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "last " +msgctxt "COMMANDHELP" +msgid "same as 'get'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "on " +#. TRANS: Help message for IM/SMS command "off " +#. TRANS: Help message for IM/SMS command "invite " +#. TRANS: Help message for IM/SMS command "track " +#. TRANS: Help message for IM/SMS command "untrack " +#. TRANS: Help message for IM/SMS command "track off" +#. TRANS: Help message for IM/SMS command "untrack all" +#. TRANS: Help message for IM/SMS command "tracks" +#. TRANS: Help message for IM/SMS command "tracking" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "not yet implemented." +msgstr "Nie zaimplementowano polecenia." + +#. TRANS: Help message for IM/SMS command "nudge " +msgctxt "COMMANDHELP" +msgid "remind a user to update." msgstr "" -"Polecenia:\n" -"on - włącza powiadomienia\n" -"off - wyłącza powiadomienia\n" -"help - wyświetla tę pomoc\n" -"follow - subskrybuje użytkownika\n" -"groups - wyświetla listę grup, do których dołączyłeś\n" -"subscriptions - wyświetla listę obserwowanych osób\n" -"subscribers - wyświetla listę osób, które cię obserwują\n" -"leave - usuwa subskrypcję użytkownika\n" -"d - bezpośrednia wiadomość do użytkownika\n" -"get - zwraca ostatni wpis użytkownika\n" -"whois - zwraca informacje o profilu użytkownika\n" -"lose - wymusza użytkownika do zatrzymania obserwowania cię\n" -"fav - dodaje ostatni wpis użytkownika jako \"ulubiony\"\n" -"fav # - dodaje wpis z podanym identyfikatorem jako " -"\"ulubiony\"\n" -"repeat # - powtarza wiadomość z zadanym " -"identyfikatorem\n" -"repeat - powtarza ostatnią wiadomość od użytkownika\n" -"reply # - odpowiada na wpis z podanym identyfikatorem\n" -"reply - odpowiada na ostatni wpis użytkownika\n" -"join - dołącza do grupy\n" -"login - pobiera odnośnik do zalogowania się do interfejsu WWW\n" -"drop - opuszcza grupę\n" -"stats - pobiera statystyki\n" -"stop - to samo co \"off\"\n" -"quit - to samo co \"off\"\n" -"sub - to samo co \"follow\"\n" -"unsub - to samo co \"leave\"\n" -"last - to samo co \"get\"\n" -"on - jeszcze nie zaimplementowano\n" -"off - jeszcze nie zaimplementowano\n" -"nudge - przypomina użytkownikowi o aktualizacji\n" -"invite - jeszcze nie zaimplementowano\n" -"track - jeszcze nie zaimplementowano\n" -"untrack - jeszcze nie zaimplementowano\n" -"track off - jeszcze nie zaimplementowano\n" -"untrack all - jeszcze nie zaimplementowano\n" -"tracks - jeszcze nie zaimplementowano\n" -"tracking - jeszcze nie zaimplementowano\n" #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. msgid "No configuration file found." @@ -7034,6 +7152,9 @@ msgstr "" "Położenie grupy, jeśli istnieje, np. \"miasto, województwo (lub region), kraj" "\"." +msgid "Aliases" +msgstr "Aliasy" + #, php-format msgid "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " @@ -7118,6 +7239,10 @@ msgctxt "TOOLTIP" msgid "Add or edit %s design" msgstr "Dodanie lub modyfikacja wyglądu grupy %s" +#. TRANS: Group actions header (h2). Text hidden by default. +msgid "Group actions" +msgstr "Działania grupy" + #. TRANS: Title for groups with the most members section. msgid "Groups with most members" msgstr "Grupy z największą liczbą członków" @@ -7689,6 +7814,7 @@ msgstr "Wyślij wpis" msgid "What's up, %s?" msgstr "Co słychać, %s?" +#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Załącz" @@ -8153,52 +8279,6 @@ msgstr "Zrezygnuj z subskrypcji" msgid "User %1$s (%2$d) has no profile record." msgstr "Użytkownik%1$s (%2$d) nie posiada wpisu profilu." -msgid "Edit Avatar" -msgstr "Zmodyfikuj awatar" - -#. TRANS: H2 for user actions in a profile. -#. TRANS: H2 for entity actions in a profile. -msgid "User actions" -msgstr "Czynności użytkownika" - -#. TRANS: Text shown in user profile of not yet compeltely deleted users. -msgid "User deletion in progress..." -msgstr "Trwa usuwanie użytkownika..." - -#. TRANS: Link title for link on user profile. -msgid "Edit profile settings" -msgstr "Zmodyfikuj ustawienia profilu" - -#. TRANS: Link text for link on user profile. -msgid "Edit" -msgstr "Edycja" - -#. TRANS: Link title for link on user profile. -msgid "Send a direct message to this user" -msgstr "Wyślij bezpośrednią wiadomość do tego użytkownika" - -#. TRANS: Link text for link on user profile. -msgid "Message" -msgstr "Wiadomość" - -#. TRANS: Label text on user profile to select a user role. -msgid "Moderate" -msgstr "Moderuj" - -#. TRANS: Label text on user profile to select a user role. -msgid "User role" -msgstr "Rola użytkownika" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Administrator" -msgstr "Administrator" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Moderator" -msgstr "Moderator" - #, fuzzy msgid "Not allowed to log in." msgstr "Niezalogowany." @@ -8279,3 +8359,91 @@ msgstr "Nieprawidłowy kod XML, brak głównego XRD." #, php-format msgid "Getting backup from file '%s'." msgstr "Pobieranie kopii zapasowej z pliku \"%s\"." + +#~ msgid "Note" +#~ msgstr "Wpis" + +#~ msgid "" +#~ "Commands:\n" +#~ "on - turn on notifications\n" +#~ "off - turn off notifications\n" +#~ "help - show this help\n" +#~ "follow - subscribe to user\n" +#~ "groups - lists the groups you have joined\n" +#~ "subscriptions - list the people you follow\n" +#~ "subscribers - list the people that follow you\n" +#~ "leave - unsubscribe from user\n" +#~ "d - direct message to user\n" +#~ "get - get last notice from user\n" +#~ "whois - get profile info on user\n" +#~ "lose - force user to stop following you\n" +#~ "fav - add user's last notice as a 'fave'\n" +#~ "fav # - add notice with the given id as a 'fave'\n" +#~ "repeat # - repeat a notice with a given id\n" +#~ "repeat - repeat the last notice from user\n" +#~ "reply # - reply to notice with a given id\n" +#~ "reply - reply to the last notice from user\n" +#~ "join - join group\n" +#~ "login - Get a link to login to the web interface\n" +#~ "drop - leave group\n" +#~ "stats - get your stats\n" +#~ "stop - same as 'off'\n" +#~ "quit - same as 'off'\n" +#~ "sub - same as 'follow'\n" +#~ "unsub - same as 'leave'\n" +#~ "last - same as 'get'\n" +#~ "on - not yet implemented.\n" +#~ "off - not yet implemented.\n" +#~ "nudge - remind a user to update.\n" +#~ "invite - not yet implemented.\n" +#~ "track - not yet implemented.\n" +#~ "untrack - not yet implemented.\n" +#~ "track off - not yet implemented.\n" +#~ "untrack all - not yet implemented.\n" +#~ "tracks - not yet implemented.\n" +#~ "tracking - not yet implemented.\n" +#~ msgstr "" +#~ "Polecenia:\n" +#~ "on - włącza powiadomienia\n" +#~ "off - wyłącza powiadomienia\n" +#~ "help - wyświetla tę pomoc\n" +#~ "follow - subskrybuje użytkownika\n" +#~ "groups - wyświetla listę grup, do których dołączyłeś\n" +#~ "subscriptions - wyświetla listę obserwowanych osób\n" +#~ "subscribers - wyświetla listę osób, które cię obserwują\n" +#~ "leave - usuwa subskrypcję użytkownika\n" +#~ "d - bezpośrednia wiadomość do użytkownika\n" +#~ "get - zwraca ostatni wpis użytkownika\n" +#~ "whois - zwraca informacje o profilu użytkownika\n" +#~ "lose - wymusza użytkownika do zatrzymania obserwowania cię\n" +#~ "fav - dodaje ostatni wpis użytkownika jako \"ulubiony\"\n" +#~ "fav # - dodaje wpis z podanym identyfikatorem jako " +#~ "\"ulubiony\"\n" +#~ "repeat # - powtarza wiadomość z zadanym " +#~ "identyfikatorem\n" +#~ "repeat - powtarza ostatnią wiadomość od użytkownika\n" +#~ "reply # - odpowiada na wpis z podanym " +#~ "identyfikatorem\n" +#~ "reply - odpowiada na ostatni wpis użytkownika\n" +#~ "join - dołącza do grupy\n" +#~ "login - pobiera odnośnik do zalogowania się do interfejsu WWW\n" +#~ "drop - opuszcza grupę\n" +#~ "stats - pobiera statystyki\n" +#~ "stop - to samo co \"off\"\n" +#~ "quit - to samo co \"off\"\n" +#~ "sub - to samo co \"follow\"\n" +#~ "unsub - to samo co \"leave\"\n" +#~ "last - to samo co \"get\"\n" +#~ "on - jeszcze nie zaimplementowano\n" +#~ "off - jeszcze nie zaimplementowano\n" +#~ "nudge - przypomina użytkownikowi o aktualizacji\n" +#~ "invite - jeszcze nie zaimplementowano\n" +#~ "track - jeszcze nie zaimplementowano\n" +#~ "untrack - jeszcze nie zaimplementowano\n" +#~ "track off - jeszcze nie zaimplementowano\n" +#~ "untrack all - jeszcze nie zaimplementowano\n" +#~ "tracks - jeszcze nie zaimplementowano\n" +#~ "tracking - jeszcze nie zaimplementowano\n" + +#~ msgid "Edit Avatar" +#~ msgstr "Zmodyfikuj awatar" diff --git a/locale/pt/LC_MESSAGES/statusnet.po b/locale/pt/LC_MESSAGES/statusnet.po index 8cba1b643c..1b1e41be95 100644 --- a/locale/pt/LC_MESSAGES/statusnet.po +++ b/locale/pt/LC_MESSAGES/statusnet.po @@ -17,17 +17,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-11 18:15+0000\n" -"PO-Revision-Date: 2011-03-11 18:17:24+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:49:53+0000\n" "Language-Team: Portuguese \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: pt\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" +"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -595,7 +595,7 @@ msgstr "Não foi possível remover %1$s do grupo %2$s." msgid "%s's groups" msgstr "Grupos de %s" -#. TRANS: Used as subtitle in check for group membership. %1$s is a user name, %2$s is the site name. +#. TRANS: Used as subtitle in check for group membership. %1$s is the site name, %2$s is a user name. #, php-format msgid "%1$s groups %2$s is a member of." msgstr "Grupos de %1$s de que %2$s é membro." @@ -4652,18 +4652,6 @@ msgstr "Grupo %s" msgid "%1$s group, page %2$d" msgstr "Grupo %1$s, página %2$d" -#. TRANS: Label for group description or group note (dt). Text hidden by default. -msgid "Note" -msgstr "Anotação" - -#. TRANS: Label for group aliases (dt). Text hidden by default. -msgid "Aliases" -msgstr "Nomes alternativos" - -#. TRANS: Group actions header (h2). Text hidden by default. -msgid "Group actions" -msgstr "Acções do grupo" - #. TRANS: Tooltip for feed link. %s is a group nickname. #, php-format msgid "Notice feed for %s group (RSS 1.0)" @@ -4774,6 +4762,10 @@ msgstr "Mensagem de %1$s a %2$s" msgid "Notice deleted." msgstr "Avatar actualizado." +#, fuzzy +msgid "Notice" +msgstr "Notas" + #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #, php-format msgid "%1$s tagged %2$s" @@ -5310,7 +5302,6 @@ msgstr "Argumento de identificação (ID) em falta." msgid "Tag %s" msgstr "Categoria %s" -#. TRANS: H2 for user profile information. msgid "User profile" msgstr "Perfil" @@ -6028,6 +6019,49 @@ msgstr "" msgid "No AtomPub API service for %s." msgstr "" +#. TRANS: H2 for user actions in a profile. +#. TRANS: H2 for entity actions in a profile. +msgid "User actions" +msgstr "Acções do utilizador" + +#. TRANS: Text shown in user profile of not yet compeltely deleted users. +msgid "User deletion in progress..." +msgstr "A apagar o utilizador..." + +#. TRANS: Link title for link on user profile. +msgid "Edit profile settings" +msgstr "Editar configurações do perfil" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "Editar" + +#. TRANS: Link title for link on user profile. +msgid "Send a direct message to this user" +msgstr "Enviar mensagem directa a este utilizador" + +#. TRANS: Link text for link on user profile. +msgid "Message" +msgstr "Mensagem" + +#. TRANS: Label text on user profile to select a user role. +msgid "Moderate" +msgstr "Moderar" + +#. TRANS: Label text on user profile to select a user role. +msgid "User role" +msgstr "Função" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Administrator" +msgstr "Gestor" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Moderator" +msgstr "Moderador" + #. TRANS: Page title. %1$s is the title, %2$s is the site name. #, php-format msgid "%1$s - %2$s" @@ -6752,85 +6786,171 @@ msgid_plural "You are a member of these groups:" msgstr[0] "Está no grupo:" msgstr[1] "Está nos grupos:" -#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings. -msgid "" -"Commands:\n" -"on - turn on notifications\n" -"off - turn off notifications\n" -"help - show this help\n" -"follow - subscribe to user\n" -"groups - lists the groups you have joined\n" -"subscriptions - list the people you follow\n" -"subscribers - list the people that follow you\n" -"leave - unsubscribe from user\n" -"d - direct message to user\n" -"get - get last notice from user\n" -"whois - get profile info on user\n" -"lose - force user to stop following you\n" -"fav - add user's last notice as a 'fave'\n" -"fav # - add notice with the given id as a 'fave'\n" -"repeat # - repeat a notice with a given id\n" -"repeat - repeat the last notice from user\n" -"reply # - reply to notice with a given id\n" -"reply - reply to the last notice from user\n" -"join - join group\n" -"login - Get a link to login to the web interface\n" -"drop - leave group\n" -"stats - get your stats\n" -"stop - same as 'off'\n" -"quit - same as 'off'\n" -"sub - same as 'follow'\n" -"unsub - same as 'leave'\n" -"last - same as 'get'\n" -"on - not yet implemented.\n" -"off - not yet implemented.\n" -"nudge - remind a user to update.\n" -"invite - not yet implemented.\n" -"track - not yet implemented.\n" -"untrack - not yet implemented.\n" -"track off - not yet implemented.\n" -"untrack all - not yet implemented.\n" -"tracks - not yet implemented.\n" -"tracking - not yet implemented.\n" +#. TRANS: Header line of help text for commands. +#, fuzzy +msgctxt "COMMANDHELP" +msgid "Commands:" +msgstr "Resultados do comando" + +#. TRANS: Help message for IM/SMS command "on" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn on notifications" +msgstr "Não foi possível ligar a notificação." + +#. TRANS: Help message for IM/SMS command "off" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn off notifications" +msgstr "Não foi possível desligar a notificação." + +#. TRANS: Help message for IM/SMS command "help" +msgctxt "COMMANDHELP" +msgid "show this help" +msgstr "" + +#. TRANS: Help message for IM/SMS command "follow " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "subscribe to user" +msgstr "Subscrever este utilizador" + +#. TRANS: Help message for IM/SMS command "groups" +msgctxt "COMMANDHELP" +msgid "lists the groups you have joined" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscriptions" +msgctxt "COMMANDHELP" +msgid "list the people you follow" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscribers" +msgctxt "COMMANDHELP" +msgid "list the people that follow you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "leave " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "unsubscribe from user" +msgstr "Deixar de subscrever este utilizador" + +#. TRANS: Help message for IM/SMS command "d " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "direct message to user" +msgstr "Mensagens directas para %s" + +#. TRANS: Help message for IM/SMS command "get " +msgctxt "COMMANDHELP" +msgid "get last notice from user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "whois " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "get profile info on user" +msgstr "Informação do perfil" + +#. TRANS: Help message for IM/SMS command "lose " +msgctxt "COMMANDHELP" +msgid "force user to stop following you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav " +msgctxt "COMMANDHELP" +msgid "add user's last notice as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav #" +msgctxt "COMMANDHELP" +msgid "add notice with the given id as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat #" +msgctxt "COMMANDHELP" +msgid "repeat a notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "repeat the last notice from user" +msgstr "Repetir esta nota" + +#. TRANS: Help message for IM/SMS command "reply #" +msgctxt "COMMANDHELP" +msgid "reply to notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "reply " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "reply to the last notice from user" +msgstr "Responder a esta nota" + +#. TRANS: Help message for IM/SMS command "join " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "join group" +msgstr "Grupo desconhecido." + +#. TRANS: Help message for IM/SMS command "login" +msgctxt "COMMANDHELP" +msgid "Get a link to login to the web interface" +msgstr "" + +#. TRANS: Help message for IM/SMS command "drop " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "leave group" +msgstr "Apagar grupo" + +#. TRANS: Help message for IM/SMS command "stats" +msgctxt "COMMANDHELP" +msgid "get your stats" +msgstr "" + +#. TRANS: Help message for IM/SMS command "stop" +#. TRANS: Help message for IM/SMS command "quit" +msgctxt "COMMANDHELP" +msgid "same as 'off'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "sub " +msgctxt "COMMANDHELP" +msgid "same as 'follow'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "unsub " +msgctxt "COMMANDHELP" +msgid "same as 'leave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "last " +msgctxt "COMMANDHELP" +msgid "same as 'get'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "on " +#. TRANS: Help message for IM/SMS command "off " +#. TRANS: Help message for IM/SMS command "invite " +#. TRANS: Help message for IM/SMS command "track " +#. TRANS: Help message for IM/SMS command "untrack " +#. TRANS: Help message for IM/SMS command "track off" +#. TRANS: Help message for IM/SMS command "untrack all" +#. TRANS: Help message for IM/SMS command "tracks" +#. TRANS: Help message for IM/SMS command "tracking" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "not yet implemented." +msgstr "Comando ainda não implementado." + +#. TRANS: Help message for IM/SMS command "nudge " +msgctxt "COMMANDHELP" +msgid "remind a user to update." msgstr "" -"Comandos:\n" -"on - ligar notificações\n" -"off - desligar notificações\n" -"help - mostrar esta ajuda\n" -"follow - subscrever este utilizador\n" -"groups - lista os grupos a que se juntou\n" -"subscriptions - lista as pessoas que está a seguir\n" -"subscribers - lista as pessoas que estão a segui-lo(a)\n" -"leave - deixar de subscrever este utilizador\n" -"d - mensagem directa para o utilizador\n" -"get - receber última nota do utilizador\n" -"whois - receber perfil do utilizador\n" -"lose - obrigar o utilizador a deixar de subscrevê-lo\n" -"fav - adicionar última nota do utilizador às favoritas\n" -"fav # - adicionar nota com esta identificação às favoritas\n" -"repeat # - repetir uma nota com uma certa identificação\n" -"repeat - repetir a última nota do utilizador\n" -"reply # - responder à nota com esta identificação\n" -"reply - responder à última nota do utilizador\n" -"join - juntar-se ao grupo\n" -"login - Receber uma ligação para iniciar sessão na interface web\n" -"drop - afastar-se do grupo\n" -"stats - receber as suas estatísticas\n" -"stop - o mesmo que 'off'\n" -"quit - o mesmo que 'off'\n" -"sub - o mesmo que 'follow'\n" -"unsub - o mesmo que 'leave'\n" -"last - o mesmo que 'get'\n" -"on - ainda não implementado.\n" -"off - ainda não implementado.\n" -"nudge - relembrar um utilizador para actualizar.\n" -"invite - ainda não implementado.\n" -"track - ainda não implementado.\n" -"untrack - ainda não implementado.\n" -"track off - ainda não implementado.\n" -"untrack all - ainda não implementado.\n" -"tracks - ainda não implementado.\n" -"tracking - ainda não implementado.\n" #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. #, fuzzy @@ -7012,6 +7132,9 @@ msgid "" "Location for the group, if any, like \"City, State (or Region), Country\"." msgstr "Localidade do grupo, se aplicável, por ex. \"Cidade, Região, País\"" +msgid "Aliases" +msgstr "Nomes alternativos" + #, fuzzy, php-format msgid "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " @@ -7091,6 +7214,10 @@ msgctxt "TOOLTIP" msgid "Add or edit %s design" msgstr "Adicionar ou editar o design de %s" +#. TRANS: Group actions header (h2). Text hidden by default. +msgid "Group actions" +msgstr "Acções do grupo" + #. TRANS: Title for groups with the most members section. msgid "Groups with most members" msgstr "Grupos com mais membros" @@ -7661,6 +7788,7 @@ msgstr "Enviar uma nota" msgid "What's up, %s?" msgstr "Novidades, %s?" +#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Anexar" @@ -8122,52 +8250,6 @@ msgstr "Abandonar" msgid "User %1$s (%2$d) has no profile record." msgstr "Utilizador não tem perfil." -msgid "Edit Avatar" -msgstr "Editar Avatar" - -#. TRANS: H2 for user actions in a profile. -#. TRANS: H2 for entity actions in a profile. -msgid "User actions" -msgstr "Acções do utilizador" - -#. TRANS: Text shown in user profile of not yet compeltely deleted users. -msgid "User deletion in progress..." -msgstr "A apagar o utilizador..." - -#. TRANS: Link title for link on user profile. -msgid "Edit profile settings" -msgstr "Editar configurações do perfil" - -#. TRANS: Link text for link on user profile. -msgid "Edit" -msgstr "Editar" - -#. TRANS: Link title for link on user profile. -msgid "Send a direct message to this user" -msgstr "Enviar mensagem directa a este utilizador" - -#. TRANS: Link text for link on user profile. -msgid "Message" -msgstr "Mensagem" - -#. TRANS: Label text on user profile to select a user role. -msgid "Moderate" -msgstr "Moderar" - -#. TRANS: Label text on user profile to select a user role. -msgid "User role" -msgstr "Função" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Administrator" -msgstr "Gestor" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Moderator" -msgstr "Moderador" - #, fuzzy msgid "Not allowed to log in." msgstr "Não iniciou sessão." @@ -8243,3 +8325,88 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" + +#~ msgid "Note" +#~ msgstr "Anotação" + +#~ msgid "" +#~ "Commands:\n" +#~ "on - turn on notifications\n" +#~ "off - turn off notifications\n" +#~ "help - show this help\n" +#~ "follow - subscribe to user\n" +#~ "groups - lists the groups you have joined\n" +#~ "subscriptions - list the people you follow\n" +#~ "subscribers - list the people that follow you\n" +#~ "leave - unsubscribe from user\n" +#~ "d - direct message to user\n" +#~ "get - get last notice from user\n" +#~ "whois - get profile info on user\n" +#~ "lose - force user to stop following you\n" +#~ "fav - add user's last notice as a 'fave'\n" +#~ "fav # - add notice with the given id as a 'fave'\n" +#~ "repeat # - repeat a notice with a given id\n" +#~ "repeat - repeat the last notice from user\n" +#~ "reply # - reply to notice with a given id\n" +#~ "reply - reply to the last notice from user\n" +#~ "join - join group\n" +#~ "login - Get a link to login to the web interface\n" +#~ "drop - leave group\n" +#~ "stats - get your stats\n" +#~ "stop - same as 'off'\n" +#~ "quit - same as 'off'\n" +#~ "sub - same as 'follow'\n" +#~ "unsub - same as 'leave'\n" +#~ "last - same as 'get'\n" +#~ "on - not yet implemented.\n" +#~ "off - not yet implemented.\n" +#~ "nudge - remind a user to update.\n" +#~ "invite - not yet implemented.\n" +#~ "track - not yet implemented.\n" +#~ "untrack - not yet implemented.\n" +#~ "track off - not yet implemented.\n" +#~ "untrack all - not yet implemented.\n" +#~ "tracks - not yet implemented.\n" +#~ "tracking - not yet implemented.\n" +#~ msgstr "" +#~ "Comandos:\n" +#~ "on - ligar notificações\n" +#~ "off - desligar notificações\n" +#~ "help - mostrar esta ajuda\n" +#~ "follow - subscrever este utilizador\n" +#~ "groups - lista os grupos a que se juntou\n" +#~ "subscriptions - lista as pessoas que está a seguir\n" +#~ "subscribers - lista as pessoas que estão a segui-lo(a)\n" +#~ "leave - deixar de subscrever este utilizador\n" +#~ "d - mensagem directa para o utilizador\n" +#~ "get - receber última nota do utilizador\n" +#~ "whois - receber perfil do utilizador\n" +#~ "lose - obrigar o utilizador a deixar de subscrevê-lo\n" +#~ "fav - adicionar última nota do utilizador às favoritas\n" +#~ "fav # - adicionar nota com esta identificação às favoritas\n" +#~ "repeat # - repetir uma nota com uma certa identificação\n" +#~ "repeat - repetir a última nota do utilizador\n" +#~ "reply # - responder à nota com esta identificação\n" +#~ "reply - responder à última nota do utilizador\n" +#~ "join - juntar-se ao grupo\n" +#~ "login - Receber uma ligação para iniciar sessão na interface web\n" +#~ "drop - afastar-se do grupo\n" +#~ "stats - receber as suas estatísticas\n" +#~ "stop - o mesmo que 'off'\n" +#~ "quit - o mesmo que 'off'\n" +#~ "sub - o mesmo que 'follow'\n" +#~ "unsub - o mesmo que 'leave'\n" +#~ "last - o mesmo que 'get'\n" +#~ "on - ainda não implementado.\n" +#~ "off - ainda não implementado.\n" +#~ "nudge - relembrar um utilizador para actualizar.\n" +#~ "invite - ainda não implementado.\n" +#~ "track - ainda não implementado.\n" +#~ "untrack - ainda não implementado.\n" +#~ "track off - ainda não implementado.\n" +#~ "untrack all - ainda não implementado.\n" +#~ "tracks - ainda não implementado.\n" +#~ "tracking - ainda não implementado.\n" + +#~ msgid "Edit Avatar" +#~ msgstr "Editar Avatar" diff --git a/locale/pt_BR/LC_MESSAGES/statusnet.po b/locale/pt_BR/LC_MESSAGES/statusnet.po index 66957c90c9..fc2eacbe50 100644 --- a/locale/pt_BR/LC_MESSAGES/statusnet.po +++ b/locale/pt_BR/LC_MESSAGES/statusnet.po @@ -15,18 +15,18 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-11 18:15+0000\n" -"PO-Revision-Date: 2011-03-11 18:17:25+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:49:54+0000\n" "Language-Team: Brazilian Portuguese \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: pt-br\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" +"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -601,7 +601,7 @@ msgstr "Não foi possível remover o usuário %1$s do grupo %2$s." msgid "%s's groups" msgstr "Grupos de %s" -#. TRANS: Used as subtitle in check for group membership. %1$s is a user name, %2$s is the site name. +#. TRANS: Used as subtitle in check for group membership. %1$s is the site name, %2$s is a user name. #, php-format msgid "%1$s groups %2$s is a member of." msgstr "Grupos de %1$s nos quais %2$s é membro." @@ -4720,18 +4720,6 @@ msgstr "Grupo %s" msgid "%1$s group, page %2$d" msgstr "Grupo %1$s, pág. %2$d" -#. TRANS: Label for group description or group note (dt). Text hidden by default. -msgid "Note" -msgstr "Mensagem" - -#. TRANS: Label for group aliases (dt). Text hidden by default. -msgid "Aliases" -msgstr "Apelidos" - -#. TRANS: Group actions header (h2). Text hidden by default. -msgid "Group actions" -msgstr "Ações do grupo" - #. TRANS: Tooltip for feed link. %s is a group nickname. #, php-format msgid "Notice feed for %s group (RSS 1.0)" @@ -4842,6 +4830,10 @@ msgstr "Mensagem de %1$s no %2$s" msgid "Notice deleted." msgstr "A mensagem excluída." +#, fuzzy +msgid "Notice" +msgstr "Mensagens" + #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #, php-format msgid "%1$s tagged %2$s" @@ -5377,7 +5369,6 @@ msgstr "Nenhum argumento de ID." msgid "Tag %s" msgstr "Etiqueta %s" -#. TRANS: H2 for user profile information. msgid "User profile" msgstr "Perfil do usuário" @@ -6095,6 +6086,49 @@ msgstr "" msgid "No AtomPub API service for %s." msgstr "" +#. TRANS: H2 for user actions in a profile. +#. TRANS: H2 for entity actions in a profile. +msgid "User actions" +msgstr "Ações do usuário" + +#. TRANS: Text shown in user profile of not yet compeltely deleted users. +msgid "User deletion in progress..." +msgstr "Exclusão do usuário em andamento..." + +#. TRANS: Link title for link on user profile. +msgid "Edit profile settings" +msgstr "Editar as configurações do perfil" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "Editar" + +#. TRANS: Link title for link on user profile. +msgid "Send a direct message to this user" +msgstr "Enviar uma mensagem para este usuário." + +#. TRANS: Link text for link on user profile. +msgid "Message" +msgstr "Mensagem" + +#. TRANS: Label text on user profile to select a user role. +msgid "Moderate" +msgstr "Moderar" + +#. TRANS: Label text on user profile to select a user role. +msgid "User role" +msgstr "Papel do usuário" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Administrator" +msgstr "Administrador" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Moderator" +msgstr "Moderador" + #. TRANS: Page title. %1$s is the title, %2$s is the site name. #, php-format msgid "%1$s - %2$s" @@ -6829,86 +6863,171 @@ msgid_plural "You are a member of these groups:" msgstr[0] "Você é membro deste grupo:" msgstr[1] "Você é membro destes grupos:" -#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings. -msgid "" -"Commands:\n" -"on - turn on notifications\n" -"off - turn off notifications\n" -"help - show this help\n" -"follow - subscribe to user\n" -"groups - lists the groups you have joined\n" -"subscriptions - list the people you follow\n" -"subscribers - list the people that follow you\n" -"leave - unsubscribe from user\n" -"d - direct message to user\n" -"get - get last notice from user\n" -"whois - get profile info on user\n" -"lose - force user to stop following you\n" -"fav - add user's last notice as a 'fave'\n" -"fav # - add notice with the given id as a 'fave'\n" -"repeat # - repeat a notice with a given id\n" -"repeat - repeat the last notice from user\n" -"reply # - reply to notice with a given id\n" -"reply - reply to the last notice from user\n" -"join - join group\n" -"login - Get a link to login to the web interface\n" -"drop - leave group\n" -"stats - get your stats\n" -"stop - same as 'off'\n" -"quit - same as 'off'\n" -"sub - same as 'follow'\n" -"unsub - same as 'leave'\n" -"last - same as 'get'\n" -"on - not yet implemented.\n" -"off - not yet implemented.\n" -"nudge - remind a user to update.\n" -"invite - not yet implemented.\n" -"track - not yet implemented.\n" -"untrack - not yet implemented.\n" -"track off - not yet implemented.\n" -"untrack all - not yet implemented.\n" -"tracks - not yet implemented.\n" -"tracking - not yet implemented.\n" +#. TRANS: Header line of help text for commands. +#, fuzzy +msgctxt "COMMANDHELP" +msgid "Commands:" +msgstr "Resultados do comando" + +#. TRANS: Help message for IM/SMS command "on" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn on notifications" +msgstr "Não é possível ligar a notificação." + +#. TRANS: Help message for IM/SMS command "off" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn off notifications" +msgstr "Não é possível desligar a notificação." + +#. TRANS: Help message for IM/SMS command "help" +msgctxt "COMMANDHELP" +msgid "show this help" +msgstr "" + +#. TRANS: Help message for IM/SMS command "follow " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "subscribe to user" +msgstr "Assinar este usuário" + +#. TRANS: Help message for IM/SMS command "groups" +msgctxt "COMMANDHELP" +msgid "lists the groups you have joined" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscriptions" +msgctxt "COMMANDHELP" +msgid "list the people you follow" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscribers" +msgctxt "COMMANDHELP" +msgid "list the people that follow you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "leave " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "unsubscribe from user" +msgstr "Cancelar a assinatura deste usuário" + +#. TRANS: Help message for IM/SMS command "d " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "direct message to user" +msgstr "Mensagens diretas para %s" + +#. TRANS: Help message for IM/SMS command "get " +msgctxt "COMMANDHELP" +msgid "get last notice from user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "whois " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "get profile info on user" +msgstr "Informações do perfil" + +#. TRANS: Help message for IM/SMS command "lose " +msgctxt "COMMANDHELP" +msgid "force user to stop following you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav " +msgctxt "COMMANDHELP" +msgid "add user's last notice as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav #" +msgctxt "COMMANDHELP" +msgid "add notice with the given id as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat #" +msgctxt "COMMANDHELP" +msgid "repeat a notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "repeat the last notice from user" +msgstr "Repetir esta mensagem" + +#. TRANS: Help message for IM/SMS command "reply #" +msgctxt "COMMANDHELP" +msgid "reply to notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "reply " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "reply to the last notice from user" +msgstr "Responder a esta mensagem" + +#. TRANS: Help message for IM/SMS command "join " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "join group" +msgstr "Grupo desconhecido." + +#. TRANS: Help message for IM/SMS command "login" +msgctxt "COMMANDHELP" +msgid "Get a link to login to the web interface" +msgstr "" + +#. TRANS: Help message for IM/SMS command "drop " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "leave group" +msgstr "Excluir o grupo" + +#. TRANS: Help message for IM/SMS command "stats" +msgctxt "COMMANDHELP" +msgid "get your stats" +msgstr "" + +#. TRANS: Help message for IM/SMS command "stop" +#. TRANS: Help message for IM/SMS command "quit" +msgctxt "COMMANDHELP" +msgid "same as 'off'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "sub " +msgctxt "COMMANDHELP" +msgid "same as 'follow'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "unsub " +msgctxt "COMMANDHELP" +msgid "same as 'leave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "last " +msgctxt "COMMANDHELP" +msgid "same as 'get'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "on " +#. TRANS: Help message for IM/SMS command "off " +#. TRANS: Help message for IM/SMS command "invite " +#. TRANS: Help message for IM/SMS command "track " +#. TRANS: Help message for IM/SMS command "untrack " +#. TRANS: Help message for IM/SMS command "track off" +#. TRANS: Help message for IM/SMS command "untrack all" +#. TRANS: Help message for IM/SMS command "tracks" +#. TRANS: Help message for IM/SMS command "tracking" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "not yet implemented." +msgstr "O comando não foi implementado ainda." + +#. TRANS: Help message for IM/SMS command "nudge " +msgctxt "COMMANDHELP" +msgid "remind a user to update." msgstr "" -"Comandos:\n" -"on - ativa as notificações\n" -"off - desativa as notificações\n" -"help - exibe esta ajuda\n" -"follow - assina o usuário\n" -"groups - lista os grupos aos quais você se associou\n" -"subscriptions - lista as pessoas que você segue\n" -"subscribers - lista as pessoas que seguem você\n" -"leave - deixa de assinar o usuário\n" -"d - mensagem direta para o usuário\n" -"get - obtém a última mensagem do usuário\n" -"whois - obtém as informações do perfil do usuário\n" -"lose - obriga o usuário a deixar de segui-lo\n" -"fav - adiciona a último mensagem do usuário como uma " -"'favorita'\n" -"fav # - adiciona a mensagem identificada como 'favorita'\n" -"repeat # - repete a mensagem identificada\n" -"repeat - repete a última mensagem do usuário\n" -"reply # - responde a mensagem identificada\n" -"reply - responde a última mensagem do usuário\n" -"join - associa-se ao grupo\n" -"login - obtém um link para se autenticar na interface web\n" -"drop - deixa o grupo\n" -"stats - obtém suas estatísticas\n" -"stop - o mesmo que 'off'\n" -"quit - o mesmo que 'off'\n" -"sub - o mesmo que 'follow'\n" -"unsub - o mesmo que 'leave'\n" -"last - o mesmo que 'get'\n" -"on - não implementado ainda\n" -"off - não implementado ainda\n" -"nudge - chama a atenção do usuário\n" -"invite - não implementado ainda\n" -"track - não implementado ainda\n" -"untrack - não implementado ainda\n" -"track off - não implementado ainda\n" -"untrack all - não implementado ainda\n" -"tracks - não implementado ainda\n" -"tracking - não implementado ainda\n" #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. #, fuzzy @@ -7092,6 +7211,9 @@ msgstr "" "Localização do grupo, caso tenha alguma, como \"cidade, estado (ou região), " "país\"" +msgid "Aliases" +msgstr "Apelidos" + #, fuzzy, php-format msgid "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " @@ -7171,6 +7293,10 @@ msgctxt "TOOLTIP" msgid "Add or edit %s design" msgstr "Adicionar ou editar a aparência de %s" +#. TRANS: Group actions header (h2). Text hidden by default. +msgid "Group actions" +msgstr "Ações do grupo" + #. TRANS: Title for groups with the most members section. msgid "Groups with most members" msgstr "Grupos com mais membros" @@ -7743,6 +7869,7 @@ msgstr "Enviar uma mensagem" msgid "What's up, %s?" msgstr "E aí, %s?" +#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Anexo" @@ -8202,52 +8329,6 @@ msgstr "Cancelar" msgid "User %1$s (%2$d) has no profile record." msgstr "O usuário não tem perfil." -msgid "Edit Avatar" -msgstr "Editar o avatar" - -#. TRANS: H2 for user actions in a profile. -#. TRANS: H2 for entity actions in a profile. -msgid "User actions" -msgstr "Ações do usuário" - -#. TRANS: Text shown in user profile of not yet compeltely deleted users. -msgid "User deletion in progress..." -msgstr "Exclusão do usuário em andamento..." - -#. TRANS: Link title for link on user profile. -msgid "Edit profile settings" -msgstr "Editar as configurações do perfil" - -#. TRANS: Link text for link on user profile. -msgid "Edit" -msgstr "Editar" - -#. TRANS: Link title for link on user profile. -msgid "Send a direct message to this user" -msgstr "Enviar uma mensagem para este usuário." - -#. TRANS: Link text for link on user profile. -msgid "Message" -msgstr "Mensagem" - -#. TRANS: Label text on user profile to select a user role. -msgid "Moderate" -msgstr "Moderar" - -#. TRANS: Label text on user profile to select a user role. -msgid "User role" -msgstr "Papel do usuário" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Administrator" -msgstr "Administrador" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Moderator" -msgstr "Moderador" - #, fuzzy msgid "Not allowed to log in." msgstr "Você não está autenticado." @@ -8323,3 +8404,89 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" + +#~ msgid "Note" +#~ msgstr "Mensagem" + +#~ msgid "" +#~ "Commands:\n" +#~ "on - turn on notifications\n" +#~ "off - turn off notifications\n" +#~ "help - show this help\n" +#~ "follow - subscribe to user\n" +#~ "groups - lists the groups you have joined\n" +#~ "subscriptions - list the people you follow\n" +#~ "subscribers - list the people that follow you\n" +#~ "leave - unsubscribe from user\n" +#~ "d - direct message to user\n" +#~ "get - get last notice from user\n" +#~ "whois - get profile info on user\n" +#~ "lose - force user to stop following you\n" +#~ "fav - add user's last notice as a 'fave'\n" +#~ "fav # - add notice with the given id as a 'fave'\n" +#~ "repeat # - repeat a notice with a given id\n" +#~ "repeat - repeat the last notice from user\n" +#~ "reply # - reply to notice with a given id\n" +#~ "reply - reply to the last notice from user\n" +#~ "join - join group\n" +#~ "login - Get a link to login to the web interface\n" +#~ "drop - leave group\n" +#~ "stats - get your stats\n" +#~ "stop - same as 'off'\n" +#~ "quit - same as 'off'\n" +#~ "sub - same as 'follow'\n" +#~ "unsub - same as 'leave'\n" +#~ "last - same as 'get'\n" +#~ "on - not yet implemented.\n" +#~ "off - not yet implemented.\n" +#~ "nudge - remind a user to update.\n" +#~ "invite - not yet implemented.\n" +#~ "track - not yet implemented.\n" +#~ "untrack - not yet implemented.\n" +#~ "track off - not yet implemented.\n" +#~ "untrack all - not yet implemented.\n" +#~ "tracks - not yet implemented.\n" +#~ "tracking - not yet implemented.\n" +#~ msgstr "" +#~ "Comandos:\n" +#~ "on - ativa as notificações\n" +#~ "off - desativa as notificações\n" +#~ "help - exibe esta ajuda\n" +#~ "follow - assina o usuário\n" +#~ "groups - lista os grupos aos quais você se associou\n" +#~ "subscriptions - lista as pessoas que você segue\n" +#~ "subscribers - lista as pessoas que seguem você\n" +#~ "leave - deixa de assinar o usuário\n" +#~ "d - mensagem direta para o usuário\n" +#~ "get - obtém a última mensagem do usuário\n" +#~ "whois - obtém as informações do perfil do usuário\n" +#~ "lose - obriga o usuário a deixar de segui-lo\n" +#~ "fav - adiciona a último mensagem do usuário como uma " +#~ "'favorita'\n" +#~ "fav # - adiciona a mensagem identificada como 'favorita'\n" +#~ "repeat # - repete a mensagem identificada\n" +#~ "repeat - repete a última mensagem do usuário\n" +#~ "reply # - responde a mensagem identificada\n" +#~ "reply - responde a última mensagem do usuário\n" +#~ "join - associa-se ao grupo\n" +#~ "login - obtém um link para se autenticar na interface web\n" +#~ "drop - deixa o grupo\n" +#~ "stats - obtém suas estatísticas\n" +#~ "stop - o mesmo que 'off'\n" +#~ "quit - o mesmo que 'off'\n" +#~ "sub - o mesmo que 'follow'\n" +#~ "unsub - o mesmo que 'leave'\n" +#~ "last - o mesmo que 'get'\n" +#~ "on - não implementado ainda\n" +#~ "off - não implementado ainda\n" +#~ "nudge - chama a atenção do usuário\n" +#~ "invite - não implementado ainda\n" +#~ "track - não implementado ainda\n" +#~ "untrack - não implementado ainda\n" +#~ "track off - não implementado ainda\n" +#~ "untrack all - não implementado ainda\n" +#~ "tracks - não implementado ainda\n" +#~ "tracking - não implementado ainda\n" + +#~ msgid "Edit Avatar" +#~ msgstr "Editar o avatar" diff --git a/locale/ru/LC_MESSAGES/statusnet.po b/locale/ru/LC_MESSAGES/statusnet.po index 69cfbaaae3..115aad39de 100644 --- a/locale/ru/LC_MESSAGES/statusnet.po +++ b/locale/ru/LC_MESSAGES/statusnet.po @@ -18,18 +18,18 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-11 18:15+0000\n" -"PO-Revision-Date: 2011-03-11 18:17:26+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:49:55+0000\n" "Language-Team: Russian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ru\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= " "2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n" -"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" +"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -607,7 +607,7 @@ msgstr "Не удаётся удалить пользователя %1$s из г msgid "%s's groups" msgstr "Группы %s" -#. TRANS: Used as subtitle in check for group membership. %1$s is a user name, %2$s is the site name. +#. TRANS: Used as subtitle in check for group membership. %1$s is the site name, %2$s is a user name. #, php-format msgid "%1$s groups %2$s is a member of." msgstr "Группы %1$s, в которых состоит %2$s." @@ -4712,18 +4712,6 @@ msgstr "Группа %s" msgid "%1$s group, page %2$d" msgstr "Группа %1$s, страница %2$d" -#. TRANS: Label for group description or group note (dt). Text hidden by default. -msgid "Note" -msgstr "Запись" - -#. TRANS: Label for group aliases (dt). Text hidden by default. -msgid "Aliases" -msgstr "Алиасы" - -#. TRANS: Group actions header (h2). Text hidden by default. -msgid "Group actions" -msgstr "Действия группы" - #. TRANS: Tooltip for feed link. %s is a group nickname. #, php-format msgid "Notice feed for %s group (RSS 1.0)" @@ -4834,6 +4822,10 @@ msgstr "Сообщение от %1$s на %2$s" msgid "Notice deleted." msgstr "Запись удалена." +#, fuzzy +msgid "Notice" +msgstr "Записи" + #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #, php-format msgid "%1$s tagged %2$s" @@ -5373,7 +5365,6 @@ msgstr "Нет аргумента ID." msgid "Tag %s" msgstr "Теги %s" -#. TRANS: H2 for user profile information. msgid "User profile" msgstr "Профиль пользователя" @@ -6093,6 +6084,49 @@ msgstr "" msgid "No AtomPub API service for %s." msgstr "" +#. TRANS: H2 for user actions in a profile. +#. TRANS: H2 for entity actions in a profile. +msgid "User actions" +msgstr "Действия пользователя" + +#. TRANS: Text shown in user profile of not yet compeltely deleted users. +msgid "User deletion in progress..." +msgstr "Идёт удаление пользователя…" + +#. TRANS: Link title for link on user profile. +msgid "Edit profile settings" +msgstr "Изменение настроек профиля" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "Редактировать" + +#. TRANS: Link title for link on user profile. +msgid "Send a direct message to this user" +msgstr "Послать приватное сообщение этому пользователю." + +#. TRANS: Link text for link on user profile. +msgid "Message" +msgstr "Сообщение" + +#. TRANS: Label text on user profile to select a user role. +msgid "Moderate" +msgstr "Модерировать" + +#. TRANS: Label text on user profile to select a user role. +msgid "User role" +msgstr "Роль пользователя" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Administrator" +msgstr "Администратор" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Moderator" +msgstr "Модератор" + #. TRANS: Page title. %1$s is the title, %2$s is the site name. #, php-format msgid "%1$s - %2$s" @@ -6826,85 +6860,171 @@ msgstr[0] "Вы являетесь участником следующих гр msgstr[1] "Вы являетесь участником следующих групп:" msgstr[2] "Вы являетесь участником следующих групп:" -#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings. -msgid "" -"Commands:\n" -"on - turn on notifications\n" -"off - turn off notifications\n" -"help - show this help\n" -"follow - subscribe to user\n" -"groups - lists the groups you have joined\n" -"subscriptions - list the people you follow\n" -"subscribers - list the people that follow you\n" -"leave - unsubscribe from user\n" -"d - direct message to user\n" -"get - get last notice from user\n" -"whois - get profile info on user\n" -"lose - force user to stop following you\n" -"fav - add user's last notice as a 'fave'\n" -"fav # - add notice with the given id as a 'fave'\n" -"repeat # - repeat a notice with a given id\n" -"repeat - repeat the last notice from user\n" -"reply # - reply to notice with a given id\n" -"reply - reply to the last notice from user\n" -"join - join group\n" -"login - Get a link to login to the web interface\n" -"drop - leave group\n" -"stats - get your stats\n" -"stop - same as 'off'\n" -"quit - same as 'off'\n" -"sub - same as 'follow'\n" -"unsub - same as 'leave'\n" -"last - same as 'get'\n" -"on - not yet implemented.\n" -"off - not yet implemented.\n" -"nudge - remind a user to update.\n" -"invite - not yet implemented.\n" -"track - not yet implemented.\n" -"untrack - not yet implemented.\n" -"track off - not yet implemented.\n" -"untrack all - not yet implemented.\n" -"tracks - not yet implemented.\n" -"tracking - not yet implemented.\n" +#. TRANS: Header line of help text for commands. +#, fuzzy +msgctxt "COMMANDHELP" +msgid "Commands:" +msgstr "Команда исполнена" + +#. TRANS: Help message for IM/SMS command "on" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn on notifications" +msgstr "Есть оповещение." + +#. TRANS: Help message for IM/SMS command "off" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn off notifications" +msgstr "Нет оповещения." + +#. TRANS: Help message for IM/SMS command "help" +msgctxt "COMMANDHELP" +msgid "show this help" +msgstr "" + +#. TRANS: Help message for IM/SMS command "follow " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "subscribe to user" +msgstr "Подписаться на этого пользователя" + +#. TRANS: Help message for IM/SMS command "groups" +msgctxt "COMMANDHELP" +msgid "lists the groups you have joined" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscriptions" +msgctxt "COMMANDHELP" +msgid "list the people you follow" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscribers" +msgctxt "COMMANDHELP" +msgid "list the people that follow you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "leave " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "unsubscribe from user" +msgstr "Отписаться от этого пользователя" + +#. TRANS: Help message for IM/SMS command "d " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "direct message to user" +msgstr "Прямые сообщения для %s" + +#. TRANS: Help message for IM/SMS command "get " +msgctxt "COMMANDHELP" +msgid "get last notice from user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "whois " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "get profile info on user" +msgstr "Информация профиля" + +#. TRANS: Help message for IM/SMS command "lose " +msgctxt "COMMANDHELP" +msgid "force user to stop following you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav " +msgctxt "COMMANDHELP" +msgid "add user's last notice as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav #" +msgctxt "COMMANDHELP" +msgid "add notice with the given id as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat #" +msgctxt "COMMANDHELP" +msgid "repeat a notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "repeat the last notice from user" +msgstr "Повторить эту запись" + +#. TRANS: Help message for IM/SMS command "reply #" +msgctxt "COMMANDHELP" +msgid "reply to notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "reply " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "reply to the last notice from user" +msgstr "Ответить на эту запись" + +#. TRANS: Help message for IM/SMS command "join " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "join group" +msgstr "Неизвестно" + +#. TRANS: Help message for IM/SMS command "login" +msgctxt "COMMANDHELP" +msgid "Get a link to login to the web interface" +msgstr "" + +#. TRANS: Help message for IM/SMS command "drop " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "leave group" +msgstr "Удалить группу" + +#. TRANS: Help message for IM/SMS command "stats" +msgctxt "COMMANDHELP" +msgid "get your stats" +msgstr "" + +#. TRANS: Help message for IM/SMS command "stop" +#. TRANS: Help message for IM/SMS command "quit" +msgctxt "COMMANDHELP" +msgid "same as 'off'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "sub " +msgctxt "COMMANDHELP" +msgid "same as 'follow'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "unsub " +msgctxt "COMMANDHELP" +msgid "same as 'leave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "last " +msgctxt "COMMANDHELP" +msgid "same as 'get'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "on " +#. TRANS: Help message for IM/SMS command "off " +#. TRANS: Help message for IM/SMS command "invite " +#. TRANS: Help message for IM/SMS command "track " +#. TRANS: Help message for IM/SMS command "untrack " +#. TRANS: Help message for IM/SMS command "track off" +#. TRANS: Help message for IM/SMS command "untrack all" +#. TRANS: Help message for IM/SMS command "tracks" +#. TRANS: Help message for IM/SMS command "tracking" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "not yet implemented." +msgstr "Команда ещё не выполнена." + +#. TRANS: Help message for IM/SMS command "nudge " +msgctxt "COMMANDHELP" +msgid "remind a user to update." msgstr "" -"Команды:\n" -"on — включить уведомления\n" -"off — отключить уведомления\n" -"help — показать эту справку\n" -"follow — подписаться на пользователя\n" -"groups — список групп, к которым вы присоединены\n" -"subscriptions — список людей, за которыми вы следите\n" -"subscribers — список людей, следящих на вами\n" -"leave — отписаться от пользователя\n" -"d — прямое сообщение пользователю\n" -"get — получить последнюю запись от пользователя\n" -"whois — получить информацию из профиля пользователя\n" -"lose — отменить подписку пользователя на вас\n" -"fav — добавить последнюю запись пользователя в число любимых\n" -"fav # — добавить запись с заданным id в число любимых\n" -"repeat # — повторить уведомление с заданным id\n" -"repeat — повторить последнее уведомление от пользователя\n" -"reply # — ответить на запись с заданным id\n" -"reply — ответить на последнюю запись пользователя\n" -"join — присоединиться к группе\n" -"login — получить ссылку на вход в веб-интрефейсе\n" -"drop — покинуть группу\n" -"stats — получить свою статистику\n" -"stop — то же, что и 'off'\n" -"quit — то же, что и 'off'\n" -"sub — то же, что и 'follow'\n" -"unsub — то же, что и 'leave'\n" -"last — то же, что и 'get'\n" -"on — пока не реализовано.\n" -"off — пока не реализовано.\n" -"nudge — напомнить пользователю обновиться.\n" -"invite — пока не реализовано.\n" -"track — пока не реализовано.\n" -"untrack — пока не реализовано.\n" -"track off — пока не реализовано.\n" -"untrack all — пока не реализовано.\n" -"tracks — пока не реализовано.\n" -"tracking — пока не реализовано.\n" #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. msgid "No configuration file found." @@ -7083,6 +7203,9 @@ msgstr "" "Местонахождение группы, если есть, например «Город, область (или регион), " "страна»." +msgid "Aliases" +msgstr "Алиасы" + #, php-format msgid "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " @@ -7167,6 +7290,10 @@ msgctxt "TOOLTIP" msgid "Add or edit %s design" msgstr "Добавить или изменить оформление %s" +#. TRANS: Group actions header (h2). Text hidden by default. +msgid "Group actions" +msgstr "Действия группы" + #. TRANS: Title for groups with the most members section. msgid "Groups with most members" msgstr "Группы с наибольшим количеством участников" @@ -7234,7 +7361,7 @@ msgid "%dB" msgid_plural "%dB" msgstr[0] "%dБ" msgstr[1] "%dБ" -msgstr[2] "" +msgstr[2] "%dБ" #, php-format msgid "" @@ -7739,6 +7866,7 @@ msgstr "Послать запись" msgid "What's up, %s?" msgstr "Что нового, %s?" +#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Прикрепить" @@ -8201,52 +8329,6 @@ msgstr "Отписаться" msgid "User %1$s (%2$d) has no profile record." msgstr "У пользователя %1$s (%2$d) нет записи профиля." -msgid "Edit Avatar" -msgstr "Изменить аватару" - -#. TRANS: H2 for user actions in a profile. -#. TRANS: H2 for entity actions in a profile. -msgid "User actions" -msgstr "Действия пользователя" - -#. TRANS: Text shown in user profile of not yet compeltely deleted users. -msgid "User deletion in progress..." -msgstr "Идёт удаление пользователя…" - -#. TRANS: Link title for link on user profile. -msgid "Edit profile settings" -msgstr "Изменение настроек профиля" - -#. TRANS: Link text for link on user profile. -msgid "Edit" -msgstr "Редактировать" - -#. TRANS: Link title for link on user profile. -msgid "Send a direct message to this user" -msgstr "Послать приватное сообщение этому пользователю." - -#. TRANS: Link text for link on user profile. -msgid "Message" -msgstr "Сообщение" - -#. TRANS: Label text on user profile to select a user role. -msgid "Moderate" -msgstr "Модерировать" - -#. TRANS: Label text on user profile to select a user role. -msgid "User role" -msgstr "Роль пользователя" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Administrator" -msgstr "Администратор" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Moderator" -msgstr "Модератор" - #, fuzzy msgid "Not allowed to log in." msgstr "Не авторизован." @@ -8327,3 +8409,88 @@ msgstr "Неверный XML, отсутствует корень XRD." #, php-format msgid "Getting backup from file '%s'." msgstr "Получение резервной копии из файла «%s»." + +#~ msgid "Note" +#~ msgstr "Запись" + +#~ msgid "" +#~ "Commands:\n" +#~ "on - turn on notifications\n" +#~ "off - turn off notifications\n" +#~ "help - show this help\n" +#~ "follow - subscribe to user\n" +#~ "groups - lists the groups you have joined\n" +#~ "subscriptions - list the people you follow\n" +#~ "subscribers - list the people that follow you\n" +#~ "leave - unsubscribe from user\n" +#~ "d - direct message to user\n" +#~ "get - get last notice from user\n" +#~ "whois - get profile info on user\n" +#~ "lose - force user to stop following you\n" +#~ "fav - add user's last notice as a 'fave'\n" +#~ "fav # - add notice with the given id as a 'fave'\n" +#~ "repeat # - repeat a notice with a given id\n" +#~ "repeat - repeat the last notice from user\n" +#~ "reply # - reply to notice with a given id\n" +#~ "reply - reply to the last notice from user\n" +#~ "join - join group\n" +#~ "login - Get a link to login to the web interface\n" +#~ "drop - leave group\n" +#~ "stats - get your stats\n" +#~ "stop - same as 'off'\n" +#~ "quit - same as 'off'\n" +#~ "sub - same as 'follow'\n" +#~ "unsub - same as 'leave'\n" +#~ "last - same as 'get'\n" +#~ "on - not yet implemented.\n" +#~ "off - not yet implemented.\n" +#~ "nudge - remind a user to update.\n" +#~ "invite - not yet implemented.\n" +#~ "track - not yet implemented.\n" +#~ "untrack - not yet implemented.\n" +#~ "track off - not yet implemented.\n" +#~ "untrack all - not yet implemented.\n" +#~ "tracks - not yet implemented.\n" +#~ "tracking - not yet implemented.\n" +#~ msgstr "" +#~ "Команды:\n" +#~ "on — включить уведомления\n" +#~ "off — отключить уведомления\n" +#~ "help — показать эту справку\n" +#~ "follow — подписаться на пользователя\n" +#~ "groups — список групп, к которым вы присоединены\n" +#~ "subscriptions — список людей, за которыми вы следите\n" +#~ "subscribers — список людей, следящих на вами\n" +#~ "leave — отписаться от пользователя\n" +#~ "d — прямое сообщение пользователю\n" +#~ "get — получить последнюю запись от пользователя\n" +#~ "whois — получить информацию из профиля пользователя\n" +#~ "lose — отменить подписку пользователя на вас\n" +#~ "fav — добавить последнюю запись пользователя в число любимых\n" +#~ "fav # — добавить запись с заданным id в число любимых\n" +#~ "repeat # — повторить уведомление с заданным id\n" +#~ "repeat — повторить последнее уведомление от пользователя\n" +#~ "reply # — ответить на запись с заданным id\n" +#~ "reply — ответить на последнюю запись пользователя\n" +#~ "join — присоединиться к группе\n" +#~ "login — получить ссылку на вход в веб-интрефейсе\n" +#~ "drop — покинуть группу\n" +#~ "stats — получить свою статистику\n" +#~ "stop — то же, что и 'off'\n" +#~ "quit — то же, что и 'off'\n" +#~ "sub — то же, что и 'follow'\n" +#~ "unsub — то же, что и 'leave'\n" +#~ "last — то же, что и 'get'\n" +#~ "on — пока не реализовано.\n" +#~ "off — пока не реализовано.\n" +#~ "nudge — напомнить пользователю обновиться.\n" +#~ "invite — пока не реализовано.\n" +#~ "track — пока не реализовано.\n" +#~ "untrack — пока не реализовано.\n" +#~ "track off — пока не реализовано.\n" +#~ "untrack all — пока не реализовано.\n" +#~ "tracks — пока не реализовано.\n" +#~ "tracking — пока не реализовано.\n" + +#~ msgid "Edit Avatar" +#~ msgstr "Изменить аватару" diff --git a/locale/statusnet.pot b/locale/statusnet.pot index 8ffd6aab4d..ad93b2765c 100644 --- a/locale/statusnet.pot +++ b/locale/statusnet.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -176,7 +176,7 @@ msgstr "" #. TRANS: Timeline title for user and friends. %s is a user nickname. #: actions/all.php:94 actions/all.php:185 actions/allrss.php:117 #: actions/apitimelinefriends.php:207 actions/apitimelinehome.php:113 -#: lib/adminpanelnav.php:70 lib/personalgroupnav.php:72 lib/settingsnav.php:71 +#: lib/adminpanelnav.php:70 lib/personalgroupnav.php:75 lib/settingsnav.php:71 #, php-format msgid "%s and friends" msgstr "" @@ -228,7 +228,7 @@ msgstr "" #. TRANS: %s is a user nickname. This message contains Markdown links. Keep "](" together. #. TRANS: Second sentence of empty message for anonymous users. %s is a user nickname. #. TRANS: This message contains a Markdown link. Keep "](" together. -#: actions/all.php:149 actions/replies.php:198 actions/showstream.php:221 +#: actions/all.php:149 actions/replies.php:198 actions/showstream.php:219 #, php-format msgid "" "Why not [register an account](%%%%action.register%%%%) and then nudge %s or " @@ -759,7 +759,7 @@ msgstr "" msgid "%s's groups" msgstr "" -#. TRANS: Used as subtitle in check for group membership. %1$s is a user name, %2$s is the site name. +#. TRANS: Used as subtitle in check for group membership. %1$s is the site name, %2$s is a user name. #: actions/apigrouplist.php:104 #, php-format msgid "%1$s groups %2$s is a member of." @@ -1028,7 +1028,7 @@ msgstr "" #. TRANS: Error message displayed trying to delete a non-existing notice. #: actions/apistatusesretweet.php:74 actions/apistatusesretweets.php:70 #: actions/atompubshowfavorite.php:82 actions/deletenotice.php:61 -#: actions/shownotice.php:92 +#: actions/shownotice.php:95 msgid "No such notice." msgstr "" @@ -1230,39 +1230,39 @@ msgid "Atom post must not be empty." msgstr "" #. TRANS: Client error displayed attempting to post an API that is not well-formed XML. -#: actions/apitimelineuser.php:328 +#: actions/apitimelineuser.php:331 msgid "Atom post must be well-formed XML." msgstr "" #. TRANS: Client error displayed when not using an Atom entry. -#: actions/apitimelineuser.php:334 actions/atompubfavoritefeed.php:228 +#: actions/apitimelineuser.php:337 actions/atompubfavoritefeed.php:228 #: actions/atompubmembershipfeed.php:230 #: actions/atompubsubscriptionfeed.php:236 msgid "Atom post must be an Atom entry." msgstr "" #. TRANS: Client error displayed when not using the POST verb. Do not translate POST. -#: actions/apitimelineuser.php:345 +#: actions/apitimelineuser.php:348 msgid "Can only handle POST activities." msgstr "" #. TRANS: Client error displayed when using an unsupported activity object type. #. TRANS: %s is the unsupported activity object type. -#: actions/apitimelineuser.php:356 +#: actions/apitimelineuser.php:359 #, php-format msgid "Cannot handle activity object type \"%s\"." msgstr "" #. TRANS: Client error displayed when posting a notice without content through the API. #. TRANS: %d is the notice ID (number). -#: actions/apitimelineuser.php:390 +#: actions/apitimelineuser.php:393 #, php-format msgid "No content for notice %d." msgstr "" #. TRANS: Client error displayed when using another format than AtomPub. #. TRANS: %s is the notice URI. -#: actions/apitimelineuser.php:419 +#: actions/apitimelineuser.php:422 #, php-format msgid "Notice with URI \"%s\" already exists." msgstr "" @@ -1902,7 +1902,7 @@ msgstr "" #. TRANS: Client error text when there is a problem with the session token. #: actions/deleteapplication.php:102 actions/editapplication.php:131 #: actions/newapplication.php:112 actions/showapplication.php:113 -#: lib/action.php:1409 +#: lib/action.php:1448 msgid "There was a problem with your session token." msgstr "" @@ -2679,7 +2679,7 @@ msgstr "" #. TRANS: Title for first page of favourite notices of a user. #. TRANS: %s is the user for whom the favourite notices are displayed. #: actions/favoritesrss.php:111 actions/showfavorites.php:76 -#: lib/personalgroupnav.php:88 +#: lib/personalgroupnav.php:91 #, php-format msgid "%s's favorite notices" msgstr "" @@ -3757,7 +3757,7 @@ msgstr "" #. TRANS: Page title after an AJAX error occurred on the "send direct message" page. #. TRANS: Page title after an AJAX error occurs on the send notice page. -#: actions/newmessage.php:227 actions/newnotice.php:264 +#: actions/newmessage.php:227 actions/newnotice.php:264 lib/error.php:117 msgid "Ajax Error" msgstr "" @@ -3922,12 +3922,12 @@ msgid "Notice %s not found." msgstr "" #. TRANS: Server error displayed in oEmbed action when notice has not profile. -#: actions/oembed.php:85 actions/shownotice.php:100 +#: actions/oembed.php:85 actions/shownotice.php:103 msgid "Notice has no profile." msgstr "" #. TRANS: oEmbed title. %1$s is the author name, %2$s is the creation date. -#: actions/oembed.php:89 actions/shownotice.php:172 +#: actions/oembed.php:89 actions/shownotice.php:175 #, php-format msgid "%1$s's status on %2$s" msgstr "" @@ -5080,8 +5080,8 @@ msgid "URL of your profile on another compatible microblogging service." msgstr "" #. TRANS: Link text for link that will subscribe to a remote profile. -#: actions/remotesubscribe.php:136 lib/subscribeform.php:139 -#: lib/userprofile.php:406 +#: actions/remotesubscribe.php:136 lib/accountprofileblock.php:288 +#: lib/subscribeform.php:139 msgid "Subscribe" msgstr "" @@ -5127,7 +5127,7 @@ msgstr "" #. TRANS: RSS reply feed title. %s is a user nickname. #: actions/replies.php:126 actions/repliesrss.php:68 -#: lib/personalgroupnav.php:83 +#: lib/personalgroupnav.php:86 #, php-format msgid "Replies to %s" msgstr "" @@ -5437,47 +5437,32 @@ msgstr "" msgid "%1$s group, page %2$d" msgstr "" -#. TRANS: Label for group description or group note (dt). Text hidden by default. -#: actions/showgroup.php:266 -msgid "Note" -msgstr "" - -#. TRANS: Label for group aliases (dt). Text hidden by default. -#: actions/showgroup.php:277 lib/groupeditform.php:180 -msgid "Aliases" -msgstr "" - -#. TRANS: Group actions header (h2). Text hidden by default. -#: actions/showgroup.php:294 -msgid "Group actions" -msgstr "" - #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:338 +#: actions/showgroup.php:221 #, php-format msgid "Notice feed for %s group (RSS 1.0)" msgstr "" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:345 +#: actions/showgroup.php:228 #, php-format msgid "Notice feed for %s group (RSS 2.0)" msgstr "" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:352 +#: actions/showgroup.php:235 #, php-format msgid "Notice feed for %s group (Atom)" msgstr "" #. TRANS: Tooltip for feed link. %s is a group nickname. -#: actions/showgroup.php:358 +#: actions/showgroup.php:241 #, php-format msgid "FOAF for %s group" msgstr "" #. TRANS: Header for mini list of group members on a group page (h2). -#: actions/showgroup.php:395 +#: actions/showgroup.php:278 msgid "Members" msgstr "" @@ -5485,30 +5470,30 @@ msgstr "" #. TRANS: Text for user subscription statistics if the user has no subscriptions. #. TRANS: Text for user subscriber statistics if user has no subscribers. #. TRANS: Text for user user group membership statistics if user is not a member of any group. -#: actions/showgroup.php:401 lib/profileaction.php:137 +#: actions/showgroup.php:284 lib/profileaction.php:137 #: lib/profileaction.php:174 lib/profileaction.php:298 lib/section.php:95 #: lib/subscriptionlist.php:123 lib/tagcloudsection.php:71 msgid "(None)" msgstr "" #. TRANS: Link to all group members from mini list of group members if group has more than n members. -#: actions/showgroup.php:410 +#: actions/showgroup.php:293 msgid "All members" msgstr "" #. TRANS: Header for group statistics on a group page (h2). #. TRANS: H2 text for user statistics. -#: actions/showgroup.php:441 lib/profileaction.php:205 +#: actions/showgroup.php:324 lib/profileaction.php:205 msgid "Statistics" msgstr "" -#: actions/showgroup.php:444 +#: actions/showgroup.php:327 msgctxt "LABEL" msgid "Created" msgstr "" #. TRANS: Label for member count in statistics on group page. -#: actions/showgroup.php:449 +#: actions/showgroup.php:332 msgctxt "LABEL" msgid "Members" msgstr "" @@ -5517,7 +5502,7 @@ msgstr "" #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: %%%%action.register%%%% is the URL for registration, %%%%doc.help%%%% is a URL to help. #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:464 +#: actions/showgroup.php:347 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -5530,7 +5515,7 @@ msgstr "" #. TRANS: Notice on group pages for anonymous users for StatusNet sites that accept no new registrations. #. TRANS: **%s** is the group alias, %%%%site.name%%%% is the site name, #. TRANS: This message contains Markdown links. Ensure they are formatted correctly: [Description](link). -#: actions/showgroup.php:474 +#: actions/showgroup.php:357 #, php-format msgid "" "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -5540,7 +5525,7 @@ msgid "" msgstr "" #. TRANS: Header for list of group administrators on a group page (h2). -#: actions/showgroup.php:503 +#: actions/showgroup.php:386 msgid "Admins" msgstr "" @@ -5568,71 +5553,75 @@ msgstr "" msgid "Message from %1$s on %2$s" msgstr "" -#: actions/shownotice.php:90 +#: actions/shownotice.php:93 msgid "Notice deleted." msgstr "" +#: actions/shownotice.php:248 +msgid "Notice" +msgstr "" + #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. -#: actions/showstream.php:70 +#: actions/showstream.php:69 #, php-format msgid "%1$s tagged %2$s" msgstr "" #. TRANS: Page title showing tagged notices in one user's stream. #. TRANS: %1$s is the username, %2$s is the hash tag, %3$d is the page number. -#: actions/showstream.php:74 +#: actions/showstream.php:73 #, php-format msgid "%1$s tagged %2$s, page %3$d" msgstr "" #. TRANS: Extended page title showing tagged notices in one user's stream. #. TRANS: %1$s is the username, %2$d is the page number. -#: actions/showstream.php:82 +#: actions/showstream.php:81 #, php-format msgid "%1$s, page %2$d" msgstr "" #. TRANS: Title for link to notice feed. #. TRANS: %1$s is a user nickname, %2$s is a hashtag. -#: actions/showstream.php:127 +#: actions/showstream.php:131 #, php-format msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)" msgstr "" #. TRANS: Title for link to notice feed. #. TRANS: %s is a user nickname. -#: actions/showstream.php:136 +#: actions/showstream.php:140 #, php-format msgid "Notice feed for %s (RSS 1.0)" msgstr "" #. TRANS: Title for link to notice feed. #. TRANS: %s is a user nickname. -#: actions/showstream.php:145 +#: actions/showstream.php:149 #, php-format msgid "Notice feed for %s (RSS 2.0)" msgstr "" -#: actions/showstream.php:152 +#: actions/showstream.php:156 #, php-format msgid "Notice feed for %s (Atom)" msgstr "" #. TRANS: Title for link to notice feed. FOAF stands for Friend of a Friend. #. TRANS: More information at http://www.foaf-project.org. %s is a user nickname. -#: actions/showstream.php:159 +#: actions/showstream.php:163 #, php-format msgid "FOAF for %s" msgstr "" #. TRANS: First sentence of empty list message for a stream. $1%s is a user nickname. -#: actions/showstream.php:205 +#: actions/showstream.php:203 #, php-format msgid "This is the timeline for %1$s, but %1$s hasn't posted anything yet." msgstr "" #. TRANS: Second sentence of empty list message for a stream for the user themselves. -#: actions/showstream.php:211 +#: actions/showstream.php:209 msgid "" "Seen anything interesting recently? You haven't posted any notices yet, now " "would be a good time to start :)" @@ -5640,7 +5629,7 @@ msgstr "" #. TRANS: Second sentence of empty list message for a non-self stream. %1$s is a user nickname, %2$s is a part of a URL. #. TRANS: This message contains a Markdown link. Keep "](" together. -#: actions/showstream.php:215 +#: actions/showstream.php:213 #, php-format msgid "" "You can try to nudge %1$s or [post something to them](%%%%action.newnotice%%%" @@ -5649,7 +5638,7 @@ msgstr "" #. TRANS: Announcement for anonymous users showing a stream if site registrations are open. #. TRANS: This message contains a Markdown link. Keep "](" together. -#: actions/showstream.php:258 +#: actions/showstream.php:256 #, php-format msgid "" "**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -5660,7 +5649,7 @@ msgstr "" #. TRANS: Announcement for anonymous users showing a stream if site registrations are closed or invite only. #. TRANS: This message contains a Markdown link. Keep "](" together. -#: actions/showstream.php:265 +#: actions/showstream.php:263 #, php-format msgid "" "**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en." @@ -5669,7 +5658,7 @@ msgid "" msgstr "" #. TRANS: Link to the author of a repeated notice. %s is a linked nickname. -#: actions/showstream.php:322 +#: actions/showstream.php:327 #, php-format msgid "Repeat of %s" msgstr "" @@ -6183,8 +6172,7 @@ msgstr "" msgid "Tag %s" msgstr "" -#. TRANS: H2 for user profile information. -#: actions/tagother.php:77 lib/userprofile.php:76 +#: actions/tagother.php:77 msgid "User profile" msgstr "" @@ -6339,7 +6327,7 @@ msgstr "" msgid "Invalid default subscripton: \"%1$s\" is not a user." msgstr "" -#: actions/useradminpanel.php:215 lib/personalgroupnav.php:76 +#: actions/useradminpanel.php:215 lib/personalgroupnav.php:79 #: lib/settingsnav.php:83 lib/subgroupnav.php:79 msgid "Profile" msgstr "" @@ -6834,25 +6822,25 @@ msgid "Problem saving notice." msgstr "" #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups(). -#: classes/Notice.php:937 +#: classes/Notice.php:944 msgid "Bad type provided to saveKnownGroups." msgstr "" #. TRANS: Server exception thrown when an update for a group inbox fails. -#: classes/Notice.php:1036 +#: classes/Notice.php:1043 msgid "Problem saving group inbox." msgstr "" #. TRANS: Server exception thrown when a reply cannot be saved. #. TRANS: %1$d is a notice ID, %2$d is the ID of the mentioned user. -#: classes/Notice.php:1152 +#: classes/Notice.php:1159 #, php-format msgid "Could not save reply for %1$d, %2$d." msgstr "" #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'. #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice. -#: classes/Notice.php:1671 +#: classes/Notice.php:1678 #, php-format msgid "RT @%1$s %2$s" msgstr "" @@ -6993,35 +6981,88 @@ msgstr "" msgid "No AtomPub API service for %s." msgstr "" +#. TRANS: H2 for user actions in a profile. +#. TRANS: H2 for entity actions in a profile. +#: lib/accountprofileblock.php:103 lib/accountprofileblock.php:118 +msgid "User actions" +msgstr "" + +#. TRANS: Text shown in user profile of not yet compeltely deleted users. +#: lib/accountprofileblock.php:107 +msgid "User deletion in progress..." +msgstr "" + +#. TRANS: Link title for link on user profile. +#: lib/accountprofileblock.php:134 +msgid "Edit profile settings" +msgstr "" + +#. TRANS: Link text for link on user profile. +#: lib/accountprofileblock.php:136 +msgid "Edit" +msgstr "" + +#. TRANS: Link title for link on user profile. +#: lib/accountprofileblock.php:160 +msgid "Send a direct message to this user" +msgstr "" + +#. TRANS: Link text for link on user profile. +#: lib/accountprofileblock.php:162 +msgid "Message" +msgstr "" + +#. TRANS: Label text on user profile to select a user role. +#: lib/accountprofileblock.php:204 +msgid "Moderate" +msgstr "" + +#. TRANS: Label text on user profile to select a user role. +#: lib/accountprofileblock.php:243 +msgid "User role" +msgstr "" + +#. TRANS: Role that can be set for a user profile. +#: lib/accountprofileblock.php:246 +msgctxt "role" +msgid "Administrator" +msgstr "" + +#. TRANS: Role that can be set for a user profile. +#: lib/accountprofileblock.php:248 +msgctxt "role" +msgid "Moderator" +msgstr "" + #. TRANS: Page title. %1$s is the title, %2$s is the site name. -#: lib/action.php:161 +#: lib/action.php:166 #, php-format msgid "%1$s - %2$s" msgstr "" #. TRANS: Page title for a page without a title set. -#: lib/action.php:177 +#: lib/action.php:182 msgid "Untitled page" msgstr "" #. TRANS: Localized tooltip for '...' expansion button on overlong remote messages. -#: lib/action.php:338 +#: lib/action.php:355 msgctxt "TOOLTIP" msgid "Show more" msgstr "" #. TRANS: Inline reply form submit button: submits a reply comment. -#: lib/action.php:341 +#: lib/action.php:358 msgctxt "BUTTON" msgid "Reply" msgstr "" #. TRANS: Placeholder text for inline reply form. Clicking in this box will turn it into a mini notice form. -#: lib/action.php:344 +#: lib/action.php:361 lib/threadednoticelist.php:317 msgid "Write a reply..." msgstr "" -#: lib/action.php:590 +#: lib/action.php:607 msgid "Status" msgstr "" @@ -7029,7 +7070,7 @@ msgstr "" #. TRANS: Text between [] is a link description, text between () is the link itself. #. TRANS: Make sure there is no whitespace between "]" and "(". #. TRANS: "%%site.broughtby%%" is the value of the variable site.broughtby -#: lib/action.php:939 +#: lib/action.php:978 #, php-format msgid "" "**%%site.name%%** is a microblogging service brought to you by [%%site." @@ -7037,7 +7078,7 @@ msgid "" msgstr "" #. TRANS: First sentence of the StatusNet site license. Used if 'broughtby' is not set. -#: lib/action.php:942 +#: lib/action.php:981 #, php-format msgid "**%%site.name%%** is a microblogging service." msgstr "" @@ -7046,7 +7087,7 @@ msgstr "" #. TRANS: Make sure there is no whitespace between "]" and "(". #. TRANS: Text between [] is a link description, text between () is the link itself. #. TRANS: %s is the version of StatusNet that is being used. -#: lib/action.php:949 +#: lib/action.php:988 #, php-format msgid "" "It runs the [StatusNet](http://status.net/) microblogging software, version %" @@ -7056,39 +7097,39 @@ msgstr "" #. TRANS: Content license displayed when license is set to 'private'. #. TRANS: %1$s is the site name. -#: lib/action.php:967 +#: lib/action.php:1006 #, php-format msgid "Content and data of %1$s are private and confidential." msgstr "" #. TRANS: Content license displayed when license is set to 'allrightsreserved'. #. TRANS: %1$s is the copyright owner. -#: lib/action.php:974 +#: lib/action.php:1013 #, php-format msgid "Content and data copyright by %1$s. All rights reserved." msgstr "" #. TRANS: Content license displayed when license is set to 'allrightsreserved' and no owner is set. -#: lib/action.php:978 +#: lib/action.php:1017 msgid "Content and data copyright by contributors. All rights reserved." msgstr "" #. TRANS: license message in footer. #. TRANS: %1$s is the site name, %2$s is a link to the license URL, with a licence name set in configuration. -#: lib/action.php:1010 +#: lib/action.php:1049 #, php-format msgid "All %1$s content and data are available under the %2$s license." msgstr "" #. TRANS: Pagination message to go to a page displaying information more in the #. TRANS: present than the currently displayed information. -#: lib/action.php:1353 +#: lib/action.php:1392 msgid "After" msgstr "" #. TRANS: Pagination message to go to a page displaying information more in the #. TRANS: past than the currently displayed information. -#: lib/action.php:1363 +#: lib/action.php:1402 msgid "Before" msgstr "" @@ -7211,7 +7252,7 @@ msgid "Unable to delete design setting." msgstr "" #: lib/adminpanelnav.php:65 lib/adminpanelnav.php:69 -#: lib/defaultlocalnav.php:58 lib/personalgroupnav.php:71 +#: lib/defaultlocalnav.php:58 lib/personalgroupnav.php:74 #: lib/settingsnav.php:66 lib/settingsnav.php:70 msgid "Home" msgstr "" @@ -7245,7 +7286,7 @@ msgid "User configuration" msgstr "" #. TRANS: Menu item for site administration -#: lib/adminpanelnav.php:102 lib/personalgroupnav.php:88 +#: lib/adminpanelnav.php:102 lib/personalgroupnav.php:91 msgid "User" msgstr "" @@ -7833,47 +7874,189 @@ msgid_plural "You are a member of these groups:" msgstr[0] "" msgstr[1] "" -#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings. -#: lib/command.php:916 -msgid "" -"Commands:\n" -"on - turn on notifications\n" -"off - turn off notifications\n" -"help - show this help\n" -"follow - subscribe to user\n" -"groups - lists the groups you have joined\n" -"subscriptions - list the people you follow\n" -"subscribers - list the people that follow you\n" -"leave - unsubscribe from user\n" -"d - direct message to user\n" -"get - get last notice from user\n" -"whois - get profile info on user\n" -"lose - force user to stop following you\n" -"fav - add user's last notice as a 'fave'\n" -"fav # - add notice with the given id as a 'fave'\n" -"repeat # - repeat a notice with a given id\n" -"repeat - repeat the last notice from user\n" -"reply # - reply to notice with a given id\n" -"reply - reply to the last notice from user\n" -"join - join group\n" -"login - Get a link to login to the web interface\n" -"drop - leave group\n" -"stats - get your stats\n" -"stop - same as 'off'\n" -"quit - same as 'off'\n" -"sub - same as 'follow'\n" -"unsub - same as 'leave'\n" -"last - same as 'get'\n" -"on - not yet implemented.\n" -"off - not yet implemented.\n" -"nudge - remind a user to update.\n" -"invite - not yet implemented.\n" -"track - not yet implemented.\n" -"untrack - not yet implemented.\n" -"track off - not yet implemented.\n" -"untrack all - not yet implemented.\n" -"tracks - not yet implemented.\n" -"tracking - not yet implemented.\n" +#. TRANS: Header line of help text for commands. +#: lib/command.php:915 +msgctxt "COMMANDHELP" +msgid "Commands:" +msgstr "" + +#. TRANS: Help message for IM/SMS command "on" +#: lib/command.php:917 +msgctxt "COMMANDHELP" +msgid "turn on notifications" +msgstr "" + +#. TRANS: Help message for IM/SMS command "off" +#: lib/command.php:919 +msgctxt "COMMANDHELP" +msgid "turn off notifications" +msgstr "" + +#. TRANS: Help message for IM/SMS command "help" +#: lib/command.php:921 +msgctxt "COMMANDHELP" +msgid "show this help" +msgstr "" + +#. TRANS: Help message for IM/SMS command "follow " +#: lib/command.php:923 +msgctxt "COMMANDHELP" +msgid "subscribe to user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "groups" +#: lib/command.php:925 +msgctxt "COMMANDHELP" +msgid "lists the groups you have joined" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscriptions" +#: lib/command.php:927 +msgctxt "COMMANDHELP" +msgid "list the people you follow" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscribers" +#: lib/command.php:929 +msgctxt "COMMANDHELP" +msgid "list the people that follow you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "leave " +#: lib/command.php:931 +msgctxt "COMMANDHELP" +msgid "unsubscribe from user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "d " +#: lib/command.php:933 +msgctxt "COMMANDHELP" +msgid "direct message to user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "get " +#: lib/command.php:935 +msgctxt "COMMANDHELP" +msgid "get last notice from user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "whois " +#: lib/command.php:937 +msgctxt "COMMANDHELP" +msgid "get profile info on user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "lose " +#: lib/command.php:939 +msgctxt "COMMANDHELP" +msgid "force user to stop following you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav " +#: lib/command.php:941 +msgctxt "COMMANDHELP" +msgid "add user's last notice as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav #" +#: lib/command.php:943 +msgctxt "COMMANDHELP" +msgid "add notice with the given id as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat #" +#: lib/command.php:945 +msgctxt "COMMANDHELP" +msgid "repeat a notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat " +#: lib/command.php:947 +msgctxt "COMMANDHELP" +msgid "repeat the last notice from user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "reply #" +#: lib/command.php:949 +msgctxt "COMMANDHELP" +msgid "reply to notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "reply " +#: lib/command.php:951 +msgctxt "COMMANDHELP" +msgid "reply to the last notice from user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "join " +#: lib/command.php:953 +msgctxt "COMMANDHELP" +msgid "join group" +msgstr "" + +#. TRANS: Help message for IM/SMS command "login" +#: lib/command.php:955 +msgctxt "COMMANDHELP" +msgid "Get a link to login to the web interface" +msgstr "" + +#. TRANS: Help message for IM/SMS command "drop " +#: lib/command.php:957 +msgctxt "COMMANDHELP" +msgid "leave group" +msgstr "" + +#. TRANS: Help message for IM/SMS command "stats" +#: lib/command.php:959 +msgctxt "COMMANDHELP" +msgid "get your stats" +msgstr "" + +#. TRANS: Help message for IM/SMS command "stop" +#. TRANS: Help message for IM/SMS command "quit" +#: lib/command.php:961 lib/command.php:963 +msgctxt "COMMANDHELP" +msgid "same as 'off'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "sub " +#: lib/command.php:965 +msgctxt "COMMANDHELP" +msgid "same as 'follow'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "unsub " +#: lib/command.php:967 +msgctxt "COMMANDHELP" +msgid "same as 'leave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "last " +#: lib/command.php:969 +msgctxt "COMMANDHELP" +msgid "same as 'get'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "on " +#. TRANS: Help message for IM/SMS command "off " +#. TRANS: Help message for IM/SMS command "invite " +#. TRANS: Help message for IM/SMS command "track " +#. TRANS: Help message for IM/SMS command "untrack " +#. TRANS: Help message for IM/SMS command "track off" +#. TRANS: Help message for IM/SMS command "untrack all" +#. TRANS: Help message for IM/SMS command "tracks" +#. TRANS: Help message for IM/SMS command "tracking" +#: lib/command.php:971 lib/command.php:973 lib/command.php:977 +#: lib/command.php:979 lib/command.php:981 lib/command.php:983 +#: lib/command.php:985 lib/command.php:987 lib/command.php:989 +msgctxt "COMMANDHELP" +msgid "not yet implemented." +msgstr "" + +#. TRANS: Help message for IM/SMS command "nudge " +#: lib/command.php:975 +msgctxt "COMMANDHELP" +msgid "remind a user to update." msgstr "" #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. @@ -8087,6 +8270,10 @@ msgid "" "Location for the group, if any, like \"City, State (or Region), Country\"." msgstr "" +#: lib/groupeditform.php:180 +msgid "Aliases" +msgstr "" + #: lib/groupeditform.php:183 #, php-format msgid "" @@ -8176,6 +8363,11 @@ msgctxt "TOOLTIP" msgid "Add or edit %s design" msgstr "" +#. TRANS: Group actions header (h2). Text hidden by default. +#: lib/groupprofileblock.php:94 +msgid "Group actions" +msgstr "" + #. TRANS: Title for groups with the most members section. #: lib/groupsbymemberssection.php:71 msgid "Groups with most members" @@ -8563,7 +8755,7 @@ msgstr "" msgid "Inbox" msgstr "" -#: lib/mailboxmenu.php:60 lib/personalgroupnav.php:99 +#: lib/mailboxmenu.php:60 lib/personalgroupnav.php:102 msgid "Your incoming messages" msgstr "" @@ -8658,7 +8850,7 @@ msgctxt "Send button for sending notice" msgid "Send" msgstr "" -#: lib/messagelist.php:77 lib/personalgroupnav.php:98 +#: lib/messagelist.php:77 lib/personalgroupnav.php:101 msgid "Messages" msgstr "" @@ -8666,19 +8858,19 @@ msgstr "" msgid "from" msgstr "" -#: lib/microappplugin.php:302 +#: lib/microappplugin.php:340 msgid "Can't get author for activity." msgstr "" -#: lib/microappplugin.php:339 +#: lib/microappplugin.php:377 msgid "Bookmark not posted to this group." msgstr "" -#: lib/microappplugin.php:352 +#: lib/microappplugin.php:390 msgid "Object not posted to this user." msgstr "" -#: lib/microappplugin.php:356 +#: lib/microappplugin.php:394 msgid "Don't know how to handle this kind of target." msgstr "" @@ -8827,15 +9019,15 @@ msgstr "" msgid "Couldn't insert new subscription." msgstr "" -#: lib/personalgroupnav.php:77 +#: lib/personalgroupnav.php:80 msgid "Your profile" msgstr "" -#: lib/personalgroupnav.php:82 +#: lib/personalgroupnav.php:85 msgid "Replies" msgstr "" -#: lib/personalgroupnav.php:87 +#: lib/personalgroupnav.php:90 msgid "Favorites" msgstr "" @@ -9234,7 +9426,7 @@ msgstr "" msgid "Error opening theme archive." msgstr "" -#: lib/threadednoticelist.php:270 +#: lib/threadednoticelist.php:273 #, php-format msgid "Show %d reply" msgid_plural "Show all %d replies" @@ -9282,79 +9474,22 @@ msgstr "" msgid "User %1$s (%2$d) has no profile record." msgstr "" -#: lib/userprofile.php:118 -msgid "Edit Avatar" -msgstr "" - -#. TRANS: H2 for user actions in a profile. -#. TRANS: H2 for entity actions in a profile. -#: lib/userprofile.php:220 lib/userprofile.php:236 -msgid "User actions" -msgstr "" - -#. TRANS: Text shown in user profile of not yet compeltely deleted users. -#: lib/userprofile.php:224 -msgid "User deletion in progress..." -msgstr "" - -#. TRANS: Link title for link on user profile. -#: lib/userprofile.php:252 -msgid "Edit profile settings" -msgstr "" - -#. TRANS: Link text for link on user profile. -#: lib/userprofile.php:254 -msgid "Edit" -msgstr "" - -#. TRANS: Link title for link on user profile. -#: lib/userprofile.php:278 -msgid "Send a direct message to this user" -msgstr "" - -#. TRANS: Link text for link on user profile. -#: lib/userprofile.php:280 -msgid "Message" -msgstr "" - -#. TRANS: Label text on user profile to select a user role. -#: lib/userprofile.php:322 -msgid "Moderate" -msgstr "" - -#. TRANS: Label text on user profile to select a user role. -#: lib/userprofile.php:361 -msgid "User role" -msgstr "" - -#. TRANS: Role that can be set for a user profile. -#: lib/userprofile.php:364 -msgctxt "role" -msgid "Administrator" -msgstr "" - -#. TRANS: Role that can be set for a user profile. -#: lib/userprofile.php:366 -msgctxt "role" -msgid "Moderator" -msgstr "" - #: lib/util.php:321 msgid "Not allowed to log in." msgstr "" #. TRANS: Used in notices to indicate when the notice was made compared to now. -#: lib/util.php:1337 +#: lib/util.php:1331 msgid "a few seconds ago" msgstr "" #. TRANS: Used in notices to indicate when the notice was made compared to now. -#: lib/util.php:1340 +#: lib/util.php:1334 msgid "about a minute ago" msgstr "" #. TRANS: Used in notices to indicate when the notice was made compared to now. -#: lib/util.php:1344 +#: lib/util.php:1338 #, php-format msgid "about one minute ago" msgid_plural "about %d minutes ago" @@ -9362,12 +9497,12 @@ msgstr[0] "" msgstr[1] "" #. TRANS: Used in notices to indicate when the notice was made compared to now. -#: lib/util.php:1347 +#: lib/util.php:1341 msgid "about an hour ago" msgstr "" #. TRANS: Used in notices to indicate when the notice was made compared to now. -#: lib/util.php:1351 +#: lib/util.php:1345 #, php-format msgid "about one hour ago" msgid_plural "about %d hours ago" @@ -9375,12 +9510,12 @@ msgstr[0] "" msgstr[1] "" #. TRANS: Used in notices to indicate when the notice was made compared to now. -#: lib/util.php:1354 +#: lib/util.php:1348 msgid "about a day ago" msgstr "" #. TRANS: Used in notices to indicate when the notice was made compared to now. -#: lib/util.php:1358 +#: lib/util.php:1352 #, php-format msgid "about one day ago" msgid_plural "about %d days ago" @@ -9388,12 +9523,12 @@ msgstr[0] "" msgstr[1] "" #. TRANS: Used in notices to indicate when the notice was made compared to now. -#: lib/util.php:1361 +#: lib/util.php:1355 msgid "about a month ago" msgstr "" #. TRANS: Used in notices to indicate when the notice was made compared to now. -#: lib/util.php:1365 +#: lib/util.php:1359 #, php-format msgid "about one month ago" msgid_plural "about %d months ago" @@ -9401,7 +9536,7 @@ msgstr[0] "" msgstr[1] "" #. TRANS: Used in notices to indicate when the notice was made compared to now. -#: lib/util.php:1368 +#: lib/util.php:1362 msgid "about a year ago" msgstr "" diff --git a/locale/sv/LC_MESSAGES/statusnet.po b/locale/sv/LC_MESSAGES/statusnet.po index 8550a1fdd8..289b4b09f7 100644 --- a/locale/sv/LC_MESSAGES/statusnet.po +++ b/locale/sv/LC_MESSAGES/statusnet.po @@ -13,17 +13,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-11 18:15+0000\n" -"PO-Revision-Date: 2011-03-11 18:17:27+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:49:57+0000\n" "Language-Team: Swedish \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: sv\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" +"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -592,7 +592,7 @@ msgstr "Kunde inte ta bort användare %1$s från grupp %2$s." msgid "%s's groups" msgstr "%ss grupper" -#. TRANS: Used as subtitle in check for group membership. %1$s is a user name, %2$s is the site name. +#. TRANS: Used as subtitle in check for group membership. %1$s is the site name, %2$s is a user name. #, php-format msgid "%1$s groups %2$s is a member of." msgstr "%1$s grupper %2$s är en medlem i." @@ -4691,18 +4691,6 @@ msgstr "%s grupp" msgid "%1$s group, page %2$d" msgstr "%1$s grupp, sida %2$d" -#. TRANS: Label for group description or group note (dt). Text hidden by default. -msgid "Note" -msgstr "Notis" - -#. TRANS: Label for group aliases (dt). Text hidden by default. -msgid "Aliases" -msgstr "Alias" - -#. TRANS: Group actions header (h2). Text hidden by default. -msgid "Group actions" -msgstr "Åtgärder för grupp" - #. TRANS: Tooltip for feed link. %s is a group nickname. #, php-format msgid "Notice feed for %s group (RSS 1.0)" @@ -4812,6 +4800,10 @@ msgstr "Meddelande från %1$s på %2$s" msgid "Notice deleted." msgstr "Notis borttagen." +#, fuzzy +msgid "Notice" +msgstr "Notiser" + #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #, fuzzy, php-format msgid "%1$s tagged %2$s" @@ -5346,7 +5338,6 @@ msgstr "Inget ID-argument." msgid "Tag %s" msgstr "Tagg %s" -#. TRANS: H2 for user profile information. msgid "User profile" msgstr "Användarprofil" @@ -6067,6 +6058,49 @@ msgstr "" msgid "No AtomPub API service for %s." msgstr "" +#. TRANS: H2 for user actions in a profile. +#. TRANS: H2 for entity actions in a profile. +msgid "User actions" +msgstr "Åtgärder för användare" + +#. TRANS: Text shown in user profile of not yet compeltely deleted users. +msgid "User deletion in progress..." +msgstr "Borttagning av användare pågår..." + +#. TRANS: Link title for link on user profile. +msgid "Edit profile settings" +msgstr "Redigera profilinställningar" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "Redigera" + +#. TRANS: Link title for link on user profile. +msgid "Send a direct message to this user" +msgstr "Skicka ett direktmeddelande till denna användare" + +#. TRANS: Link text for link on user profile. +msgid "Message" +msgstr "Meddelande" + +#. TRANS: Label text on user profile to select a user role. +msgid "Moderate" +msgstr "Moderera" + +#. TRANS: Label text on user profile to select a user role. +msgid "User role" +msgstr "Användarroll" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Administrator" +msgstr "Administratör" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Moderator" +msgstr "Moderator" + #. TRANS: Page title. %1$s is the title, %2$s is the site name. #, php-format msgid "%1$s - %2$s" @@ -6786,85 +6820,171 @@ msgid_plural "You are a member of these groups:" msgstr[0] "Du är en medlem i denna grupp:" msgstr[1] "Du är en medlem i dessa grupper:" -#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings. -msgid "" -"Commands:\n" -"on - turn on notifications\n" -"off - turn off notifications\n" -"help - show this help\n" -"follow - subscribe to user\n" -"groups - lists the groups you have joined\n" -"subscriptions - list the people you follow\n" -"subscribers - list the people that follow you\n" -"leave - unsubscribe from user\n" -"d - direct message to user\n" -"get - get last notice from user\n" -"whois - get profile info on user\n" -"lose - force user to stop following you\n" -"fav - add user's last notice as a 'fave'\n" -"fav # - add notice with the given id as a 'fave'\n" -"repeat # - repeat a notice with a given id\n" -"repeat - repeat the last notice from user\n" -"reply # - reply to notice with a given id\n" -"reply - reply to the last notice from user\n" -"join - join group\n" -"login - Get a link to login to the web interface\n" -"drop - leave group\n" -"stats - get your stats\n" -"stop - same as 'off'\n" -"quit - same as 'off'\n" -"sub - same as 'follow'\n" -"unsub - same as 'leave'\n" -"last - same as 'get'\n" -"on - not yet implemented.\n" -"off - not yet implemented.\n" -"nudge - remind a user to update.\n" -"invite - not yet implemented.\n" -"track - not yet implemented.\n" -"untrack - not yet implemented.\n" -"track off - not yet implemented.\n" -"untrack all - not yet implemented.\n" -"tracks - not yet implemented.\n" -"tracking - not yet implemented.\n" +#. TRANS: Header line of help text for commands. +#, fuzzy +msgctxt "COMMANDHELP" +msgid "Commands:" +msgstr "Resultat av kommando" + +#. TRANS: Help message for IM/SMS command "on" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn on notifications" +msgstr "Kan inte stänga av notifikation." + +#. TRANS: Help message for IM/SMS command "off" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn off notifications" +msgstr "Kan inte sätta på notifikation." + +#. TRANS: Help message for IM/SMS command "help" +msgctxt "COMMANDHELP" +msgid "show this help" +msgstr "" + +#. TRANS: Help message for IM/SMS command "follow " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "subscribe to user" +msgstr "Prenumerera på denna användare" + +#. TRANS: Help message for IM/SMS command "groups" +msgctxt "COMMANDHELP" +msgid "lists the groups you have joined" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscriptions" +msgctxt "COMMANDHELP" +msgid "list the people you follow" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscribers" +msgctxt "COMMANDHELP" +msgid "list the people that follow you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "leave " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "unsubscribe from user" +msgstr "Avsluta prenumerationen på denna användare" + +#. TRANS: Help message for IM/SMS command "d " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "direct message to user" +msgstr "Direktmeddelande till %s" + +#. TRANS: Help message for IM/SMS command "get " +msgctxt "COMMANDHELP" +msgid "get last notice from user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "whois " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "get profile info on user" +msgstr "Profilinformation" + +#. TRANS: Help message for IM/SMS command "lose " +msgctxt "COMMANDHELP" +msgid "force user to stop following you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav " +msgctxt "COMMANDHELP" +msgid "add user's last notice as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav #" +msgctxt "COMMANDHELP" +msgid "add notice with the given id as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat #" +msgctxt "COMMANDHELP" +msgid "repeat a notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "repeat the last notice from user" +msgstr "Upprepa denna notis" + +#. TRANS: Help message for IM/SMS command "reply #" +msgctxt "COMMANDHELP" +msgid "reply to notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "reply " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "reply to the last notice from user" +msgstr "Svara på denna notis" + +#. TRANS: Help message for IM/SMS command "join " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "join group" +msgstr "Okänd grupp." + +#. TRANS: Help message for IM/SMS command "login" +msgctxt "COMMANDHELP" +msgid "Get a link to login to the web interface" +msgstr "" + +#. TRANS: Help message for IM/SMS command "drop " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "leave group" +msgstr "Ta bort grupp" + +#. TRANS: Help message for IM/SMS command "stats" +msgctxt "COMMANDHELP" +msgid "get your stats" +msgstr "" + +#. TRANS: Help message for IM/SMS command "stop" +#. TRANS: Help message for IM/SMS command "quit" +msgctxt "COMMANDHELP" +msgid "same as 'off'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "sub " +msgctxt "COMMANDHELP" +msgid "same as 'follow'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "unsub " +msgctxt "COMMANDHELP" +msgid "same as 'leave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "last " +msgctxt "COMMANDHELP" +msgid "same as 'get'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "on " +#. TRANS: Help message for IM/SMS command "off " +#. TRANS: Help message for IM/SMS command "invite " +#. TRANS: Help message for IM/SMS command "track " +#. TRANS: Help message for IM/SMS command "untrack " +#. TRANS: Help message for IM/SMS command "track off" +#. TRANS: Help message for IM/SMS command "untrack all" +#. TRANS: Help message for IM/SMS command "tracks" +#. TRANS: Help message for IM/SMS command "tracking" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "not yet implemented." +msgstr "Kommando inte implementerat än." + +#. TRANS: Help message for IM/SMS command "nudge " +msgctxt "COMMANDHELP" +msgid "remind a user to update." msgstr "" -"Kommandon:\n" -"on - sätt på notifikationer\n" -"off - stäng av notifikationer\n" -"help - visa denna hjälp\n" -"follow - prenumerera på användare\n" -"groups - lista grupperna du tillhör\n" -"subscriptions - lista personerna du följer\n" -"subscribers - lista personerna som följer dig\n" -"leave - avsluta prenumeration på användare\n" -"d - direktmeddelande till användare\n" -"get - hämta senaste notis från användare\n" -"whois - hämta profilinformation om användare\n" -"lose - tvinga användare att sluta följa dig\n" -"fav - lägg till användarens senaste notis som favorit\n" -"fav # - lägg till notis med given id som favorit\n" -"repeat # - upprepa en notis med en given id\n" -"repeat - upprepa den senaste notisen från användare\n" -"reply # - svara på notis med en given id\n" -"reply - svara på den senaste notisen från användare\n" -"join - gå med i grupp\n" -"login - hämta en länk till webbgränssnittets inloggningssida\n" -"drop - lämna grupp\n" -"stats - hämta din statistik\n" -"stop - samma som 'off'\n" -"quit - samma som 'off'\n" -"sub - samma som 'follow'\n" -"unsub - samma som 'leave'\n" -"last - samma som 'get'\n" -"on - inte implementerat än.\n" -"off - inte implementerat än.\n" -"nudge - påminn en användare om att uppdatera\n" -"invite - inte implementerat än.\n" -"track - inte implementerat än.\n" -"untrack - inte implementerat än.\n" -"track off - inte implementerat än.\n" -"untrack all - inte implementerat än.\n" -"tracks - inte implementerat än.\n" -"tracking - inte implementerat än.\n" #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. #, fuzzy @@ -7045,6 +7165,9 @@ msgid "" "Location for the group, if any, like \"City, State (or Region), Country\"." msgstr "Plats för gruppen, om den finns, såsom \"Stad, Län, Land\"" +msgid "Aliases" +msgstr "Alias" + #, fuzzy, php-format msgid "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " @@ -7124,6 +7247,10 @@ msgctxt "TOOLTIP" msgid "Add or edit %s design" msgstr "Lägg till eller redigera %s utseende" +#. TRANS: Group actions header (h2). Text hidden by default. +msgid "Group actions" +msgstr "Åtgärder för grupp" + #. TRANS: Title for groups with the most members section. msgid "Groups with most members" msgstr "Grupper med flest medlemmar" @@ -7691,6 +7818,7 @@ msgstr "Skicka en notis" msgid "What's up, %s?" msgstr "Vad är på gång, %s?" +#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Bifoga" @@ -8148,52 +8276,6 @@ msgstr "Avsluta pren." msgid "User %1$s (%2$d) has no profile record." msgstr "Användaren har ingen profil." -msgid "Edit Avatar" -msgstr "Redigera avatar" - -#. TRANS: H2 for user actions in a profile. -#. TRANS: H2 for entity actions in a profile. -msgid "User actions" -msgstr "Åtgärder för användare" - -#. TRANS: Text shown in user profile of not yet compeltely deleted users. -msgid "User deletion in progress..." -msgstr "Borttagning av användare pågår..." - -#. TRANS: Link title for link on user profile. -msgid "Edit profile settings" -msgstr "Redigera profilinställningar" - -#. TRANS: Link text for link on user profile. -msgid "Edit" -msgstr "Redigera" - -#. TRANS: Link title for link on user profile. -msgid "Send a direct message to this user" -msgstr "Skicka ett direktmeddelande till denna användare" - -#. TRANS: Link text for link on user profile. -msgid "Message" -msgstr "Meddelande" - -#. TRANS: Label text on user profile to select a user role. -msgid "Moderate" -msgstr "Moderera" - -#. TRANS: Label text on user profile to select a user role. -msgid "User role" -msgstr "Användarroll" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Administrator" -msgstr "Administratör" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Moderator" -msgstr "Moderator" - #, fuzzy msgid "Not allowed to log in." msgstr "Inte inloggad." @@ -8269,3 +8351,88 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" + +#~ msgid "Note" +#~ msgstr "Notis" + +#~ msgid "" +#~ "Commands:\n" +#~ "on - turn on notifications\n" +#~ "off - turn off notifications\n" +#~ "help - show this help\n" +#~ "follow - subscribe to user\n" +#~ "groups - lists the groups you have joined\n" +#~ "subscriptions - list the people you follow\n" +#~ "subscribers - list the people that follow you\n" +#~ "leave - unsubscribe from user\n" +#~ "d - direct message to user\n" +#~ "get - get last notice from user\n" +#~ "whois - get profile info on user\n" +#~ "lose - force user to stop following you\n" +#~ "fav - add user's last notice as a 'fave'\n" +#~ "fav # - add notice with the given id as a 'fave'\n" +#~ "repeat # - repeat a notice with a given id\n" +#~ "repeat - repeat the last notice from user\n" +#~ "reply # - reply to notice with a given id\n" +#~ "reply - reply to the last notice from user\n" +#~ "join - join group\n" +#~ "login - Get a link to login to the web interface\n" +#~ "drop - leave group\n" +#~ "stats - get your stats\n" +#~ "stop - same as 'off'\n" +#~ "quit - same as 'off'\n" +#~ "sub - same as 'follow'\n" +#~ "unsub - same as 'leave'\n" +#~ "last - same as 'get'\n" +#~ "on - not yet implemented.\n" +#~ "off - not yet implemented.\n" +#~ "nudge - remind a user to update.\n" +#~ "invite - not yet implemented.\n" +#~ "track - not yet implemented.\n" +#~ "untrack - not yet implemented.\n" +#~ "track off - not yet implemented.\n" +#~ "untrack all - not yet implemented.\n" +#~ "tracks - not yet implemented.\n" +#~ "tracking - not yet implemented.\n" +#~ msgstr "" +#~ "Kommandon:\n" +#~ "on - sätt på notifikationer\n" +#~ "off - stäng av notifikationer\n" +#~ "help - visa denna hjälp\n" +#~ "follow - prenumerera på användare\n" +#~ "groups - lista grupperna du tillhör\n" +#~ "subscriptions - lista personerna du följer\n" +#~ "subscribers - lista personerna som följer dig\n" +#~ "leave - avsluta prenumeration på användare\n" +#~ "d - direktmeddelande till användare\n" +#~ "get - hämta senaste notis från användare\n" +#~ "whois - hämta profilinformation om användare\n" +#~ "lose - tvinga användare att sluta följa dig\n" +#~ "fav - lägg till användarens senaste notis som favorit\n" +#~ "fav # - lägg till notis med given id som favorit\n" +#~ "repeat # - upprepa en notis med en given id\n" +#~ "repeat - upprepa den senaste notisen från användare\n" +#~ "reply # - svara på notis med en given id\n" +#~ "reply - svara på den senaste notisen från användare\n" +#~ "join - gå med i grupp\n" +#~ "login - hämta en länk till webbgränssnittets inloggningssida\n" +#~ "drop - lämna grupp\n" +#~ "stats - hämta din statistik\n" +#~ "stop - samma som 'off'\n" +#~ "quit - samma som 'off'\n" +#~ "sub - samma som 'follow'\n" +#~ "unsub - samma som 'leave'\n" +#~ "last - samma som 'get'\n" +#~ "on - inte implementerat än.\n" +#~ "off - inte implementerat än.\n" +#~ "nudge - påminn en användare om att uppdatera\n" +#~ "invite - inte implementerat än.\n" +#~ "track - inte implementerat än.\n" +#~ "untrack - inte implementerat än.\n" +#~ "track off - inte implementerat än.\n" +#~ "untrack all - inte implementerat än.\n" +#~ "tracks - inte implementerat än.\n" +#~ "tracking - inte implementerat än.\n" + +#~ msgid "Edit Avatar" +#~ msgstr "Redigera avatar" diff --git a/locale/te/LC_MESSAGES/statusnet.po b/locale/te/LC_MESSAGES/statusnet.po index a9718f4c01..afc3188748 100644 --- a/locale/te/LC_MESSAGES/statusnet.po +++ b/locale/te/LC_MESSAGES/statusnet.po @@ -10,17 +10,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-11 18:15+0000\n" -"PO-Revision-Date: 2011-03-11 18:17:29+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:49:58+0000\n" "Language-Team: Telugu \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: te\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" +"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -580,7 +580,7 @@ msgstr "వాడుకరి %1$sని %2$s గుంపు నుండి msgid "%s's groups" msgstr "%s యొక్క గుంపులు" -#. TRANS: Used as subtitle in check for group membership. %1$s is a user name, %2$s is the site name. +#. TRANS: Used as subtitle in check for group membership. %1$s is the site name, %2$s is a user name. #, php-format msgid "%1$s groups %2$s is a member of." msgstr "%2$s సభ్యులుగా ఉన్న %2$s గుంపులు." @@ -621,9 +621,8 @@ msgstr "పేరులో చిన్నబడి అక్షరాలు మ #. TRANS: API validation exception thrown when alias is the same as nickname. #. TRANS: Group create form validation error. -#, fuzzy msgid "Alias cannot be the same as nickname." -msgstr "మారుపేరు పేరుతో సమానంగా ఉండకూడదు." +msgstr "మారుపేరు ముద్దుపేరూ ఒకటే కాకూడదు." #. TRANS: Client error displayed when uploading a media file has failed. msgid "Upload failed." @@ -1244,9 +1243,8 @@ msgid "No file uploaded." msgstr "ఏ దస్త్రమూ ఎక్కింపబడలేదు." #. TRANS: Avatar upload form instruction after uploading a file. -#, fuzzy msgid "Pick a square area of the image to be your avatar." -msgstr "మీ అవతారానికి గానూ ఈ చిత్రం నుండి ఒక చతురస్రపు ప్రదేశాన్ని ఎంచుకోండి" +msgstr "మీ అవతారంగా ఉండాల్సిన చతురస్రపు ప్రదేశాన్ని బొమ్మ నుండి ఎంచుకోండి." #. TRANS: Server error displayed if an avatar upload went wrong somehow server side. #. TRANS: Server error displayed trying to crop an uploaded group logo that is no longer present. @@ -4598,18 +4596,6 @@ msgstr "%s గుంపు" msgid "%1$s group, page %2$d" msgstr "%1$s గుంపు , %2$dవ పేజీ" -#. TRANS: Label for group description or group note (dt). Text hidden by default. -msgid "Note" -msgstr "గమనిక" - -#. TRANS: Label for group aliases (dt). Text hidden by default. -msgid "Aliases" -msgstr "మారుపేర్లు" - -#. TRANS: Group actions header (h2). Text hidden by default. -msgid "Group actions" -msgstr "గుంపు చర్యలు" - #. TRANS: Tooltip for feed link. %s is a group nickname. #, php-format msgid "Notice feed for %s group (RSS 1.0)" @@ -4723,6 +4709,10 @@ msgstr "%2$sలో %1$sకి స్పందనలు!" msgid "Notice deleted." msgstr "నోటీసుని తొలగించాం." +#, fuzzy +msgid "Notice" +msgstr "సందేశాలు" + #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #, fuzzy, php-format msgid "%1$s tagged %2$s" @@ -5252,7 +5242,6 @@ msgstr "జోడింపులు లేవు." msgid "Tag %s" msgstr "ట్యాగులు" -#. TRANS: H2 for user profile information. msgid "User profile" msgstr "వాడుకరి ప్రొఫైలు" @@ -5933,6 +5922,50 @@ msgstr "" msgid "No AtomPub API service for %s." msgstr "" +#. TRANS: H2 for user actions in a profile. +#. TRANS: H2 for entity actions in a profile. +msgid "User actions" +msgstr "వాడుకరి చర్యలు" + +#. TRANS: Text shown in user profile of not yet compeltely deleted users. +msgid "User deletion in progress..." +msgstr "వాడుకరి తొలగింపు కొనసాగుతూంది..." + +#. TRANS: Link title for link on user profile. +msgid "Edit profile settings" +msgstr "ఫ్రొఫైలు అమరికలని మార్చు" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "మార్చు" + +#. TRANS: Link title for link on user profile. +msgid "Send a direct message to this user" +msgstr "ఈ వాడుకరికి ఒక నేరు సందేశాన్ని పంపించండి" + +#. TRANS: Link text for link on user profile. +msgid "Message" +msgstr "సందేశం" + +#. TRANS: Label text on user profile to select a user role. +#, fuzzy +msgid "Moderate" +msgstr "సమన్వయకర్త" + +#. TRANS: Label text on user profile to select a user role. +msgid "User role" +msgstr "వాడుకరి పాత్ర" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Administrator" +msgstr "నిర్వాహకులు" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Moderator" +msgstr "సమన్వయకర్త" + #. TRANS: Page title. %1$s is the title, %2$s is the site name. #, php-format msgid "%1$s - %2$s" @@ -6657,46 +6690,170 @@ msgid_plural "You are a member of these groups:" msgstr[0] "మీరు ఇప్పటికే లోనికి ప్రవేశించారు!" msgstr[1] "మీరు ఇప్పటికే లోనికి ప్రవేశించారు!" -#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings. -msgid "" -"Commands:\n" -"on - turn on notifications\n" -"off - turn off notifications\n" -"help - show this help\n" -"follow - subscribe to user\n" -"groups - lists the groups you have joined\n" -"subscriptions - list the people you follow\n" -"subscribers - list the people that follow you\n" -"leave - unsubscribe from user\n" -"d - direct message to user\n" -"get - get last notice from user\n" -"whois - get profile info on user\n" -"lose - force user to stop following you\n" -"fav - add user's last notice as a 'fave'\n" -"fav # - add notice with the given id as a 'fave'\n" -"repeat # - repeat a notice with a given id\n" -"repeat - repeat the last notice from user\n" -"reply # - reply to notice with a given id\n" -"reply - reply to the last notice from user\n" -"join - join group\n" -"login - Get a link to login to the web interface\n" -"drop - leave group\n" -"stats - get your stats\n" -"stop - same as 'off'\n" -"quit - same as 'off'\n" -"sub - same as 'follow'\n" -"unsub - same as 'leave'\n" -"last - same as 'get'\n" -"on - not yet implemented.\n" -"off - not yet implemented.\n" -"nudge - remind a user to update.\n" -"invite - not yet implemented.\n" -"track - not yet implemented.\n" -"untrack - not yet implemented.\n" -"track off - not yet implemented.\n" -"untrack all - not yet implemented.\n" -"tracks - not yet implemented.\n" -"tracking - not yet implemented.\n" +#. TRANS: Header line of help text for commands. +#, fuzzy +msgctxt "COMMANDHELP" +msgid "Commands:" +msgstr "ఆదేశ ఫలితాలు" + +#. TRANS: Help message for IM/SMS command "on" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn on notifications" +msgstr "మీ నోటీసుని మీరే పునరావృతించలేరు." + +#. TRANS: Help message for IM/SMS command "off" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn off notifications" +msgstr "మీ నోటీసుని మీరే పునరావృతించలేరు." + +#. TRANS: Help message for IM/SMS command "help" +msgctxt "COMMANDHELP" +msgid "show this help" +msgstr "" + +#. TRANS: Help message for IM/SMS command "follow " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "subscribe to user" +msgstr "ఈ వాడుకరికి చందాచేరు" + +#. TRANS: Help message for IM/SMS command "groups" +msgctxt "COMMANDHELP" +msgid "lists the groups you have joined" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscriptions" +msgctxt "COMMANDHELP" +msgid "list the people you follow" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscribers" +msgctxt "COMMANDHELP" +msgid "list the people that follow you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "leave " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "unsubscribe from user" +msgstr "ఈ వాడుకరి నుండి చందామాను" + +#. TRANS: Help message for IM/SMS command "d " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "direct message to user" +msgstr "%s కి నేరు సందేశాలు" + +#. TRANS: Help message for IM/SMS command "get " +msgctxt "COMMANDHELP" +msgid "get last notice from user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "whois " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "get profile info on user" +msgstr "ప్రొఫైలు సమాచారం" + +#. TRANS: Help message for IM/SMS command "lose " +msgctxt "COMMANDHELP" +msgid "force user to stop following you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav " +msgctxt "COMMANDHELP" +msgid "add user's last notice as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav #" +msgctxt "COMMANDHELP" +msgid "add notice with the given id as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat #" +msgctxt "COMMANDHELP" +msgid "repeat a notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "repeat the last notice from user" +msgstr "ఈ నోటీసుని పునరావృతించు" + +#. TRANS: Help message for IM/SMS command "reply #" +msgctxt "COMMANDHELP" +msgid "reply to notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "reply " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "reply to the last notice from user" +msgstr "ఈ నోటీసుపై స్పందించండి" + +#. TRANS: Help message for IM/SMS command "join " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "join group" +msgstr "గుర్తుతెలియని గుంపు." + +#. TRANS: Help message for IM/SMS command "login" +msgctxt "COMMANDHELP" +msgid "Get a link to login to the web interface" +msgstr "" + +#. TRANS: Help message for IM/SMS command "drop " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "leave group" +msgstr "గుంపు తొలగింపు" + +#. TRANS: Help message for IM/SMS command "stats" +msgctxt "COMMANDHELP" +msgid "get your stats" +msgstr "" + +#. TRANS: Help message for IM/SMS command "stop" +#. TRANS: Help message for IM/SMS command "quit" +msgctxt "COMMANDHELP" +msgid "same as 'off'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "sub " +msgctxt "COMMANDHELP" +msgid "same as 'follow'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "unsub " +msgctxt "COMMANDHELP" +msgid "same as 'leave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "last " +msgctxt "COMMANDHELP" +msgid "same as 'get'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "on " +#. TRANS: Help message for IM/SMS command "off " +#. TRANS: Help message for IM/SMS command "invite " +#. TRANS: Help message for IM/SMS command "track " +#. TRANS: Help message for IM/SMS command "untrack " +#. TRANS: Help message for IM/SMS command "track off" +#. TRANS: Help message for IM/SMS command "untrack all" +#. TRANS: Help message for IM/SMS command "tracks" +#. TRANS: Help message for IM/SMS command "tracking" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "not yet implemented." +msgstr "క్షమించండి, ఈ ఆదేశం ఇంకా అమలుపరచబడలేదు." + +#. TRANS: Help message for IM/SMS command "nudge " +msgctxt "COMMANDHELP" +msgid "remind a user to update." msgstr "" #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. @@ -6879,6 +7036,9 @@ msgid "" "Location for the group, if any, like \"City, State (or Region), Country\"." msgstr "గుంపు యొక్క ప్రాంతం, ఉంటే, \"నగరం, రాష్ట్రం (లేదా ప్రాంతం), దేశం\"" +msgid "Aliases" +msgstr "మారుపేర్లు" + #, php-format msgid "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " @@ -6956,6 +7116,10 @@ msgctxt "TOOLTIP" msgid "Add or edit %s design" msgstr "" +#. TRANS: Group actions header (h2). Text hidden by default. +msgid "Group actions" +msgstr "గుంపు చర్యలు" + #. TRANS: Title for groups with the most members section. msgid "Groups with most members" msgstr "ఎక్కువమంది సభ్యులున్న గుంపులు" @@ -7510,6 +7674,7 @@ msgstr "సైటు గమనిక" msgid "What's up, %s?" msgstr "%s, ఏమిటి సంగతులు?" +#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "జోడించు" @@ -7967,53 +8132,6 @@ msgstr "చందామాను" msgid "User %1$s (%2$d) has no profile record." msgstr "వాడుకరికి ప్రొఫైలు లేదు." -msgid "Edit Avatar" -msgstr "అవతారాన్ని మార్చు" - -#. TRANS: H2 for user actions in a profile. -#. TRANS: H2 for entity actions in a profile. -msgid "User actions" -msgstr "వాడుకరి చర్యలు" - -#. TRANS: Text shown in user profile of not yet compeltely deleted users. -msgid "User deletion in progress..." -msgstr "వాడుకరి తొలగింపు కొనసాగుతూంది..." - -#. TRANS: Link title for link on user profile. -msgid "Edit profile settings" -msgstr "ఫ్రొఫైలు అమరికలని మార్చు" - -#. TRANS: Link text for link on user profile. -msgid "Edit" -msgstr "మార్చు" - -#. TRANS: Link title for link on user profile. -msgid "Send a direct message to this user" -msgstr "ఈ వాడుకరికి ఒక నేరు సందేశాన్ని పంపించండి" - -#. TRANS: Link text for link on user profile. -msgid "Message" -msgstr "సందేశం" - -#. TRANS: Label text on user profile to select a user role. -#, fuzzy -msgid "Moderate" -msgstr "సమన్వయకర్త" - -#. TRANS: Label text on user profile to select a user role. -msgid "User role" -msgstr "వాడుకరి పాత్ర" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Administrator" -msgstr "నిర్వాహకులు" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Moderator" -msgstr "సమన్వయకర్త" - msgid "Not allowed to log in." msgstr "ప్రవేశించడానికి అనుమతి లేదు." @@ -8087,3 +8205,9 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" + +#~ msgid "Note" +#~ msgstr "గమనిక" + +#~ msgid "Edit Avatar" +#~ msgstr "అవతారాన్ని మార్చు" diff --git a/locale/tr/LC_MESSAGES/statusnet.po b/locale/tr/LC_MESSAGES/statusnet.po index 89e5b94c84..db1e94fb57 100644 --- a/locale/tr/LC_MESSAGES/statusnet.po +++ b/locale/tr/LC_MESSAGES/statusnet.po @@ -12,17 +12,17 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-11 18:15+0000\n" -"PO-Revision-Date: 2011-03-11 18:17:30+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:49:59+0000\n" "Language-Team: Turkish \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: tr\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" +"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -589,7 +589,7 @@ msgstr "%1$s kullanıcısı, %2$s grubundan silinemedi." msgid "%s's groups" msgstr "%s kullanıcısının grupları" -#. TRANS: Used as subtitle in check for group membership. %1$s is a user name, %2$s is the site name. +#. TRANS: Used as subtitle in check for group membership. %1$s is the site name, %2$s is a user name. #, php-format msgid "%1$s groups %2$s is a member of." msgstr "%2$s kullanıcısının üye olduğu %1$s grupları." @@ -4633,18 +4633,6 @@ msgstr "" msgid "%1$s group, page %2$d" msgstr "Bütün abonelikler" -#. TRANS: Label for group description or group note (dt). Text hidden by default. -msgid "Note" -msgstr "Not" - -#. TRANS: Label for group aliases (dt). Text hidden by default. -msgid "Aliases" -msgstr "Diğerisimler" - -#. TRANS: Group actions header (h2). Text hidden by default. -msgid "Group actions" -msgstr "" - #. TRANS: Tooltip for feed link. %s is a group nickname. #, fuzzy, php-format msgid "Notice feed for %s group (RSS 1.0)" @@ -4747,6 +4735,10 @@ msgstr "" msgid "Notice deleted." msgstr "Durum mesajı silindi." +#, fuzzy +msgid "Notice" +msgstr "Durum mesajları" + #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #, fuzzy, php-format msgid "%1$s tagged %2$s" @@ -5275,7 +5267,6 @@ msgstr "Böyle bir belge yok." msgid "Tag %s" msgstr "" -#. TRANS: H2 for user profile information. #, fuzzy msgid "User profile" msgstr "Kullanıcının profili yok." @@ -5971,6 +5962,51 @@ msgstr "" msgid "No AtomPub API service for %s." msgstr "" +#. TRANS: H2 for user actions in a profile. +#. TRANS: H2 for entity actions in a profile. +msgid "User actions" +msgstr "" + +#. TRANS: Text shown in user profile of not yet compeltely deleted users. +msgid "User deletion in progress..." +msgstr "" + +#. TRANS: Link title for link on user profile. +#, fuzzy +msgid "Edit profile settings" +msgstr "Profil ayarları" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "" + +#. TRANS: Link title for link on user profile. +msgid "Send a direct message to this user" +msgstr "" + +#. TRANS: Link text for link on user profile. +msgid "Message" +msgstr "" + +#. TRANS: Label text on user profile to select a user role. +msgid "Moderate" +msgstr "" + +#. TRANS: Label text on user profile to select a user role. +#, fuzzy +msgid "User role" +msgstr "Kullanıcının profili yok." + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Administrator" +msgstr "" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Moderator" +msgstr "" + #. TRANS: Page title. %1$s is the title, %2$s is the site name. #, fuzzy, php-format msgid "%1$s - %2$s" @@ -6696,46 +6732,167 @@ msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "Bize o profili yollamadınız" -#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings. -msgid "" -"Commands:\n" -"on - turn on notifications\n" -"off - turn off notifications\n" -"help - show this help\n" -"follow - subscribe to user\n" -"groups - lists the groups you have joined\n" -"subscriptions - list the people you follow\n" -"subscribers - list the people that follow you\n" -"leave - unsubscribe from user\n" -"d - direct message to user\n" -"get - get last notice from user\n" -"whois - get profile info on user\n" -"lose - force user to stop following you\n" -"fav - add user's last notice as a 'fave'\n" -"fav # - add notice with the given id as a 'fave'\n" -"repeat # - repeat a notice with a given id\n" -"repeat - repeat the last notice from user\n" -"reply # - reply to notice with a given id\n" -"reply - reply to the last notice from user\n" -"join - join group\n" -"login - Get a link to login to the web interface\n" -"drop - leave group\n" -"stats - get your stats\n" -"stop - same as 'off'\n" -"quit - same as 'off'\n" -"sub - same as 'follow'\n" -"unsub - same as 'leave'\n" -"last - same as 'get'\n" -"on - not yet implemented.\n" -"off - not yet implemented.\n" -"nudge - remind a user to update.\n" -"invite - not yet implemented.\n" -"track - not yet implemented.\n" -"untrack - not yet implemented.\n" -"track off - not yet implemented.\n" -"untrack all - not yet implemented.\n" -"tracks - not yet implemented.\n" -"tracking - not yet implemented.\n" +#. TRANS: Header line of help text for commands. +msgctxt "COMMANDHELP" +msgid "Commands:" +msgstr "" + +#. TRANS: Help message for IM/SMS command "on" +msgctxt "COMMANDHELP" +msgid "turn on notifications" +msgstr "" + +#. TRANS: Help message for IM/SMS command "off" +msgctxt "COMMANDHELP" +msgid "turn off notifications" +msgstr "" + +#. TRANS: Help message for IM/SMS command "help" +msgctxt "COMMANDHELP" +msgid "show this help" +msgstr "" + +#. TRANS: Help message for IM/SMS command "follow " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "subscribe to user" +msgstr "Bize o profili yollamadınız" + +#. TRANS: Help message for IM/SMS command "groups" +msgctxt "COMMANDHELP" +msgid "lists the groups you have joined" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscriptions" +msgctxt "COMMANDHELP" +msgid "list the people you follow" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscribers" +msgctxt "COMMANDHELP" +msgid "list the people that follow you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "leave " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "unsubscribe from user" +msgstr "Bize o profili yollamadınız" + +#. TRANS: Help message for IM/SMS command "d " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "direct message to user" +msgstr "%s kullanıcısına özel mesaj" + +#. TRANS: Help message for IM/SMS command "get " +msgctxt "COMMANDHELP" +msgid "get last notice from user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "whois " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "get profile info on user" +msgstr "Profil ayarları" + +#. TRANS: Help message for IM/SMS command "lose " +msgctxt "COMMANDHELP" +msgid "force user to stop following you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav " +msgctxt "COMMANDHELP" +msgid "add user's last notice as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav #" +msgctxt "COMMANDHELP" +msgid "add notice with the given id as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat #" +msgctxt "COMMANDHELP" +msgid "repeat a notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "repeat the last notice from user" +msgstr "Böyle bir durum mesajı yok." + +#. TRANS: Help message for IM/SMS command "reply #" +msgctxt "COMMANDHELP" +msgid "reply to notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "reply " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "reply to the last notice from user" +msgstr "Böyle bir kullanıcı yok." + +#. TRANS: Help message for IM/SMS command "join " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "join group" +msgstr "Yeni grup" + +#. TRANS: Help message for IM/SMS command "login" +msgctxt "COMMANDHELP" +msgid "Get a link to login to the web interface" +msgstr "" + +#. TRANS: Help message for IM/SMS command "drop " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "leave group" +msgstr "Kullanıcıyı sil" + +#. TRANS: Help message for IM/SMS command "stats" +msgctxt "COMMANDHELP" +msgid "get your stats" +msgstr "" + +#. TRANS: Help message for IM/SMS command "stop" +#. TRANS: Help message for IM/SMS command "quit" +msgctxt "COMMANDHELP" +msgid "same as 'off'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "sub " +msgctxt "COMMANDHELP" +msgid "same as 'follow'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "unsub " +msgctxt "COMMANDHELP" +msgid "same as 'leave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "last " +msgctxt "COMMANDHELP" +msgid "same as 'get'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "on " +#. TRANS: Help message for IM/SMS command "off " +#. TRANS: Help message for IM/SMS command "invite " +#. TRANS: Help message for IM/SMS command "track " +#. TRANS: Help message for IM/SMS command "untrack " +#. TRANS: Help message for IM/SMS command "track off" +#. TRANS: Help message for IM/SMS command "untrack all" +#. TRANS: Help message for IM/SMS command "tracks" +#. TRANS: Help message for IM/SMS command "tracking" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "not yet implemented." +msgstr "showForm() gerçeklenmemiş." + +#. TRANS: Help message for IM/SMS command "nudge " +msgctxt "COMMANDHELP" +msgid "remind a user to update." msgstr "" #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. @@ -6922,6 +7079,9 @@ msgid "" "Location for the group, if any, like \"City, State (or Region), Country\"." msgstr "Bulunduğunuz yer, \"Şehir, Eyalet (veya Bölge), Ülke\" gibi" +msgid "Aliases" +msgstr "Diğerisimler" + #, php-format msgid "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " @@ -6998,6 +7158,10 @@ msgctxt "TOOLTIP" msgid "Add or edit %s design" msgstr "" +#. TRANS: Group actions header (h2). Text hidden by default. +msgid "Group actions" +msgstr "" + #. TRANS: Title for groups with the most members section. msgid "Groups with most members" msgstr "" @@ -7469,6 +7633,7 @@ msgstr "Yeni durum mesajı" msgid "What's up, %s?" msgstr "N'aber %s?" +#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "" @@ -7942,55 +8107,6 @@ msgstr "Aboneliği sonlandır" msgid "User %1$s (%2$d) has no profile record." msgstr "Kullanıcının profili yok." -#, fuzzy -msgid "Edit Avatar" -msgstr "Avatar" - -#. TRANS: H2 for user actions in a profile. -#. TRANS: H2 for entity actions in a profile. -msgid "User actions" -msgstr "" - -#. TRANS: Text shown in user profile of not yet compeltely deleted users. -msgid "User deletion in progress..." -msgstr "" - -#. TRANS: Link title for link on user profile. -#, fuzzy -msgid "Edit profile settings" -msgstr "Profil ayarları" - -#. TRANS: Link text for link on user profile. -msgid "Edit" -msgstr "" - -#. TRANS: Link title for link on user profile. -msgid "Send a direct message to this user" -msgstr "" - -#. TRANS: Link text for link on user profile. -msgid "Message" -msgstr "" - -#. TRANS: Label text on user profile to select a user role. -msgid "Moderate" -msgstr "" - -#. TRANS: Label text on user profile to select a user role. -#, fuzzy -msgid "User role" -msgstr "Kullanıcının profili yok." - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Administrator" -msgstr "" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Moderator" -msgstr "" - #, fuzzy msgid "Not allowed to log in." msgstr "Giriş yapılmadı." @@ -8062,3 +8178,10 @@ msgstr "" #, php-format msgid "Getting backup from file '%s'." msgstr "" + +#~ msgid "Note" +#~ msgstr "Not" + +#, fuzzy +#~ msgid "Edit Avatar" +#~ msgstr "Avatar" diff --git a/locale/uk/LC_MESSAGES/statusnet.po b/locale/uk/LC_MESSAGES/statusnet.po index f2f3cdd6df..c4fe7648b3 100644 --- a/locale/uk/LC_MESSAGES/statusnet.po +++ b/locale/uk/LC_MESSAGES/statusnet.po @@ -12,18 +12,18 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-11 18:15+0000\n" -"PO-Revision-Date: 2011-03-11 18:17:31+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:50:00+0000\n" "Language-Team: Ukrainian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: uk\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= " "2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n" -"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" +"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -602,7 +602,7 @@ msgstr "Не вдалось видалити користувача %1$s зі с msgid "%s's groups" msgstr "Спільноти %s" -#. TRANS: Used as subtitle in check for group membership. %1$s is a user name, %2$s is the site name. +#. TRANS: Used as subtitle in check for group membership. %1$s is the site name, %2$s is a user name. #, php-format msgid "%1$s groups %2$s is a member of." msgstr "Спільноти на %1$s, до яких долучився %2$s." @@ -1060,9 +1060,8 @@ msgid "Can only fave notices." msgstr "Можна лише додавати дописи до обраних." #. TRANS: Client exception thrown when trying favorite a notice without content. -#, fuzzy msgid "Unknown notice." -msgstr "Невідома примітка" +msgstr "Невідомий допис." #. TRANS: Client exception thrown when trying favorite an already favorited notice. msgid "Already a favorite." @@ -3110,9 +3109,8 @@ msgstr "Потрібна URL-адреса." msgid "Could not create application." msgstr "Не вдалося створити додаток." -#, fuzzy msgid "Invalid image." -msgstr "Недійсний розмір." +msgstr "Неприпустиме зображення." #. TRANS: Title for form to create a group. msgid "New group" @@ -3400,7 +3398,6 @@ msgstr "" "приватно." #. TRANS: Title for page where to change password. -#, fuzzy msgctxt "TITLE" msgid "Change password" msgstr "Змінити пароль" @@ -3428,7 +3425,6 @@ msgid "6 or more characters." msgstr "6 або більше знаків." #. TRANS: Field label on page where to change password. In this field the new password should be typed a second time. -#, fuzzy msgctxt "LABEL" msgid "Confirm" msgstr "Підтвердити" @@ -3439,7 +3435,6 @@ msgid "Same as password above." msgstr "Такий само, як і пароль вище." #. TRANS: Button text on page where to change password. -#, fuzzy msgctxt "BUTTON" msgid "Change" msgstr "Змінити" @@ -3452,9 +3447,8 @@ msgid "Passwords don't match." msgstr "Паролі не співпадають." #. TRANS: Form validation error on page where to change password. -#, fuzzy msgid "Incorrect old password." -msgstr "Старий пароль є неточним" +msgstr "Неправильний старий пароль." #. TRANS: Form validation error on page where to change password. msgid "Error saving user; invalid." @@ -3541,12 +3535,11 @@ msgid "Fancy URLs" msgstr "Надзвичайні URL-адреси" #. TRANS: Field title in Paths admin panel. -#, fuzzy msgid "Use fancy URLs (more readable and memorable)?" -msgstr "Використовувати надзвичайні (найбільш пам’ятні і визначні) URL-адреси?" +msgstr "" +"Використовувати короткі (що їх легше прочитати і запам’ятати) URL-адреси?" #. TRANS: Fieldset legend in Paths admin panel. -#, fuzzy msgctxt "LEGEND" msgid "Theme" msgstr "Тема" @@ -3660,10 +3653,9 @@ msgid "Directory where attachments are located." msgstr "Директорія, в якій знаходяться вкладення." #. TRANS: Fieldset legend in Paths admin panel. -#, fuzzy msgctxt "LEGEND" msgid "SSL" -msgstr "SSL-шифрування" +msgstr "SSL" #. TRANS: Drop down option in Paths admin panel (option for "When to use SSL"). msgid "Never" @@ -3745,7 +3737,6 @@ msgid "Enabled" msgstr "Увімкнений" #. TRANS: Tab and title for plugins admin panel. -#, fuzzy msgctxt "TITLE" msgid "Plugins" msgstr "Додатки" @@ -3776,7 +3767,7 @@ msgstr "Недійсний зміст допису." #. TRANS: Exception thrown if a notice's license is not compatible with the StatusNet site license. #. TRANS: %1$s is the notice license, %2$s is the StatusNet site's license. -#, fuzzy, php-format +#, php-format msgid "Notice license \"%1$s\" is not compatible with site license \"%2$s\"." msgstr "Ліцензія допису «%1$s» є несумісною з ліцензією сайту «%2$s»." @@ -4631,18 +4622,6 @@ msgstr "Спільнота %s" msgid "%1$s group, page %2$d" msgstr "Спільнота %1$s, сторінка %2$d" -#. TRANS: Label for group description or group note (dt). Text hidden by default. -msgid "Note" -msgstr "Зауваження" - -#. TRANS: Label for group aliases (dt). Text hidden by default. -msgid "Aliases" -msgstr "Додаткові імена" - -#. TRANS: Group actions header (h2). Text hidden by default. -msgid "Group actions" -msgstr "Дії спільноти" - #. TRANS: Tooltip for feed link. %s is a group nickname. #, php-format msgid "Notice feed for %s group (RSS 1.0)" @@ -4753,6 +4732,10 @@ msgstr "Повідомлення від %1$s на %2$s" msgid "Notice deleted." msgstr "Допис видалено." +#, fuzzy +msgid "Notice" +msgstr "Дописи" + #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #, php-format msgid "%1$s tagged %2$s" @@ -5286,7 +5269,6 @@ msgstr "Немає ID аргументу." msgid "Tag %s" msgstr "Позначити %s" -#. TRANS: H2 for user profile information. msgid "User profile" msgstr "Профіль користувача." @@ -5996,6 +5978,49 @@ msgstr "Не вдається знайти XRD для %s." msgid "No AtomPub API service for %s." msgstr "Немає послуги AtomPub API для %s." +#. TRANS: H2 for user actions in a profile. +#. TRANS: H2 for entity actions in a profile. +msgid "User actions" +msgstr "Діяльність користувача" + +#. TRANS: Text shown in user profile of not yet compeltely deleted users. +msgid "User deletion in progress..." +msgstr "Видалення користувача у процесі..." + +#. TRANS: Link title for link on user profile. +msgid "Edit profile settings" +msgstr "Налаштування профілю" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "Правка" + +#. TRANS: Link title for link on user profile. +msgid "Send a direct message to this user" +msgstr "Надіслати пряме повідомлення цьому користувачеві" + +#. TRANS: Link text for link on user profile. +msgid "Message" +msgstr "Повідомлення" + +#. TRANS: Label text on user profile to select a user role. +msgid "Moderate" +msgstr "Модерувати" + +#. TRANS: Label text on user profile to select a user role. +msgid "User role" +msgstr "Роль користувача" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Administrator" +msgstr "Адміністратор" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Moderator" +msgstr "Модератор" + #. TRANS: Page title. %1$s is the title, %2$s is the site name. #, php-format msgid "%1$s - %2$s" @@ -6721,82 +6746,172 @@ msgstr[0] "Ви є учасником спільноти:" msgstr[1] "Ви є учасником таких спільнот:" msgstr[2] "Ви є учасником таких спільнот:" -#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings. -msgid "" -"Commands:\n" -"on - turn on notifications\n" -"off - turn off notifications\n" -"help - show this help\n" -"follow - subscribe to user\n" -"groups - lists the groups you have joined\n" -"subscriptions - list the people you follow\n" -"subscribers - list the people that follow you\n" -"leave - unsubscribe from user\n" -"d - direct message to user\n" -"get - get last notice from user\n" -"whois - get profile info on user\n" -"lose - force user to stop following you\n" -"fav - add user's last notice as a 'fave'\n" -"fav # - add notice with the given id as a 'fave'\n" -"repeat # - repeat a notice with a given id\n" -"repeat - repeat the last notice from user\n" -"reply # - reply to notice with a given id\n" -"reply - reply to the last notice from user\n" -"join - join group\n" -"login - Get a link to login to the web interface\n" -"drop - leave group\n" -"stats - get your stats\n" -"stop - same as 'off'\n" -"quit - same as 'off'\n" -"sub - same as 'follow'\n" -"unsub - same as 'leave'\n" -"last - same as 'get'\n" -"on - not yet implemented.\n" -"off - not yet implemented.\n" -"nudge - remind a user to update.\n" -"invite - not yet implemented.\n" -"track - not yet implemented.\n" -"untrack - not yet implemented.\n" -"track off - not yet implemented.\n" -"untrack all - not yet implemented.\n" -"tracks - not yet implemented.\n" -"tracking - not yet implemented.\n" +#. TRANS: Header line of help text for commands. +#, fuzzy +msgctxt "COMMANDHELP" +msgid "Commands:" +msgstr "Результати команди" + +#. TRANS: Help message for IM/SMS command "on" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn on notifications" +msgstr "Не можна увімкнути сповіщення." + +#. TRANS: Help message for IM/SMS command "off" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn off notifications" +msgstr "Не можна вимкнути сповіщення." + +#. TRANS: Help message for IM/SMS command "help" +msgctxt "COMMANDHELP" +msgid "show this help" +msgstr "" + +#. TRANS: Help message for IM/SMS command "follow " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "subscribe to user" +msgstr "Підписатись до цього користувача" + +#. TRANS: Help message for IM/SMS command "groups" +msgctxt "COMMANDHELP" +msgid "lists the groups you have joined" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscriptions" +msgctxt "COMMANDHELP" +msgid "list the people you follow" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscribers" +msgctxt "COMMANDHELP" +msgid "list the people that follow you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "leave " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "unsubscribe from user" +msgstr "Відписатись від цього користувача" + +#. TRANS: Help message for IM/SMS command "d " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "direct message to user" +msgstr "Пряме повідомлення до %s" + +#. TRANS: Help message for IM/SMS command "get " +msgctxt "COMMANDHELP" +msgid "get last notice from user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "whois " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "get profile info on user" +msgstr "Віддалений профіль не є спільнотою!" + +#. TRANS: Help message for IM/SMS command "lose " +msgctxt "COMMANDHELP" +msgid "force user to stop following you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav " +msgctxt "COMMANDHELP" +msgid "add user's last notice as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav #" +msgctxt "COMMANDHELP" +msgid "add notice with the given id as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat #" +msgctxt "COMMANDHELP" +msgid "repeat a notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "repeat the last notice from user" +msgstr "Повторити цей допис" + +#. TRANS: Help message for IM/SMS command "reply #" +msgctxt "COMMANDHELP" +msgid "reply to notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "reply " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "reply to the last notice from user" +msgstr "Відповісти на цей допис" + +#. TRANS: Help message for IM/SMS command "join " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "join group" +msgstr "Невідома спільнота." + +#. TRANS: Help message for IM/SMS command "login" +msgctxt "COMMANDHELP" +msgid "Get a link to login to the web interface" +msgstr "" + +#. TRANS: Help message for IM/SMS command "drop " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "leave group" +msgstr "Видалити спільноту" + +#. TRANS: Help message for IM/SMS command "stats" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "get your stats" +msgstr "Оновити свій статус..." + +#. TRANS: Help message for IM/SMS command "stop" +#. TRANS: Help message for IM/SMS command "quit" +msgctxt "COMMANDHELP" +msgid "same as 'off'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "sub " +msgctxt "COMMANDHELP" +msgid "same as 'follow'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "unsub " +msgctxt "COMMANDHELP" +msgid "same as 'leave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "last " +msgctxt "COMMANDHELP" +msgid "same as 'get'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "on " +#. TRANS: Help message for IM/SMS command "off " +#. TRANS: Help message for IM/SMS command "invite " +#. TRANS: Help message for IM/SMS command "track " +#. TRANS: Help message for IM/SMS command "untrack " +#. TRANS: Help message for IM/SMS command "track off" +#. TRANS: Help message for IM/SMS command "untrack all" +#. TRANS: Help message for IM/SMS command "tracks" +#. TRANS: Help message for IM/SMS command "tracking" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "not yet implemented." +msgstr "Виконання команди ще не завершено." + +#. TRANS: Help message for IM/SMS command "nudge " +msgctxt "COMMANDHELP" +msgid "remind a user to update." msgstr "" -"Команди:\n" -"on — увімкнути сповіщення\n" -"off — вимкнути сповіщення\n" -"help — список команд\n" -"follow — підписатись до користувача\n" -"groups — спільноти, до яких ви входите\n" -"subscriptions — користувачі, до яких ви підписані\n" -"subscribers — користувачі, які підписані до вас\n" -"leave — відписатись від користувача\n" -"d — надіслати особисте повідомлення\n" -"get — отримати останній допис користувача\n" -"whois — інфо про користувача\n" -"fav — додати останній допис користувача до обраних\n" -"fav # — додати допис до обраних\n" -"reply # — відповісти на допис\n" -"reply — відповісти на останній допис користувача\n" -"join — приєднатися до спільноти\n" -"login — отримати посилання входу до веб-інтерфейсу\n" -"drop — залишити спільноту\n" -"stats — отримати статистику\n" -"stop — те саме що і 'off'\n" -"quit — те саме що і 'off'\n" -"sub — те саме що і 'follow'\n" -"unsub — те саме що і 'leave'\n" -"last — те саме що і 'get'\n" -"on — наразі не виконується\n" -"off — наразі не виконується\n" -"nudge — «розштовхати»\n" -"invite — наразі не виконується\n" -"track — наразі не виконується\n" -"untrack — наразі не виконується\n" -"track off — наразі не виконується\n" -"untrack all — наразі не виконується\n" -"tracks — наразі не виконується\n" -"tracking — наразі не виконується\n" #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. msgid "No configuration file found." @@ -6970,6 +7085,9 @@ msgid "" msgstr "" "Розташування спільноти, на кшталт «Місто, область (або регіон), країна»." +msgid "Aliases" +msgstr "Додаткові імена" + #, php-format msgid "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " @@ -7054,6 +7172,10 @@ msgctxt "TOOLTIP" msgid "Add or edit %s design" msgstr "Додати або редагувати дизайн %s" +#. TRANS: Group actions header (h2). Text hidden by default. +msgid "Group actions" +msgstr "Дії спільноти" + #. TRANS: Title for groups with the most members section. msgid "Groups with most members" msgstr "Спільноти з найбільшою кількістю учасників" @@ -7630,6 +7752,7 @@ msgstr "Надіслати допис" msgid "What's up, %s?" msgstr "Що нового, %s?" +#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "Вкласти" @@ -7698,7 +7821,7 @@ msgid "Notice repeated" msgstr "Допис повторили" msgid "Update your status..." -msgstr "" +msgstr "Оновити свій статус..." msgid "Nudge this user" msgstr "«Розштовхати» користувача" @@ -8089,52 +8212,6 @@ msgstr "Відписатись" msgid "User %1$s (%2$d) has no profile record." msgstr "Користувач %1$s (%2$d) не має профілю." -msgid "Edit Avatar" -msgstr "Аватара" - -#. TRANS: H2 for user actions in a profile. -#. TRANS: H2 for entity actions in a profile. -msgid "User actions" -msgstr "Діяльність користувача" - -#. TRANS: Text shown in user profile of not yet compeltely deleted users. -msgid "User deletion in progress..." -msgstr "Видалення користувача у процесі..." - -#. TRANS: Link title for link on user profile. -msgid "Edit profile settings" -msgstr "Налаштування профілю" - -#. TRANS: Link text for link on user profile. -msgid "Edit" -msgstr "Правка" - -#. TRANS: Link title for link on user profile. -msgid "Send a direct message to this user" -msgstr "Надіслати пряме повідомлення цьому користувачеві" - -#. TRANS: Link text for link on user profile. -msgid "Message" -msgstr "Повідомлення" - -#. TRANS: Label text on user profile to select a user role. -msgid "Moderate" -msgstr "Модерувати" - -#. TRANS: Label text on user profile to select a user role. -msgid "User role" -msgstr "Роль користувача" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Administrator" -msgstr "Адміністратор" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Moderator" -msgstr "Модератор" - msgid "Not allowed to log in." msgstr "Вхід до системи не дозволено." @@ -8212,3 +8289,85 @@ msgstr "Неправильний XML, корінь XRD відсутній." #, php-format msgid "Getting backup from file '%s'." msgstr "Отримання резервної копії файлу «%s»." + +#~ msgid "Note" +#~ msgstr "Зауваження" + +#~ msgid "" +#~ "Commands:\n" +#~ "on - turn on notifications\n" +#~ "off - turn off notifications\n" +#~ "help - show this help\n" +#~ "follow - subscribe to user\n" +#~ "groups - lists the groups you have joined\n" +#~ "subscriptions - list the people you follow\n" +#~ "subscribers - list the people that follow you\n" +#~ "leave - unsubscribe from user\n" +#~ "d - direct message to user\n" +#~ "get - get last notice from user\n" +#~ "whois - get profile info on user\n" +#~ "lose - force user to stop following you\n" +#~ "fav - add user's last notice as a 'fave'\n" +#~ "fav # - add notice with the given id as a 'fave'\n" +#~ "repeat # - repeat a notice with a given id\n" +#~ "repeat - repeat the last notice from user\n" +#~ "reply # - reply to notice with a given id\n" +#~ "reply - reply to the last notice from user\n" +#~ "join - join group\n" +#~ "login - Get a link to login to the web interface\n" +#~ "drop - leave group\n" +#~ "stats - get your stats\n" +#~ "stop - same as 'off'\n" +#~ "quit - same as 'off'\n" +#~ "sub - same as 'follow'\n" +#~ "unsub - same as 'leave'\n" +#~ "last - same as 'get'\n" +#~ "on - not yet implemented.\n" +#~ "off - not yet implemented.\n" +#~ "nudge - remind a user to update.\n" +#~ "invite - not yet implemented.\n" +#~ "track - not yet implemented.\n" +#~ "untrack - not yet implemented.\n" +#~ "track off - not yet implemented.\n" +#~ "untrack all - not yet implemented.\n" +#~ "tracks - not yet implemented.\n" +#~ "tracking - not yet implemented.\n" +#~ msgstr "" +#~ "Команди:\n" +#~ "on — увімкнути сповіщення\n" +#~ "off — вимкнути сповіщення\n" +#~ "help — список команд\n" +#~ "follow — підписатись до користувача\n" +#~ "groups — спільноти, до яких ви входите\n" +#~ "subscriptions — користувачі, до яких ви підписані\n" +#~ "subscribers — користувачі, які підписані до вас\n" +#~ "leave — відписатись від користувача\n" +#~ "d — надіслати особисте повідомлення\n" +#~ "get — отримати останній допис користувача\n" +#~ "whois — інфо про користувача\n" +#~ "fav — додати останній допис користувача до обраних\n" +#~ "fav # — додати допис до обраних\n" +#~ "reply # — відповісти на допис\n" +#~ "reply — відповісти на останній допис користувача\n" +#~ "join — приєднатися до спільноти\n" +#~ "login — отримати посилання входу до веб-інтерфейсу\n" +#~ "drop — залишити спільноту\n" +#~ "stats — отримати статистику\n" +#~ "stop — те саме що і 'off'\n" +#~ "quit — те саме що і 'off'\n" +#~ "sub — те саме що і 'follow'\n" +#~ "unsub — те саме що і 'leave'\n" +#~ "last — те саме що і 'get'\n" +#~ "on — наразі не виконується\n" +#~ "off — наразі не виконується\n" +#~ "nudge — «розштовхати»\n" +#~ "invite — наразі не виконується\n" +#~ "track — наразі не виконується\n" +#~ "untrack — наразі не виконується\n" +#~ "track off — наразі не виконується\n" +#~ "untrack all — наразі не виконується\n" +#~ "tracks — наразі не виконується\n" +#~ "tracking — наразі не виконується\n" + +#~ msgid "Edit Avatar" +#~ msgstr "Аватара" diff --git a/locale/zh_CN/LC_MESSAGES/statusnet.po b/locale/zh_CN/LC_MESSAGES/statusnet.po index 022e28922e..1b63db606d 100644 --- a/locale/zh_CN/LC_MESSAGES/statusnet.po +++ b/locale/zh_CN/LC_MESSAGES/statusnet.po @@ -15,18 +15,18 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-11 18:15+0000\n" -"PO-Revision-Date: 2011-03-11 18:17:32+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:50:02+0000\n" "Language-Team: Simplified Chinese \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: zh-hans\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-POT-Import-Date: 2011-03-08 01:25:01+0000\n" +"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -581,7 +581,7 @@ msgstr "无法把用户%1$s从%2$s小组删除" msgid "%s's groups" msgstr "%s 的小组" -#. TRANS: Used as subtitle in check for group membership. %1$s is a user name, %2$s is the site name. +#. TRANS: Used as subtitle in check for group membership. %1$s is the site name, %2$s is a user name. #, php-format msgid "%1$s groups %2$s is a member of." msgstr "%1$s 的小组,%2$s 是小组成员。" @@ -4493,18 +4493,6 @@ msgstr "%s 小组" msgid "%1$s group, page %2$d" msgstr "%1$s小组,第%2$d页" -#. TRANS: Label for group description or group note (dt). Text hidden by default. -msgid "Note" -msgstr "注释" - -#. TRANS: Label for group aliases (dt). Text hidden by default. -msgid "Aliases" -msgstr "别名" - -#. TRANS: Group actions header (h2). Text hidden by default. -msgid "Group actions" -msgstr "小组动作" - #. TRANS: Tooltip for feed link. %s is a group nickname. #, php-format msgid "Notice feed for %s group (RSS 1.0)" @@ -4614,6 +4602,10 @@ msgstr "来自 %1$s 的 %2$s 消息" msgid "Notice deleted." msgstr "消息已删除" +#, fuzzy +msgid "Notice" +msgstr "消息" + #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #, php-format msgid "%1$s tagged %2$s" @@ -5129,7 +5121,6 @@ msgstr "没有 ID 冲突。" msgid "Tag %s" msgstr "将%s加为标签" -#. TRANS: H2 for user profile information. msgid "User profile" msgstr "用户页面" @@ -5803,6 +5794,49 @@ msgstr "" msgid "No AtomPub API service for %s." msgstr "" +#. TRANS: H2 for user actions in a profile. +#. TRANS: H2 for entity actions in a profile. +msgid "User actions" +msgstr "用户动作" + +#. TRANS: Text shown in user profile of not yet compeltely deleted users. +msgid "User deletion in progress..." +msgstr "用户删除处理中……" + +#. TRANS: Link title for link on user profile. +msgid "Edit profile settings" +msgstr "编辑个人信息设置" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "编辑" + +#. TRANS: Link title for link on user profile. +msgid "Send a direct message to this user" +msgstr "给该用户发送私信" + +#. TRANS: Link text for link on user profile. +msgid "Message" +msgstr "私信" + +#. TRANS: Label text on user profile to select a user role. +msgid "Moderate" +msgstr "审核" + +#. TRANS: Label text on user profile to select a user role. +msgid "User role" +msgstr "用户权限" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Administrator" +msgstr "管理员" + +#. TRANS: Role that can be set for a user profile. +msgctxt "role" +msgid "Moderator" +msgstr "审核员" + #. TRANS: Page title. %1$s is the title, %2$s is the site name. #, php-format msgid "%1$s - %2$s" @@ -6501,85 +6535,171 @@ msgid "You are a member of this group:" msgid_plural "You are a member of these groups:" msgstr[0] "你是该小组成员:" -#. TRANS: Help text for commands. Do not translate the command names themselves; they are fixed strings. -msgid "" -"Commands:\n" -"on - turn on notifications\n" -"off - turn off notifications\n" -"help - show this help\n" -"follow - subscribe to user\n" -"groups - lists the groups you have joined\n" -"subscriptions - list the people you follow\n" -"subscribers - list the people that follow you\n" -"leave - unsubscribe from user\n" -"d - direct message to user\n" -"get - get last notice from user\n" -"whois - get profile info on user\n" -"lose - force user to stop following you\n" -"fav - add user's last notice as a 'fave'\n" -"fav # - add notice with the given id as a 'fave'\n" -"repeat # - repeat a notice with a given id\n" -"repeat - repeat the last notice from user\n" -"reply # - reply to notice with a given id\n" -"reply - reply to the last notice from user\n" -"join - join group\n" -"login - Get a link to login to the web interface\n" -"drop - leave group\n" -"stats - get your stats\n" -"stop - same as 'off'\n" -"quit - same as 'off'\n" -"sub - same as 'follow'\n" -"unsub - same as 'leave'\n" -"last - same as 'get'\n" -"on - not yet implemented.\n" -"off - not yet implemented.\n" -"nudge - remind a user to update.\n" -"invite - not yet implemented.\n" -"track - not yet implemented.\n" -"untrack - not yet implemented.\n" -"track off - not yet implemented.\n" -"untrack all - not yet implemented.\n" -"tracks - not yet implemented.\n" -"tracking - not yet implemented.\n" +#. TRANS: Header line of help text for commands. +#, fuzzy +msgctxt "COMMANDHELP" +msgid "Commands:" +msgstr "执行结果" + +#. TRANS: Help message for IM/SMS command "on" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn on notifications" +msgstr "无法开启通知。" + +#. TRANS: Help message for IM/SMS command "off" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "turn off notifications" +msgstr "无法关闭通知。" + +#. TRANS: Help message for IM/SMS command "help" +msgctxt "COMMANDHELP" +msgid "show this help" +msgstr "" + +#. TRANS: Help message for IM/SMS command "follow " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "subscribe to user" +msgstr "关注这个用户" + +#. TRANS: Help message for IM/SMS command "groups" +msgctxt "COMMANDHELP" +msgid "lists the groups you have joined" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscriptions" +msgctxt "COMMANDHELP" +msgid "list the people you follow" +msgstr "" + +#. TRANS: Help message for IM/SMS command "subscribers" +msgctxt "COMMANDHELP" +msgid "list the people that follow you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "leave " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "unsubscribe from user" +msgstr "取消关注这个用户" + +#. TRANS: Help message for IM/SMS command "d " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "direct message to user" +msgstr "发给%s的私信" + +#. TRANS: Help message for IM/SMS command "get " +msgctxt "COMMANDHELP" +msgid "get last notice from user" +msgstr "" + +#. TRANS: Help message for IM/SMS command "whois " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "get profile info on user" +msgstr "远程配置文件不是一个组 !" + +#. TRANS: Help message for IM/SMS command "lose " +msgctxt "COMMANDHELP" +msgid "force user to stop following you" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav " +msgctxt "COMMANDHELP" +msgid "add user's last notice as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "fav #" +msgctxt "COMMANDHELP" +msgid "add notice with the given id as a 'fave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat #" +msgctxt "COMMANDHELP" +msgid "repeat a notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "repeat " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "repeat the last notice from user" +msgstr "转发" + +#. TRANS: Help message for IM/SMS command "reply #" +msgctxt "COMMANDHELP" +msgid "reply to notice with a given id" +msgstr "" + +#. TRANS: Help message for IM/SMS command "reply " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "reply to the last notice from user" +msgstr "回复" + +#. TRANS: Help message for IM/SMS command "join " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "join group" +msgstr "未知的组。" + +#. TRANS: Help message for IM/SMS command "login" +msgctxt "COMMANDHELP" +msgid "Get a link to login to the web interface" +msgstr "" + +#. TRANS: Help message for IM/SMS command "drop " +#, fuzzy +msgctxt "COMMANDHELP" +msgid "leave group" +msgstr "删除小组" + +#. TRANS: Help message for IM/SMS command "stats" +msgctxt "COMMANDHELP" +msgid "get your stats" +msgstr "" + +#. TRANS: Help message for IM/SMS command "stop" +#. TRANS: Help message for IM/SMS command "quit" +msgctxt "COMMANDHELP" +msgid "same as 'off'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "sub " +msgctxt "COMMANDHELP" +msgid "same as 'follow'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "unsub " +msgctxt "COMMANDHELP" +msgid "same as 'leave'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "last " +msgctxt "COMMANDHELP" +msgid "same as 'get'" +msgstr "" + +#. TRANS: Help message for IM/SMS command "on " +#. TRANS: Help message for IM/SMS command "off " +#. TRANS: Help message for IM/SMS command "invite " +#. TRANS: Help message for IM/SMS command "track " +#. TRANS: Help message for IM/SMS command "untrack " +#. TRANS: Help message for IM/SMS command "track off" +#. TRANS: Help message for IM/SMS command "untrack all" +#. TRANS: Help message for IM/SMS command "tracks" +#. TRANS: Help message for IM/SMS command "tracking" +#, fuzzy +msgctxt "COMMANDHELP" +msgid "not yet implemented." +msgstr "命令尚未实现。" + +#. TRANS: Help message for IM/SMS command "nudge " +msgctxt "COMMANDHELP" +msgid "remind a user to update." msgstr "" -"命令:\n" -"on - 打开提醒\n" -"off - 关闭提醒\n" -"help - 显示此帮助\n" -"follow <昵称> - 关注该用户\n" -"groups - 列出你加入的小组\n" -"subscriptions - 列出你关注的用户\n" -"subscribers - 列出你的关注者\n" -"leave <昵称> - 取消关注该用户\n" -"d <昵称> <文字> - 给该用户发送私信\n" -"get <昵称> - 获取该用户的最后一条消息\n" -"whois <昵称> - 获取该用户的个人信息\n" -"lose <昵称> - 强行取消该用户对你的关注\n" -"fav <昵称> - 将该用户最后一条消息加为'收藏'\n" -"fav #<消息id> - 将该id的消息加为'收藏'\n" -"repeat #<消息id> - 转发该id的消息\n" -"repeat <昵称> - 转发该用户的最后一条消息\n" -"reply #<消息id> - 对该id消息回复\n" -"reply <昵称> - 对该用户的最后一条消息回复\n" -"join <小组> - 加入小组\n" -"login - 获取网页登录的地址\n" -"drop <小组> - 离开小组\n" -"stats - 获取你的统计\n" -"stop - 和'off'相同\n" -"quit - 和'off'相同\n" -"sub <昵称> - 和'follow'相同\n" -"unsub <昵称> - 和'leave'相同\n" -"last <昵称> - 和'get'相同\n" -"on <昵称> - 尚未实现。\n" -"off <昵称> - 尚未实现。\n" -"nudge <昵称> - 提醒该用户更新消息。\n" -"invite <电话号码> - 尚未实现。\n" -"track - 尚未实现。\n" -"untrack - 尚未实现。\n" -"track off - 尚未实现。\n" -"untrack all - 尚未实现。\n" -"tracks - 尚未实现。\n" -"tracking - 尚未实现。\n" #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. msgid "No configuration file found." @@ -6750,6 +6870,9 @@ msgid "" "Location for the group, if any, like \"City, State (or Region), Country\"." msgstr "小组的地理位置,例如“国家、省份、城市”。" +msgid "Aliases" +msgstr "别名" + #, php-format msgid "" "Extra nicknames for the group, separated with commas or spaces. Maximum %d " @@ -6826,6 +6949,10 @@ msgctxt "TOOLTIP" msgid "Add or edit %s design" msgstr "添加或编辑 %s 外观" +#. TRANS: Group actions header (h2). Text hidden by default. +msgid "Group actions" +msgstr "小组动作" + #. TRANS: Title for groups with the most members section. msgid "Groups with most members" msgstr "人气最旺的小组" @@ -7381,6 +7508,7 @@ msgstr "发送一个通知" msgid "What's up, %s?" msgstr "%s,最近怎么样?" +#. TRANS: Input label in notice form for adding an attachment. msgid "Attach" msgstr "附件" @@ -7829,52 +7957,6 @@ msgstr "取消关注" msgid "User %1$s (%2$d) has no profile record." msgstr "用户 %1$s (%2$d) 没有个人信息记录。" -msgid "Edit Avatar" -msgstr "编辑头像" - -#. TRANS: H2 for user actions in a profile. -#. TRANS: H2 for entity actions in a profile. -msgid "User actions" -msgstr "用户动作" - -#. TRANS: Text shown in user profile of not yet compeltely deleted users. -msgid "User deletion in progress..." -msgstr "用户删除处理中……" - -#. TRANS: Link title for link on user profile. -msgid "Edit profile settings" -msgstr "编辑个人信息设置" - -#. TRANS: Link text for link on user profile. -msgid "Edit" -msgstr "编辑" - -#. TRANS: Link title for link on user profile. -msgid "Send a direct message to this user" -msgstr "给该用户发送私信" - -#. TRANS: Link text for link on user profile. -msgid "Message" -msgstr "私信" - -#. TRANS: Label text on user profile to select a user role. -msgid "Moderate" -msgstr "审核" - -#. TRANS: Label text on user profile to select a user role. -msgid "User role" -msgstr "用户权限" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Administrator" -msgstr "管理员" - -#. TRANS: Role that can be set for a user profile. -msgctxt "role" -msgid "Moderator" -msgstr "审核员" - msgid "Not allowed to log in." msgstr "不允许登录。" @@ -7944,3 +8026,88 @@ msgstr "不合法的XML, 缺少XRD根" #, php-format msgid "Getting backup from file '%s'." msgstr "从文件'%s'获取备份。" + +#~ msgid "Note" +#~ msgstr "注释" + +#~ msgid "" +#~ "Commands:\n" +#~ "on - turn on notifications\n" +#~ "off - turn off notifications\n" +#~ "help - show this help\n" +#~ "follow - subscribe to user\n" +#~ "groups - lists the groups you have joined\n" +#~ "subscriptions - list the people you follow\n" +#~ "subscribers - list the people that follow you\n" +#~ "leave - unsubscribe from user\n" +#~ "d - direct message to user\n" +#~ "get - get last notice from user\n" +#~ "whois - get profile info on user\n" +#~ "lose - force user to stop following you\n" +#~ "fav - add user's last notice as a 'fave'\n" +#~ "fav # - add notice with the given id as a 'fave'\n" +#~ "repeat # - repeat a notice with a given id\n" +#~ "repeat - repeat the last notice from user\n" +#~ "reply # - reply to notice with a given id\n" +#~ "reply - reply to the last notice from user\n" +#~ "join - join group\n" +#~ "login - Get a link to login to the web interface\n" +#~ "drop - leave group\n" +#~ "stats - get your stats\n" +#~ "stop - same as 'off'\n" +#~ "quit - same as 'off'\n" +#~ "sub - same as 'follow'\n" +#~ "unsub - same as 'leave'\n" +#~ "last - same as 'get'\n" +#~ "on - not yet implemented.\n" +#~ "off - not yet implemented.\n" +#~ "nudge - remind a user to update.\n" +#~ "invite - not yet implemented.\n" +#~ "track - not yet implemented.\n" +#~ "untrack - not yet implemented.\n" +#~ "track off - not yet implemented.\n" +#~ "untrack all - not yet implemented.\n" +#~ "tracks - not yet implemented.\n" +#~ "tracking - not yet implemented.\n" +#~ msgstr "" +#~ "命令:\n" +#~ "on - 打开提醒\n" +#~ "off - 关闭提醒\n" +#~ "help - 显示此帮助\n" +#~ "follow <昵称> - 关注该用户\n" +#~ "groups - 列出你加入的小组\n" +#~ "subscriptions - 列出你关注的用户\n" +#~ "subscribers - 列出你的关注者\n" +#~ "leave <昵称> - 取消关注该用户\n" +#~ "d <昵称> <文字> - 给该用户发送私信\n" +#~ "get <昵称> - 获取该用户的最后一条消息\n" +#~ "whois <昵称> - 获取该用户的个人信息\n" +#~ "lose <昵称> - 强行取消该用户对你的关注\n" +#~ "fav <昵称> - 将该用户最后一条消息加为'收藏'\n" +#~ "fav #<消息id> - 将该id的消息加为'收藏'\n" +#~ "repeat #<消息id> - 转发该id的消息\n" +#~ "repeat <昵称> - 转发该用户的最后一条消息\n" +#~ "reply #<消息id> - 对该id消息回复\n" +#~ "reply <昵称> - 对该用户的最后一条消息回复\n" +#~ "join <小组> - 加入小组\n" +#~ "login - 获取网页登录的地址\n" +#~ "drop <小组> - 离开小组\n" +#~ "stats - 获取你的统计\n" +#~ "stop - 和'off'相同\n" +#~ "quit - 和'off'相同\n" +#~ "sub <昵称> - 和'follow'相同\n" +#~ "unsub <昵称> - 和'leave'相同\n" +#~ "last <昵称> - 和'get'相同\n" +#~ "on <昵称> - 尚未实现。\n" +#~ "off <昵称> - 尚未实现。\n" +#~ "nudge <昵称> - 提醒该用户更新消息。\n" +#~ "invite <电话号码> - 尚未实现。\n" +#~ "track - 尚未实现。\n" +#~ "untrack - 尚未实现。\n" +#~ "track off - 尚未实现。\n" +#~ "untrack all - 尚未实现。\n" +#~ "tracks - 尚未实现。\n" +#~ "tracking - 尚未实现。\n" + +#~ msgid "Edit Avatar" +#~ msgstr "编辑头像" diff --git a/plugins/Directory/locale/ia/LC_MESSAGES/Directory.po b/plugins/Directory/locale/ia/LC_MESSAGES/Directory.po new file mode 100644 index 0000000000..e1e04c8ca8 --- /dev/null +++ b/plugins/Directory/locale/ia/LC_MESSAGES/Directory.po @@ -0,0 +1,54 @@ +# Translation of StatusNet - Directory to Interlingua (Interlingua) +# Exported from translatewiki.net +# +# Author: McDutchie +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - Directory\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:50:27+0000\n" +"Language-Team: Interlingua \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2011-03-11 18:57:51+0000\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: ia\n" +"X-Message-Group: #out-statusnet-plugin-directory\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, php-format +msgid "User Directory, page %d" +msgstr "Catalogo de usatores, pagina %d" + +msgid "User directory" +msgstr "Catalogo de usatores" + +#, php-format +msgid "User directory - %s" +msgstr "Catalogo de usatores - %s" + +#, php-format +msgid "User directory - %s, page %d" +msgstr "Catalogo de usatores - %s, pagina %d" + +msgctxt "BUTTON" +msgid "Search" +msgstr "Cercar" + +#, php-format +msgid "No users starting with %s" +msgstr "Il non ha usatores de qui le nomine comencia con \"%s\"" + +msgid "Add a user directory." +msgstr "Adder un catalogo de usatores." + +msgid "Nickname" +msgstr "Pseudonymo" + +msgid "Created" +msgstr "Create le" diff --git a/plugins/Directory/locale/mk/LC_MESSAGES/Directory.po b/plugins/Directory/locale/mk/LC_MESSAGES/Directory.po new file mode 100644 index 0000000000..727c85c1ec --- /dev/null +++ b/plugins/Directory/locale/mk/LC_MESSAGES/Directory.po @@ -0,0 +1,54 @@ +# Translation of StatusNet - Directory to Macedonian (Македонски) +# Exported from translatewiki.net +# +# Author: Bjankuloski06 +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - Directory\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:50:27+0000\n" +"Language-Team: Macedonian \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2011-03-11 18:57:51+0000\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: mk\n" +"X-Message-Group: #out-statusnet-plugin-directory\n" +"Plural-Forms: nplurals=2; plural=(n == 1 || n%10 == 1) ? 0 : 1;\n" + +#, php-format +msgid "User Directory, page %d" +msgstr "Кориснички именик, стр. %d" + +msgid "User directory" +msgstr "Кориснички именик" + +#, php-format +msgid "User directory - %s" +msgstr "Кориснички именик - %s" + +#, php-format +msgid "User directory - %s, page %d" +msgstr "Кориснички именик - %s, стр. %d" + +msgctxt "BUTTON" +msgid "Search" +msgstr "Пребарај" + +#, php-format +msgid "No users starting with %s" +msgstr "Нема корисници што почнуваат на %s" + +msgid "Add a user directory." +msgstr "Додај кориснички именик." + +msgid "Nickname" +msgstr "Прекар" + +msgid "Created" +msgstr "Создадено" diff --git a/plugins/Directory/locale/nl/LC_MESSAGES/Directory.po b/plugins/Directory/locale/nl/LC_MESSAGES/Directory.po new file mode 100644 index 0000000000..62c9b48418 --- /dev/null +++ b/plugins/Directory/locale/nl/LC_MESSAGES/Directory.po @@ -0,0 +1,55 @@ +# Translation of StatusNet - Directory to Dutch (Nederlands) +# Exported from translatewiki.net +# +# Author: McDutchie +# Author: Siebrand +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - Directory\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:50:27+0000\n" +"Language-Team: Dutch \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2011-03-11 18:57:51+0000\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: nl\n" +"X-Message-Group: #out-statusnet-plugin-directory\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, php-format +msgid "User Directory, page %d" +msgstr "Gebruikerslijst, pagina %d" + +msgid "User directory" +msgstr "Gebruikerslijst" + +#, php-format +msgid "User directory - %s" +msgstr "Gebruikerslijst - %s" + +#, php-format +msgid "User directory - %s, page %d" +msgstr "Gebruikerslijst - %s, pagina %d" + +msgctxt "BUTTON" +msgid "Search" +msgstr "Zoeken" + +#, php-format +msgid "No users starting with %s" +msgstr "Er zijn geen gebruikers wiens naam begint met \"%s\"" + +msgid "Add a user directory." +msgstr "Een gebruikerslijst toevoegen." + +msgid "Nickname" +msgstr "Gebruikersnaam" + +msgid "Created" +msgstr "Aangemaakt" diff --git a/plugins/Directory/locale/uk/LC_MESSAGES/Directory.po b/plugins/Directory/locale/uk/LC_MESSAGES/Directory.po new file mode 100644 index 0000000000..fe4bd127f7 --- /dev/null +++ b/plugins/Directory/locale/uk/LC_MESSAGES/Directory.po @@ -0,0 +1,55 @@ +# Translation of StatusNet - Directory to Ukrainian (Українська) +# Exported from translatewiki.net +# +# Author: Boogie +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - Directory\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:50:27+0000\n" +"Language-Team: Ukrainian \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2011-03-11 18:57:51+0000\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: uk\n" +"X-Message-Group: #out-statusnet-plugin-directory\n" +"Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= " +"2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n" + +#, php-format +msgid "User Directory, page %d" +msgstr "Каталог користувача, сторінка %d" + +msgid "User directory" +msgstr "Каталог користувача" + +#, php-format +msgid "User directory - %s" +msgstr "Каталог користувача — %s" + +#, php-format +msgid "User directory - %s, page %d" +msgstr "Каталог користувача — %s, сторінка %d" + +msgctxt "BUTTON" +msgid "Search" +msgstr "Пошук" + +#, php-format +msgid "No users starting with %s" +msgstr "Немає користувачів, починаючи з %s" + +msgid "Add a user directory." +msgstr "Додати каталог користувача." + +msgid "Nickname" +msgstr "Псевдонім" + +msgid "Created" +msgstr "Створено" diff --git a/plugins/Event/locale/Event.pot b/plugins/Event/locale/Event.pot index 5bc2222982..f20adc453e 100644 --- a/plugins/Event/locale/Event.pot +++ b/plugins/Event/locale/Event.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -21,17 +21,17 @@ msgctxt "BUTTON" msgid "Cancel" msgstr "" -#: rsvpform.php:116 +#: rsvpform.php:117 msgctxt "BUTTON" msgid "Yes" msgstr "" -#: rsvpform.php:117 +#: rsvpform.php:118 msgctxt "BUTTON" msgid "No" msgstr "" -#: rsvpform.php:118 +#: rsvpform.php:119 msgctxt "BUTTON" msgid "Maybe" msgstr "" diff --git a/plugins/Event/locale/ia/LC_MESSAGES/Event.po b/plugins/Event/locale/ia/LC_MESSAGES/Event.po new file mode 100644 index 0000000000..375f447dae --- /dev/null +++ b/plugins/Event/locale/ia/LC_MESSAGES/Event.po @@ -0,0 +1,48 @@ +# Translation of StatusNet - Event to Interlingua (Interlingua) +# Exported from translatewiki.net +# +# Author: McDutchie +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - Event\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:50:35+0000\n" +"Language-Team: Interlingua \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2011-03-11 18:57:56+0000\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: ia\n" +"X-Message-Group: #out-statusnet-plugin-event\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgctxt "BUTTON" +msgid "Cancel" +msgstr "Cancellar" + +msgctxt "BUTTON" +msgid "Yes" +msgstr "Si" + +msgctxt "BUTTON" +msgid "No" +msgstr "No" + +msgctxt "BUTTON" +msgid "Maybe" +msgstr "Forsan" + +msgctxt "BUTTON" +msgid "Save" +msgstr "Salveguardar" + +msgid "Event invitations and RSVPs." +msgstr "Invitationes a eventos e responsas a illos." + +msgid "Event" +msgstr "Evento" diff --git a/plugins/Event/locale/mk/LC_MESSAGES/Event.po b/plugins/Event/locale/mk/LC_MESSAGES/Event.po new file mode 100644 index 0000000000..e00dab09fc --- /dev/null +++ b/plugins/Event/locale/mk/LC_MESSAGES/Event.po @@ -0,0 +1,48 @@ +# Translation of StatusNet - Event to Macedonian (Македонски) +# Exported from translatewiki.net +# +# Author: Bjankuloski06 +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - Event\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:50:35+0000\n" +"Language-Team: Macedonian \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2011-03-11 18:57:56+0000\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: mk\n" +"X-Message-Group: #out-statusnet-plugin-event\n" +"Plural-Forms: nplurals=2; plural=(n == 1 || n%10 == 1) ? 0 : 1;\n" + +msgctxt "BUTTON" +msgid "Cancel" +msgstr "Откажи" + +msgctxt "BUTTON" +msgid "Yes" +msgstr "Да" + +msgctxt "BUTTON" +msgid "No" +msgstr "Не" + +msgctxt "BUTTON" +msgid "Maybe" +msgstr "Можеби" + +msgctxt "BUTTON" +msgid "Save" +msgstr "Зачувај" + +msgid "Event invitations and RSVPs." +msgstr "Покани и одговори за настани" + +msgid "Event" +msgstr "Настан" diff --git a/plugins/Event/locale/nl/LC_MESSAGES/Event.po b/plugins/Event/locale/nl/LC_MESSAGES/Event.po new file mode 100644 index 0000000000..6eb1afdf3d --- /dev/null +++ b/plugins/Event/locale/nl/LC_MESSAGES/Event.po @@ -0,0 +1,48 @@ +# Translation of StatusNet - Event to Dutch (Nederlands) +# Exported from translatewiki.net +# +# Author: Siebrand +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - Event\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:50:35+0000\n" +"Language-Team: Dutch \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2011-03-11 18:57:56+0000\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: nl\n" +"X-Message-Group: #out-statusnet-plugin-event\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgctxt "BUTTON" +msgid "Cancel" +msgstr "Annuleren" + +msgctxt "BUTTON" +msgid "Yes" +msgstr "Ja" + +msgctxt "BUTTON" +msgid "No" +msgstr "Nee" + +msgctxt "BUTTON" +msgid "Maybe" +msgstr "Misschien" + +msgctxt "BUTTON" +msgid "Save" +msgstr "Opslaan" + +msgid "Event invitations and RSVPs." +msgstr "Uitnodigingen en RVSP's." + +msgid "Event" +msgstr "Gebeurtenis" diff --git a/plugins/Event/locale/te/LC_MESSAGES/Event.po b/plugins/Event/locale/te/LC_MESSAGES/Event.po new file mode 100644 index 0000000000..c5d6d3c0ce --- /dev/null +++ b/plugins/Event/locale/te/LC_MESSAGES/Event.po @@ -0,0 +1,48 @@ +# Translation of StatusNet - Event to Telugu (తెలుగు) +# Exported from translatewiki.net +# +# Author: Veeven +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - Event\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:50:35+0000\n" +"Language-Team: Telugu \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2011-03-11 18:57:56+0000\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: te\n" +"X-Message-Group: #out-statusnet-plugin-event\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgctxt "BUTTON" +msgid "Cancel" +msgstr "రద్దుచేయి" + +msgctxt "BUTTON" +msgid "Yes" +msgstr "అవును" + +msgctxt "BUTTON" +msgid "No" +msgstr "కాదు" + +msgctxt "BUTTON" +msgid "Maybe" +msgstr "కావొచ్చు" + +msgctxt "BUTTON" +msgid "Save" +msgstr "భద్రపరచు" + +msgid "Event invitations and RSVPs." +msgstr "" + +msgid "Event" +msgstr "" diff --git a/plugins/Event/locale/uk/LC_MESSAGES/Event.po b/plugins/Event/locale/uk/LC_MESSAGES/Event.po new file mode 100644 index 0000000000..865f4fc01d --- /dev/null +++ b/plugins/Event/locale/uk/LC_MESSAGES/Event.po @@ -0,0 +1,49 @@ +# Translation of StatusNet - Event to Ukrainian (Українська) +# Exported from translatewiki.net +# +# Author: Boogie +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - Event\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:50:35+0000\n" +"Language-Team: Ukrainian \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2011-03-11 18:57:56+0000\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: uk\n" +"X-Message-Group: #out-statusnet-plugin-event\n" +"Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= " +"2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n" + +msgctxt "BUTTON" +msgid "Cancel" +msgstr "Відміна" + +msgctxt "BUTTON" +msgid "Yes" +msgstr "Так" + +msgctxt "BUTTON" +msgid "No" +msgstr "Ні" + +msgctxt "BUTTON" +msgid "Maybe" +msgstr "Можливо" + +msgctxt "BUTTON" +msgid "Save" +msgstr "Зберегти" + +msgid "Event invitations and RSVPs." +msgstr "Запрошення на заходи та RSVP (підтвердження прийняття запрошення)." + +msgid "Event" +msgstr "Подія" diff --git a/plugins/ExtendedProfile/locale/ExtendedProfile.pot b/plugins/ExtendedProfile/locale/ExtendedProfile.pot index 89a6880e24..76634319a5 100644 --- a/plugins/ExtendedProfile/locale/ExtendedProfile.pot +++ b/plugins/ExtendedProfile/locale/ExtendedProfile.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-06 02:34+0100\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,101 +16,163 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: ExtendedProfilePlugin.php:40 -msgid "UI extensions for additional profile fields." +#: actions/profiledetailsettings.php:29 +msgid "Extended profile settings" msgstr "" -#. TRANS: Link description in user account settings menu. -#: ExtendedProfilePlugin.php:108 -msgid "Details" +#: actions/profiledetailsettings.php:63 +msgid "There was a problem with your session token. Try again, please." msgstr "" -#: ExtendedProfilePlugin.php:116 -msgid "More details..." +#. TRANS: Message given submitting a form with an unknown action +#: actions/profiledetailsettings.php:74 +msgid "Unexpected form submission." msgstr "" -#: extendedprofile.php:49 extendedprofile.php:103 -msgid "Personal" +#: actions/profiledetailsettings.php:145 +#, php-format +msgid "You must supply a date for \"%s\"." msgstr "" -#: extendedprofile.php:52 -msgid "Full name" +#: actions/profiledetailsettings.php:155 +#, php-format +msgid "Invalid date entered for \"%s\": %s" msgstr "" -#: extendedprofile.php:57 -msgid "Title" +#: actions/profiledetailsettings.php:269 +#, php-format +msgid "Invalid URL: %s" msgstr "" -#: extendedprofile.php:61 -msgid "Manager" +#: actions/profiledetailsettings.php:517 actions/profiledetailsettings.php:529 +msgid "Could not save profile details." msgstr "" -#: extendedprofile.php:66 -msgid "Location" -msgstr "" - -#: extendedprofile.php:70 -msgid "Bio" -msgstr "" - -#: extendedprofile.php:75 -msgid "Tags" -msgstr "" - -#: extendedprofile.php:82 -msgid "Contact" -msgstr "" - -#: extendedprofile.php:85 -msgid "Phone" -msgstr "" - -#: extendedprofile.php:91 -msgid "IM" -msgstr "" - -#: extendedprofile.php:96 -msgid "Websites" -msgstr "" - -#: extendedprofile.php:106 -msgid "Birthday" -msgstr "" - -#: extendedprofile.php:111 -msgid "Spouse's name" -msgstr "" - -#: extendedprofile.php:115 -msgid "Kids' names" -msgstr "" - -#: extendedprofile.php:120 -msgid "Work experience" -msgstr "" - -#: extendedprofile.php:124 -msgid "Employer" -msgstr "" - -#: extendedprofile.php:129 -msgid "Education" -msgstr "" - -#: extendedprofile.php:133 -msgid "Institution" +#. TRANS: Validation error in form for profile settings. +#. TRANS: %s is an invalid tag. +#: actions/profiledetailsettings.php:574 +#, php-format +msgid "Invalid tag: \"%s\"." msgstr "" #. TRANS: Link title for link on user profile. -#: profiledetailaction.php:61 +#: actions/profiledetail.php:52 msgid "Edit extended profile settings" msgstr "" #. TRANS: Link text for link on user profile. -#: profiledetailaction.php:63 +#: actions/profiledetail.php:54 msgid "Edit" msgstr "" -#: profiledetailsettingsaction.php:29 -msgid "Extended profile settings" +#: ExtendedProfilePlugin.php:41 +msgid "UI extensions for additional profile fields." +msgstr "" + +#: ExtendedProfilePlugin.php:123 +msgid "More details..." +msgstr "" + +#: lib/extendedprofilewidget.php:317 lib/extendedprofilewidget.php:359 +msgid "Company" +msgstr "" + +#: lib/extendedprofilewidget.php:322 lib/extendedprofilewidget.php:366 +#: lib/extendedprofilewidget.php:407 lib/extendedprofilewidget.php:457 +msgid "Start" +msgstr "" + +#: lib/extendedprofilewidget.php:329 lib/extendedprofilewidget.php:373 +#: lib/extendedprofilewidget.php:414 lib/extendedprofilewidget.php:464 +msgid "End" +msgstr "" + +#: lib/extendedprofilewidget.php:341 lib/extendedprofilewidget.php:387 +msgid "Current" +msgstr "" + +#: lib/extendedprofilewidget.php:399 lib/extendedprofilewidget.php:435 +#: lib/extendedprofile.php:242 lib/extendedprofile.php:254 +msgid "Institution" +msgstr "" + +#: lib/extendedprofilewidget.php:403 lib/extendedprofilewidget.php:442 +msgid "Degree" +msgstr "" + +#: lib/extendedprofilewidget.php:405 lib/extendedprofilewidget.php:449 +msgid "Description" +msgstr "" + +#: lib/extendedprofilewidget.php:618 +msgctxt "BUTTON" +msgid "Save" +msgstr "" + +#: lib/extendedprofile.php:119 lib/extendedprofile.php:129 +msgid "Phone" +msgstr "" + +#: lib/extendedprofile.php:150 lib/extendedprofile.php:156 +msgid "IM" +msgstr "" + +#: lib/extendedprofile.php:176 lib/extendedprofile.php:182 +msgid "Website" +msgstr "" + +#: lib/extendedprofile.php:205 lib/extendedprofile.php:216 +msgid "Employer" +msgstr "" + +#: lib/extendedprofile.php:278 lib/extendedprofile.php:319 +msgid "Personal" +msgstr "" + +#: lib/extendedprofile.php:281 +msgid "Full name" +msgstr "" + +#: lib/extendedprofile.php:286 +msgid "Title" +msgstr "" + +#: lib/extendedprofile.php:290 +msgid "Manager" +msgstr "" + +#: lib/extendedprofile.php:295 +msgid "Location" +msgstr "" + +#: lib/extendedprofile.php:299 +msgid "Bio" +msgstr "" + +#: lib/extendedprofile.php:304 +msgid "Tags" +msgstr "" + +#: lib/extendedprofile.php:311 +msgid "Contact" +msgstr "" + +#: lib/extendedprofile.php:322 +msgid "Birthday" +msgstr "" + +#: lib/extendedprofile.php:327 +msgid "Spouse's name" +msgstr "" + +#: lib/extendedprofile.php:331 +msgid "Kids' names" +msgstr "" + +#: lib/extendedprofile.php:336 +msgid "Work experience" +msgstr "" + +#: lib/extendedprofile.php:342 +msgid "Education" msgstr "" diff --git a/plugins/ExtendedProfile/locale/br/LC_MESSAGES/ExtendedProfile.po b/plugins/ExtendedProfile/locale/br/LC_MESSAGES/ExtendedProfile.po index 3d8743fc1f..7811b90c57 100644 --- a/plugins/ExtendedProfile/locale/br/LC_MESSAGES/ExtendedProfile.po +++ b/plugins/ExtendedProfile/locale/br/LC_MESSAGES/ExtendedProfile.po @@ -9,28 +9,101 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - ExtendedProfile\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-06 02:34+0100\n" -"PO-Revision-Date: 2011-03-06 01:37:09+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:50:37+0000\n" "Language-Team: Breton \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-03 20:42:39+0000\n" -"X-Generator: MediaWiki 1.18alpha (r83348); Translate extension (2011-03-04)\n" +"X-POT-Import-Date: 2011-03-11 18:53:18+0000\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: br\n" "X-Message-Group: #out-statusnet-plugin-extendedprofile\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" +msgid "Extended profile settings" +msgstr "Arventennoù ledanet ar profil" + +msgid "There was a problem with your session token. Try again, please." +msgstr "" + +#. TRANS: Message given submitting a form with an unknown action +msgid "Unexpected form submission." +msgstr "" + +#, php-format +msgid "You must supply a date for \"%s\"." +msgstr "" + +#, php-format +msgid "Invalid date entered for \"%s\": %s" +msgstr "" + +#, php-format +msgid "Invalid URL: %s" +msgstr "" + +msgid "Could not save profile details." +msgstr "" + +#. TRANS: Validation error in form for profile settings. +#. TRANS: %s is an invalid tag. +#, php-format +msgid "Invalid tag: \"%s\"." +msgstr "" + +#. TRANS: Link title for link on user profile. +msgid "Edit extended profile settings" +msgstr "Aozañ arventennoù ledanet ar profil" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "Aozañ" + msgid "UI extensions for additional profile fields." msgstr "" -#. TRANS: Link description in user account settings menu. -msgid "Details" -msgstr "Munudoù" - msgid "More details..." msgstr "Muoic'h a vunudoù..." +msgid "Company" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "End" +msgstr "" + +msgid "Current" +msgstr "" + +msgid "Institution" +msgstr "Ensavadur" + +msgid "Degree" +msgstr "" + +msgid "Description" +msgstr "" + +msgctxt "BUTTON" +msgid "Save" +msgstr "" + +msgid "Phone" +msgstr "Pellgomz" + +msgid "IM" +msgstr "IM" + +#, fuzzy +msgid "Website" +msgstr "Lec'hiennoù web" + +msgid "Employer" +msgstr "" + msgid "Personal" msgstr "Personel" @@ -55,15 +128,6 @@ msgstr "Balizennoù" msgid "Contact" msgstr "Darempred" -msgid "Phone" -msgstr "Pellgomz" - -msgid "IM" -msgstr "IM" - -msgid "Websites" -msgstr "Lec'hiennoù web" - msgid "Birthday" msgstr "Deiz-ha-bloaz" @@ -76,22 +140,8 @@ msgstr "Anv ar vugale" msgid "Work experience" msgstr "Skiant-prenet" -msgid "Employer" -msgstr "" - msgid "Education" msgstr "Deskadurezh" -msgid "Institution" -msgstr "Ensavadur" - -#. TRANS: Link title for link on user profile. -msgid "Edit extended profile settings" -msgstr "Aozañ arventennoù ledanet ar profil" - -#. TRANS: Link text for link on user profile. -msgid "Edit" -msgstr "Aozañ" - -msgid "Extended profile settings" -msgstr "Arventennoù ledanet ar profil" +#~ msgid "Details" +#~ msgstr "Munudoù" diff --git a/plugins/ExtendedProfile/locale/ia/LC_MESSAGES/ExtendedProfile.po b/plugins/ExtendedProfile/locale/ia/LC_MESSAGES/ExtendedProfile.po index 6c1e781b7d..3db39dee2f 100644 --- a/plugins/ExtendedProfile/locale/ia/LC_MESSAGES/ExtendedProfile.po +++ b/plugins/ExtendedProfile/locale/ia/LC_MESSAGES/ExtendedProfile.po @@ -9,28 +9,101 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - ExtendedProfile\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-06 02:34+0100\n" -"PO-Revision-Date: 2011-03-06 01:37:09+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:50:37+0000\n" "Language-Team: Interlingua \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-03 20:42:39+0000\n" -"X-Generator: MediaWiki 1.18alpha (r83348); Translate extension (2011-03-04)\n" +"X-POT-Import-Date: 2011-03-11 18:53:18+0000\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ia\n" "X-Message-Group: #out-statusnet-plugin-extendedprofile\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +msgid "Extended profile settings" +msgstr "Configuration extendite del profilo" + +msgid "There was a problem with your session token. Try again, please." +msgstr "" + +#. TRANS: Message given submitting a form with an unknown action +msgid "Unexpected form submission." +msgstr "" + +#, php-format +msgid "You must supply a date for \"%s\"." +msgstr "" + +#, php-format +msgid "Invalid date entered for \"%s\": %s" +msgstr "" + +#, php-format +msgid "Invalid URL: %s" +msgstr "" + +msgid "Could not save profile details." +msgstr "" + +#. TRANS: Validation error in form for profile settings. +#. TRANS: %s is an invalid tag. +#, php-format +msgid "Invalid tag: \"%s\"." +msgstr "" + +#. TRANS: Link title for link on user profile. +msgid "Edit extended profile settings" +msgstr "Modificar configuration extendite del profilo" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "Modificar" + msgid "UI extensions for additional profile fields." msgstr "Extensiones del IU pro additional campos de profilo." -#. TRANS: Link description in user account settings menu. -msgid "Details" -msgstr "Detalios" - msgid "More details..." msgstr "Plus detalios..." +msgid "Company" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "End" +msgstr "" + +msgid "Current" +msgstr "" + +msgid "Institution" +msgstr "Institution" + +msgid "Degree" +msgstr "" + +msgid "Description" +msgstr "" + +msgctxt "BUTTON" +msgid "Save" +msgstr "" + +msgid "Phone" +msgstr "Telephono" + +msgid "IM" +msgstr "MI" + +#, fuzzy +msgid "Website" +msgstr "Sitos web" + +msgid "Employer" +msgstr "Empleator" + msgid "Personal" msgstr "Personal" @@ -55,15 +128,6 @@ msgstr "Etiquettas" msgid "Contact" msgstr "Contacto" -msgid "Phone" -msgstr "Telephono" - -msgid "IM" -msgstr "MI" - -msgid "Websites" -msgstr "Sitos web" - msgid "Birthday" msgstr "Anniversario" @@ -76,22 +140,8 @@ msgstr "Nomines del infantes" msgid "Work experience" msgstr "Experientia professional" -msgid "Employer" -msgstr "Empleator" - msgid "Education" msgstr "Education" -msgid "Institution" -msgstr "Institution" - -#. TRANS: Link title for link on user profile. -msgid "Edit extended profile settings" -msgstr "Modificar configuration extendite del profilo" - -#. TRANS: Link text for link on user profile. -msgid "Edit" -msgstr "Modificar" - -msgid "Extended profile settings" -msgstr "Configuration extendite del profilo" +#~ msgid "Details" +#~ msgstr "Detalios" diff --git a/plugins/ExtendedProfile/locale/mk/LC_MESSAGES/ExtendedProfile.po b/plugins/ExtendedProfile/locale/mk/LC_MESSAGES/ExtendedProfile.po index 15e6fb507a..895be3757e 100644 --- a/plugins/ExtendedProfile/locale/mk/LC_MESSAGES/ExtendedProfile.po +++ b/plugins/ExtendedProfile/locale/mk/LC_MESSAGES/ExtendedProfile.po @@ -9,28 +9,101 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - ExtendedProfile\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-06 02:34+0100\n" -"PO-Revision-Date: 2011-03-06 01:37:09+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:50:37+0000\n" "Language-Team: Macedonian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-03 20:42:39+0000\n" -"X-Generator: MediaWiki 1.18alpha (r83348); Translate extension (2011-03-04)\n" +"X-POT-Import-Date: 2011-03-11 18:53:18+0000\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: mk\n" "X-Message-Group: #out-statusnet-plugin-extendedprofile\n" "Plural-Forms: nplurals=2; plural=(n == 1 || n%10 == 1) ? 0 : 1;\n" +msgid "Extended profile settings" +msgstr "Проширени профилни нагодувања" + +msgid "There was a problem with your session token. Try again, please." +msgstr "" + +#. TRANS: Message given submitting a form with an unknown action +msgid "Unexpected form submission." +msgstr "" + +#, php-format +msgid "You must supply a date for \"%s\"." +msgstr "" + +#, php-format +msgid "Invalid date entered for \"%s\": %s" +msgstr "" + +#, php-format +msgid "Invalid URL: %s" +msgstr "" + +msgid "Could not save profile details." +msgstr "" + +#. TRANS: Validation error in form for profile settings. +#. TRANS: %s is an invalid tag. +#, php-format +msgid "Invalid tag: \"%s\"." +msgstr "" + +#. TRANS: Link title for link on user profile. +msgid "Edit extended profile settings" +msgstr "Уреди проширени профилни нагодувања" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "Уреди" + msgid "UI extensions for additional profile fields." msgstr "Посреднички дадатоци за дополнителни полиња во профилот." -#. TRANS: Link description in user account settings menu. -msgid "Details" -msgstr "Подробности" - msgid "More details..." msgstr "Поподробно..." +msgid "Company" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "End" +msgstr "" + +msgid "Current" +msgstr "" + +msgid "Institution" +msgstr "Установа" + +msgid "Degree" +msgstr "" + +msgid "Description" +msgstr "" + +msgctxt "BUTTON" +msgid "Save" +msgstr "" + +msgid "Phone" +msgstr "Телефон" + +msgid "IM" +msgstr "IM" + +#, fuzzy +msgid "Website" +msgstr "Мрежни места" + +msgid "Employer" +msgstr "Работодавач" + msgid "Personal" msgstr "Лично" @@ -55,15 +128,6 @@ msgstr "Ознаки" msgid "Contact" msgstr "Контакт" -msgid "Phone" -msgstr "Телефон" - -msgid "IM" -msgstr "IM" - -msgid "Websites" -msgstr "Мрежни места" - msgid "Birthday" msgstr "Роденден" @@ -76,22 +140,8 @@ msgstr "Имиња на децата" msgid "Work experience" msgstr "Работно искуство" -msgid "Employer" -msgstr "Работодавач" - msgid "Education" msgstr "Образование" -msgid "Institution" -msgstr "Установа" - -#. TRANS: Link title for link on user profile. -msgid "Edit extended profile settings" -msgstr "Уреди проширени профилни нагодувања" - -#. TRANS: Link text for link on user profile. -msgid "Edit" -msgstr "Уреди" - -msgid "Extended profile settings" -msgstr "Проширени профилни нагодувања" +#~ msgid "Details" +#~ msgstr "Подробности" diff --git a/plugins/ExtendedProfile/locale/nl/LC_MESSAGES/ExtendedProfile.po b/plugins/ExtendedProfile/locale/nl/LC_MESSAGES/ExtendedProfile.po index 5e34c2f79f..1adbdc93ec 100644 --- a/plugins/ExtendedProfile/locale/nl/LC_MESSAGES/ExtendedProfile.po +++ b/plugins/ExtendedProfile/locale/nl/LC_MESSAGES/ExtendedProfile.po @@ -9,28 +9,101 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - ExtendedProfile\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-06 02:34+0100\n" -"PO-Revision-Date: 2011-03-06 01:37:09+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:50:37+0000\n" "Language-Team: Dutch \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-03 20:42:39+0000\n" -"X-Generator: MediaWiki 1.18alpha (r83348); Translate extension (2011-03-04)\n" +"X-POT-Import-Date: 2011-03-11 18:53:18+0000\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: nl\n" "X-Message-Group: #out-statusnet-plugin-extendedprofile\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +msgid "Extended profile settings" +msgstr "Uitgebreide profielinstellingen" + +msgid "There was a problem with your session token. Try again, please." +msgstr "" + +#. TRANS: Message given submitting a form with an unknown action +msgid "Unexpected form submission." +msgstr "" + +#, php-format +msgid "You must supply a date for \"%s\"." +msgstr "" + +#, php-format +msgid "Invalid date entered for \"%s\": %s" +msgstr "" + +#, php-format +msgid "Invalid URL: %s" +msgstr "" + +msgid "Could not save profile details." +msgstr "" + +#. TRANS: Validation error in form for profile settings. +#. TRANS: %s is an invalid tag. +#, php-format +msgid "Invalid tag: \"%s\"." +msgstr "" + +#. TRANS: Link title for link on user profile. +msgid "Edit extended profile settings" +msgstr "Uitgebreide profielinstellingen bewerken" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "Bewerken" + msgid "UI extensions for additional profile fields." msgstr "UI-uitbreidingen voor extra profielvelden." -#. TRANS: Link description in user account settings menu. -msgid "Details" -msgstr "Details" - msgid "More details..." msgstr "Meer details..." +msgid "Company" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "End" +msgstr "" + +msgid "Current" +msgstr "" + +msgid "Institution" +msgstr "Instelling" + +msgid "Degree" +msgstr "" + +msgid "Description" +msgstr "" + +msgctxt "BUTTON" +msgid "Save" +msgstr "" + +msgid "Phone" +msgstr "Telefoonnummer" + +msgid "IM" +msgstr "IM" + +#, fuzzy +msgid "Website" +msgstr "Websites" + +msgid "Employer" +msgstr "Werkgever" + msgid "Personal" msgstr "Persoonlijk" @@ -55,15 +128,6 @@ msgstr "Labels" msgid "Contact" msgstr "Contact" -msgid "Phone" -msgstr "Telefoonnummer" - -msgid "IM" -msgstr "IM" - -msgid "Websites" -msgstr "Websites" - msgid "Birthday" msgstr "Geboortedatum" @@ -76,22 +140,8 @@ msgstr "Namen van kinderen" msgid "Work experience" msgstr "Werkervaring" -msgid "Employer" -msgstr "Werkgever" - msgid "Education" msgstr "Opleiding" -msgid "Institution" -msgstr "Instelling" - -#. TRANS: Link title for link on user profile. -msgid "Edit extended profile settings" -msgstr "Uitgebreide profielinstellingen bewerken" - -#. TRANS: Link text for link on user profile. -msgid "Edit" -msgstr "Bewerken" - -msgid "Extended profile settings" -msgstr "Uitgebreide profielinstellingen" +#~ msgid "Details" +#~ msgstr "Details" diff --git a/plugins/ExtendedProfile/locale/sv/LC_MESSAGES/ExtendedProfile.po b/plugins/ExtendedProfile/locale/sv/LC_MESSAGES/ExtendedProfile.po index 98224ba955..f935d8de42 100644 --- a/plugins/ExtendedProfile/locale/sv/LC_MESSAGES/ExtendedProfile.po +++ b/plugins/ExtendedProfile/locale/sv/LC_MESSAGES/ExtendedProfile.po @@ -9,28 +9,101 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - ExtendedProfile\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-11 18:15+0000\n" -"PO-Revision-Date: 2011-03-11 18:18:04+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:50:37+0000\n" "Language-Team: Swedish \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-08 01:22:06+0000\n" -"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-POT-Import-Date: 2011-03-11 18:53:18+0000\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: sv\n" "X-Message-Group: #out-statusnet-plugin-extendedprofile\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +msgid "Extended profile settings" +msgstr "Utökade profilinställningar" + +msgid "There was a problem with your session token. Try again, please." +msgstr "" + +#. TRANS: Message given submitting a form with an unknown action +msgid "Unexpected form submission." +msgstr "" + +#, php-format +msgid "You must supply a date for \"%s\"." +msgstr "" + +#, php-format +msgid "Invalid date entered for \"%s\": %s" +msgstr "" + +#, php-format +msgid "Invalid URL: %s" +msgstr "" + +msgid "Could not save profile details." +msgstr "" + +#. TRANS: Validation error in form for profile settings. +#. TRANS: %s is an invalid tag. +#, php-format +msgid "Invalid tag: \"%s\"." +msgstr "" + +#. TRANS: Link title for link on user profile. +msgid "Edit extended profile settings" +msgstr "Redigera utökade profilinställningar" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "Redigera" + msgid "UI extensions for additional profile fields." msgstr "" -#. TRANS: Link description in user account settings menu. -msgid "Details" -msgstr "Detaljer" - msgid "More details..." msgstr "Mer detaljer..." +msgid "Company" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "End" +msgstr "" + +msgid "Current" +msgstr "" + +msgid "Institution" +msgstr "Institution" + +msgid "Degree" +msgstr "" + +msgid "Description" +msgstr "" + +msgctxt "BUTTON" +msgid "Save" +msgstr "" + +msgid "Phone" +msgstr "Telefon" + +msgid "IM" +msgstr "" + +#, fuzzy +msgid "Website" +msgstr "Webbsidor" + +msgid "Employer" +msgstr "Arbetsgivare" + msgid "Personal" msgstr "Personlig" @@ -55,15 +128,6 @@ msgstr "Taggar" msgid "Contact" msgstr "Kontakt" -msgid "Phone" -msgstr "Telefon" - -msgid "IM" -msgstr "" - -msgid "Websites" -msgstr "Webbsidor" - msgid "Birthday" msgstr "Födelsedag" @@ -76,22 +140,8 @@ msgstr "Barnens namn" msgid "Work experience" msgstr "Arbetserfarenhet" -msgid "Employer" -msgstr "Arbetsgivare" - msgid "Education" msgstr "Utbildning" -msgid "Institution" -msgstr "Institution" - -#. TRANS: Link title for link on user profile. -msgid "Edit extended profile settings" -msgstr "Redigera utökade profilinställningar" - -#. TRANS: Link text for link on user profile. -msgid "Edit" -msgstr "Redigera" - -msgid "Extended profile settings" -msgstr "Utökade profilinställningar" +#~ msgid "Details" +#~ msgstr "Detaljer" diff --git a/plugins/ExtendedProfile/locale/te/LC_MESSAGES/ExtendedProfile.po b/plugins/ExtendedProfile/locale/te/LC_MESSAGES/ExtendedProfile.po index cda6454eaf..c8fd432a17 100644 --- a/plugins/ExtendedProfile/locale/te/LC_MESSAGES/ExtendedProfile.po +++ b/plugins/ExtendedProfile/locale/te/LC_MESSAGES/ExtendedProfile.po @@ -9,28 +9,101 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - ExtendedProfile\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-11 18:15+0000\n" -"PO-Revision-Date: 2011-03-11 18:18:04+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:50:37+0000\n" "Language-Team: Telugu \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-08 01:22:06+0000\n" -"X-Generator: MediaWiki 1.18alpha (r83703); Translate extension (2011-03-11)\n" +"X-POT-Import-Date: 2011-03-11 18:53:18+0000\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: te\n" "X-Message-Group: #out-statusnet-plugin-extendedprofile\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +msgid "Extended profile settings" +msgstr "" + +msgid "There was a problem with your session token. Try again, please." +msgstr "" + +#. TRANS: Message given submitting a form with an unknown action +msgid "Unexpected form submission." +msgstr "" + +#, php-format +msgid "You must supply a date for \"%s\"." +msgstr "" + +#, php-format +msgid "Invalid date entered for \"%s\": %s" +msgstr "" + +#, php-format +msgid "Invalid URL: %s" +msgstr "" + +msgid "Could not save profile details." +msgstr "" + +#. TRANS: Validation error in form for profile settings. +#. TRANS: %s is an invalid tag. +#, php-format +msgid "Invalid tag: \"%s\"." +msgstr "" + +#. TRANS: Link title for link on user profile. +msgid "Edit extended profile settings" +msgstr "" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "మార్చు" + msgid "UI extensions for additional profile fields." msgstr "" -#. TRANS: Link description in user account settings menu. -msgid "Details" -msgstr "వివరాలు" - msgid "More details..." msgstr "మరిన్ని వివరాలు..." +msgid "Company" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "End" +msgstr "" + +msgid "Current" +msgstr "" + +msgid "Institution" +msgstr "" + +msgid "Degree" +msgstr "" + +msgid "Description" +msgstr "" + +msgctxt "BUTTON" +msgid "Save" +msgstr "" + +msgid "Phone" +msgstr "" + +msgid "IM" +msgstr "" + +#, fuzzy +msgid "Website" +msgstr "జాలగూళ్ళు" + +msgid "Employer" +msgstr "" + msgid "Personal" msgstr "వ్యక్తిగతం" @@ -55,15 +128,6 @@ msgstr "ట్యాగులు" msgid "Contact" msgstr "సంప్రదించండి" -msgid "Phone" -msgstr "" - -msgid "IM" -msgstr "" - -msgid "Websites" -msgstr "జాలగూళ్ళు" - msgid "Birthday" msgstr "పుట్టినరోజు" @@ -76,22 +140,8 @@ msgstr "పిల్లల పేర్లు" msgid "Work experience" msgstr "ఉద్యోగ అనుభవం" -msgid "Employer" -msgstr "" - msgid "Education" msgstr "చదువు" -msgid "Institution" -msgstr "" - -#. TRANS: Link title for link on user profile. -msgid "Edit extended profile settings" -msgstr "" - -#. TRANS: Link text for link on user profile. -msgid "Edit" -msgstr "మార్చు" - -msgid "Extended profile settings" -msgstr "" +#~ msgid "Details" +#~ msgstr "వివరాలు" diff --git a/plugins/ExtendedProfile/locale/uk/LC_MESSAGES/ExtendedProfile.po b/plugins/ExtendedProfile/locale/uk/LC_MESSAGES/ExtendedProfile.po index b98ce66ca3..9cb239b9b3 100644 --- a/plugins/ExtendedProfile/locale/uk/LC_MESSAGES/ExtendedProfile.po +++ b/plugins/ExtendedProfile/locale/uk/LC_MESSAGES/ExtendedProfile.po @@ -9,29 +9,102 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - ExtendedProfile\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-08 01:03+0000\n" -"PO-Revision-Date: 2011-03-08 01:06:03+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:50:37+0000\n" "Language-Team: Ukrainian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-06 02:17:22+0000\n" -"X-Generator: MediaWiki 1.18alpha (r83429); Translate extension (2011-03-07)\n" +"X-POT-Import-Date: 2011-03-11 18:53:18+0000\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: uk\n" "X-Message-Group: #out-statusnet-plugin-extendedprofile\n" "Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= " "2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n" +msgid "Extended profile settings" +msgstr "Розширені налаштування профілю" + +msgid "There was a problem with your session token. Try again, please." +msgstr "" + +#. TRANS: Message given submitting a form with an unknown action +msgid "Unexpected form submission." +msgstr "" + +#, php-format +msgid "You must supply a date for \"%s\"." +msgstr "" + +#, php-format +msgid "Invalid date entered for \"%s\": %s" +msgstr "" + +#, php-format +msgid "Invalid URL: %s" +msgstr "" + +msgid "Could not save profile details." +msgstr "" + +#. TRANS: Validation error in form for profile settings. +#. TRANS: %s is an invalid tag. +#, php-format +msgid "Invalid tag: \"%s\"." +msgstr "" + +#. TRANS: Link title for link on user profile. +msgid "Edit extended profile settings" +msgstr "Змінити розширені налаштування профілю" + +#. TRANS: Link text for link on user profile. +msgid "Edit" +msgstr "Змінити" + msgid "UI extensions for additional profile fields." msgstr "Розширення інтерфейсу для додаткових полів у профілі." -#. TRANS: Link description in user account settings menu. -msgid "Details" -msgstr "Деталі" - msgid "More details..." msgstr "Детальніше..." +msgid "Company" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "End" +msgstr "" + +msgid "Current" +msgstr "" + +msgid "Institution" +msgstr "Установа" + +msgid "Degree" +msgstr "" + +msgid "Description" +msgstr "" + +msgctxt "BUTTON" +msgid "Save" +msgstr "" + +msgid "Phone" +msgstr "Телефон" + +msgid "IM" +msgstr "ІМ" + +#, fuzzy +msgid "Website" +msgstr "Сайти" + +msgid "Employer" +msgstr "Роботодавець" + msgid "Personal" msgstr "Профіль" @@ -56,15 +129,6 @@ msgstr "Теґи" msgid "Contact" msgstr "Контакти" -msgid "Phone" -msgstr "Телефон" - -msgid "IM" -msgstr "ІМ" - -msgid "Websites" -msgstr "Сайти" - msgid "Birthday" msgstr "День народження" @@ -77,22 +141,8 @@ msgstr "Імена дітей" msgid "Work experience" msgstr "Досвід роботи" -msgid "Employer" -msgstr "Роботодавець" - msgid "Education" msgstr "Освіта" -msgid "Institution" -msgstr "Установа" - -#. TRANS: Link title for link on user profile. -msgid "Edit extended profile settings" -msgstr "Змінити розширені налаштування профілю" - -#. TRANS: Link text for link on user profile. -msgid "Edit" -msgstr "Змінити" - -msgid "Extended profile settings" -msgstr "Розширені налаштування профілю" +#~ msgid "Details" +#~ msgstr "Деталі" diff --git a/plugins/Msn/locale/el/LC_MESSAGES/Msn.po b/plugins/Msn/locale/el/LC_MESSAGES/Msn.po new file mode 100644 index 0000000000..cc3e8ab390 --- /dev/null +++ b/plugins/Msn/locale/el/LC_MESSAGES/Msn.po @@ -0,0 +1,29 @@ +# Translation of StatusNet - Msn to Greek (Ελληνικά) +# Exported from translatewiki.net +# +# Author: Evropi +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - Msn\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:51:13+0000\n" +"Language-Team: Greek \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2011-03-11 18:53:22+0000\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: el\n" +"X-Message-Group: #out-statusnet-plugin-msn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "MSN" +msgstr "MSN" + +msgid "" +"The MSN plugin allows users to send and receive notices over the MSN network." +msgstr "" diff --git a/plugins/Poll/locale/Poll.pot b/plugins/Poll/locale/Poll.pot index 85b1b74dc1..09a9626291 100644 --- a/plugins/Poll/locale/Poll.pot +++ b/plugins/Poll/locale/Poll.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-11 18:15+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -72,24 +72,24 @@ msgid "Simple extension for supporting basic polls." msgstr "" #. TRANS: Exception thrown trying to respond to a poll without a poll reference. -#: PollPlugin.php:234 +#: PollPlugin.php:230 msgid "Invalid poll response: no poll reference." msgstr "" #. TRANS: Exception thrown trying to respond to a non-existing poll. -#: PollPlugin.php:239 +#: PollPlugin.php:235 msgid "Invalid poll response: poll is unknown." msgstr "" #. TRANS: Exception thrown when performing an unexpected action on a poll. #. TRANS: %s is the unpexpected object type. -#: PollPlugin.php:266 PollPlugin.php:371 +#: PollPlugin.php:262 PollPlugin.php:420 #, php-format msgid "Unexpected type for poll plugin: %s." msgstr "" #. TRANS: Application title. -#: PollPlugin.php:432 +#: PollPlugin.php:481 msgctxt "APPTITLE" msgid "Poll" msgstr "" diff --git a/plugins/Poll/locale/ia/LC_MESSAGES/Poll.po b/plugins/Poll/locale/ia/LC_MESSAGES/Poll.po new file mode 100644 index 0000000000..f8ae3a9010 --- /dev/null +++ b/plugins/Poll/locale/ia/LC_MESSAGES/Poll.po @@ -0,0 +1,152 @@ +# Translation of StatusNet - Poll to Interlingua (Interlingua) +# Exported from translatewiki.net +# +# Author: McDutchie +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - Poll\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:51:40+0000\n" +"Language-Team: Interlingua \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2011-03-11 18:58:12+0000\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: ia\n" +"X-Message-Group: #out-statusnet-plugin-poll\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. TRANS: Client exception thrown trying to view a non-existing poll. +msgid "No such poll." +msgstr "Iste sondage non existe." + +#. TRANS: Client exception thrown trying to view a non-existing poll notice. +msgid "No such poll notice." +msgstr "Iste nota de sondage non existe." + +#. TRANS: Client exception thrown trying to view a poll of a non-existing user. +msgid "No such user." +msgstr "Iste usator non existe." + +#. TRANS: Server exception thrown trying to view a poll for a user for which the profile could not be loaded. +msgid "User without a profile." +msgstr "Usator sin profilo." + +#. TRANS: Page title for a poll. +#. TRANS: %1$s is the nickname of the user that created the poll, %2$s is the poll question. +#, php-format +msgid "%1$s's poll: %2$s" +msgstr "Le sondage de %1$s: %2$s" + +#. TRANS: Field label on the page to create a poll. +msgid "Question" +msgstr "Question" + +#. TRANS: Field title on the page to create a poll. +msgid "What question are people answering?" +msgstr "A qual question responde le gente?" + +#. TRANS: Field label for an answer option on the page to create a poll. +#. TRANS: %d is the option number. +#, php-format +msgid "Option %d" +msgstr "Option %d" + +#. TRANS: Button text for saving a new poll. +msgctxt "BUTTON" +msgid "Save" +msgstr "Salveguardar" + +#. TRANS: Plugin description. +msgid "Simple extension for supporting basic polls." +msgstr "Extension simple pro supportar sondages basic." + +#. TRANS: Exception thrown trying to respond to a poll without a poll reference. +msgid "Invalid poll response: no poll reference." +msgstr "Responsa invalide a sondage: sin referentia a un sondage." + +#. TRANS: Exception thrown trying to respond to a non-existing poll. +msgid "Invalid poll response: poll is unknown." +msgstr "Responsa invalide a sondage: le sondage es incognite." + +#. TRANS: Exception thrown when performing an unexpected action on a poll. +#. TRANS: %s is the unpexpected object type. +#, php-format +msgid "Unexpected type for poll plugin: %s." +msgstr "Typo inexpectate pro le plug-in de sondages: %s." + +#. TRANS: Application title. +msgctxt "APPTITLE" +msgid "Poll" +msgstr "Sondage" + +#. TRANS: Client exception thrown when responding to a poll with an invalid option. +#. TRANS: Client exception thrown responding to a poll with an invalid answer. +msgid "Invalid poll selection." +msgstr "Selection de sondage invalide." + +#. TRANS: Notice content voting for a poll. +#. TRANS: %s is the chosen option in the poll. +#. TRANS: Rendered version of the notice content voting for a poll. +#. TRANS: %s a link to the poll with the chosen option as link description. +#, php-format +msgid "voted for \"%s\"" +msgstr "votava pro \"%s\"" + +#. TRANS: Button text for submitting a poll response. +msgctxt "BUTTON" +msgid "Submit" +msgstr "Submitter" + +#. TRANS: Notice content creating a poll. +#. TRANS: %1$s is the poll question, %2$s is a link to the poll. +#, php-format +msgid "Poll: %1$s %2$s" +msgstr "Sondage: %1$s %2$s" + +#. TRANS: Rendered version of the notice content creating a poll. +#. TRANS: %s a link to the poll with the question as link description. +#, php-format +msgid "Poll: %s" +msgstr "Sondage: %s" + +#. TRANS: Title for poll page. +msgid "New poll" +msgstr "Nove sondage" + +#. TRANS: Client exception thrown trying to create a poll while not logged in. +msgid "You must be logged in to post a poll." +msgstr "Tu debe aperir un session pro publicar un sondage." + +#. TRANS: Client exception thrown trying to create a poll without a question. +msgid "Poll must have a question." +msgstr "Le sondage debe haber un question." + +#. TRANS: Client exception thrown trying to create a poll with fewer than two options. +msgid "Poll must have at least two options." +msgstr "Le sondage debe haber al minus duo optiones." + +#. TRANS: Page title after sending a notice. +msgid "Notice posted" +msgstr "Nota publicate" + +#. TRANS: Page title for poll response. +msgid "Poll response" +msgstr "Responsa al sondage" + +#. TRANS: Client exception thrown trying to respond to a poll while not logged in. +msgid "You must be logged in to respond to a poll." +msgstr "Tu debe aperir un session pro responder a un sondage." + +#. TRANS: Client exception thrown trying to respond to a non-existing poll. +msgid "Invalid or missing poll." +msgstr "Sondage invalide o mancante." + +#. TRANS: Page title after sending a poll response. +msgid "Poll results" +msgstr "Resultatos del sondage" diff --git a/plugins/Poll/locale/mk/LC_MESSAGES/Poll.po b/plugins/Poll/locale/mk/LC_MESSAGES/Poll.po new file mode 100644 index 0000000000..191c354b9b --- /dev/null +++ b/plugins/Poll/locale/mk/LC_MESSAGES/Poll.po @@ -0,0 +1,152 @@ +# Translation of StatusNet - Poll to Macedonian (Македонски) +# Exported from translatewiki.net +# +# Author: Bjankuloski06 +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - Poll\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:51:41+0000\n" +"Language-Team: Macedonian \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2011-03-11 18:58:12+0000\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: mk\n" +"X-Message-Group: #out-statusnet-plugin-poll\n" +"Plural-Forms: nplurals=2; plural=(n == 1 || n%10 == 1) ? 0 : 1;\n" + +#. TRANS: Client exception thrown trying to view a non-existing poll. +msgid "No such poll." +msgstr "Нема таква анкета." + +#. TRANS: Client exception thrown trying to view a non-existing poll notice. +msgid "No such poll notice." +msgstr "Нема таква анкетна забелешка." + +#. TRANS: Client exception thrown trying to view a poll of a non-existing user. +msgid "No such user." +msgstr "Нема таков корисник." + +#. TRANS: Server exception thrown trying to view a poll for a user for which the profile could not be loaded. +msgid "User without a profile." +msgstr "Корисник без профил." + +#. TRANS: Page title for a poll. +#. TRANS: %1$s is the nickname of the user that created the poll, %2$s is the poll question. +#, php-format +msgid "%1$s's poll: %2$s" +msgstr "Анкета на %1$s: %2$s" + +#. TRANS: Field label on the page to create a poll. +msgid "Question" +msgstr "Прашање" + +#. TRANS: Field title on the page to create a poll. +msgid "What question are people answering?" +msgstr "На кое прашање одговараат луѓето?" + +#. TRANS: Field label for an answer option on the page to create a poll. +#. TRANS: %d is the option number. +#, php-format +msgid "Option %d" +msgstr "Можност %d" + +#. TRANS: Button text for saving a new poll. +msgctxt "BUTTON" +msgid "Save" +msgstr "Зачувај" + +#. TRANS: Plugin description. +msgid "Simple extension for supporting basic polls." +msgstr "Прост додаток за поддршка на едноставни анкети." + +#. TRANS: Exception thrown trying to respond to a poll without a poll reference. +msgid "Invalid poll response: no poll reference." +msgstr "Неважечки одговор во анкетата: нема назнака на анкетата." + +#. TRANS: Exception thrown trying to respond to a non-existing poll. +msgid "Invalid poll response: poll is unknown." +msgstr "Неважечки одговор во анкетата: анкетата е непозната." + +#. TRANS: Exception thrown when performing an unexpected action on a poll. +#. TRANS: %s is the unpexpected object type. +#, php-format +msgid "Unexpected type for poll plugin: %s." +msgstr "Неочекуван тип за анкетен приклучок: %s." + +#. TRANS: Application title. +msgctxt "APPTITLE" +msgid "Poll" +msgstr "Анкета" + +#. TRANS: Client exception thrown when responding to a poll with an invalid option. +#. TRANS: Client exception thrown responding to a poll with an invalid answer. +msgid "Invalid poll selection." +msgstr "Неважечки избор на анкета." + +#. TRANS: Notice content voting for a poll. +#. TRANS: %s is the chosen option in the poll. +#. TRANS: Rendered version of the notice content voting for a poll. +#. TRANS: %s a link to the poll with the chosen option as link description. +#, php-format +msgid "voted for \"%s\"" +msgstr "гласаше за „%s“" + +#. TRANS: Button text for submitting a poll response. +msgctxt "BUTTON" +msgid "Submit" +msgstr "Поднеси" + +#. TRANS: Notice content creating a poll. +#. TRANS: %1$s is the poll question, %2$s is a link to the poll. +#, php-format +msgid "Poll: %1$s %2$s" +msgstr "Анкета: %1$s %2$s" + +#. TRANS: Rendered version of the notice content creating a poll. +#. TRANS: %s a link to the poll with the question as link description. +#, php-format +msgid "Poll: %s" +msgstr "Анкета: %s" + +#. TRANS: Title for poll page. +msgid "New poll" +msgstr "Нова анкета" + +#. TRANS: Client exception thrown trying to create a poll while not logged in. +msgid "You must be logged in to post a poll." +msgstr "Мора да сте најавени за да можете да објавите анкета." + +#. TRANS: Client exception thrown trying to create a poll without a question. +msgid "Poll must have a question." +msgstr "Анкетата мора да има прашање." + +#. TRANS: Client exception thrown trying to create a poll with fewer than two options. +msgid "Poll must have at least two options." +msgstr "Анкетата мора да има барем две можности." + +#. TRANS: Page title after sending a notice. +msgid "Notice posted" +msgstr "Забелешката е објавена" + +#. TRANS: Page title for poll response. +msgid "Poll response" +msgstr "Одговор на анкетата" + +#. TRANS: Client exception thrown trying to respond to a poll while not logged in. +msgid "You must be logged in to respond to a poll." +msgstr "Мора да сте најавени за да можете да одговарате на анкети." + +#. TRANS: Client exception thrown trying to respond to a non-existing poll. +msgid "Invalid or missing poll." +msgstr "Неважечка или непостоечка анкета." + +#. TRANS: Page title after sending a poll response. +msgid "Poll results" +msgstr "Резултати од анкетата" diff --git a/plugins/Poll/locale/nl/LC_MESSAGES/Poll.po b/plugins/Poll/locale/nl/LC_MESSAGES/Poll.po new file mode 100644 index 0000000000..89ce123826 --- /dev/null +++ b/plugins/Poll/locale/nl/LC_MESSAGES/Poll.po @@ -0,0 +1,152 @@ +# Translation of StatusNet - Poll to Dutch (Nederlands) +# Exported from translatewiki.net +# +# Author: Siebrand +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - Poll\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:51:41+0000\n" +"Language-Team: Dutch \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2011-03-11 18:58:12+0000\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: nl\n" +"X-Message-Group: #out-statusnet-plugin-poll\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. TRANS: Client exception thrown trying to view a non-existing poll. +msgid "No such poll." +msgstr "Deze peiling bestaat niet." + +#. TRANS: Client exception thrown trying to view a non-existing poll notice. +msgid "No such poll notice." +msgstr "Dit peilingsbericht bestaat niet." + +#. TRANS: Client exception thrown trying to view a poll of a non-existing user. +msgid "No such user." +msgstr "Deze gebruiker bestaat niet." + +#. TRANS: Server exception thrown trying to view a poll for a user for which the profile could not be loaded. +msgid "User without a profile." +msgstr "Gebruiker zonder een profiel." + +#. TRANS: Page title for a poll. +#. TRANS: %1$s is the nickname of the user that created the poll, %2$s is the poll question. +#, php-format +msgid "%1$s's poll: %2$s" +msgstr "Peiling van %1$s: %2$s" + +#. TRANS: Field label on the page to create a poll. +msgid "Question" +msgstr "Vraag" + +#. TRANS: Field title on the page to create a poll. +msgid "What question are people answering?" +msgstr "Welke vraag beantwoorden de mensen?" + +#. TRANS: Field label for an answer option on the page to create a poll. +#. TRANS: %d is the option number. +#, php-format +msgid "Option %d" +msgstr "Keuze %d" + +#. TRANS: Button text for saving a new poll. +msgctxt "BUTTON" +msgid "Save" +msgstr "Opslaan" + +#. TRANS: Plugin description. +msgid "Simple extension for supporting basic polls." +msgstr "Eenvoudige plug-in voor peilingen." + +#. TRANS: Exception thrown trying to respond to a poll without a poll reference. +msgid "Invalid poll response: no poll reference." +msgstr "Ongeldig antwoord op peiling: heeft geen verwijzing naar een peiling." + +#. TRANS: Exception thrown trying to respond to a non-existing poll. +msgid "Invalid poll response: poll is unknown." +msgstr "Ongeldig antwoord op peiling: de peiling bestaat niet." + +#. TRANS: Exception thrown when performing an unexpected action on a poll. +#. TRANS: %s is the unpexpected object type. +#, php-format +msgid "Unexpected type for poll plugin: %s." +msgstr "Onverwacht type voor peilingplug-in: %s" + +#. TRANS: Application title. +msgctxt "APPTITLE" +msgid "Poll" +msgstr "Peiling" + +#. TRANS: Client exception thrown when responding to a poll with an invalid option. +#. TRANS: Client exception thrown responding to a poll with an invalid answer. +msgid "Invalid poll selection." +msgstr "Ongeldige keuze voor peiling." + +#. TRANS: Notice content voting for a poll. +#. TRANS: %s is the chosen option in the poll. +#. TRANS: Rendered version of the notice content voting for a poll. +#. TRANS: %s a link to the poll with the chosen option as link description. +#, php-format +msgid "voted for \"%s\"" +msgstr "gestemd voor \"%s\"" + +#. TRANS: Button text for submitting a poll response. +msgctxt "BUTTON" +msgid "Submit" +msgstr "Opslaan" + +#. TRANS: Notice content creating a poll. +#. TRANS: %1$s is the poll question, %2$s is a link to the poll. +#, php-format +msgid "Poll: %1$s %2$s" +msgstr "Peiling: %1$s %2$s" + +#. TRANS: Rendered version of the notice content creating a poll. +#. TRANS: %s a link to the poll with the question as link description. +#, php-format +msgid "Poll: %s" +msgstr "Peiling: %s" + +#. TRANS: Title for poll page. +msgid "New poll" +msgstr "Nieuwe peiling" + +#. TRANS: Client exception thrown trying to create a poll while not logged in. +msgid "You must be logged in to post a poll." +msgstr "U moet aangemeld zijn om een peiling aan te kunnen maken." + +#. TRANS: Client exception thrown trying to create a poll without a question. +msgid "Poll must have a question." +msgstr "De peiling moet een vraag hebben." + +#. TRANS: Client exception thrown trying to create a poll with fewer than two options. +msgid "Poll must have at least two options." +msgstr "De peiling moet tenminste twee antwoordmogelijkheden hebben." + +#. TRANS: Page title after sending a notice. +msgid "Notice posted" +msgstr "De mededeling is verzonden" + +#. TRANS: Page title for poll response. +msgid "Poll response" +msgstr "Peilingreactie" + +#. TRANS: Client exception thrown trying to respond to a poll while not logged in. +msgid "You must be logged in to respond to a poll." +msgstr "U moet aangemeld zijn om te kunnen stemmen in een peiling." + +#. TRANS: Client exception thrown trying to respond to a non-existing poll. +msgid "Invalid or missing poll." +msgstr "De peiling is ongeldig of bestaat niet." + +#. TRANS: Page title after sending a poll response. +msgid "Poll results" +msgstr "Peilingresultaten" diff --git a/plugins/Poll/locale/uk/LC_MESSAGES/Poll.po b/plugins/Poll/locale/uk/LC_MESSAGES/Poll.po new file mode 100644 index 0000000000..dca23be16a --- /dev/null +++ b/plugins/Poll/locale/uk/LC_MESSAGES/Poll.po @@ -0,0 +1,153 @@ +# Translation of StatusNet - Poll to Ukrainian (Українська) +# Exported from translatewiki.net +# +# Author: Boogie +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - Poll\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:51:41+0000\n" +"Language-Team: Ukrainian \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2011-03-11 18:58:12+0000\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: uk\n" +"X-Message-Group: #out-statusnet-plugin-poll\n" +"Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= " +"2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n" + +#. TRANS: Client exception thrown trying to view a non-existing poll. +msgid "No such poll." +msgstr "Немає такого опитування." + +#. TRANS: Client exception thrown trying to view a non-existing poll notice. +msgid "No such poll notice." +msgstr "Немає допису щодо опитування." + +#. TRANS: Client exception thrown trying to view a poll of a non-existing user. +msgid "No such user." +msgstr "Такого користувача немає." + +#. TRANS: Server exception thrown trying to view a poll for a user for which the profile could not be loaded. +msgid "User without a profile." +msgstr "Користувач без профілю." + +#. TRANS: Page title for a poll. +#. TRANS: %1$s is the nickname of the user that created the poll, %2$s is the poll question. +#, php-format +msgid "%1$s's poll: %2$s" +msgstr "Опитування %1$s: %2$s" + +#. TRANS: Field label on the page to create a poll. +msgid "Question" +msgstr "Питання" + +#. TRANS: Field title on the page to create a poll. +msgid "What question are people answering?" +msgstr "На яке запитання відповідати людям?" + +#. TRANS: Field label for an answer option on the page to create a poll. +#. TRANS: %d is the option number. +#, php-format +msgid "Option %d" +msgstr "Варіант %d" + +#. TRANS: Button text for saving a new poll. +msgctxt "BUTTON" +msgid "Save" +msgstr "Зберегти" + +#. TRANS: Plugin description. +msgid "Simple extension for supporting basic polls." +msgstr "Простий додаток для підтримки проведення опитувань." + +#. TRANS: Exception thrown trying to respond to a poll without a poll reference. +msgid "Invalid poll response: no poll reference." +msgstr "Невірна відповідь: відсутнє посилання на опитування." + +#. TRANS: Exception thrown trying to respond to a non-existing poll. +msgid "Invalid poll response: poll is unknown." +msgstr "Неправильна відповідь на опитування: невідоме опитування." + +#. TRANS: Exception thrown when performing an unexpected action on a poll. +#. TRANS: %s is the unpexpected object type. +#, php-format +msgid "Unexpected type for poll plugin: %s." +msgstr "Неочікувана дія для додатку опитувань: %s." + +#. TRANS: Application title. +msgctxt "APPTITLE" +msgid "Poll" +msgstr "Опитування" + +#. TRANS: Client exception thrown when responding to a poll with an invalid option. +#. TRANS: Client exception thrown responding to a poll with an invalid answer. +msgid "Invalid poll selection." +msgstr "Невірний вибір опитування." + +#. TRANS: Notice content voting for a poll. +#. TRANS: %s is the chosen option in the poll. +#. TRANS: Rendered version of the notice content voting for a poll. +#. TRANS: %s a link to the poll with the chosen option as link description. +#, php-format +msgid "voted for \"%s\"" +msgstr "проголосувало за «%s»" + +#. TRANS: Button text for submitting a poll response. +msgctxt "BUTTON" +msgid "Submit" +msgstr "Надіслати" + +#. TRANS: Notice content creating a poll. +#. TRANS: %1$s is the poll question, %2$s is a link to the poll. +#, php-format +msgid "Poll: %1$s %2$s" +msgstr "Опитування: %1$s %2$s" + +#. TRANS: Rendered version of the notice content creating a poll. +#. TRANS: %s a link to the poll with the question as link description. +#, php-format +msgid "Poll: %s" +msgstr "Опитування: %s" + +#. TRANS: Title for poll page. +msgid "New poll" +msgstr "Нове опитування" + +#. TRANS: Client exception thrown trying to create a poll while not logged in. +msgid "You must be logged in to post a poll." +msgstr "Ви повинні увійти до системи, щоб взяти участь в опитуванні." + +#. TRANS: Client exception thrown trying to create a poll without a question. +msgid "Poll must have a question." +msgstr "Опитування повинно мати запитання." + +#. TRANS: Client exception thrown trying to create a poll with fewer than two options. +msgid "Poll must have at least two options." +msgstr "Опитування повинно мати принаймні два варіанти." + +#. TRANS: Page title after sending a notice. +msgid "Notice posted" +msgstr "Допис опубліковано" + +#. TRANS: Page title for poll response. +msgid "Poll response" +msgstr "Відповіді на опитування" + +#. TRANS: Client exception thrown trying to respond to a poll while not logged in. +msgid "You must be logged in to respond to a poll." +msgstr "Ви повинні увійти до системи, щоб відповісти на опитування." + +#. TRANS: Client exception thrown trying to respond to a non-existing poll. +msgid "Invalid or missing poll." +msgstr "Невірне або відсутнє опитування." + +#. TRANS: Page title after sending a poll response. +msgid "Poll results" +msgstr "Результати опитування" diff --git a/plugins/SearchSub/locale/SearchSub.pot b/plugins/SearchSub/locale/SearchSub.pot new file mode 100644 index 0000000000..c5b8798998 --- /dev/null +++ b/plugins/SearchSub/locale/SearchSub.pot @@ -0,0 +1,182 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#. TRANS: Header for subscriptions overview for a user (first page). +#. TRANS: %s is a user nickname. +#: searchsubsaction.php:51 +#, php-format +msgid "%s's search subscriptions" +msgstr "" + +#. TRANS: Header for subscriptions overview for a user (not first page). +#. TRANS: %1$s is a user nickname, %2$d is the page number. +#: searchsubsaction.php:55 +#, php-format +msgid "%1$s's search subscriptions, page %2$d" +msgstr "" + +#. TRANS: Page notice for page with an overview of all search subscriptions +#. TRANS: of the logged in user's own profile. +#: searchsubsaction.php:68 +msgid "" +"You have subscribed to receive all notices on this site matching the " +"following searches:" +msgstr "" + +#. TRANS: Page notice for page with an overview of all subscriptions of a user other +#. TRANS: than the logged in user. %s is the user nickname. +#: searchsubsaction.php:73 +#, php-format +msgid "" +"%s has subscribed to receive all notices on this site matching the following " +"searches:" +msgstr "" + +#. TRANS: Subscription list text when looking at the subscriptions for a of a user that has none +#. TRANS: as an anonymous user. %s is the user nickname. +#: searchsubsaction.php:130 +#, php-format +msgid "%s is not subscribed to any searches." +msgstr "" + +#: searchsubsaction.php:168 +#, php-format +msgid "\"%s\" since %s" +msgstr "" + +#. TRANS: Error text shown a user tries to untrack a search query they're not subscribed to. +#: searchsubuntrackcommand.php:21 +#, php-format +msgid "You are not tracking the search \"%s\"." +msgstr "" + +#. TRANS: Message given having failed to cancel a search subscription by untrack command. +#: searchsubuntrackcommand.php:29 +#, php-format +msgid "Could not end a search subscription for query \"%s\"." +msgstr "" + +#. TRANS: Message given having removed a search subscription by untrack command. +#: searchsubuntrackcommand.php:35 +#, php-format +msgid "You are no longer subscribed to the search \"%s\"." +msgstr "" + +#. TRANS: Page title when search subscription succeeded. +#: searchsubaction.php:136 +msgid "Subscribed" +msgstr "" + +#: searchunsubform.php:96 searchunsubform.php:107 +msgid "Unsubscribe from this search" +msgstr "" + +#. TRANS: Page title when search unsubscription succeeded. +#: searchunsubaction.php:76 +msgid "Unsubscribed" +msgstr "" + +#. TRANS: Error text shown a user tries to track a search query they're already subscribed to. +#: searchsubtrackcommand.php:21 +#, php-format +msgid "You are already tracking the search \"%s\"." +msgstr "" + +#. TRANS: Message given having failed to set up a search subscription by track command. +#: searchsubtrackcommand.php:29 +#, php-format +msgid "Could not start a search subscription for query \"%s\"." +msgstr "" + +#. TRANS: Message given having added a search subscription by track command. +#: searchsubtrackcommand.php:35 +#, php-format +msgid "You are subscribed to the search \"%s\"." +msgstr "" + +#. TRANS: Plugin description. +#: SearchSubPlugin.php:132 +msgid "Plugin to allow following all messages with a given search." +msgstr "" + +#. TRANS: SearchSub plugin menu item on user settings page. +#: SearchSubPlugin.php:236 +msgctxt "MENU" +msgid "Searches" +msgstr "" + +#. TRANS: SearchSub plugin tooltip for user settings menu item. +#: SearchSubPlugin.php:238 +msgid "Configure search subscriptions" +msgstr "" + +#: SearchSubPlugin.php:259 +msgid "Search subscriptions" +msgstr "" + +#. TRANS: Help message for IM/SMS command "track " +#: SearchSubPlugin.php:309 +msgctxt "COMMANDHELP" +msgid "Start following notices matching the given search query." +msgstr "" + +#. TRANS: Help message for IM/SMS command "untrack " +#: SearchSubPlugin.php:311 +msgctxt "COMMANDHELP" +msgid "Stop following notices matching the given search query." +msgstr "" + +#. TRANS: Help message for IM/SMS command "track off" +#. TRANS: Help message for IM/SMS command "untrack all" +#: SearchSubPlugin.php:313 SearchSubPlugin.php:315 +msgctxt "COMMANDHELP" +msgid "Disable all tracked search subscriptions." +msgstr "" + +#. TRANS: Help message for IM/SMS command "tracks" +#. TRANS: Help message for IM/SMS command "tracking" +#: SearchSubPlugin.php:317 SearchSubPlugin.php:319 +msgctxt "COMMANDHELP" +msgid "List all your search subscriptions." +msgstr "" + +#. TRANS: Error text shown a user tries to disable all a search subscriptions with track off command, but has none. +#: searchsubtrackingcommand.php:14 searchsubtrackoffcommand.php:14 +msgid "You are not tracking any searches." +msgstr "" + +#. TRANS: Message given having disabled all search subscriptions with 'track off'. +#: searchsubtrackingcommand.php:24 +#, php-format +msgid "You are tracking searches for: %s" +msgstr "" + +#: searchsubform.php:116 searchsubform.php:140 +msgid "Subscribe to this search" +msgstr "" + +#. TRANS: Message given having failed to cancel one of the search subs with 'track off' command. +#: searchsubtrackoffcommand.php:24 +#, php-format +msgid "Error disabling search subscription for query \"%s\"." +msgstr "" + +#. TRANS: Message given having disabled all search subscriptions with 'track off'. +#: searchsubtrackoffcommand.php:31 +msgid "Disabled all your search subscriptions." +msgstr "" diff --git a/plugins/SubMirror/locale/SubMirror.pot b/plugins/SubMirror/locale/SubMirror.pot index 81ae0a0f91..b152575321 100644 --- a/plugins/SubMirror/locale/SubMirror.pot +++ b/plugins/SubMirror/locale/SubMirror.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-06 02:34+0100\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,7 +17,8 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: actions/basemirror.php:71 -msgid "Invalid feed URL." +#, php-format +msgid "Invalid feed URL: %s" msgstr "" #. TRANS: Error message returned to user when setting up feed mirroring, but we were unable to resolve the given URL to a working feed. @@ -58,7 +59,7 @@ msgstr "" msgid "Requested edit of missing mirror." msgstr "" -#: actions/addmirror.php:72 +#: actions/addmirror.php:88 msgid "Could not subscribe to feed." msgstr "" @@ -74,34 +75,38 @@ msgid "" "timeline!" msgstr "" -#: SubMirrorPlugin.php:90 +#: SubMirrorPlugin.php:93 msgid "Pull feeds into your timeline!" msgstr "" #. TRANS: SubMirror plugin menu item on user settings page. -#: SubMirrorPlugin.php:110 +#: SubMirrorPlugin.php:113 msgctxt "MENU" msgid "Mirroring" msgstr "" #. TRANS: SubMirror plugin tooltip for user settings menu item. -#: SubMirrorPlugin.php:112 +#: SubMirrorPlugin.php:115 msgid "Configure mirroring of posts from other feeds" msgstr "" -#: SubMirrorPlugin.php:183 +#: SubMirrorPlugin.php:186 msgid "Mirrored feeds" msgstr "" -#: lib/addmirrorform.php:59 +#: lib/addmirrorform.php:60 msgid "Web page or feed URL:" msgstr "" -#: lib/addmirrorform.php:64 +#: lib/addmirrorform.php:65 lib/addtwittermirrorform.php:55 msgctxt "BUTTON" msgid "Add feed" msgstr "" +#: lib/addtwittermirrorform.php:50 +msgid "Twitter username:" +msgstr "" + #: lib/editmirrorform.php:83 msgctxt "LABEL" msgid "Remote feed:" @@ -132,3 +137,15 @@ msgstr "" #: lib/editmirrorform.php:117 msgid "Stop mirroring" msgstr "" + +#: lib/addmirrorwizard.php:76 +msgid "Twitter" +msgstr "" + +#: lib/addmirrorwizard.php:109 +msgid "RSS or Atom feed" +msgstr "" + +#: lib/addmirrorwizard.php:119 +msgid "Select a feed provider" +msgstr "" diff --git a/plugins/SubMirror/locale/de/LC_MESSAGES/SubMirror.po b/plugins/SubMirror/locale/de/LC_MESSAGES/SubMirror.po index f3fb0f911f..76a5203c5e 100644 --- a/plugins/SubMirror/locale/de/LC_MESSAGES/SubMirror.po +++ b/plugins/SubMirror/locale/de/LC_MESSAGES/SubMirror.po @@ -9,19 +9,20 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - SubMirror\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-06 02:34+0100\n" -"PO-Revision-Date: 2011-03-06 01:38:18+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:52:01+0000\n" "Language-Team: German \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-03 17:47:23+0000\n" -"X-Generator: MediaWiki 1.18alpha (r83348); Translate extension (2011-03-04)\n" +"X-POT-Import-Date: 2011-03-06 02:19:34+0000\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: de\n" "X-Message-Group: #out-statusnet-plugin-submirror\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -msgid "Invalid feed URL." +#, fuzzy, php-format +msgid "Invalid feed URL: %s" msgstr "Ungültige Feed-URL." #. TRANS: Error message returned to user when setting up feed mirroring, but we were unable to resolve the given URL to a working feed. @@ -88,6 +89,9 @@ msgctxt "BUTTON" msgid "Add feed" msgstr "Feed hinzufügen" +msgid "Twitter username:" +msgstr "" + msgctxt "LABEL" msgid "Remote feed:" msgstr "Remote-Feed:" @@ -113,3 +117,12 @@ msgstr "Speichern" msgid "Stop mirroring" msgstr "Mit dem Spiegeln aufhören" + +msgid "Twitter" +msgstr "" + +msgid "RSS or Atom feed" +msgstr "" + +msgid "Select a feed provider" +msgstr "" diff --git a/plugins/SubMirror/locale/fr/LC_MESSAGES/SubMirror.po b/plugins/SubMirror/locale/fr/LC_MESSAGES/SubMirror.po index 5715014646..1216906eb9 100644 --- a/plugins/SubMirror/locale/fr/LC_MESSAGES/SubMirror.po +++ b/plugins/SubMirror/locale/fr/LC_MESSAGES/SubMirror.po @@ -10,19 +10,20 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - SubMirror\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-06 02:34+0100\n" -"PO-Revision-Date: 2011-03-06 01:38:18+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:52:01+0000\n" "Language-Team: French \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-03 17:47:23+0000\n" -"X-Generator: MediaWiki 1.18alpha (r83348); Translate extension (2011-03-04)\n" +"X-POT-Import-Date: 2011-03-06 02:19:34+0000\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: fr\n" "X-Message-Group: #out-statusnet-plugin-submirror\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -msgid "Invalid feed URL." +#, fuzzy, php-format +msgid "Invalid feed URL: %s" msgstr "Adresse URL de flux invalide." #. TRANS: Error message returned to user when setting up feed mirroring, but we were unable to resolve the given URL to a working feed. @@ -93,6 +94,9 @@ msgctxt "BUTTON" msgid "Add feed" msgstr "Ajouter le flux" +msgid "Twitter username:" +msgstr "" + msgctxt "LABEL" msgid "Remote feed:" msgstr "Flux distant :" @@ -118,3 +122,12 @@ msgstr "Sauvegarder" msgid "Stop mirroring" msgstr "Arrêter le miroir" + +msgid "Twitter" +msgstr "" + +msgid "RSS or Atom feed" +msgstr "" + +msgid "Select a feed provider" +msgstr "" diff --git a/plugins/SubMirror/locale/ia/LC_MESSAGES/SubMirror.po b/plugins/SubMirror/locale/ia/LC_MESSAGES/SubMirror.po index f6f1b5eb2a..19eb4e9f01 100644 --- a/plugins/SubMirror/locale/ia/LC_MESSAGES/SubMirror.po +++ b/plugins/SubMirror/locale/ia/LC_MESSAGES/SubMirror.po @@ -9,19 +9,20 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - SubMirror\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-06 02:34+0100\n" -"PO-Revision-Date: 2011-03-06 01:38:18+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:52:01+0000\n" "Language-Team: Interlingua \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-03 17:47:23+0000\n" -"X-Generator: MediaWiki 1.18alpha (r83348); Translate extension (2011-03-04)\n" +"X-POT-Import-Date: 2011-03-06 02:19:34+0000\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ia\n" "X-Message-Group: #out-statusnet-plugin-submirror\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -msgid "Invalid feed URL." +#, fuzzy, php-format +msgid "Invalid feed URL: %s" msgstr "URL de syndication invalide." #. TRANS: Error message returned to user when setting up feed mirroring, but we were unable to resolve the given URL to a working feed. @@ -90,6 +91,9 @@ msgctxt "BUTTON" msgid "Add feed" msgstr "Adder syndication" +msgid "Twitter username:" +msgstr "" + msgctxt "LABEL" msgid "Remote feed:" msgstr "Syndication remote:" @@ -115,3 +119,12 @@ msgstr "Salveguardar" msgid "Stop mirroring" msgstr "Cessar le republication" + +msgid "Twitter" +msgstr "" + +msgid "RSS or Atom feed" +msgstr "" + +msgid "Select a feed provider" +msgstr "" diff --git a/plugins/SubMirror/locale/mk/LC_MESSAGES/SubMirror.po b/plugins/SubMirror/locale/mk/LC_MESSAGES/SubMirror.po index e6da0cb3ae..8ca0053775 100644 --- a/plugins/SubMirror/locale/mk/LC_MESSAGES/SubMirror.po +++ b/plugins/SubMirror/locale/mk/LC_MESSAGES/SubMirror.po @@ -9,19 +9,20 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - SubMirror\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-06 02:34+0100\n" -"PO-Revision-Date: 2011-03-06 01:38:18+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:52:01+0000\n" "Language-Team: Macedonian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-03 17:47:23+0000\n" -"X-Generator: MediaWiki 1.18alpha (r83348); Translate extension (2011-03-04)\n" +"X-POT-Import-Date: 2011-03-06 02:19:34+0000\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: mk\n" "X-Message-Group: #out-statusnet-plugin-submirror\n" "Plural-Forms: nplurals=2; plural=(n == 1 || n%10 == 1) ? 0 : 1;\n" -msgid "Invalid feed URL." +#, fuzzy, php-format +msgid "Invalid feed URL: %s" msgstr "Неважечка URL-адреса за каналот." #. TRANS: Error message returned to user when setting up feed mirroring, but we were unable to resolve the given URL to a working feed. @@ -90,6 +91,9 @@ msgctxt "BUTTON" msgid "Add feed" msgstr "Додај канал" +msgid "Twitter username:" +msgstr "" + msgctxt "LABEL" msgid "Remote feed:" msgstr "Далечински канал:" @@ -115,3 +119,12 @@ msgstr "Зачувај" msgid "Stop mirroring" msgstr "Престани со отсликување" + +msgid "Twitter" +msgstr "" + +msgid "RSS or Atom feed" +msgstr "" + +msgid "Select a feed provider" +msgstr "" diff --git a/plugins/SubMirror/locale/nl/LC_MESSAGES/SubMirror.po b/plugins/SubMirror/locale/nl/LC_MESSAGES/SubMirror.po index f61cf8bab0..9c567df960 100644 --- a/plugins/SubMirror/locale/nl/LC_MESSAGES/SubMirror.po +++ b/plugins/SubMirror/locale/nl/LC_MESSAGES/SubMirror.po @@ -9,19 +9,20 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - SubMirror\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-06 02:34+0100\n" -"PO-Revision-Date: 2011-03-06 01:38:18+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:52:01+0000\n" "Language-Team: Dutch \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-03 17:47:23+0000\n" -"X-Generator: MediaWiki 1.18alpha (r83348); Translate extension (2011-03-04)\n" +"X-POT-Import-Date: 2011-03-06 02:19:34+0000\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: nl\n" "X-Message-Group: #out-statusnet-plugin-submirror\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -msgid "Invalid feed URL." +#, fuzzy, php-format +msgid "Invalid feed URL: %s" msgstr "Ongeldige URL voor feed." #. TRANS: Error message returned to user when setting up feed mirroring, but we were unable to resolve the given URL to a working feed. @@ -92,6 +93,9 @@ msgctxt "BUTTON" msgid "Add feed" msgstr "Feed toevoegen" +msgid "Twitter username:" +msgstr "" + msgctxt "LABEL" msgid "Remote feed:" msgstr "Bronfeed:" @@ -117,3 +121,12 @@ msgstr "Opslaan" msgid "Stop mirroring" msgstr "Spiegelen beëindigen" + +msgid "Twitter" +msgstr "" + +msgid "RSS or Atom feed" +msgstr "" + +msgid "Select a feed provider" +msgstr "" diff --git a/plugins/SubMirror/locale/tl/LC_MESSAGES/SubMirror.po b/plugins/SubMirror/locale/tl/LC_MESSAGES/SubMirror.po index cd82af0273..05089e9660 100644 --- a/plugins/SubMirror/locale/tl/LC_MESSAGES/SubMirror.po +++ b/plugins/SubMirror/locale/tl/LC_MESSAGES/SubMirror.po @@ -9,19 +9,20 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - SubMirror\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-06 02:34+0100\n" -"PO-Revision-Date: 2011-03-06 01:38:18+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:52:01+0000\n" "Language-Team: Tagalog \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-03 17:47:23+0000\n" -"X-Generator: MediaWiki 1.18alpha (r83348); Translate extension (2011-03-04)\n" +"X-POT-Import-Date: 2011-03-06 02:19:34+0000\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: tl\n" "X-Message-Group: #out-statusnet-plugin-submirror\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -msgid "Invalid feed URL." +#, fuzzy, php-format +msgid "Invalid feed URL: %s" msgstr "Hindi tanggap na URL ng pakain." #. TRANS: Error message returned to user when setting up feed mirroring, but we were unable to resolve the given URL to a working feed. @@ -90,6 +91,9 @@ msgctxt "BUTTON" msgid "Add feed" msgstr "Idagdag ang pakain" +msgid "Twitter username:" +msgstr "" + msgctxt "LABEL" msgid "Remote feed:" msgstr "Pakaing malayo:" @@ -115,3 +119,12 @@ msgstr "Sagipin" msgid "Stop mirroring" msgstr "Ihinto ang pagsasalamin" + +msgid "Twitter" +msgstr "" + +msgid "RSS or Atom feed" +msgstr "" + +msgid "Select a feed provider" +msgstr "" diff --git a/plugins/SubMirror/locale/uk/LC_MESSAGES/SubMirror.po b/plugins/SubMirror/locale/uk/LC_MESSAGES/SubMirror.po index 8c57930fdf..6693d90adb 100644 --- a/plugins/SubMirror/locale/uk/LC_MESSAGES/SubMirror.po +++ b/plugins/SubMirror/locale/uk/LC_MESSAGES/SubMirror.po @@ -9,20 +9,21 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - SubMirror\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-06 02:34+0100\n" -"PO-Revision-Date: 2011-03-06 01:38:18+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:52:01+0000\n" "Language-Team: Ukrainian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-03 17:47:23+0000\n" -"X-Generator: MediaWiki 1.18alpha (r83348); Translate extension (2011-03-04)\n" +"X-POT-Import-Date: 2011-03-06 02:19:34+0000\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: uk\n" "X-Message-Group: #out-statusnet-plugin-submirror\n" "Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= " "2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n" -msgid "Invalid feed URL." +#, fuzzy, php-format +msgid "Invalid feed URL: %s" msgstr "Помилкова URL-адреса веб-стрічки." #. TRANS: Error message returned to user when setting up feed mirroring, but we were unable to resolve the given URL to a working feed. @@ -91,6 +92,9 @@ msgctxt "BUTTON" msgid "Add feed" msgstr "Додати веб-стрічку" +msgid "Twitter username:" +msgstr "" + msgctxt "LABEL" msgid "Remote feed:" msgstr "Віддалена веб-стрічка:" @@ -116,3 +120,12 @@ msgstr "Зберегти" msgid "Stop mirroring" msgstr "Зупинити віддзеркалення" + +msgid "Twitter" +msgstr "" + +msgid "RSS or Atom feed" +msgstr "" + +msgid "Select a feed provider" +msgstr "" diff --git a/plugins/TagSub/locale/TagSub.pot b/plugins/TagSub/locale/TagSub.pot new file mode 100644 index 0000000000..7992067332 --- /dev/null +++ b/plugins/TagSub/locale/TagSub.pot @@ -0,0 +1,98 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: tagunsubform.php:96 tagunsubform.php:107 +msgid "Unsubscribe from this tag" +msgstr "" + +#. TRANS: Plugin description. +#: TagSubPlugin.php:128 +msgid "Plugin to allow following all messages with a given tag." +msgstr "" + +#. TRANS: SubMirror plugin menu item on user settings page. +#: TagSubPlugin.php:202 +msgctxt "MENU" +msgid "Tags" +msgstr "" + +#. TRANS: SubMirror plugin tooltip for user settings menu item. +#: TagSubPlugin.php:204 +msgid "Configure tag subscriptions" +msgstr "" + +#: TagSubPlugin.php:225 +msgid "Tag subscriptions" +msgstr "" + +#: tagsubform.php:116 tagsubform.php:140 +msgid "Subscribe to this tag" +msgstr "" + +#. TRANS: Page title when tag unsubscription succeeded. +#: tagunsubaction.php:76 +msgid "Unsubscribed" +msgstr "" + +#. TRANS: Page title when tag subscription succeeded. +#: tagsubaction.php:136 +msgid "Subscribed" +msgstr "" + +#. TRANS: Header for subscriptions overview for a user (first page). +#. TRANS: %s is a user nickname. +#: tagsubsaction.php:51 +#, php-format +msgid "%s's tag subscriptions" +msgstr "" + +#. TRANS: Header for subscriptions overview for a user (not first page). +#. TRANS: %1$s is a user nickname, %2$d is the page number. +#: tagsubsaction.php:55 +#, php-format +msgid "%1$s's tag subscriptions, page %2$d" +msgstr "" + +#. TRANS: Page notice for page with an overview of all tag subscriptions +#. TRANS: of the logged in user's own profile. +#: tagsubsaction.php:68 +msgid "" +"You have subscribed to receive all notices on this site containing the " +"following tags:" +msgstr "" + +#. TRANS: Page notice for page with an overview of all subscriptions of a user other +#. TRANS: than the logged in user. %s is the user nickname. +#: tagsubsaction.php:73 +#, php-format +msgid "" +"%s has subscribed to receive all notices on this site containing the " +"following tags:" +msgstr "" + +#. TRANS: Subscription list text when looking at the subscriptions for a of a user that has none +#. TRANS: as an anonymous user. %s is the user nickname. +#: tagsubsaction.php:130 +#, php-format +msgid "%s is not listening to any tags." +msgstr "" + +#: tagsubsaction.php:168 +#, php-format +msgid "#%s since %s" +msgstr "" diff --git a/plugins/UserLimit/locale/fa/LC_MESSAGES/UserLimit.po b/plugins/UserLimit/locale/fa/LC_MESSAGES/UserLimit.po new file mode 100644 index 0000000000..f6f0b0df66 --- /dev/null +++ b/plugins/UserLimit/locale/fa/LC_MESSAGES/UserLimit.po @@ -0,0 +1,25 @@ +# Translation of StatusNet - UserLimit to Persian (فارسی) +# Exported from translatewiki.net +# +# Author: Ebraminio +# -- +# This file is distributed under the same license as the StatusNet package. +# +msgid "" +msgstr "" +"Project-Id-Version: StatusNet - UserLimit\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:52:14+0000\n" +"Language-Team: Persian \n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2011-03-06 02:19:38+0000\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" +"X-Translation-Project: translatewiki.net at http://translatewiki.net\n" +"X-Language-Code: fa\n" +"X-Message-Group: #out-statusnet-plugin-userlimit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Limit the number of users who can register." +msgstr "محدودکردن تعداد کاربرانی که می‌توانید ثبت نام کنند." diff --git a/plugins/YammerImport/locale/ru/LC_MESSAGES/YammerImport.po b/plugins/YammerImport/locale/ru/LC_MESSAGES/YammerImport.po index ad166e3bb3..905d18a257 100644 --- a/plugins/YammerImport/locale/ru/LC_MESSAGES/YammerImport.po +++ b/plugins/YammerImport/locale/ru/LC_MESSAGES/YammerImport.po @@ -10,13 +10,13 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - YammerImport\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-06 02:34+0100\n" -"PO-Revision-Date: 2011-03-06 01:38:37+0000\n" +"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"PO-Revision-Date: 2011-03-17 09:52:24+0000\n" "Language-Team: Russian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-03 17:47:55+0000\n" -"X-Generator: MediaWiki 1.18alpha (r83348); Translate extension (2011-03-04)\n" +"X-POT-Import-Date: 2011-03-06 02:19:42+0000\n" +"X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ru\n" "X-Message-Group: #out-statusnet-plugin-yammerimport\n" @@ -100,12 +100,12 @@ msgstr[2] "Импортировано %d пользователей." msgid "Import user groups" msgstr "Импорт групп пользователей" -#, php-format +#, fuzzy, php-format msgid "Importing %d group..." msgid_plural "Importing %d groups..." msgstr[0] "Импорт %d группы…" msgstr[1] "Импорт %d группы…" -msgstr[2] "" +msgstr[2] "Импорт %d группы…" #, php-format msgid "Imported %d group." From 3d835bb8b5473783fffb571ccc7f51b6b82b225e Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Thu, 17 Mar 2011 11:38:18 +0100 Subject: [PATCH 137/146] Translator documentation added/updated. i18n/L10n updates. --- .../actions/profiledetailsettings.php | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/plugins/ExtendedProfile/actions/profiledetailsettings.php b/plugins/ExtendedProfile/actions/profiledetailsettings.php index 23a6ce5d65..f01c25fc5f 100644 --- a/plugins/ExtendedProfile/actions/profiledetailsettings.php +++ b/plugins/ExtendedProfile/actions/profiledetailsettings.php @@ -37,7 +37,7 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction function getInstructions() { // TRANS: Usage instructions for profile settings. - return _('You can update your personal profile info here '. + return _m('You can update your personal profile info here '. 'so people know more about you.'); } @@ -70,7 +70,7 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction if ($this->arg('save')) { $this->saveDetails(); } else { - // TRANS: Message given submitting a form with an unknown action + // TRANS: Message given submitting a form with an unknown action. $this->showForm(_m('Unexpected form submission.')); } } @@ -133,7 +133,7 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction return; } - $this->showForm(_('Details saved.'), true); + $this->showForm(_m('Details saved.'), true); } @@ -142,6 +142,8 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction if (empty($datestr)) { if ($required) { $msg = sprintf( + // TRANS: Exception thrown when no date was entered in a required date field. + // TRANS: %s is the field name. _m('You must supply a date for "%s".'), $fieldname ); @@ -152,7 +154,9 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction if ($ts === false) { throw new Exception( sprintf( - _m('Invalid date entered for "%s": %s'), + // TRANS: Exception thrown on incorrect data input. + // TRANS: %1$s is a field name, %2$s is the incorrect input. + _m('Invalid date entered for "%1$s": %2$s.'), $fieldname, $ts ) @@ -266,7 +270,9 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction $site['value'], array('allowed_schemes' => array('http', 'https'))) ) { - throw new Exception(sprintf(_m('Invalid URL: %s'), $site['value'])); + // TRANS: Exception thrown when entering an invalid URL. + // TRANS: %s is the invalid URL. + throw new Exception(sprintf(_m('Invalid URL: %s.'), $site['value'])); } if (!empty($site['value'])) { @@ -613,7 +619,7 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction if ($result === false) { common_log_db_error($profile, 'UPDATE', __FILE__); // TRANS: Server error thrown when user profile settings could not be saved. - $this->serverError(_('Could not save profile.')); + $this->serverError(_m('Could not save profile.')); return; } @@ -622,7 +628,7 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction if (!$result) { // TRANS: Server error thrown when user profile settings tags could not be saved. - $this->serverError(_('Could not save tags.')); + $this->serverError(_m('Could not save tags.')); return; } From 9785140da58bb8df330445bbf9fa0b0f8fe65835 Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Thu, 17 Mar 2011 11:46:49 +0100 Subject: [PATCH 138/146] Update translator documentation. L10n/i18n updates. Superfluous whitespace removed. --- actions/tagother.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/actions/tagother.php b/actions/tagother.php index 258c13bdcc..c3bf219f67 100644 --- a/actions/tagother.php +++ b/actions/tagother.php @@ -21,6 +21,7 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); } require_once(INSTALLDIR.'/lib/settingsaction.php'); +// @todo FIXME: documentation missing. class TagotherAction extends Action { var $profile = null; @@ -127,10 +128,10 @@ class TagotherAction extends Action $this->elementStart('li'); $this->input('tags', _('Tags'), ($this->arg('tags')) ? $this->arg('tags') : implode(' ', Profile_tag::getTags($user->id, $this->profile->id)), - _('Tags for this user (letters, numbers, -, ., and _), comma- or space- separated')); + _('Tags for this user (letters, numbers, -, ., and _), separated by commas or spaces.')); $this->elementEnd('li'); $this->elementEnd('ul'); - $this->submit('save', _('Save')); + $this->submit('save', _m('BUTTON','Save')); $this->elementEnd('fieldset'); $this->elementEnd('form'); } @@ -154,7 +155,9 @@ class TagotherAction extends Action foreach ($tags as $tag) { if (!common_valid_profile_tag($tag)) { - $this->showForm(sprintf(_('Invalid tag: "%s"'), $tag)); + // TRANS: Form validation error when entering an invalid tag. + // TRANS: %s is the invalid tag. + $this->showForm(sprintf(_('Invalid tag: "%s".'), $tag)); return; } } @@ -217,4 +220,3 @@ class TagotherAction extends Action } } } - From 726ddf7b4277f277bac73eef4b1a79a2e360dcf8 Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Thu, 17 Mar 2011 11:54:18 +0100 Subject: [PATCH 139/146] L10n updates. Translator documentation. --- plugins/SubMirror/actions/basemirror.php | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/plugins/SubMirror/actions/basemirror.php b/plugins/SubMirror/actions/basemirror.php index 843dfb92e1..6a9109d13a 100644 --- a/plugins/SubMirror/actions/basemirror.php +++ b/plugins/SubMirror/actions/basemirror.php @@ -68,7 +68,9 @@ abstract class BaseMirrorAction extends Action if (common_valid_http_url($url)) { return $url; } else { - $this->clientError(sprintf(_m("Invalid feed URL: %s"), $url)); + // TRANS: Client error displayed when entering an invalid URL for a feed. + // TRANS: %s is the invalid feed URL. + $this->clientError(sprintf(_m("Invalid feed URL: %s."), $url)); } } @@ -79,8 +81,9 @@ abstract class BaseMirrorAction extends Action if ($profile && $profile->id != $this->user->id) { return $profile; } - // TRANS: Error message returned to user when setting up feed mirroring, but we were unable to resolve the given URL to a working feed. - $this->clientError(_m("Invalid profile for mirroring.")); + // TRANS: Error message returned to user when setting up feed mirroring, + // TRANS: but we were unable to resolve the given URL to a working feed. + $this->clientError(_m('Invalid profile for mirroring.')); } /** @@ -98,7 +101,7 @@ abstract class BaseMirrorAction extends Action $oprofile = Ostatus_profile::ensureFeedURL($url); } if ($oprofile->isGroup()) { - $this->clientError(_m("Can't mirror a StatusNet group at this time.")); + $this->clientError(_m("Cannot mirror a StatusNet group at this time.")); } $this->oprofile = $oprofile; // @fixme ugly side effect :D return $oprofile->localProfile(); From 49952b08e19842e3f9ab8ad242b6f89ea704afd5 Mon Sep 17 00:00:00 2001 From: Samantha Doherty Date: Thu, 17 Mar 2011 08:32:18 -0400 Subject: [PATCH 140/146] A little more quick styling for Events. --- plugins/Event/EventPlugin.php | 2 +- theme/neo/css/display.css | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/plugins/Event/EventPlugin.php b/plugins/Event/EventPlugin.php index 5a6add9385..1ee6ef4309 100644 --- a/plugins/Event/EventPlugin.php +++ b/plugins/Event/EventPlugin.php @@ -297,7 +297,7 @@ class EventPlugin extends MicroappPlugin } // @fixme we have to start the name/avatar and open this div - $out->elementStart('div', array('class' => 'event-info')); // EVENT-INFO.ENTRY-CONTENT IN + $out->elementStart('div', array('class' => 'event-info entry-content')); // EVENT-INFO.ENTRY-CONTENT IN $profile = $notice->getProfile(); $avatar = $profile->getAvatar(AVATAR_MINI_SIZE); diff --git a/theme/neo/css/display.css b/theme/neo/css/display.css index b13a74d667..cf3d5ca646 100644 --- a/theme/neo/css/display.css +++ b/theme/neo/css/display.css @@ -27,6 +27,8 @@ input, textarea, select, option { a {color: #3e3e8c;} a:hover {color: blue;} +abbr {border-bottom: none;} + h1 {font-size: 1.6em;} h2 {font-size: 1.6em;} h3 {font-size: 1.4em;} @@ -1146,13 +1148,26 @@ table.profile_list tr.alt { /* Event specific styles */ +.notice .event div { + margin-bottom: 8px; +} + +.event-info { + margin-left: 0px !important; + margin-top: 2px !important; +} + +.notice .event-info + .notice-options { + margin-top: 14px; +} + #form_event_rsvp #new_rsvp_data { display: inline; margin: 10px 0px; } #form_event_rsvp input.submit { - height: 1.6em; + height: auto; padding: 0px 10px; margin-left: 10px; color:#fff; From e845d6a8bfcbbffe03fcd4803eda0cda4bdfd974 Mon Sep 17 00:00:00 2001 From: Samantha Doherty Date: Thu, 17 Mar 2011 08:38:25 -0400 Subject: [PATCH 141/146] A few general style updates and fixes. --- theme/neo/css/display.css | 85 ++++++++++++++++++++++++++++++++++----- 1 file changed, 76 insertions(+), 9 deletions(-) diff --git a/theme/neo/css/display.css b/theme/neo/css/display.css index cf3d5ca646..643a1f29dd 100644 --- a/theme/neo/css/display.css +++ b/theme/neo/css/display.css @@ -304,10 +304,36 @@ address { display: none; /* XXX move into input with js */ } -.form_notice textarea, .form_notice_placeholder .placeholder { width: 473px; + padding: 4px 10px 4px 10px; + border: 1px solid #a6a6a6; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.2); + -webkit-box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.2); + z-index: 97; + font-size: 1em; } + +.form_notice textarea { + width: 473px; + height: 42px; + padding: 6px 10px 18px 10px; + border: 1px solid #a6a6a6; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.2); + -webkit-box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.2); + z-index: 97; + font-size: 1.2em; +} + + .form_notice textarea { height: 42px; padding: 6px 10px 18px 10px; @@ -364,7 +390,7 @@ address { float: none; clear: none; margin-left: 0px; - margin-top: 5px; + margin-top: 10px; padding: 5px 5px 5px 10px; border: 1px solid #ccc; } @@ -443,12 +469,12 @@ address { } .section ul.entities { - width: 220px; + width: 240px; } .section .entities li { - margin-right: 17px; - margin-bottom: 10px; + margin-right: 23px; + margin-bottom: 12px; width: 24px; } @@ -552,6 +578,8 @@ div.entry-content a.response:after { } #content .notice .threaded-replies .notice { + width: 440px; + min-height: 1px; padding-bottom: 14px; padding-top: 5px; border-bottom: 2px dotted #eee; @@ -583,7 +611,7 @@ div.entry-content a.response:after { clear:left; float:left; margin-left: 35px; - margin-top: 10px; + margin-top: 4px !important; } .threaded-replies li { @@ -636,6 +664,26 @@ div.entry-content a.response:after { width: 390px; } +#content .notice .notice { + width: 100%; + margin-left: 0; + margin-top: 16px; + margin-bottom: 10px; +} + +.notice .notice { +background-color:rgba(200, 200, 200, 0.050); +} +.notice .notice .notice { +background-color:rgba(200, 200, 200, 0.100); +} +.notice .notice .notice .notice { +background-color:rgba(200, 200, 200, 0.150); +} +.notice .notice .notice .notice .notice { +background-color:rgba(200, 200, 200, 0.300); +} + .pagination { height: 1.2em; } @@ -864,6 +912,18 @@ padding-right:0; padding-left: 4px !important; padding-right: 4px !important; margin-right: 0px; + left: 0; + right: 0; + width: 400px; + overflow: visible; +} + +.realtime-popup .threaded-replies { + margin-left: 10px; +} + +.realtime-popup .input_forms { + display: none; /* XXX fixme! */ } .realtime-popup .form_notice textarea { @@ -946,7 +1006,7 @@ ul.bookmark-tags a { background: #f2f2f2; color: #3e3e8c !important; text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.5); - font-size: 0.9em; + font-size: 0.88em; } ul.bookmark-tags a:hover { @@ -961,7 +1021,7 @@ ul.bookmark-tags a:hover { } .bookmark div.entry-content { - font-size: 0.9em; + font-size: 0.88em; line-height: 1.2em; margin-top: 6px; opacity: 0.6; @@ -1024,6 +1084,9 @@ ul.bookmark-tags a:hover { /* Onboard specific styles */ .onboard-flash { + position: relative; + right: -800px; + top: 10px; border-radius: 6px; -moz-border-radius: 6px; -webkit-border-radius: 6px; @@ -1148,7 +1211,7 @@ table.profile_list tr.alt { /* Event specific styles */ -.notice .event div { +.notice .vevent div { margin-bottom: 8px; } @@ -1161,6 +1224,10 @@ table.profile_list tr.alt { margin-top: 14px; } +.notice .threaded-replies .event-info + .notice-options { + margin-top: 20px; +} + #form_event_rsvp #new_rsvp_data { display: inline; margin: 10px 0px; From b74a7d7a75a3d72c44790f3e96af33558aea2ee8 Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Thu, 17 Mar 2011 12:08:44 +0100 Subject: [PATCH 142/146] Change email to SMS. Spotted by Nikerabbit. --- actions/smssettings.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/actions/smssettings.php b/actions/smssettings.php index cdf99a56d9..1545679c17 100644 --- a/actions/smssettings.php +++ b/actions/smssettings.php @@ -409,7 +409,7 @@ class SmssettingsAction extends SettingsAction if (!$result) { common_log_db_error($confirm, 'DELETE', __FILE__); // TRANS: Server error thrown on database error canceling SMS phone number confirmation. - $this->serverError(_('Could not delete email confirmation.')); + $this->serverError(_('Could not delete SMS confirmation.')); return; } From a9f556795b5154fbb2880d816b83bee68b242bdb Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Thu, 17 Mar 2011 13:58:52 +0100 Subject: [PATCH 143/146] Localisation updates from http://translatewiki.net. --- locale/ar/LC_MESSAGES/statusnet.po | 105 +------- locale/arz/LC_MESSAGES/statusnet.po | 23 +- locale/bg/LC_MESSAGES/statusnet.po | 24 +- locale/br/LC_MESSAGES/statusnet.po | 24 +- locale/ca/LC_MESSAGES/statusnet.po | 104 +------- locale/cs/LC_MESSAGES/statusnet.po | 103 +------- locale/de/LC_MESSAGES/statusnet.po | 104 +------- locale/en_GB/LC_MESSAGES/statusnet.po | 104 +------- locale/eo/LC_MESSAGES/statusnet.po | 103 +------- locale/es/LC_MESSAGES/statusnet.po | 104 +------- locale/fa/LC_MESSAGES/statusnet.po | 103 +------- locale/fi/LC_MESSAGES/statusnet.po | 26 +- locale/fr/LC_MESSAGES/statusnet.po | 105 +------- locale/fur/LC_MESSAGES/statusnet.po | 23 +- locale/gl/LC_MESSAGES/statusnet.po | 103 +------- locale/hsb/LC_MESSAGES/statusnet.po | 23 +- locale/hu/LC_MESSAGES/statusnet.po | 23 +- locale/ia/LC_MESSAGES/statusnet.po | 103 +------- locale/it/LC_MESSAGES/statusnet.po | 107 +------- locale/ja/LC_MESSAGES/statusnet.po | 25 +- locale/ka/LC_MESSAGES/statusnet.po | 24 +- locale/ko/LC_MESSAGES/statusnet.po | 25 +- locale/mk/LC_MESSAGES/statusnet.po | 104 +------- locale/ml/LC_MESSAGES/statusnet.po | 20 +- locale/nb/LC_MESSAGES/statusnet.po | 24 +- locale/nl/LC_MESSAGES/statusnet.po | 180 +++---------- locale/pl/LC_MESSAGES/statusnet.po | 107 +------- locale/pt/LC_MESSAGES/statusnet.po | 103 +------- locale/pt_BR/LC_MESSAGES/statusnet.po | 105 +------- locale/ru/LC_MESSAGES/statusnet.po | 249 ++++++------------ locale/statusnet.pot | 50 ++-- locale/sv/LC_MESSAGES/statusnet.po | 104 +------- locale/te/LC_MESSAGES/statusnet.po | 23 +- locale/tr/LC_MESSAGES/statusnet.po | 27 +- locale/uk/LC_MESSAGES/statusnet.po | 101 +------ locale/zh_CN/LC_MESSAGES/statusnet.po | 104 +------- .../locale/ExtendedProfile.pot | 44 +++- .../locale/br/LC_MESSAGES/ExtendedProfile.po | 37 ++- .../locale/ia/LC_MESSAGES/ExtendedProfile.po | 37 ++- .../locale/mk/LC_MESSAGES/ExtendedProfile.po | 37 ++- .../locale/nl/LC_MESSAGES/ExtendedProfile.po | 72 +++-- .../locale/sv/LC_MESSAGES/ExtendedProfile.po | 37 ++- .../locale/uk/LC_MESSAGES/ExtendedProfile.po | 37 ++- plugins/SubMirror/locale/SubMirror.pot | 25 +- .../locale/de/LC_MESSAGES/SubMirror.po | 16 +- .../locale/fr/LC_MESSAGES/SubMirror.po | 16 +- .../locale/ia/LC_MESSAGES/SubMirror.po | 16 +- .../locale/mk/LC_MESSAGES/SubMirror.po | 16 +- .../locale/nl/LC_MESSAGES/SubMirror.po | 26 +- .../locale/tl/LC_MESSAGES/SubMirror.po | 16 +- .../locale/uk/LC_MESSAGES/SubMirror.po | 16 +- 51 files changed, 777 insertions(+), 2460 deletions(-) diff --git a/locale/ar/LC_MESSAGES/statusnet.po b/locale/ar/LC_MESSAGES/statusnet.po index 9650e26148..a2767e3bf0 100644 --- a/locale/ar/LC_MESSAGES/statusnet.po +++ b/locale/ar/LC_MESSAGES/statusnet.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:49:21+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:37:44+0000\n" "Language-Team: Arabic \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -24,7 +24,7 @@ msgstr "" "Plural-Forms: nplurals=6; plural=(n == 0) ? 0 : ( (n == 1) ? 1 : ( (n == " "2) ? 2 : ( (n%100 >= 3 && n%100 <= 10) ? 3 : ( (n%100 >= 11 && n%100 <= " "99) ? 4 : 5 ) ) ) );\n" -"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" +"X-POT-Import-Date: 2011-03-17 10:19:27+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -3895,6 +3895,8 @@ msgstr "الاسم طويل جدا (الأقصى 255 حرفا)." #. TRANS: Validation error in form for profile settings. #. TRANS: %s is an invalid tag. +#. TRANS: Form validation error when entering an invalid tag. +#. TRANS: %s is the invalid tag. #, fuzzy, php-format msgid "Invalid tag: \"%s\"." msgstr "وسم غير صالح: \"%s\"" @@ -4716,9 +4718,8 @@ msgstr "نتائج البحث ل\"%1$s\" على %2$s" msgid "Notice deleted." msgstr "حُذف الإشعار." -#, fuzzy msgid "Notice" -msgstr "الإشعارات" +msgstr "إشعارات" #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #, fuzzy, php-format @@ -5252,15 +5253,11 @@ msgstr "اوسم المستخدم" #, fuzzy msgid "" -"Tags for this user (letters, numbers, -, ., and _), comma- or space- " -"separated" +"Tags for this user (letters, numbers, -, ., and _), separated by commas or " +"spaces." msgstr "" "سِم نفسك (حروف وأرقام و \"-\" و \".\" و \"_\")، افصلها بفاصلة (',') أو مسافة." -#, php-format -msgid "Invalid tag: \"%s\"" -msgstr "وسم غير صالح: \"%s\"" - msgid "" "You can only tag people you are subscribed to or who are subscribed to you." msgstr "" @@ -8244,87 +8241,5 @@ msgstr "" msgid "Getting backup from file '%s'." msgstr "" -#~ msgid "Note" -#~ msgstr "ملاحظة" - -#~ msgid "" -#~ "Commands:\n" -#~ "on - turn on notifications\n" -#~ "off - turn off notifications\n" -#~ "help - show this help\n" -#~ "follow - subscribe to user\n" -#~ "groups - lists the groups you have joined\n" -#~ "subscriptions - list the people you follow\n" -#~ "subscribers - list the people that follow you\n" -#~ "leave - unsubscribe from user\n" -#~ "d - direct message to user\n" -#~ "get - get last notice from user\n" -#~ "whois - get profile info on user\n" -#~ "lose - force user to stop following you\n" -#~ "fav - add user's last notice as a 'fave'\n" -#~ "fav # - add notice with the given id as a 'fave'\n" -#~ "repeat # - repeat a notice with a given id\n" -#~ "repeat - repeat the last notice from user\n" -#~ "reply # - reply to notice with a given id\n" -#~ "reply - reply to the last notice from user\n" -#~ "join - join group\n" -#~ "login - Get a link to login to the web interface\n" -#~ "drop - leave group\n" -#~ "stats - get your stats\n" -#~ "stop - same as 'off'\n" -#~ "quit - same as 'off'\n" -#~ "sub - same as 'follow'\n" -#~ "unsub - same as 'leave'\n" -#~ "last - same as 'get'\n" -#~ "on - not yet implemented.\n" -#~ "off - not yet implemented.\n" -#~ "nudge - remind a user to update.\n" -#~ "invite - not yet implemented.\n" -#~ "track - not yet implemented.\n" -#~ "untrack - not yet implemented.\n" -#~ "track off - not yet implemented.\n" -#~ "untrack all - not yet implemented.\n" -#~ "tracks - not yet implemented.\n" -#~ "tracking - not yet implemented.\n" -#~ msgstr "" -#~ "الأوامر:\n" -#~ "on - شغّل الإشعار\n" -#~ "off - أطفئ الإشعار\n" -#~ "help - أظهر هذه المساعدة\n" -#~ "follow - اشترك بالمستخدم\n" -#~ "groups - اسرد المجموعات التي أنا عضو فيها\n" -#~ "subscriptions - اسرد الذين أتابعهم\n" -#~ "subscribers - اسرد الذين يتابعونني\n" -#~ "leave - ألغِ الاشتراك بمستخدم\n" -#~ "d - وجّه رسالة مباشرة إلى مستخدم\n" -#~ "get - اجلب آخر رسالة من مستخدم\n" -#~ "whois - اجلب معلومات ملف المستخدم\n" -#~ "lose - أجبر المستخدم على عدم تتبعك\n" -#~ "fav - اجعل آخر إشعار من المستخدم مفضلًا\n" -#~ "fav # - اجعل الإشعار ذا رقم الهوية المعطى مفضلا\n" -#~ "repeat # - كرّر الإشعار ذا رقم الهوية المعطى\n" -#~ "repeat - كرّر آخر إشعار من المستخدم\n" -#~ "reply # - رُد على الإشعار ذي رقم الهوية المعطى\n" -#~ "reply - رُد على آخر إشعار من المستخدم\n" -#~ "join - انضم إلى مجموعة\n" -#~ "login - اجلب وصلة الولوج إلى واجهة الوب\n" -#~ "drop - اترك المجموعة\n" -#~ "stats - اجلب إحصاءاتك\n" -#~ "stop - مثل 'off'\n" -#~ "quit - مثل 'off'\n" -#~ "sub - مثل 'follow'\n" -#~ "unsub - مثل 'leave'\n" -#~ "last - مثل 'get'\n" -#~ "on - لم يطبق بعد.\n" -#~ "off - لم يطبق بعد.\n" -#~ "nudge - ذكّر مستخدمًا بإشعار أرسلته.\n" -#~ "invite - لم يطبق بعد.\n" -#~ "track - لم يطبق بعد.\n" -#~ "untrack - لم يطبق بعد.\n" -#~ "track off - لم يطبق بعد.\n" -#~ "untrack all - لم يطبق بعد.\n" -#~ "tracks - لم يطبق بعد.\n" -#~ "tracking - لم يطبق بعد.\n" - -#~ msgid "Edit Avatar" -#~ msgstr "عدّل الأفتار" +#~ msgid "Invalid tag: \"%s\"" +#~ msgstr "وسم غير صالح: \"%s\"" diff --git a/locale/arz/LC_MESSAGES/statusnet.po b/locale/arz/LC_MESSAGES/statusnet.po index ece9e2217b..402f98dd2d 100644 --- a/locale/arz/LC_MESSAGES/statusnet.po +++ b/locale/arz/LC_MESSAGES/statusnet.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:49:22+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:37:45+0000\n" "Language-Team: Egyptian Spoken Arabic \n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,7 +23,7 @@ msgstr "" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=6; plural= n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" -"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" +"X-POT-Import-Date: 2011-03-17 10:19:27+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -3935,6 +3935,8 @@ msgstr "الاسم طويل جدا (اكتر حاجه 255 رمز)." #. TRANS: Validation error in form for profile settings. #. TRANS: %s is an invalid tag. +#. TRANS: Form validation error when entering an invalid tag. +#. TRANS: %s is the invalid tag. #, fuzzy, php-format msgid "Invalid tag: \"%s\"." msgstr "وسم غير صالح: \"%s\"" @@ -5292,14 +5294,10 @@ msgid "Tag user" msgstr "اعمل tag لليوزر" msgid "" -"Tags for this user (letters, numbers, -, ., and _), comma- or space- " -"separated" +"Tags for this user (letters, numbers, -, ., and _), separated by commas or " +"spaces." msgstr "" -#, php-format -msgid "Invalid tag: \"%s\"" -msgstr "وسم غير صالح: \"%s\"" - msgid "" "You can only tag people you are subscribed to or who are subscribed to you." msgstr "" @@ -8280,8 +8278,5 @@ msgstr "" msgid "Getting backup from file '%s'." msgstr "" -#~ msgid "Note" -#~ msgstr "ملاحظة" - -#~ msgid "Edit Avatar" -#~ msgstr "عدّل الأفتار" +#~ msgid "Invalid tag: \"%s\"" +#~ msgstr "وسم غير صالح: \"%s\"" diff --git a/locale/bg/LC_MESSAGES/statusnet.po b/locale/bg/LC_MESSAGES/statusnet.po index 4d1cf6906c..2f63691648 100644 --- a/locale/bg/LC_MESSAGES/statusnet.po +++ b/locale/bg/LC_MESSAGES/statusnet.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:49:23+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:37:46+0000\n" "Language-Team: Bulgarian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -21,7 +21,7 @@ msgstr "" "X-Language-Code: bg\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" +"X-POT-Import-Date: 2011-03-17 10:19:27+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -3935,6 +3935,8 @@ msgstr "Името на езика е твърде дълго (може да е #. TRANS: Validation error in form for profile settings. #. TRANS: %s is an invalid tag. +#. TRANS: Form validation error when entering an invalid tag. +#. TRANS: %s is the invalid tag. #, fuzzy, php-format msgid "Invalid tag: \"%s\"." msgstr "Неправилен етикет: \"%s\"" @@ -4760,7 +4762,6 @@ msgstr "Съобщение от %1$s в %2$s" msgid "Notice deleted." msgstr "Бележката е изтрита." -#, fuzzy msgid "Notice" msgstr "Бележки" @@ -5291,14 +5292,10 @@ msgid "Tag user" msgstr "Етикети" msgid "" -"Tags for this user (letters, numbers, -, ., and _), comma- or space- " -"separated" +"Tags for this user (letters, numbers, -, ., and _), separated by commas or " +"spaces." msgstr "" -#, php-format -msgid "Invalid tag: \"%s\"" -msgstr "Неправилен етикет: \"%s\"" - msgid "" "You can only tag people you are subscribed to or who are subscribed to you." msgstr "" @@ -8231,8 +8228,5 @@ msgstr "" msgid "Getting backup from file '%s'." msgstr "" -#~ msgid "Note" -#~ msgstr "Бележка" - -#~ msgid "Edit Avatar" -#~ msgstr "Редактиране на аватара" +#~ msgid "Invalid tag: \"%s\"" +#~ msgstr "Неправилен етикет: \"%s\"" diff --git a/locale/br/LC_MESSAGES/statusnet.po b/locale/br/LC_MESSAGES/statusnet.po index 6bf976f0fd..2dd442d4dc 100644 --- a/locale/br/LC_MESSAGES/statusnet.po +++ b/locale/br/LC_MESSAGES/statusnet.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:49:25+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:37:47+0000\n" "Language-Team: Breton \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -22,7 +22,7 @@ msgstr "" "X-Language-Code: br\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" +"X-POT-Import-Date: 2011-03-17 10:19:27+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -3866,6 +3866,8 @@ msgstr "Re hir eo ar yezh (255 arouezenn d'ar muiañ)." #. TRANS: Validation error in form for profile settings. #. TRANS: %s is an invalid tag. +#. TRANS: Form validation error when entering an invalid tag. +#. TRANS: %s is the invalid tag. #, fuzzy, php-format msgid "Invalid tag: \"%s\"." msgstr "Balizenn direizh : \"%s\"" @@ -5223,17 +5225,14 @@ msgstr "Profil an implijer" msgid "Tag user" msgstr "Merkañ an implijer" +#, fuzzy msgid "" -"Tags for this user (letters, numbers, -, ., and _), comma- or space- " -"separated" +"Tags for this user (letters, numbers, -, ., and _), separated by commas or " +"spaces." msgstr "" "Merkoù evit an implijer-mañ (lizherennoù, sifroù, -, ., ha _), dispartiet " "gant virgulennoù pe gant esaouennoù" -#, php-format -msgid "Invalid tag: \"%s\"" -msgstr "Balizenn direizh : \"%s\"" - msgid "" "You can only tag people you are subscribed to or who are subscribed to you." msgstr "" @@ -8119,8 +8118,5 @@ msgstr "" msgid "Getting backup from file '%s'." msgstr "" -#~ msgid "Note" -#~ msgstr "Notenn" - -#~ msgid "Edit Avatar" -#~ msgstr "Kemmañ an Avatar" +#~ msgid "Invalid tag: \"%s\"" +#~ msgstr "Balizenn direizh : \"%s\"" diff --git a/locale/ca/LC_MESSAGES/statusnet.po b/locale/ca/LC_MESSAGES/statusnet.po index be175cd65b..f697268559 100644 --- a/locale/ca/LC_MESSAGES/statusnet.po +++ b/locale/ca/LC_MESSAGES/statusnet.po @@ -16,8 +16,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:49:26+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:37:49+0000\n" "Language-Team: Catalan \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -26,7 +26,7 @@ msgstr "" "X-Language-Code: ca\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" +"X-POT-Import-Date: 2011-03-17 10:19:27+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -3902,6 +3902,8 @@ msgstr "La llengua és massa llarga (màxim 50 caràcters)." #. TRANS: Validation error in form for profile settings. #. TRANS: %s is an invalid tag. +#. TRANS: Form validation error when entering an invalid tag. +#. TRANS: %s is the invalid tag. #, php-format msgid "Invalid tag: \"%s\"." msgstr "Etiqueta no vàlida: «%s»." @@ -4753,7 +4755,6 @@ msgstr "Missatge de %1$s a %2$s" msgid "Notice deleted." msgstr "S'ha eliminat l'avís." -#, fuzzy msgid "Notice" msgstr "Avisos" @@ -5298,17 +5299,14 @@ msgstr "Perfil de l'usuari" msgid "Tag user" msgstr "Etiqueta usuari" +#, fuzzy msgid "" -"Tags for this user (letters, numbers, -, ., and _), comma- or space- " -"separated" +"Tags for this user (letters, numbers, -, ., and _), separated by commas or " +"spaces." msgstr "" "Etiquetes d'aquest usuari (lletres, nombres,, -, ., i _), comes o separades " "amb espais" -#, php-format -msgid "Invalid tag: \"%s\"" -msgstr "L'etiqueta no és vàlida: «%s»" - msgid "" "You can only tag people you are subscribed to or who are subscribed to you." msgstr "" @@ -8298,87 +8296,5 @@ msgstr "L'XML no és vàlid, hi manca l'arrel XRD." msgid "Getting backup from file '%s'." msgstr "Es recupera la còpia de seguretat del fitxer '%s'." -#~ msgid "Note" -#~ msgstr "Avisos" - -#~ msgid "" -#~ "Commands:\n" -#~ "on - turn on notifications\n" -#~ "off - turn off notifications\n" -#~ "help - show this help\n" -#~ "follow - subscribe to user\n" -#~ "groups - lists the groups you have joined\n" -#~ "subscriptions - list the people you follow\n" -#~ "subscribers - list the people that follow you\n" -#~ "leave - unsubscribe from user\n" -#~ "d - direct message to user\n" -#~ "get - get last notice from user\n" -#~ "whois - get profile info on user\n" -#~ "lose - force user to stop following you\n" -#~ "fav - add user's last notice as a 'fave'\n" -#~ "fav # - add notice with the given id as a 'fave'\n" -#~ "repeat # - repeat a notice with a given id\n" -#~ "repeat - repeat the last notice from user\n" -#~ "reply # - reply to notice with a given id\n" -#~ "reply - reply to the last notice from user\n" -#~ "join - join group\n" -#~ "login - Get a link to login to the web interface\n" -#~ "drop - leave group\n" -#~ "stats - get your stats\n" -#~ "stop - same as 'off'\n" -#~ "quit - same as 'off'\n" -#~ "sub - same as 'follow'\n" -#~ "unsub - same as 'leave'\n" -#~ "last - same as 'get'\n" -#~ "on - not yet implemented.\n" -#~ "off - not yet implemented.\n" -#~ "nudge - remind a user to update.\n" -#~ "invite - not yet implemented.\n" -#~ "track - not yet implemented.\n" -#~ "untrack - not yet implemented.\n" -#~ "track off - not yet implemented.\n" -#~ "untrack all - not yet implemented.\n" -#~ "tracks - not yet implemented.\n" -#~ "tracking - not yet implemented.\n" -#~ msgstr "" -#~ "Ordres:\n" -#~ "on - activeu els avisos\n" -#~ "off - desactiveu els avisos\n" -#~ "help - mostra aquesta ajuda\n" -#~ "follow - se subscriu a l'usuari\n" -#~ "groups - llista els grups on us heu unit\n" -#~ "subscriptions - llista la gent que seguiu\n" -#~ "subscribers - llista la gent que us segueix\n" -#~ "leave - cancel·la la subscripció de l'usuari\n" -#~ "d - missatge directe a l'usuari\n" -#~ "get - s'obté el darrer avís de l'usuari\n" -#~ "whois - s'obté la informació del perfil de l'usuari\n" -#~ "lose - es força l'usuari a deixar de seguir-vos\n" -#~ "fav - afegeix el darrer avís de l'usuari com a «preferit»\n" -#~ "fav # - afegeix l'avís amb l'id donat com a «preferit»\n" -#~ "repeat # - repeteix l'avís amb l'id donat\n" -#~ "repeat - repeteix el darrer avís de l'usari\n" -#~ "reply # - respon l'avís amb l'id donat\n" -#~ "reply - respon el darrer avís de l'usuari\n" -#~ "join - s'uneix al grup\n" -#~ "login - s'obté un enllaç per iniciar una sessió des de la interfície web\n" -#~ "drop - es deixa el grup\n" -#~ "stats - s'obté el vostre estat\n" -#~ "stop - el mateix que «off»\n" -#~ "quit - el mateix que «off»\n" -#~ "sub - el mateix que «follow»\n" -#~ "unsub - el mateix que «leave»\n" -#~ "last - el mateix que «get»\n" -#~ "on - no s'ha implementat encara.\n" -#~ "off - no s'ha implementat encara.\n" -#~ "nudge - es recorda a l'usuari que actualitzi.\n" -#~ "invite - no s'ha implementat encara.\n" -#~ "track - no s'ha implementat encara.\n" -#~ "untrack - no s'ha implementat encara.\n" -#~ "track off - no s'ha implementat encara.\n" -#~ "untrack all - no s'ha implementat encara.\n" -#~ "tracks - no s'ha implementat encara.\n" -#~ "tracking - no s'ha implementat encara.\n" - -#~ msgid "Edit Avatar" -#~ msgstr "Edita l'avatar" +#~ msgid "Invalid tag: \"%s\"" +#~ msgstr "L'etiqueta no és vàlida: «%s»" diff --git a/locale/cs/LC_MESSAGES/statusnet.po b/locale/cs/LC_MESSAGES/statusnet.po index 6dc8c4efc7..6ff0c2fc0c 100644 --- a/locale/cs/LC_MESSAGES/statusnet.po +++ b/locale/cs/LC_MESSAGES/statusnet.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:49:27+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:37:50+0000\n" "Language-Team: Czech \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -22,7 +22,7 @@ msgstr "" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ( (n >= 2 && n <= 4) ? 1 : " "2 );\n" -"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" +"X-POT-Import-Date: 2011-03-17 10:19:27+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -3975,6 +3975,8 @@ msgstr "Jazyk je příliš dlouhý (max. 50 znaků)." #. TRANS: Validation error in form for profile settings. #. TRANS: %s is an invalid tag. +#. TRANS: Form validation error when entering an invalid tag. +#. TRANS: %s is the invalid tag. #, fuzzy, php-format msgid "Invalid tag: \"%s\"." msgstr "Neplatná velikost" @@ -5377,17 +5379,14 @@ msgstr "Uživatelský profil" msgid "Tag user" msgstr "Otagujte uživatele" +#, fuzzy msgid "" -"Tags for this user (letters, numbers, -, ., and _), comma- or space- " -"separated" +"Tags for this user (letters, numbers, -, ., and _), separated by commas or " +"spaces." msgstr "" "Tagy pro tohoto uživatele (písmena, číslice, -,., a _), oddělené čárkou nebo " "mezerou" -#, php-format -msgid "Invalid tag: \"%s\"" -msgstr "Neplatná velikost" - msgid "" "You can only tag people you are subscribed to or who are subscribed to you." msgstr "" @@ -8410,87 +8409,5 @@ msgstr "" msgid "Getting backup from file '%s'." msgstr "" -#~ msgid "Note" -#~ msgstr "Poznámka" - -#~ msgid "" -#~ "Commands:\n" -#~ "on - turn on notifications\n" -#~ "off - turn off notifications\n" -#~ "help - show this help\n" -#~ "follow - subscribe to user\n" -#~ "groups - lists the groups you have joined\n" -#~ "subscriptions - list the people you follow\n" -#~ "subscribers - list the people that follow you\n" -#~ "leave - unsubscribe from user\n" -#~ "d - direct message to user\n" -#~ "get - get last notice from user\n" -#~ "whois - get profile info on user\n" -#~ "lose - force user to stop following you\n" -#~ "fav - add user's last notice as a 'fave'\n" -#~ "fav # - add notice with the given id as a 'fave'\n" -#~ "repeat # - repeat a notice with a given id\n" -#~ "repeat - repeat the last notice from user\n" -#~ "reply # - reply to notice with a given id\n" -#~ "reply - reply to the last notice from user\n" -#~ "join - join group\n" -#~ "login - Get a link to login to the web interface\n" -#~ "drop - leave group\n" -#~ "stats - get your stats\n" -#~ "stop - same as 'off'\n" -#~ "quit - same as 'off'\n" -#~ "sub - same as 'follow'\n" -#~ "unsub - same as 'leave'\n" -#~ "last - same as 'get'\n" -#~ "on - not yet implemented.\n" -#~ "off - not yet implemented.\n" -#~ "nudge - remind a user to update.\n" -#~ "invite - not yet implemented.\n" -#~ "track - not yet implemented.\n" -#~ "untrack - not yet implemented.\n" -#~ "track off - not yet implemented.\n" -#~ "untrack all - not yet implemented.\n" -#~ "tracks - not yet implemented.\n" -#~ "tracking - not yet implemented.\n" -#~ msgstr "" -#~ "Příkazy:\n" -#~ "on - zapnout oznámení\n" -#~ "off - vypnout oznámení\n" -#~ "help - zobrazí tuto nápovědu\n" -#~ "follow - Přihlásit se k uživatel\n" -#~ "groups - seznam skupin, ke kterým jste připojen\n" -#~ "subscriptions - seznam lidí, které sledujete\n" -#~ "subscribers - seznam osob, které vás sledují\n" -#~ "leave - Odhlásit se od uživatele\n" -#~ "d - Přímá zpráva uživateli\n" -#~ "get - Dostanete poslední upozornění od uživatele\n" -#~ "whois - Získat informace o profilu uživatele\n" -#~ "lose - Donutit uživatele přestat vás sledovat\n" -#~ "fav - Přidejte uživatelovo poslední oznámení jako 'Oblíbené'\n" -#~ "fav # - Přidat upozornění s daným id jako 'Oblíbené'\n" -#~ "repeat # - Opakovat oznámení s daným id\n" -#~ "repeat - Opakovat poslední oznámení od uživatele\n" -#~ "reply # - Odpověď na oznámení s daným id\n" -#~ "reply - Odpověď na poslední oznámení od uživatele\n" -#~ "join - Připojit se ke skupině\n" -#~ "login - Získat odkaz pro přihlášení k webovému rozhraní\n" -#~ "drop - Opustit skupinu\n" -#~ "stats - získejte Vaše statistiky\n" -#~ "stop - stejné jako 'off'\n" -#~ "quit - stejné jako 'off'\n" -#~ "sub - Stejné jako 'follow'\n" -#~ "unsub - Stejné jako 'leave'\n" -#~ "last - Stejné jako 'get'\n" -#~ "on - Dosud neimplementován.\n" -#~ "off - Dosud neimplementován.\n" -#~ "nudge - Připomenout uživateli aby něco poslal.\n" -#~ "invite - Dosud neimplementován.\n" -#~ "track - Dosud neimplementován.\n" -#~ "untrack -Dosud neimplementován.\n" -#~ "track off - Dosud neimplementován.\n" -#~ "untrack all - Dosud neimplementován.\n" -#~ "tracks - Dosud neimplementován.\n" -#~ "tracking - Dosud neimplementován.\n" - -#~ msgid "Edit Avatar" -#~ msgstr "Upravit avatar" +#~ msgid "Invalid tag: \"%s\"" +#~ msgstr "Neplatná velikost" diff --git a/locale/de/LC_MESSAGES/statusnet.po b/locale/de/LC_MESSAGES/statusnet.po index 0ef7232dc1..c2e809c478 100644 --- a/locale/de/LC_MESSAGES/statusnet.po +++ b/locale/de/LC_MESSAGES/statusnet.po @@ -22,8 +22,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:49:28+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:37:51+0000\n" "Language-Team: German \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -32,7 +32,7 @@ msgstr "" "X-Language-Code: de\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" +"X-POT-Import-Date: 2011-03-17 10:19:27+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -3968,6 +3968,8 @@ msgstr "Die eingegebene Sprache ist zu lang (maximal 50 Zeichen)." #. TRANS: Validation error in form for profile settings. #. TRANS: %s is an invalid tag. +#. TRANS: Form validation error when entering an invalid tag. +#. TRANS: %s is the invalid tag. #, fuzzy, php-format msgid "Invalid tag: \"%s\"." msgstr "Ungültiges Stichwort: „%s“" @@ -4839,7 +4841,6 @@ msgstr "Nachricht von %1$s auf %2$s" msgid "Notice deleted." msgstr "Nachricht gelöscht." -#, fuzzy msgid "Notice" msgstr "Nachrichten" @@ -5385,17 +5386,14 @@ msgstr "Benutzerprofil" msgid "Tag user" msgstr "Benutzer taggen" +#, fuzzy msgid "" -"Tags for this user (letters, numbers, -, ., and _), comma- or space- " -"separated" +"Tags for this user (letters, numbers, -, ., and _), separated by commas or " +"spaces." msgstr "" "Tags dieses Benutzers (Buchstaben, Nummer, -, ., und _), durch Komma oder " "Leerzeichen getrennt" -#, php-format -msgid "Invalid tag: \"%s\"" -msgstr "Ungültiges Stichwort: „%s“" - msgid "" "You can only tag people you are subscribed to or who are subscribed to you." msgstr "" @@ -8405,87 +8403,5 @@ msgstr "Ungültiges XML, XRD-Root fehlt." msgid "Getting backup from file '%s'." msgstr "Hole Backup von der Datei „%s“." -#~ msgid "Note" -#~ msgstr "Nachricht" - -#~ msgid "" -#~ "Commands:\n" -#~ "on - turn on notifications\n" -#~ "off - turn off notifications\n" -#~ "help - show this help\n" -#~ "follow - subscribe to user\n" -#~ "groups - lists the groups you have joined\n" -#~ "subscriptions - list the people you follow\n" -#~ "subscribers - list the people that follow you\n" -#~ "leave - unsubscribe from user\n" -#~ "d - direct message to user\n" -#~ "get - get last notice from user\n" -#~ "whois - get profile info on user\n" -#~ "lose - force user to stop following you\n" -#~ "fav - add user's last notice as a 'fave'\n" -#~ "fav # - add notice with the given id as a 'fave'\n" -#~ "repeat # - repeat a notice with a given id\n" -#~ "repeat - repeat the last notice from user\n" -#~ "reply # - reply to notice with a given id\n" -#~ "reply - reply to the last notice from user\n" -#~ "join - join group\n" -#~ "login - Get a link to login to the web interface\n" -#~ "drop - leave group\n" -#~ "stats - get your stats\n" -#~ "stop - same as 'off'\n" -#~ "quit - same as 'off'\n" -#~ "sub - same as 'follow'\n" -#~ "unsub - same as 'leave'\n" -#~ "last - same as 'get'\n" -#~ "on - not yet implemented.\n" -#~ "off - not yet implemented.\n" -#~ "nudge - remind a user to update.\n" -#~ "invite - not yet implemented.\n" -#~ "track - not yet implemented.\n" -#~ "untrack - not yet implemented.\n" -#~ "track off - not yet implemented.\n" -#~ "untrack all - not yet implemented.\n" -#~ "tracks - not yet implemented.\n" -#~ "tracking - not yet implemented.\n" -#~ msgstr "" -#~ "Befehle:\n" -#~ "on - Benachrichtigung einschalten\n" -#~ "off - Benachrichtigung ausschalten\n" -#~ "help - diese Hilfe anzeigen\n" -#~ "follow - einem Benutzer folgen\n" -#~ "groups - Gruppen auflisten in denen du Mitglied bist\n" -#~ "subscriptions - Leute auflisten denen du folgst\n" -#~ "subscribers - Leute auflisten die dir folgen\n" -#~ "leave - einem Benutzer nicht mehr folgen\n" -#~ "d - Direkte Nachricht an einen Benutzer schicken\n" -#~ "get - letzte Nachricht eines Benutzers abrufen\n" -#~ "whois - Profil eines Benutzers abrufen\n" -#~ "lose - Benutzer zwingen dir nicht mehr zu folgen\n" -#~ "fav - letzte Nachricht eines Benutzers als Favorit markieren\n" -#~ "fav # - Nachricht mit bestimmter ID als Favorit markieren\n" -#~ "repeat # - Nachricht mit bestimmter ID wiederholen\n" -#~ "repeat - letzte Nachricht eines Benutzers wiederholen\n" -#~ "reply # - Nachricht mit bestimmter ID beantworten\n" -#~ "reply - letzte Nachricht eines Benutzers beantworten\n" -#~ "join - Gruppe beitreten\n" -#~ "login - Link zum Anmelden auf der Webseite anfordern\n" -#~ "drop - Gruppe verlassen\n" -#~ "stats - deine Statistik abrufen\n" -#~ "stop - Äquivalent zu „off“\n" -#~ "quit - Äquivalent zu „off“\n" -#~ "sub - Äquivalent zu „follow“\n" -#~ "unsub - Äquivalent zu „leave“\n" -#~ "last - Äquivalent zu „get“\n" -#~ "on - noch nicht implementiert\n" -#~ "off - noch nicht implementiert\n" -#~ "nudge - einen Benutzer ans Aktualisieren erinnern\n" -#~ "invite - noch nicht implementiert\n" -#~ "track - noch nicht implementiert\n" -#~ "untrack - noch nicht implementiert\n" -#~ "track off - noch nicht implementiert\n" -#~ "untrack all - noch nicht implementiert\n" -#~ "tracks - noch nicht implementiert\n" -#~ "tracking - noch nicht implementiert\n" - -#~ msgid "Edit Avatar" -#~ msgstr "Avatar bearbeiten" +#~ msgid "Invalid tag: \"%s\"" +#~ msgstr "Ungültiges Stichwort: „%s“" diff --git a/locale/en_GB/LC_MESSAGES/statusnet.po b/locale/en_GB/LC_MESSAGES/statusnet.po index 7289070638..2e129e5e6b 100644 --- a/locale/en_GB/LC_MESSAGES/statusnet.po +++ b/locale/en_GB/LC_MESSAGES/statusnet.po @@ -13,8 +13,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:49:29+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:37:53+0000\n" "Language-Team: British English \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -23,7 +23,7 @@ msgstr "" "X-Language-Code: en-gb\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" +"X-POT-Import-Date: 2011-03-17 10:19:27+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -3938,6 +3938,8 @@ msgstr "Language is too long (max 50 chars)." #. TRANS: Validation error in form for profile settings. #. TRANS: %s is an invalid tag. +#. TRANS: Form validation error when entering an invalid tag. +#. TRANS: %s is the invalid tag. #, fuzzy, php-format msgid "Invalid tag: \"%s\"." msgstr "Invalid tag: \"%s\"" @@ -4789,7 +4791,6 @@ msgstr "Message from %1$s on %2$s" msgid "Notice deleted." msgstr "Notice deleted." -#, fuzzy msgid "Notice" msgstr "Notices" @@ -5319,17 +5320,14 @@ msgstr "User profile" msgid "Tag user" msgstr "Tag user" +#, fuzzy msgid "" -"Tags for this user (letters, numbers, -, ., and _), comma- or space- " -"separated" +"Tags for this user (letters, numbers, -, ., and _), separated by commas or " +"spaces." msgstr "" "Tags for this user (letters, numbers, -, ., and _), comma- or space- " "separated" -#, php-format -msgid "Invalid tag: \"%s\"" -msgstr "Invalid tag: \"%s\"" - msgid "" "You can only tag people you are subscribed to or who are subscribed to you." msgstr "" @@ -8209,87 +8207,5 @@ msgstr "" msgid "Getting backup from file '%s'." msgstr "" -#~ msgid "Note" -#~ msgstr "Note" - -#~ msgid "" -#~ "Commands:\n" -#~ "on - turn on notifications\n" -#~ "off - turn off notifications\n" -#~ "help - show this help\n" -#~ "follow - subscribe to user\n" -#~ "groups - lists the groups you have joined\n" -#~ "subscriptions - list the people you follow\n" -#~ "subscribers - list the people that follow you\n" -#~ "leave - unsubscribe from user\n" -#~ "d - direct message to user\n" -#~ "get - get last notice from user\n" -#~ "whois - get profile info on user\n" -#~ "lose - force user to stop following you\n" -#~ "fav - add user's last notice as a 'fave'\n" -#~ "fav # - add notice with the given id as a 'fave'\n" -#~ "repeat # - repeat a notice with a given id\n" -#~ "repeat - repeat the last notice from user\n" -#~ "reply # - reply to notice with a given id\n" -#~ "reply - reply to the last notice from user\n" -#~ "join - join group\n" -#~ "login - Get a link to login to the web interface\n" -#~ "drop - leave group\n" -#~ "stats - get your stats\n" -#~ "stop - same as 'off'\n" -#~ "quit - same as 'off'\n" -#~ "sub - same as 'follow'\n" -#~ "unsub - same as 'leave'\n" -#~ "last - same as 'get'\n" -#~ "on - not yet implemented.\n" -#~ "off - not yet implemented.\n" -#~ "nudge - remind a user to update.\n" -#~ "invite - not yet implemented.\n" -#~ "track - not yet implemented.\n" -#~ "untrack - not yet implemented.\n" -#~ "track off - not yet implemented.\n" -#~ "untrack all - not yet implemented.\n" -#~ "tracks - not yet implemented.\n" -#~ "tracking - not yet implemented.\n" -#~ msgstr "" -#~ "Commands:\n" -#~ "on - turn on notifications\n" -#~ "off - turn off notifications\n" -#~ "help - show this help\n" -#~ "follow - subscribe to user\n" -#~ "groups - lists the groups you have joined\n" -#~ "subscriptions - list the people you follow\n" -#~ "subscribers - list the people that follow you\n" -#~ "leave - unsubscribe from user\n" -#~ "d - direct message to user\n" -#~ "get - get last notice from user\n" -#~ "whois - get profile info on user\n" -#~ "lose - force user to stop following you\n" -#~ "fav - add user's last notice as a 'fave'\n" -#~ "fav # - add notice with the given id as a 'fave'\n" -#~ "repeat # - repeat a notice with a given id\n" -#~ "repeat - repeat the last notice from user\n" -#~ "reply # - reply to notice with a given id\n" -#~ "reply - reply to the last notice from user\n" -#~ "join - join group\n" -#~ "login - Get a link to login to the web interface\n" -#~ "drop - leave group\n" -#~ "stats - get your stats\n" -#~ "stop - same as 'off'\n" -#~ "quit - same as 'off'\n" -#~ "sub - same as 'follow'\n" -#~ "unsub - same as 'leave'\n" -#~ "last - same as 'get'\n" -#~ "on - not yet implemented.\n" -#~ "off - not yet implemented.\n" -#~ "nudge - remind a user to update.\n" -#~ "invite - not yet implemented.\n" -#~ "track - not yet implemented.\n" -#~ "untrack - not yet implemented.\n" -#~ "track off - not yet implemented.\n" -#~ "untrack all - not yet implemented.\n" -#~ "tracks - not yet implemented.\n" -#~ "tracking - not yet implemented.\n" - -#~ msgid "Edit Avatar" -#~ msgstr "Edit Avatar" +#~ msgid "Invalid tag: \"%s\"" +#~ msgstr "Invalid tag: \"%s\"" diff --git a/locale/eo/LC_MESSAGES/statusnet.po b/locale/eo/LC_MESSAGES/statusnet.po index 029c3231b7..23778b484e 100644 --- a/locale/eo/LC_MESSAGES/statusnet.po +++ b/locale/eo/LC_MESSAGES/statusnet.po @@ -17,8 +17,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:49:30+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:37:54+0000\n" "Language-Team: Esperanto \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -27,7 +27,7 @@ msgstr "" "X-Language-Code: eo\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" +"X-POT-Import-Date: 2011-03-17 10:19:27+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -3906,6 +3906,8 @@ msgstr "Lingvo tro longas (maksimume 50 literoj)" #. TRANS: Validation error in form for profile settings. #. TRANS: %s is an invalid tag. +#. TRANS: Form validation error when entering an invalid tag. +#. TRANS: %s is the invalid tag. #, fuzzy, php-format msgid "Invalid tag: \"%s\"." msgstr "Nevalida markilo: \"%s\"" @@ -5297,17 +5299,14 @@ msgstr "Uzanta profilo" msgid "Tag user" msgstr "Etikedi uzanton" +#, fuzzy msgid "" -"Tags for this user (letters, numbers, -, ., and _), comma- or space- " -"separated" +"Tags for this user (letters, numbers, -, ., and _), separated by commas or " +"spaces." msgstr "" "Etikedoj por ĉi tiuj uzanto (literoj, ciferoj, -, . Kaj _), apartigu per " "komo aŭ spaco." -#, php-format -msgid "Invalid tag: \"%s\"" -msgstr "Nevalida markilo: \"%s\"" - msgid "" "You can only tag people you are subscribed to or who are subscribed to you." msgstr "Vi rajtas entikedi nur abonanton aŭ abonaton." @@ -8299,87 +8298,5 @@ msgstr "" msgid "Getting backup from file '%s'." msgstr "" -#~ msgid "Note" -#~ msgstr "Noto" - -#~ msgid "" -#~ "Commands:\n" -#~ "on - turn on notifications\n" -#~ "off - turn off notifications\n" -#~ "help - show this help\n" -#~ "follow - subscribe to user\n" -#~ "groups - lists the groups you have joined\n" -#~ "subscriptions - list the people you follow\n" -#~ "subscribers - list the people that follow you\n" -#~ "leave - unsubscribe from user\n" -#~ "d - direct message to user\n" -#~ "get - get last notice from user\n" -#~ "whois - get profile info on user\n" -#~ "lose - force user to stop following you\n" -#~ "fav - add user's last notice as a 'fave'\n" -#~ "fav # - add notice with the given id as a 'fave'\n" -#~ "repeat # - repeat a notice with a given id\n" -#~ "repeat - repeat the last notice from user\n" -#~ "reply # - reply to notice with a given id\n" -#~ "reply - reply to the last notice from user\n" -#~ "join - join group\n" -#~ "login - Get a link to login to the web interface\n" -#~ "drop - leave group\n" -#~ "stats - get your stats\n" -#~ "stop - same as 'off'\n" -#~ "quit - same as 'off'\n" -#~ "sub - same as 'follow'\n" -#~ "unsub - same as 'leave'\n" -#~ "last - same as 'get'\n" -#~ "on - not yet implemented.\n" -#~ "off - not yet implemented.\n" -#~ "nudge - remind a user to update.\n" -#~ "invite - not yet implemented.\n" -#~ "track - not yet implemented.\n" -#~ "untrack - not yet implemented.\n" -#~ "track off - not yet implemented.\n" -#~ "untrack all - not yet implemented.\n" -#~ "tracks - not yet implemented.\n" -#~ "tracking - not yet implemented.\n" -#~ msgstr "" -#~ "Komandoj:\n" -#~ "on — ŝalti sciigon;\n" -#~ "off — malŝalti sciigon;\n" -#~ "help — montri ĉi tiun helpon;\n" -#~ "follow — aboni uzanton;\n" -#~ "groups — listigi grupojn, kiujn vi aniĝis;\n" -#~ "subscriptions — listigi viajn abonatojn;\n" -#~ "subscribers — listigi viajn abonantojn;\n" -#~ "leave — malaboni uzanton;\n" -#~ "d — sendi rektan mesaĝon al uzanto;\n" -#~ "get — legi la lastan avizon de uzanto;\n" -#~ "whois — legi profilan informon pri uzanto;\n" -#~ "lose — ĉesigi la uzanton de sekvi vin;\n" -#~ "fav — ŝati la lastan avizon de uzanto;\n" -#~ "fav # — ŝati la avizon kun la ID;\n" -#~ "repeat # — ripeti la avizon kun la ID;\n" -#~ "repeat — ripeti la lastan avizon de uzanto;\n" -#~ "reply # — respondi la avizon kun la ID;\n" -#~ "reply — respondi la lastan avizon de uzanto;\n" -#~ "join — aniĝi al grupo;\n" -#~ "login — havi ligilon por ensaluti al reta interfaco;\n" -#~ "drop — foriri el grupo;\n" -#~ "stats — legi vian staton;\n" -#~ "stop — same kiel «off»;\n" -#~ "quit — same kiel «off»;\n" -#~ "sub — same kiel «follow»;\n" -#~ "unsub — same kiel «leave»;\n" -#~ "last — same kiel «get»;\n" -#~ "on — ankoraŭ ne realigita;\n" -#~ "off — ankoraŭ ne realigita;\n" -#~ "nudge — puŝeti la uzanton, ke li ĝisdatigu!\n" -#~ "invite — ankoraŭ ne realigita;\n" -#~ "track — ankoraŭ ne realigita;\n" -#~ "untrack — ankoraŭ ne realigita;\n" -#~ "track off — ankoraŭ ne realigita;\n" -#~ "untrack all — ankoraŭ ne realigita;\n" -#~ "tracks — ankoraŭ ne realigita;\n" -#~ "tracking — ankoraŭ ne realigita;\n" - -#~ msgid "Edit Avatar" -#~ msgstr "Redakti vizaĝbildon" +#~ msgid "Invalid tag: \"%s\"" +#~ msgstr "Nevalida markilo: \"%s\"" diff --git a/locale/es/LC_MESSAGES/statusnet.po b/locale/es/LC_MESSAGES/statusnet.po index 5ece490d2e..0ef3b43543 100644 --- a/locale/es/LC_MESSAGES/statusnet.po +++ b/locale/es/LC_MESSAGES/statusnet.po @@ -19,8 +19,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:49:32+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:37:55+0000\n" "Language-Team: Spanish \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -29,7 +29,7 @@ msgstr "" "X-Language-Code: es\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" +"X-POT-Import-Date: 2011-03-17 10:19:27+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -3950,6 +3950,8 @@ msgstr "Idioma es muy largo ( max 50 car.)" #. TRANS: Validation error in form for profile settings. #. TRANS: %s is an invalid tag. +#. TRANS: Form validation error when entering an invalid tag. +#. TRANS: %s is the invalid tag. #, fuzzy, php-format msgid "Invalid tag: \"%s\"." msgstr "Etiqueta inválida: \"% s\"" @@ -4813,7 +4815,6 @@ msgstr "Mensaje de %1$s en %2$s" msgid "Notice deleted." msgstr "Mensaje borrado" -#, fuzzy msgid "Notice" msgstr "Mensajes" @@ -5361,17 +5362,14 @@ msgstr "Perfil de usuario" msgid "Tag user" msgstr "Etiquetar usuario" +#, fuzzy msgid "" -"Tags for this user (letters, numbers, -, ., and _), comma- or space- " -"separated" +"Tags for this user (letters, numbers, -, ., and _), separated by commas or " +"spaces." msgstr "" "Etiquetas para este usuario (letras, números, -, ., y _), separadas por " "comas o espacios" -#, php-format -msgid "Invalid tag: \"%s\"" -msgstr "Etiqueta inválida: \"% s\"" - msgid "" "You can only tag people you are subscribed to or who are subscribed to you." msgstr "" @@ -8384,87 +8382,5 @@ msgstr "" msgid "Getting backup from file '%s'." msgstr "" -#~ msgid "Note" -#~ msgstr "Nota" - -#~ msgid "" -#~ "Commands:\n" -#~ "on - turn on notifications\n" -#~ "off - turn off notifications\n" -#~ "help - show this help\n" -#~ "follow - subscribe to user\n" -#~ "groups - lists the groups you have joined\n" -#~ "subscriptions - list the people you follow\n" -#~ "subscribers - list the people that follow you\n" -#~ "leave - unsubscribe from user\n" -#~ "d - direct message to user\n" -#~ "get - get last notice from user\n" -#~ "whois - get profile info on user\n" -#~ "lose - force user to stop following you\n" -#~ "fav - add user's last notice as a 'fave'\n" -#~ "fav # - add notice with the given id as a 'fave'\n" -#~ "repeat # - repeat a notice with a given id\n" -#~ "repeat - repeat the last notice from user\n" -#~ "reply # - reply to notice with a given id\n" -#~ "reply - reply to the last notice from user\n" -#~ "join - join group\n" -#~ "login - Get a link to login to the web interface\n" -#~ "drop - leave group\n" -#~ "stats - get your stats\n" -#~ "stop - same as 'off'\n" -#~ "quit - same as 'off'\n" -#~ "sub - same as 'follow'\n" -#~ "unsub - same as 'leave'\n" -#~ "last - same as 'get'\n" -#~ "on - not yet implemented.\n" -#~ "off - not yet implemented.\n" -#~ "nudge - remind a user to update.\n" -#~ "invite - not yet implemented.\n" -#~ "track - not yet implemented.\n" -#~ "untrack - not yet implemented.\n" -#~ "track off - not yet implemented.\n" -#~ "untrack all - not yet implemented.\n" -#~ "tracks - not yet implemented.\n" -#~ "tracking - not yet implemented.\n" -#~ msgstr "" -#~ "comandos:\n" -#~ "on - activar notificaciones\n" -#~ "off - desactivar notificaciones\n" -#~ "help - mostrar esta ayuda\n" -#~ "follow - suscribirse al usuario\n" -#~ "groups - listar los grupos que sigues\n" -#~ "subscriptions - listar las personas que sigues\n" -#~ "subscribers - listar los grupos que te siguen\n" -#~ "leave - cancelar la suscripción al usuario\n" -#~ "d - dirigir mensaje al usuario\n" -#~ "get - obtener último aviso del usuario\n" -#~ "whois - obtener información del perfil del usuario\n" -#~ "lose - obligar al usuario a que deje de seguirte\n" -#~ "fav - añadir el último aviso del usario a tus favoritos\n" -#~ "fav # - añadir el aviso con el ID dado a tus favoritos\n" -#~ "repeat # - repetir el aviso con el ID dado\n" -#~ "repeat - repetir el último aviso del usuario\n" -#~ "reply # - responder al aviso del ID dado\n" -#~ "reply - responder al último aviso del usuario\n" -#~ "join - unirse a un grupo\n" -#~ "login - obtener un vínculo para iniciar sesión en la interfaz Web\n" -#~ "drop - abandonar el grupo\n" -#~ "stats - obtener tus estadísticas\n" -#~ "stop - igual que 'desactivar'\n" -#~ "quit - igual que 'desactivar'\n" -#~ "sub - igual que 'seguir'\n" -#~ "unsub - igual que 'abandonar'\n" -#~ "last - igual que 'obtener'\n" -#~ "on - aún sin implementar.\n" -#~ "off - aún sin implementar.\n" -#~ "nudge - recordarle a un ausuario que actualice.\n" -#~ "invite - aún sin implementar.\n" -#~ "track - aún sin implementar.\n" -#~ "untrack - aún sin implementar.\n" -#~ "track off - aún sin implementar.\n" -#~ "untrack all - aún sin implementar.\n" -#~ "tracks - aún sin implementar.\n" -#~ "tracking - aún sin implementar.\n" - -#~ msgid "Edit Avatar" -#~ msgstr "Editar imagen" +#~ msgid "Invalid tag: \"%s\"" +#~ msgstr "Etiqueta inválida: \"% s\"" diff --git a/locale/fa/LC_MESSAGES/statusnet.po b/locale/fa/LC_MESSAGES/statusnet.po index 5dc14bc11d..241198cb2a 100644 --- a/locale/fa/LC_MESSAGES/statusnet.po +++ b/locale/fa/LC_MESSAGES/statusnet.po @@ -17,8 +17,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:49:33+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:37:56+0000\n" "Last-Translator: Ahmad Sufi Mahmudi\n" "Language-Team: Persian \n" "MIME-Version: 1.0\n" @@ -29,7 +29,7 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" -"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" +"X-POT-Import-Date: 2011-03-17 10:19:27+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -3951,6 +3951,8 @@ msgstr "زبان بسیار طولانی است ( حداکثر ۵۰ نویسه)" #. TRANS: Validation error in form for profile settings. #. TRANS: %s is an invalid tag. +#. TRANS: Form validation error when entering an invalid tag. +#. TRANS: %s is the invalid tag. #, fuzzy, php-format msgid "Invalid tag: \"%s\"." msgstr "نشان نادرست »%s«" @@ -5361,16 +5363,13 @@ msgstr "نمایهٔ کاربر" msgid "Tag user" msgstr "برچسب‌گذاری کاربر" +#, fuzzy msgid "" -"Tags for this user (letters, numbers, -, ., and _), comma- or space- " -"separated" +"Tags for this user (letters, numbers, -, ., and _), separated by commas or " +"spaces." msgstr "" "برچسب‌ها برای این کاربر (حروف، اعداد، -، .، و _)، جدا شده با کاما- یا فاصله-" -#, php-format -msgid "Invalid tag: \"%s\"" -msgstr "نشان نادرست »%s«" - msgid "" "You can only tag people you are subscribed to or who are subscribed to you." msgstr "" @@ -8351,87 +8350,5 @@ msgstr "" msgid "Getting backup from file '%s'." msgstr "" -#~ msgid "Note" -#~ msgstr "یادداشت" - -#~ msgid "" -#~ "Commands:\n" -#~ "on - turn on notifications\n" -#~ "off - turn off notifications\n" -#~ "help - show this help\n" -#~ "follow - subscribe to user\n" -#~ "groups - lists the groups you have joined\n" -#~ "subscriptions - list the people you follow\n" -#~ "subscribers - list the people that follow you\n" -#~ "leave - unsubscribe from user\n" -#~ "d - direct message to user\n" -#~ "get - get last notice from user\n" -#~ "whois - get profile info on user\n" -#~ "lose - force user to stop following you\n" -#~ "fav - add user's last notice as a 'fave'\n" -#~ "fav # - add notice with the given id as a 'fave'\n" -#~ "repeat # - repeat a notice with a given id\n" -#~ "repeat - repeat the last notice from user\n" -#~ "reply # - reply to notice with a given id\n" -#~ "reply - reply to the last notice from user\n" -#~ "join - join group\n" -#~ "login - Get a link to login to the web interface\n" -#~ "drop - leave group\n" -#~ "stats - get your stats\n" -#~ "stop - same as 'off'\n" -#~ "quit - same as 'off'\n" -#~ "sub - same as 'follow'\n" -#~ "unsub - same as 'leave'\n" -#~ "last - same as 'get'\n" -#~ "on - not yet implemented.\n" -#~ "off - not yet implemented.\n" -#~ "nudge - remind a user to update.\n" -#~ "invite - not yet implemented.\n" -#~ "track - not yet implemented.\n" -#~ "untrack - not yet implemented.\n" -#~ "track off - not yet implemented.\n" -#~ "untrack all - not yet implemented.\n" -#~ "tracks - not yet implemented.\n" -#~ "tracking - not yet implemented.\n" -#~ msgstr "" -#~ "دستورات:\n" -#~ "on - روشن‌کردن آگاه‌سازی‌ها\n" -#~ "off - خاموش‌کردن آگاه‌سازی‌ها\n" -#~ "help - نشان دادن این کمک\n" -#~ "follow - مشترک کاربر شدن\n" -#~ "groups - گروه‌هایی را که به آن‌ها پیوسته‌اید، فهرست می‌کند\n" -#~ "subscriptions - افرادی را که دنبال می‌کنید، فهرست می‌کند\n" -#~ "subscribers - کاربرانی را که شما را دنبال می‌کنند، فهرست می‌کند\n" -#~ "leave - لغو اشتراک از کاربر\n" -#~ "d - پیام مستقیم به کاربر\n" -#~ "get - دریافت آخرین پیام از کاربر\n" -#~ "whois - دریافت اطلاعات نمایهٔ کاربر\n" -#~ "lose - وادار کردن کاربر به توقف دنبال‌کردن شما\n" -#~ "fav - افزودن آخرین پیام کاربر به عنوان برگزیده\n" -#~ "fav # - افزودن پیام با یک شناسهٔ داده‌شده به عنوان برگزیده\n" -#~ "repeat # - تکرار کردن یک پیام با یک شناسهٔ داده‌شده\n" -#~ "repeat - تکرار کردن آخرین پیام از کاربر\n" -#~ "reply # - پاسخ‌دادن به یک پیام با یک شناسهٔ داده‌شده\n" -#~ "reply - پاسخ‌دادن به آخرین پیام از کاربر\n" -#~ "join - پیوستن به گروه\n" -#~ "login - دریافت یک پیوند برای واردشدن به رابط وب\n" -#~ "drop - ترک‌کردن گروه\n" -#~ "stats - دریافت آمار شما\n" -#~ "stop - مانند «off»\n" -#~ "quit - مانند «off»\n" -#~ "sub - مانند «follow»\n" -#~ "unsub - مانند «leave»\n" -#~ "last - مانند «get»\n" -#~ "on - هنوز پیاده نشده است.\n" -#~ "off - هنوز پیاده نشده است.\n" -#~ "nudge - یادآوری‌کردن به یک کاربر برای به‌روز کردن\n" -#~ "invite - هنوز پیاده نشده است.\n" -#~ "track - هنوز پیاده نشده است.\n" -#~ "untrack - هنوز پیاده نشده است.\n" -#~ "track off - هنوز پیاده نشده است.\n" -#~ "untrack all - هنوز پیاده نشده است.\n" -#~ "tracks - هنوز پیاده نشده است.\n" -#~ "tracking - هنوز پیاده نشده است.\n" - -#~ msgid "Edit Avatar" -#~ msgstr "ویرایش اواتور" +#~ msgid "Invalid tag: \"%s\"" +#~ msgstr "نشان نادرست »%s«" diff --git a/locale/fi/LC_MESSAGES/statusnet.po b/locale/fi/LC_MESSAGES/statusnet.po index fcde77fab6..74b626acf6 100644 --- a/locale/fi/LC_MESSAGES/statusnet.po +++ b/locale/fi/LC_MESSAGES/statusnet.po @@ -15,8 +15,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:49:34+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:37:57+0000\n" "Language-Team: Finnish \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -25,7 +25,7 @@ msgstr "" "X-Language-Code: fi\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" +"X-POT-Import-Date: 2011-03-17 10:19:27+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -3938,6 +3938,8 @@ msgstr "Kieli on liian pitkä (enintään 50 merkkiä)." #. TRANS: Validation error in form for profile settings. #. TRANS: %s is an invalid tag. +#. TRANS: Form validation error when entering an invalid tag. +#. TRANS: %s is the invalid tag. #, fuzzy, php-format msgid "Invalid tag: \"%s\"." msgstr "Virheellinen tagi: \"%s\"" @@ -4792,7 +4794,6 @@ msgstr "Viesti käyttäjältä %1$s, %2$s" msgid "Notice deleted." msgstr "Päivitys on poistettu." -#, fuzzy msgid "Notice" msgstr "Päivitykset" @@ -5333,17 +5334,14 @@ msgstr "Käyttäjän profiili" msgid "Tag user" msgstr "Tagaa käyttäjä" +#, fuzzy msgid "" -"Tags for this user (letters, numbers, -, ., and _), comma- or space- " -"separated" +"Tags for this user (letters, numbers, -, ., and _), separated by commas or " +"spaces." msgstr "" "Käyttäjän tagit (kirjaimet, numerot, -, ., ja _), pilkulla tai välilyönnillä " "erotettuna" -#, php-format -msgid "Invalid tag: \"%s\"" -msgstr "Virheellinen tagi: \"%s\"" - msgid "" "You can only tag people you are subscribed to or who are subscribed to you." msgstr "" @@ -8314,9 +8312,5 @@ msgstr "" msgid "Getting backup from file '%s'." msgstr "" -#~ msgid "Note" -#~ msgstr "Huomaa" - -#, fuzzy -#~ msgid "Edit Avatar" -#~ msgstr "Kuva" +#~ msgid "Invalid tag: \"%s\"" +#~ msgstr "Virheellinen tagi: \"%s\"" diff --git a/locale/fr/LC_MESSAGES/statusnet.po b/locale/fr/LC_MESSAGES/statusnet.po index cba78330be..76e99def48 100644 --- a/locale/fr/LC_MESSAGES/statusnet.po +++ b/locale/fr/LC_MESSAGES/statusnet.po @@ -21,8 +21,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:49:35+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:37:58+0000\n" "Language-Team: French \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -31,7 +31,7 @@ msgstr "" "X-Language-Code: fr\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" +"X-POT-Import-Date: 2011-03-17 10:19:27+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -3985,6 +3985,8 @@ msgstr "La langue est trop longue (limitée à 50 caractères maximum)." #. TRANS: Validation error in form for profile settings. #. TRANS: %s is an invalid tag. +#. TRANS: Form validation error when entering an invalid tag. +#. TRANS: %s is the invalid tag. #, fuzzy, php-format msgid "Invalid tag: \"%s\"." msgstr "Marque invalide : « %s »" @@ -4862,7 +4864,6 @@ msgstr "Message reçu de %1$s le %2$s" msgid "Notice deleted." msgstr "Avis supprimé." -#, fuzzy msgid "Notice" msgstr "Avis" @@ -5416,17 +5417,14 @@ msgstr "Profil de l’utilisateur" msgid "Tag user" msgstr "Marquer l’utilisateur" +#, fuzzy msgid "" -"Tags for this user (letters, numbers, -, ., and _), comma- or space- " -"separated" +"Tags for this user (letters, numbers, -, ., and _), separated by commas or " +"spaces." msgstr "" "Marques pour cet utilisateur (lettres, chiffres, -, ., et _), séparées par " "des virgules ou des espaces" -#, php-format -msgid "Invalid tag: \"%s\"" -msgstr "Marque invalide : « %s »" - msgid "" "You can only tag people you are subscribed to or who are subscribed to you." msgstr "" @@ -8458,88 +8456,5 @@ msgstr "XML invalide, racine XRD manquante." msgid "Getting backup from file '%s'." msgstr "Obtention de la sauvegarde depuis le fichier « %s »." -#~ msgid "Note" -#~ msgstr "Note" - -#~ msgid "" -#~ "Commands:\n" -#~ "on - turn on notifications\n" -#~ "off - turn off notifications\n" -#~ "help - show this help\n" -#~ "follow - subscribe to user\n" -#~ "groups - lists the groups you have joined\n" -#~ "subscriptions - list the people you follow\n" -#~ "subscribers - list the people that follow you\n" -#~ "leave - unsubscribe from user\n" -#~ "d - direct message to user\n" -#~ "get - get last notice from user\n" -#~ "whois - get profile info on user\n" -#~ "lose - force user to stop following you\n" -#~ "fav - add user's last notice as a 'fave'\n" -#~ "fav # - add notice with the given id as a 'fave'\n" -#~ "repeat # - repeat a notice with a given id\n" -#~ "repeat - repeat the last notice from user\n" -#~ "reply # - reply to notice with a given id\n" -#~ "reply - reply to the last notice from user\n" -#~ "join - join group\n" -#~ "login - Get a link to login to the web interface\n" -#~ "drop - leave group\n" -#~ "stats - get your stats\n" -#~ "stop - same as 'off'\n" -#~ "quit - same as 'off'\n" -#~ "sub - same as 'follow'\n" -#~ "unsub - same as 'leave'\n" -#~ "last - same as 'get'\n" -#~ "on - not yet implemented.\n" -#~ "off - not yet implemented.\n" -#~ "nudge - remind a user to update.\n" -#~ "invite - not yet implemented.\n" -#~ "track - not yet implemented.\n" -#~ "untrack - not yet implemented.\n" -#~ "track off - not yet implemented.\n" -#~ "untrack all - not yet implemented.\n" -#~ "tracks - not yet implemented.\n" -#~ "tracking - not yet implemented.\n" -#~ msgstr "" -#~ "Commandes :\n" -#~ "on - activer les notifications\n" -#~ "off - désactiver les notifications\n" -#~ "help - montrer cette aide\n" -#~ "follow - s’abonner à l’utilisateur\n" -#~ "groups - lister les groupes que vous avez rejoints\n" -#~ "subscriptions - lister les personnes que vous suivez\n" -#~ "subscribers - lister les personnes qui vous suivent\n" -#~ "leave - se désabonner de l’utilisateur\n" -#~ "d - message direct à l’utilisateur\n" -#~ "get - obtenir le dernier avis de l’utilisateur\n" -#~ "whois - obtenir le profil de l’utilisateur\n" -#~ "lose - forcer un utilisateur à arrêter de vous suivre\n" -#~ "fav - ajouter de dernier avis de l’utilisateur comme favori\n" -#~ "fav # - ajouter l’avis correspondant à l’identifiant comme " -#~ "favori\n" -#~ "repeat # - reprendre l’avis correspondant à l’identifiant\n" -#~ "repeat - reprendre le dernier avis de l’utilisateur\n" -#~ "reply # - répondre à l’avis correspondant à l’identifiant\n" -#~ "reply - répondre au dernier avis de l’utilisateur\n" -#~ "join - rejoindre le groupe\n" -#~ "login - Obtenir un lien pour s’identifier sur l’interface web\n" -#~ "drop - quitter le groupe\n" -#~ "stats - obtenir vos statistiques\n" -#~ "stop - même effet que 'off'\n" -#~ "quit - même effet que 'off'\n" -#~ "sub - même effet que 'follow'\n" -#~ "unsub - même effet que 'leave'\n" -#~ "last - même effet que 'get'\n" -#~ "on - pas encore implémenté.\n" -#~ "off - pas encore implémenté.\n" -#~ "nudge - envoyer un clin d’œil à l’utilisateur.\n" -#~ "invite - pas encore implémenté.\n" -#~ "track - pas encore implémenté.\n" -#~ "untrack - pas encore implémenté.\n" -#~ "track off - pas encore implémenté.\n" -#~ "untrack all - pas encore implémenté.\n" -#~ "tracks - pas encore implémenté.\n" -#~ "tracking - pas encore implémenté.\n" - -#~ msgid "Edit Avatar" -#~ msgstr "Modifier l’avatar" +#~ msgid "Invalid tag: \"%s\"" +#~ msgstr "Marque invalide : « %s »" diff --git a/locale/fur/LC_MESSAGES/statusnet.po b/locale/fur/LC_MESSAGES/statusnet.po index 94f77eb11c..8493929289 100644 --- a/locale/fur/LC_MESSAGES/statusnet.po +++ b/locale/fur/LC_MESSAGES/statusnet.po @@ -9,12 +9,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:49:36+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:38:00+0000\n" "Language-Team: Friulian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" +"X-POT-Import-Date: 2011-03-17 10:19:27+0000\n" "X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: fur\n" @@ -3750,6 +3750,8 @@ msgstr "La lenghe e je masse lungje (max 50 caratars)." #. TRANS: Validation error in form for profile settings. #. TRANS: %s is an invalid tag. +#. TRANS: Form validation error when entering an invalid tag. +#. TRANS: %s is the invalid tag. #, php-format msgid "Invalid tag: \"%s\"." msgstr "" @@ -5071,14 +5073,10 @@ msgid "Tag user" msgstr "Etichete utent" msgid "" -"Tags for this user (letters, numbers, -, ., and _), comma- or space- " -"separated" +"Tags for this user (letters, numbers, -, ., and _), separated by commas or " +"spaces." msgstr "" -#, php-format -msgid "Invalid tag: \"%s\"" -msgstr "La etichete no je valide: \"%s\"" - msgid "" "You can only tag people you are subscribed to or who are subscribed to you." msgstr "" @@ -7904,8 +7902,5 @@ msgstr "" msgid "Getting backup from file '%s'." msgstr "" -#~ msgid "Note" -#~ msgstr "Note" - -#~ msgid "Edit Avatar" -#~ msgstr "Modifiche l'avatar" +#~ msgid "Invalid tag: \"%s\"" +#~ msgstr "La etichete no je valide: \"%s\"" diff --git a/locale/gl/LC_MESSAGES/statusnet.po b/locale/gl/LC_MESSAGES/statusnet.po index 98903771ff..ab5354348e 100644 --- a/locale/gl/LC_MESSAGES/statusnet.po +++ b/locale/gl/LC_MESSAGES/statusnet.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:49:37+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:38:01+0000\n" "Language-Team: Galician \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -22,7 +22,7 @@ msgstr "" "X-Language-Code: gl\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" +"X-POT-Import-Date: 2011-03-17 10:19:27+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -3972,6 +3972,8 @@ msgstr "A lingua é longa de máis (o límite é de 50 caracteres)." #. TRANS: Validation error in form for profile settings. #. TRANS: %s is an invalid tag. +#. TRANS: Form validation error when entering an invalid tag. +#. TRANS: %s is the invalid tag. #, fuzzy, php-format msgid "Invalid tag: \"%s\"." msgstr "Etiqueta incorrecta: \"%s\"" @@ -5400,17 +5402,14 @@ msgstr "Perfil do usuario" msgid "Tag user" msgstr "Etiquetar ao usuario" +#, fuzzy msgid "" -"Tags for this user (letters, numbers, -, ., and _), comma- or space- " -"separated" +"Tags for this user (letters, numbers, -, ., and _), separated by commas or " +"spaces." msgstr "" "Etiquetas para este usuario (letras, números, -, ., e _), separadas por " "comas ou espazos en branco" -#, php-format -msgid "Invalid tag: \"%s\"" -msgstr "Etiqueta incorrecta: \"%s\"" - msgid "" "You can only tag people you are subscribed to or who are subscribed to you." msgstr "" @@ -8452,87 +8451,5 @@ msgstr "" msgid "Getting backup from file '%s'." msgstr "" -#~ msgid "Note" -#~ msgstr "Nota" - -#~ msgid "" -#~ "Commands:\n" -#~ "on - turn on notifications\n" -#~ "off - turn off notifications\n" -#~ "help - show this help\n" -#~ "follow - subscribe to user\n" -#~ "groups - lists the groups you have joined\n" -#~ "subscriptions - list the people you follow\n" -#~ "subscribers - list the people that follow you\n" -#~ "leave - unsubscribe from user\n" -#~ "d - direct message to user\n" -#~ "get - get last notice from user\n" -#~ "whois - get profile info on user\n" -#~ "lose - force user to stop following you\n" -#~ "fav - add user's last notice as a 'fave'\n" -#~ "fav # - add notice with the given id as a 'fave'\n" -#~ "repeat # - repeat a notice with a given id\n" -#~ "repeat - repeat the last notice from user\n" -#~ "reply # - reply to notice with a given id\n" -#~ "reply - reply to the last notice from user\n" -#~ "join - join group\n" -#~ "login - Get a link to login to the web interface\n" -#~ "drop - leave group\n" -#~ "stats - get your stats\n" -#~ "stop - same as 'off'\n" -#~ "quit - same as 'off'\n" -#~ "sub - same as 'follow'\n" -#~ "unsub - same as 'leave'\n" -#~ "last - same as 'get'\n" -#~ "on - not yet implemented.\n" -#~ "off - not yet implemented.\n" -#~ "nudge - remind a user to update.\n" -#~ "invite - not yet implemented.\n" -#~ "track - not yet implemented.\n" -#~ "untrack - not yet implemented.\n" -#~ "track off - not yet implemented.\n" -#~ "untrack all - not yet implemented.\n" -#~ "tracks - not yet implemented.\n" -#~ "tracking - not yet implemented.\n" -#~ msgstr "" -#~ "Ordes:\n" -#~ "on - activa as notificacións\n" -#~ "off - desactiva as notificacións\n" -#~ "help - amosa esta axuda\n" -#~ "follow - subscribirse ao usuario\n" -#~ "groups - lista os grupos nos que está\n" -#~ "subscriptions - lista a xente á que segue\n" -#~ "subscribers - lista a xente que o segue\n" -#~ "leave - cancela a subscrición ao usuario\n" -#~ "d - mensaxe directa a un usuario\n" -#~ "get - obter a última nota do usuario\n" -#~ "whois - obtén a información do perfil do usuario\n" -#~ "lose - facer que o usuario deixe de seguilo\n" -#~ "fav - marcar como \"favorita\" a última nota do usuario\n" -#~ "fav # - marcar como \"favorita\" a nota coa id indicada\n" -#~ "repeat # - repetir a nota doa id indicada\n" -#~ "repeat - repetir a última nota do usuario\n" -#~ "reply # - responder a unha nota coa id indicada\n" -#~ "reply - responder á última nota do usuario\n" -#~ "join - unirse ao grupo indicado\n" -#~ "login - obter un enderezo para identificarse na interface web\n" -#~ "drop - deixar o grupo indicado\n" -#~ "stats - obter as súas estatísticas\n" -#~ "stop - idéntico a \"off\"\n" -#~ "quit - idéntico a \"off\"\n" -#~ "sub - idéntico a \"follow\"\n" -#~ "unsub - idéntico a \"leave\"\n" -#~ "last - idéntico a \"get\"\n" -#~ "on - aínda non se integrou\n" -#~ "off - aínda non se integrou\n" -#~ "nudge - facerlle un aceno ao usuario indicado\n" -#~ "invite - aínda non se integrou\n" -#~ "track - aínda non se integrou\n" -#~ "untrack - aínda non se integrou\n" -#~ "track off - aínda non se integrou\n" -#~ "untrack all - aínda non se integrou\n" -#~ "tracks - aínda non se integrou\n" -#~ "tracking - aínda non se integrou\n" - -#~ msgid "Edit Avatar" -#~ msgstr "Modificar o avatar" +#~ msgid "Invalid tag: \"%s\"" +#~ msgstr "Etiqueta incorrecta: \"%s\"" diff --git a/locale/hsb/LC_MESSAGES/statusnet.po b/locale/hsb/LC_MESSAGES/statusnet.po index c61a1d5452..1eb46c7fd7 100644 --- a/locale/hsb/LC_MESSAGES/statusnet.po +++ b/locale/hsb/LC_MESSAGES/statusnet.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:49:39+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:38:02+0000\n" "Language-Team: Upper Sorbian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -22,7 +22,7 @@ msgstr "" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : (n%100==3 || " "n%100==4) ? 2 : 3)\n" -"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" +"X-POT-Import-Date: 2011-03-17 10:19:27+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -3782,6 +3782,8 @@ msgstr "Mjeno rěče je předołhe (maks. 50 znamješkow)." #. TRANS: Validation error in form for profile settings. #. TRANS: %s is an invalid tag. +#. TRANS: Form validation error when entering an invalid tag. +#. TRANS: %s is the invalid tag. #, php-format msgid "Invalid tag: \"%s\"." msgstr "Njepłaćiwa taflička: \"%s\"." @@ -5066,14 +5068,10 @@ msgid "Tag user" msgstr "" msgid "" -"Tags for this user (letters, numbers, -, ., and _), comma- or space- " -"separated" +"Tags for this user (letters, numbers, -, ., and _), separated by commas or " +"spaces." msgstr "" -#, php-format -msgid "Invalid tag: \"%s\"" -msgstr "Njepłaćiwa taflička: \"%s\"" - msgid "" "You can only tag people you are subscribed to or who are subscribed to you." msgstr "" @@ -7956,8 +7954,5 @@ msgstr "Njepłaćiwy XML, korjeń XRD faluje." msgid "Getting backup from file '%s'." msgstr "Wobstaruje so zawěsćenje z dataje \"%s\"-" -#~ msgid "Note" -#~ msgstr "Přispomnjenka" - -#~ msgid "Edit Avatar" -#~ msgstr "Awatar wobdźěłać" +#~ msgid "Invalid tag: \"%s\"" +#~ msgstr "Njepłaćiwa taflička: \"%s\"" diff --git a/locale/hu/LC_MESSAGES/statusnet.po b/locale/hu/LC_MESSAGES/statusnet.po index a3515effa3..fec5b9520a 100644 --- a/locale/hu/LC_MESSAGES/statusnet.po +++ b/locale/hu/LC_MESSAGES/statusnet.po @@ -12,12 +12,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:49:40+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:38:03+0000\n" "Language-Team: Hungarian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" +"X-POT-Import-Date: 2011-03-17 10:19:27+0000\n" "X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: hu\n" @@ -3890,6 +3890,8 @@ msgstr "A nyelv túl hosszú (legfeljebb 50 karakter lehet)." #. TRANS: Validation error in form for profile settings. #. TRANS: %s is an invalid tag. +#. TRANS: Form validation error when entering an invalid tag. +#. TRANS: %s is the invalid tag. #, fuzzy, php-format msgid "Invalid tag: \"%s\"." msgstr "Érvénytelen címke: \"%s\"" @@ -5212,14 +5214,13 @@ msgstr "Felhasználói profil" msgid "Tag user" msgstr "" +#, fuzzy msgid "" -"Tags for this user (letters, numbers, -, ., and _), comma- or space- " -"separated" +"Tags for this user (letters, numbers, -, ., and _), separated by commas or " +"spaces." msgstr "" - -#, php-format -msgid "Invalid tag: \"%s\"" -msgstr "Érvénytelen címke: \"%s\"" +"Címkék magadhoz (betűk, számok, -, ., és _), vesszővel vagy szóközzel " +"elválasztva" msgid "" "You can only tag people you are subscribed to or who are subscribed to you." @@ -8126,5 +8127,5 @@ msgstr "" msgid "Getting backup from file '%s'." msgstr "" -#~ msgid "Note" -#~ msgstr "Megjegyzés" +#~ msgid "Invalid tag: \"%s\"" +#~ msgstr "Érvénytelen címke: \"%s\"" diff --git a/locale/ia/LC_MESSAGES/statusnet.po b/locale/ia/LC_MESSAGES/statusnet.po index 653cf949bd..7b92696be6 100644 --- a/locale/ia/LC_MESSAGES/statusnet.po +++ b/locale/ia/LC_MESSAGES/statusnet.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:49:41+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:38:04+0000\n" "Language-Team: Interlingua \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -19,7 +19,7 @@ msgstr "" "X-Language-Code: ia\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" +"X-POT-Import-Date: 2011-03-17 10:19:27+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -3860,6 +3860,8 @@ msgstr "Lingua es troppo longe (maximo 50 characteres)." #. TRANS: Validation error in form for profile settings. #. TRANS: %s is an invalid tag. +#. TRANS: Form validation error when entering an invalid tag. +#. TRANS: %s is the invalid tag. #, php-format msgid "Invalid tag: \"%s\"." msgstr "Etiquetta invalide: \"%s\"." @@ -5247,17 +5249,14 @@ msgstr "Profilo del usator" msgid "Tag user" msgstr "Etiquettar usator" +#, fuzzy msgid "" -"Tags for this user (letters, numbers, -, ., and _), comma- or space- " -"separated" +"Tags for this user (letters, numbers, -, ., and _), separated by commas or " +"spaces." msgstr "" "Etiquettas pro iste usator (litteras, numeros, -, . e _), separate per " "commas o spatios" -#, php-format -msgid "Invalid tag: \"%s\"" -msgstr "Etiquetta invalide: \"%s\"" - msgid "" "You can only tag people you are subscribed to or who are subscribed to you." msgstr "" @@ -8240,87 +8239,5 @@ msgstr "XML invalide, radice XRD mancante." msgid "Getting backup from file '%s'." msgstr "Obtene copia de reserva ex file '%s'." -#~ msgid "Note" -#~ msgstr "Nota" - -#~ msgid "" -#~ "Commands:\n" -#~ "on - turn on notifications\n" -#~ "off - turn off notifications\n" -#~ "help - show this help\n" -#~ "follow - subscribe to user\n" -#~ "groups - lists the groups you have joined\n" -#~ "subscriptions - list the people you follow\n" -#~ "subscribers - list the people that follow you\n" -#~ "leave - unsubscribe from user\n" -#~ "d - direct message to user\n" -#~ "get - get last notice from user\n" -#~ "whois - get profile info on user\n" -#~ "lose - force user to stop following you\n" -#~ "fav - add user's last notice as a 'fave'\n" -#~ "fav # - add notice with the given id as a 'fave'\n" -#~ "repeat # - repeat a notice with a given id\n" -#~ "repeat - repeat the last notice from user\n" -#~ "reply # - reply to notice with a given id\n" -#~ "reply - reply to the last notice from user\n" -#~ "join - join group\n" -#~ "login - Get a link to login to the web interface\n" -#~ "drop - leave group\n" -#~ "stats - get your stats\n" -#~ "stop - same as 'off'\n" -#~ "quit - same as 'off'\n" -#~ "sub - same as 'follow'\n" -#~ "unsub - same as 'leave'\n" -#~ "last - same as 'get'\n" -#~ "on - not yet implemented.\n" -#~ "off - not yet implemented.\n" -#~ "nudge - remind a user to update.\n" -#~ "invite - not yet implemented.\n" -#~ "track - not yet implemented.\n" -#~ "untrack - not yet implemented.\n" -#~ "track off - not yet implemented.\n" -#~ "untrack all - not yet implemented.\n" -#~ "tracks - not yet implemented.\n" -#~ "tracking - not yet implemented.\n" -#~ msgstr "" -#~ "Commandos:\n" -#~ "on - activar notificationes\n" -#~ "off - disactivar notificationes\n" -#~ "help - monstrar iste adjuta\n" -#~ "follow - subscriber te al usator\n" -#~ "groups - listar le gruppos del quales tu es membro\n" -#~ "subscriptions - listar le personas que tu seque\n" -#~ "subscribers - listar le personas qui te seque\n" -#~ "leave - cancellar subscription al usator\n" -#~ "d - diriger un message al usator\n" -#~ "get - obtener le ultime nota del usator\n" -#~ "whois - obtener info de profilo del usator\n" -#~ "lose - fortiar le usator de cessar de sequer te\n" -#~ "fav - adder ultime nota del usator como favorite\n" -#~ "fav # - adder nota con le ID date como favorite\n" -#~ "repeat # - repeter le nota con le ID date\n" -#~ "repeat - repeter le ultime nota del usator\n" -#~ "reply # - responder al nota con le ID date\n" -#~ "reply - responder al ultime nota del usator\n" -#~ "join - facer te membro del gruppo\n" -#~ "login - obtener ligamine pro aperir session al interfacie web\n" -#~ "drop - quitar gruppo\n" -#~ "stats - obtener tu statisticas\n" -#~ "stop - como 'off'\n" -#~ "quit - como 'off'\n" -#~ "sub - como 'follow'\n" -#~ "unsub - como 'leave'\n" -#~ "last - como 'get'\n" -#~ "on - non ancora implementate.\n" -#~ "off - non ancora implementate.\n" -#~ "nudge - rememorar un usator de scriber alique.\n" -#~ "invite - non ancora implementate.\n" -#~ "track - non ancora implementate.\n" -#~ "untrack - non ancora implementate.\n" -#~ "track off - non ancora implementate.\n" -#~ "untrack all - non ancora implementate.\n" -#~ "tracks - non ancora implementate.\n" -#~ "tracking - non ancora implementate.\n" - -#~ msgid "Edit Avatar" -#~ msgstr "Modificar avatar" +#~ msgid "Invalid tag: \"%s\"" +#~ msgstr "Etiquetta invalide: \"%s\"" diff --git a/locale/it/LC_MESSAGES/statusnet.po b/locale/it/LC_MESSAGES/statusnet.po index 3306a48eaa..dd41fd4948 100644 --- a/locale/it/LC_MESSAGES/statusnet.po +++ b/locale/it/LC_MESSAGES/statusnet.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:49:42+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:38:05+0000\n" "Language-Team: Italian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -21,7 +21,7 @@ msgstr "" "X-Language-Code: it\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" +"X-POT-Import-Date: 2011-03-17 10:19:27+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -3986,6 +3986,8 @@ msgstr "La lingua è troppo lunga (max 50 caratteri)." #. TRANS: Validation error in form for profile settings. #. TRANS: %s is an invalid tag. +#. TRANS: Form validation error when entering an invalid tag. +#. TRANS: %s is the invalid tag. #, fuzzy, php-format msgid "Invalid tag: \"%s\"." msgstr "Etichetta non valida: \"%s\"" @@ -4849,7 +4851,6 @@ msgstr "Messaggio da %1$s su %2$s" msgid "Notice deleted." msgstr "Messaggio eliminato." -#, fuzzy msgid "Notice" msgstr "Messaggi" @@ -5395,17 +5396,14 @@ msgstr "Profilo utente" msgid "Tag user" msgstr "Etichette utente" +#, fuzzy msgid "" -"Tags for this user (letters, numbers, -, ., and _), comma- or space- " -"separated" +"Tags for this user (letters, numbers, -, ., and _), separated by commas or " +"spaces." msgstr "" "Etichette per questo utente (lettere, numeri, -, . e _), separate da virgole " "o spazi" -#, php-format -msgid "Invalid tag: \"%s\"" -msgstr "Etichetta non valida: \"%s\"" - msgid "" "You can only tag people you are subscribed to or who are subscribed to you." msgstr "" @@ -8430,90 +8428,5 @@ msgstr "" msgid "Getting backup from file '%s'." msgstr "" -#~ msgid "Note" -#~ msgstr "Nota" - -#~ msgid "" -#~ "Commands:\n" -#~ "on - turn on notifications\n" -#~ "off - turn off notifications\n" -#~ "help - show this help\n" -#~ "follow - subscribe to user\n" -#~ "groups - lists the groups you have joined\n" -#~ "subscriptions - list the people you follow\n" -#~ "subscribers - list the people that follow you\n" -#~ "leave - unsubscribe from user\n" -#~ "d - direct message to user\n" -#~ "get - get last notice from user\n" -#~ "whois - get profile info on user\n" -#~ "lose - force user to stop following you\n" -#~ "fav - add user's last notice as a 'fave'\n" -#~ "fav # - add notice with the given id as a 'fave'\n" -#~ "repeat # - repeat a notice with a given id\n" -#~ "repeat - repeat the last notice from user\n" -#~ "reply # - reply to notice with a given id\n" -#~ "reply - reply to the last notice from user\n" -#~ "join - join group\n" -#~ "login - Get a link to login to the web interface\n" -#~ "drop - leave group\n" -#~ "stats - get your stats\n" -#~ "stop - same as 'off'\n" -#~ "quit - same as 'off'\n" -#~ "sub - same as 'follow'\n" -#~ "unsub - same as 'leave'\n" -#~ "last - same as 'get'\n" -#~ "on - not yet implemented.\n" -#~ "off - not yet implemented.\n" -#~ "nudge - remind a user to update.\n" -#~ "invite - not yet implemented.\n" -#~ "track - not yet implemented.\n" -#~ "untrack - not yet implemented.\n" -#~ "track off - not yet implemented.\n" -#~ "untrack all - not yet implemented.\n" -#~ "tracks - not yet implemented.\n" -#~ "tracking - not yet implemented.\n" -#~ msgstr "" -#~ "Comandi:\n" -#~ "on - abilita le notifiche\n" -#~ "off - disabilita le notifiche\n" -#~ "help - mostra questo aiuto\n" -#~ "follow - ti abbona all'utente\n" -#~ "groups - elenca i gruppi di cui fai parte\n" -#~ "subscriptions - elenca le persone che segui\n" -#~ "subscribers - elenca le persone che ti seguono\n" -#~ "leave - annulla l'abbonamento dall'utente\n" -#~ "d - invia un messaggio diretto all'utente\n" -#~ "get - recupera l'ultimo messaggio dell'utente\n" -#~ "whois - recupera le informazioni del profilo dell'utente\n" -#~ "lose - forza un utente nel non seguirti più\n" -#~ "fav - aggiunge l'ultimo messaggio dell'utente tra i tuoi " -#~ "preferiti\n" -#~ "fav # - aggiunge un messaggio con quell'ID tra i tuoi " -#~ "preferiti\n" -#~ "repeat # - ripete un messaggio con quell'ID\n" -#~ "repeat - ripete l'ultimo messaggio dell'utente\n" -#~ "reply # - risponde al messaggio con quell'ID\n" -#~ "reply - risponde all'ultimo messaggio dell'utente\n" -#~ "join - ti iscrive al gruppo\n" -#~ "login - recupera un collegamento all'interfaccia web per eseguire " -#~ "l'accesso\n" -#~ "drop - annulla la tua iscrizione al gruppo\n" -#~ "stats - recupera il tuo stato\n" -#~ "stop - stessa azione del comando \"off\"\n" -#~ "quit - stessa azione del comando \"on\"\n" -#~ "sub - stessa azione del comando \"follow\"\n" -#~ "unsub - stessa azione del comando \"leave\"\n" -#~ "last - stessa azione del comando \"get\"\n" -#~ "on -non ancora implementato\n" -#~ "off - non ancora implementato\n" -#~ "nudge - ricorda a un utente di scrivere qualche cosa\n" -#~ "invite - non ancora implementato\n" -#~ "track - non ancora implementato\n" -#~ "untrack - non ancora implementato\n" -#~ "track off - non ancora implementato\n" -#~ "untrack all - non ancora implementato\n" -#~ "tracks - non ancora implementato\n" -#~ "tracking - non ancora implementato\n" - -#~ msgid "Edit Avatar" -#~ msgstr "Modifica immagine" +#~ msgid "Invalid tag: \"%s\"" +#~ msgstr "Etichetta non valida: \"%s\"" diff --git a/locale/ja/LC_MESSAGES/statusnet.po b/locale/ja/LC_MESSAGES/statusnet.po index 2f58935de5..dc59777cba 100644 --- a/locale/ja/LC_MESSAGES/statusnet.po +++ b/locale/ja/LC_MESSAGES/statusnet.po @@ -14,8 +14,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:49:43+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:38:07+0000\n" "Language-Team: Japanese \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -24,7 +24,7 @@ msgstr "" "X-Language-Code: ja\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" +"X-POT-Import-Date: 2011-03-17 10:19:27+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -3977,6 +3977,8 @@ msgstr "言語が長すぎます。(最大50字)" #. TRANS: Validation error in form for profile settings. #. TRANS: %s is an invalid tag. +#. TRANS: Form validation error when entering an invalid tag. +#. TRANS: %s is the invalid tag. #, fuzzy, php-format msgid "Invalid tag: \"%s\"." msgstr "不正なタグ: \"%s\"" @@ -4843,7 +4845,6 @@ msgstr "%2$s 上の %1$s からのメッセージ" msgid "Notice deleted." msgstr "つぶやきを削除しました。" -#, fuzzy msgid "Notice" msgstr "つぶやき" @@ -5402,16 +5403,13 @@ msgstr "ユーザプロファイル" msgid "Tag user" msgstr "タグユーザ" +#, fuzzy msgid "" -"Tags for this user (letters, numbers, -, ., and _), comma- or space- " -"separated" +"Tags for this user (letters, numbers, -, ., and _), separated by commas or " +"spaces." msgstr "" "このユーザのタグ (アルファベット、数字、-、.、_)、カンマかスペース区切り" -#, php-format -msgid "Invalid tag: \"%s\"" -msgstr "不正なタグ: \"%s\"" - msgid "" "You can only tag people you are subscribed to or who are subscribed to you." msgstr "" @@ -8375,8 +8373,5 @@ msgstr "" msgid "Getting backup from file '%s'." msgstr "" -#~ msgid "Note" -#~ msgstr "ノート" - -#~ msgid "Edit Avatar" -#~ msgstr "アバターを編集する" +#~ msgid "Invalid tag: \"%s\"" +#~ msgstr "不正なタグ: \"%s\"" diff --git a/locale/ka/LC_MESSAGES/statusnet.po b/locale/ka/LC_MESSAGES/statusnet.po index 2b54bf0f85..6774881bef 100644 --- a/locale/ka/LC_MESSAGES/statusnet.po +++ b/locale/ka/LC_MESSAGES/statusnet.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:49:45+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:38:08+0000\n" "Language-Team: Georgian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -19,7 +19,7 @@ msgstr "" "X-Language-Code: ka\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" +"X-POT-Import-Date: 2011-03-17 10:19:27+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -3934,6 +3934,8 @@ msgstr "ენა ძალიან გრძელია (არაუმე #. TRANS: Validation error in form for profile settings. #. TRANS: %s is an invalid tag. +#. TRANS: Form validation error when entering an invalid tag. +#. TRANS: %s is the invalid tag. #, fuzzy, php-format msgid "Invalid tag: \"%s\"." msgstr "არასწორი სანიშნე: \"%s\"" @@ -5319,17 +5321,14 @@ msgstr "მომხმარებლის პროფილი" msgid "Tag user" msgstr "მონიშნე მომხმარებელი" +#, fuzzy msgid "" -"Tags for this user (letters, numbers, -, ., and _), comma- or space- " -"separated" +"Tags for this user (letters, numbers, -, ., and _), separated by commas or " +"spaces." msgstr "" "სანიშნეები ამ მომხმარებლისთვის (ასოები, ციფრები, -, ., და _). გამოყავით " "მძიმით ან სივრცით" -#, php-format -msgid "Invalid tag: \"%s\"" -msgstr "არასწორი სანიშნე: \"%s\"" - msgid "" "You can only tag people you are subscribed to or who are subscribed to you." msgstr "" @@ -8305,8 +8304,5 @@ msgstr "" msgid "Getting backup from file '%s'." msgstr "" -#~ msgid "Note" -#~ msgstr "შენიშვნა" - -#~ msgid "Edit Avatar" -#~ msgstr "ავატარის რედაქტირება" +#~ msgid "Invalid tag: \"%s\"" +#~ msgstr "არასწორი სანიშნე: \"%s\"" diff --git a/locale/ko/LC_MESSAGES/statusnet.po b/locale/ko/LC_MESSAGES/statusnet.po index faead36164..658fe1f789 100644 --- a/locale/ko/LC_MESSAGES/statusnet.po +++ b/locale/ko/LC_MESSAGES/statusnet.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:49:46+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:38:09+0000\n" "Language-Team: Korean \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -21,7 +21,7 @@ msgstr "" "X-Language-Code: ko\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" +"X-POT-Import-Date: 2011-03-17 10:19:27+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -3910,6 +3910,8 @@ msgstr "언어가 너무 깁니다. (최대 50글자)" #. TRANS: Validation error in form for profile settings. #. TRANS: %s is an invalid tag. +#. TRANS: Form validation error when entering an invalid tag. +#. TRANS: %s is the invalid tag. #, fuzzy, php-format msgid "Invalid tag: \"%s\"." msgstr "올바르지 않은 태그: \"%s\"" @@ -4741,7 +4743,6 @@ msgstr "%1$s에서 %2$s까지 메시지" msgid "Notice deleted." msgstr "게시글이 등록되었습니다." -#, fuzzy msgid "Notice" msgstr "통지" @@ -5270,17 +5271,14 @@ msgstr "이용자 프로필" msgid "Tag user" msgstr "태그 사용자" +#, fuzzy msgid "" -"Tags for this user (letters, numbers, -, ., and _), comma- or space- " -"separated" +"Tags for this user (letters, numbers, -, ., and _), separated by commas or " +"spaces." msgstr "" "사용자를 위한 태그 (문자,숫자, -, . ,그리고 _), 콤마 혹은 공백으로 분리하세" "요." -#, php-format -msgid "Invalid tag: \"%s\"" -msgstr "올바르지 않은 태그: \"%s\"" - msgid "" "You can only tag people you are subscribed to or who are subscribed to you." msgstr "" @@ -8170,8 +8168,5 @@ msgstr "" msgid "Getting backup from file '%s'." msgstr "" -#~ msgid "Note" -#~ msgstr "설명" - -#~ msgid "Edit Avatar" -#~ msgstr "아바타 편집" +#~ msgid "Invalid tag: \"%s\"" +#~ msgstr "올바르지 않은 태그: \"%s\"" diff --git a/locale/mk/LC_MESSAGES/statusnet.po b/locale/mk/LC_MESSAGES/statusnet.po index f5298423de..7b446ba05b 100644 --- a/locale/mk/LC_MESSAGES/statusnet.po +++ b/locale/mk/LC_MESSAGES/statusnet.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:49:47+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:38:10+0000\n" "Language-Team: Macedonian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -20,7 +20,7 @@ msgstr "" "X-Language-Code: mk\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n == 1 || n%10 == 1) ? 0 : 1;\n" -"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" +"X-POT-Import-Date: 2011-03-17 10:19:27+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -3871,6 +3871,8 @@ msgstr "Јазикот е предолг (највеќе до 50 знаци)." #. TRANS: Validation error in form for profile settings. #. TRANS: %s is an invalid tag. +#. TRANS: Form validation error when entering an invalid tag. +#. TRANS: %s is the invalid tag. #, php-format msgid "Invalid tag: \"%s\"." msgstr "Неважечка ознака: „%s“." @@ -4724,7 +4726,6 @@ msgstr "Порака од %1$s на %2$s" msgid "Notice deleted." msgstr "Избришана забелешка" -#, fuzzy msgid "Notice" msgstr "Забелешки" @@ -5270,17 +5271,14 @@ msgstr "Кориснички профил" msgid "Tag user" msgstr "Означи корисник" +#, fuzzy msgid "" -"Tags for this user (letters, numbers, -, ., and _), comma- or space- " -"separated" +"Tags for this user (letters, numbers, -, ., and _), separated by commas or " +"spaces." msgstr "" "Ознаки за овој корисник (букви, бројки, -, . и _), одделени со запирка или " "празно место" -#, php-format -msgid "Invalid tag: \"%s\"" -msgstr "Неважечка ознака: „%s“" - msgid "" "You can only tag people you are subscribed to or who are subscribed to you." msgstr "" @@ -8268,87 +8266,5 @@ msgstr "Неважечки XML. Нема XRD-корен." msgid "Getting backup from file '%s'." msgstr "Земам резерва на податотеката „%s“." -#~ msgid "Note" -#~ msgstr "Забелешка" - -#~ msgid "" -#~ "Commands:\n" -#~ "on - turn on notifications\n" -#~ "off - turn off notifications\n" -#~ "help - show this help\n" -#~ "follow - subscribe to user\n" -#~ "groups - lists the groups you have joined\n" -#~ "subscriptions - list the people you follow\n" -#~ "subscribers - list the people that follow you\n" -#~ "leave - unsubscribe from user\n" -#~ "d - direct message to user\n" -#~ "get - get last notice from user\n" -#~ "whois - get profile info on user\n" -#~ "lose - force user to stop following you\n" -#~ "fav - add user's last notice as a 'fave'\n" -#~ "fav # - add notice with the given id as a 'fave'\n" -#~ "repeat # - repeat a notice with a given id\n" -#~ "repeat - repeat the last notice from user\n" -#~ "reply # - reply to notice with a given id\n" -#~ "reply - reply to the last notice from user\n" -#~ "join - join group\n" -#~ "login - Get a link to login to the web interface\n" -#~ "drop - leave group\n" -#~ "stats - get your stats\n" -#~ "stop - same as 'off'\n" -#~ "quit - same as 'off'\n" -#~ "sub - same as 'follow'\n" -#~ "unsub - same as 'leave'\n" -#~ "last - same as 'get'\n" -#~ "on - not yet implemented.\n" -#~ "off - not yet implemented.\n" -#~ "nudge - remind a user to update.\n" -#~ "invite - not yet implemented.\n" -#~ "track - not yet implemented.\n" -#~ "untrack - not yet implemented.\n" -#~ "track off - not yet implemented.\n" -#~ "untrack all - not yet implemented.\n" -#~ "tracks - not yet implemented.\n" -#~ "tracking - not yet implemented.\n" -#~ msgstr "" -#~ "Наредби:\n" -#~ "on - вклучи известувања\n" -#~ "off - исклучи известувања\n" -#~ "help - прикажи ја оваа помош\n" -#~ "follow - претплати се на корисник\n" -#~ "groups - список на групи кадешто членувате\n" -#~ "subscriptions - список на луѓе кои ги следите\n" -#~ "subscribers - список на луѓе кои Ве следат\n" -#~ "leave - откажи претплата на корисник\n" -#~ "d - директна порака за корисник\n" -#~ "get - прикажи последна забелешка на корисник\n" -#~ "whois - прикажи профилни информации за корисник\n" -#~ "fav - додај ја последната забелешка на корисникот во " -#~ "бендисани\n" -#~ "fav # - додај забелешка со даден id како бендисана\n" -#~ "repeat # - повтори забелешка со даден id\n" -#~ "repeat - повтори последна забелешка на корисник\n" -#~ "reply # - одговори на забелешка со даден id\n" -#~ "reply - одговори на последна забелешка на корисник\n" -#~ "join - зачлени се во група\n" -#~ "login - Дај врска за најавување на посредникот\n" -#~ "drop - напушти група\n" -#~ "stats - прикажи мои статистики\n" -#~ "stop - исто што и 'off'\n" -#~ "quit - исто што и 'off'\n" -#~ "sub - исто што и 'follow'\n" -#~ "unsub - исто што и 'leave'\n" -#~ "last - исто што и 'get'\n" -#~ "on - сè уште не е имплементирано.\n" -#~ "off - сè уште не е имплементирано.\n" -#~ "nudge - потсети корисник да поднови.\n" -#~ "invite - сè уште не е имплементирано.\n" -#~ "track - сè уште не е имплементирано.\n" -#~ "untrack - сè уште не е имплементирано.\n" -#~ "track off - сè уште не е имплементирано.\n" -#~ "untrack all - сè уште не е имплементирано.\n" -#~ "tracks - сè уште не е имплементирано.\n" -#~ "tracking - сè уште не е имплементирано.\n" - -#~ msgid "Edit Avatar" -#~ msgstr "Уреди аватар" +#~ msgid "Invalid tag: \"%s\"" +#~ msgstr "Неважечка ознака: „%s“" diff --git a/locale/ml/LC_MESSAGES/statusnet.po b/locale/ml/LC_MESSAGES/statusnet.po index a3e79892f0..7af7447b88 100644 --- a/locale/ml/LC_MESSAGES/statusnet.po +++ b/locale/ml/LC_MESSAGES/statusnet.po @@ -9,12 +9,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:49:48+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:38:11+0000\n" "Language-Team: Malayalam \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" +"X-POT-Import-Date: 2011-03-17 10:19:27+0000\n" "X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ml\n" @@ -3786,6 +3786,8 @@ msgstr "ഭാഷയുടെ നീളം വളരെ കൂടുതലാണ #. TRANS: Validation error in form for profile settings. #. TRANS: %s is an invalid tag. +#. TRANS: Form validation error when entering an invalid tag. +#. TRANS: %s is the invalid tag. #, fuzzy, php-format msgid "Invalid tag: \"%s\"." msgstr "അസാധുവായ റ്റാഗ്: \"%s\"" @@ -5110,14 +5112,10 @@ msgid "Tag user" msgstr "ഉപയോക്താവിനെ റ്റാഗ് ചെയ്യുക" msgid "" -"Tags for this user (letters, numbers, -, ., and _), comma- or space- " -"separated" +"Tags for this user (letters, numbers, -, ., and _), separated by commas or " +"spaces." msgstr "" -#, php-format -msgid "Invalid tag: \"%s\"" -msgstr "അസാധുവായ റ്റാഗ്: \"%s\"" - msgid "" "You can only tag people you are subscribed to or who are subscribed to you." msgstr "" @@ -7944,5 +7942,5 @@ msgstr "" msgid "Getting backup from file '%s'." msgstr "" -#~ msgid "Note" -#~ msgstr "കുറിപ്പ്" +#~ msgid "Invalid tag: \"%s\"" +#~ msgstr "അസാധുവായ റ്റാഗ്: \"%s\"" diff --git a/locale/nb/LC_MESSAGES/statusnet.po b/locale/nb/LC_MESSAGES/statusnet.po index 55d575a366..337ab26b34 100644 --- a/locale/nb/LC_MESSAGES/statusnet.po +++ b/locale/nb/LC_MESSAGES/statusnet.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:49:51+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:38:14+0000\n" "Language-Team: Norwegian (bokmål)‬ \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -22,7 +22,7 @@ msgstr "" "X-Language-Code: no\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" +"X-POT-Import-Date: 2011-03-17 10:19:27+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -3912,6 +3912,8 @@ msgstr "Språknavnet er for langt (maks 50 tegn)." #. TRANS: Validation error in form for profile settings. #. TRANS: %s is an invalid tag. +#. TRANS: Form validation error when entering an invalid tag. +#. TRANS: %s is the invalid tag. #, fuzzy, php-format msgid "Invalid tag: \"%s\"." msgstr "Ugyldig merkelapp: «%s»" @@ -5314,16 +5316,12 @@ msgstr "Merk bruker" #, fuzzy msgid "" -"Tags for this user (letters, numbers, -, ., and _), comma- or space- " -"separated" +"Tags for this user (letters, numbers, -, ., and _), separated by commas or " +"spaces." msgstr "" "Merkelapper for degselv (bokstaver, nummer, -, ., og _), adskilt med komma " "eller mellomrom" -#, php-format -msgid "Invalid tag: \"%s\"" -msgstr "Ugyldig merkelapp: «%s»" - msgid "" "You can only tag people you are subscribed to or who are subscribed to you." msgstr "" @@ -8325,9 +8323,5 @@ msgstr "" msgid "Getting backup from file '%s'." msgstr "" -#~ msgid "Note" -#~ msgstr "Merk" - -#, fuzzy -#~ msgid "Edit Avatar" -#~ msgstr "Brukerbilde" +#~ msgid "Invalid tag: \"%s\"" +#~ msgstr "Ugyldig merkelapp: «%s»" diff --git a/locale/nl/LC_MESSAGES/statusnet.po b/locale/nl/LC_MESSAGES/statusnet.po index c427d1e703..1fa61d8047 100644 --- a/locale/nl/LC_MESSAGES/statusnet.po +++ b/locale/nl/LC_MESSAGES/statusnet.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:49:49+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:38:12+0000\n" "Language-Team: Dutch \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -22,7 +22,7 @@ msgstr "" "X-Language-Code: nl\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" +"X-POT-Import-Date: 2011-03-17 10:19:27+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -3898,6 +3898,8 @@ msgstr "De taal is te lang (maximaal 50 tekens)." #. TRANS: Validation error in form for profile settings. #. TRANS: %s is an invalid tag. +#. TRANS: Form validation error when entering an invalid tag. +#. TRANS: %s is the invalid tag. #, php-format msgid "Invalid tag: \"%s\"." msgstr "Ongeldig label: \"%s\"." @@ -4756,9 +4758,8 @@ msgstr "Bericht van %1$s op %2$s" msgid "Notice deleted." msgstr "Deze mededeling is verwijderd." -#, fuzzy msgid "Notice" -msgstr "Mededelingen" +msgstr "Mededeling" #. TRANS: Page title showing tagged notices in one user's stream. %1$s is the username, %2$s is the hash tag. #, php-format @@ -5307,17 +5308,14 @@ msgstr "Gebruikersprofiel" msgid "Tag user" msgstr "Gebruiker labelen" +#, fuzzy msgid "" -"Tags for this user (letters, numbers, -, ., and _), comma- or space- " -"separated" +"Tags for this user (letters, numbers, -, ., and _), separated by commas or " +"spaces." msgstr "" "Labels voor deze gebruiker (letters, cijfers, -, ., en _). Gebruik komma's " "of spaties als scheidingsteken" -#, php-format -msgid "Invalid tag: \"%s\"" -msgstr "Ongeldig label: '%s'" - msgid "" "You can only tag people you are subscribed to or who are subscribed to you." msgstr "" @@ -6802,152 +6800,140 @@ msgstr[0] "U bent lid van deze groep:" msgstr[1] "U bent lid van deze groepen:" #. TRANS: Header line of help text for commands. -#, fuzzy msgctxt "COMMANDHELP" msgid "Commands:" -msgstr "Commandoresultaten" +msgstr "Commando's:" #. TRANS: Help message for IM/SMS command "on" -#, fuzzy msgctxt "COMMANDHELP" msgid "turn on notifications" -msgstr "Het is niet mogelijk de notificatie uit te schakelen." +msgstr "meldingen inschakelen" #. TRANS: Help message for IM/SMS command "off" -#, fuzzy msgctxt "COMMANDHELP" msgid "turn off notifications" -msgstr "Het is niet mogelijk de mededelingen uit te schakelen." +msgstr "meldingen uitschakelen" #. TRANS: Help message for IM/SMS command "help" msgctxt "COMMANDHELP" msgid "show this help" -msgstr "" +msgstr "de hulptekst weergeven" #. TRANS: Help message for IM/SMS command "follow " -#, fuzzy msgctxt "COMMANDHELP" msgid "subscribe to user" -msgstr "Abonneren op deze gebruiker" +msgstr "abonneren op gebruiker" #. TRANS: Help message for IM/SMS command "groups" msgctxt "COMMANDHELP" msgid "lists the groups you have joined" -msgstr "" +msgstr "geeft de groepen waar u lid van bent weer" #. TRANS: Help message for IM/SMS command "subscriptions" msgctxt "COMMANDHELP" msgid "list the people you follow" -msgstr "" +msgstr "geeft de mensen die u volgt weer" #. TRANS: Help message for IM/SMS command "subscribers" msgctxt "COMMANDHELP" msgid "list the people that follow you" -msgstr "" +msgstr "geeft de mensen die u volgen weer" #. TRANS: Help message for IM/SMS command "leave " -#, fuzzy msgctxt "COMMANDHELP" msgid "unsubscribe from user" -msgstr "Uitschrijven van deze gebruiker" +msgstr "abonnement op gebruiker opzeggen" #. TRANS: Help message for IM/SMS command "d " -#, fuzzy msgctxt "COMMANDHELP" msgid "direct message to user" -msgstr "Privéberichten aan %s" +msgstr "privébericht aan gebruiker" #. TRANS: Help message for IM/SMS command "get " msgctxt "COMMANDHELP" msgid "get last notice from user" -msgstr "" +msgstr "haal de laastste mededdeling van gebruiker op" #. TRANS: Help message for IM/SMS command "whois " -#, fuzzy msgctxt "COMMANDHELP" msgid "get profile info on user" -msgstr "Het profiel op de andere server is geen groep!" +msgstr "profielgegevens van gebruiker ophalen" #. TRANS: Help message for IM/SMS command "lose " msgctxt "COMMANDHELP" msgid "force user to stop following you" -msgstr "" +msgstr "dwing gebruiker u niet langer te volgen" #. TRANS: Help message for IM/SMS command "fav " msgctxt "COMMANDHELP" msgid "add user's last notice as a 'fave'" -msgstr "" +msgstr "voegt de laatste mededeling van gebruiker toe als favoriet" #. TRANS: Help message for IM/SMS command "fav #" msgctxt "COMMANDHELP" msgid "add notice with the given id as a 'fave'" -msgstr "" +msgstr "voegt mededeling met het opgegeven ID toe als favoriet" #. TRANS: Help message for IM/SMS command "repeat #" msgctxt "COMMANDHELP" msgid "repeat a notice with a given id" -msgstr "" +msgstr "herhaalt de mededeling met het opgegeven ID" #. TRANS: Help message for IM/SMS command "repeat " -#, fuzzy msgctxt "COMMANDHELP" msgid "repeat the last notice from user" -msgstr "Deze mededeling herhalen" +msgstr "de laatste mededeling van gebruiker herhalen" #. TRANS: Help message for IM/SMS command "reply #" msgctxt "COMMANDHELP" msgid "reply to notice with a given id" -msgstr "" +msgstr "antwoorden op mededeling met het opgegeven ID" #. TRANS: Help message for IM/SMS command "reply " -#, fuzzy msgctxt "COMMANDHELP" msgid "reply to the last notice from user" -msgstr "Op deze mededeling antwoorden" +msgstr "op de laatste mededeling van gebruiker antwoorden" #. TRANS: Help message for IM/SMS command "join " -#, fuzzy msgctxt "COMMANDHELP" msgid "join group" -msgstr "Onbekende groep." +msgstr "lid worden van groep" #. TRANS: Help message for IM/SMS command "login" msgctxt "COMMANDHELP" msgid "Get a link to login to the web interface" -msgstr "" +msgstr "Haal een verwijzing op naar het aanmeldscherm voor de webinterface" #. TRANS: Help message for IM/SMS command "drop " -#, fuzzy msgctxt "COMMANDHELP" msgid "leave group" -msgstr "Groep verwijderen" +msgstr "groep verlaten" #. TRANS: Help message for IM/SMS command "stats" -#, fuzzy msgctxt "COMMANDHELP" msgid "get your stats" -msgstr "Werk uw status bij..." +msgstr "uw statistieken ophalen" #. TRANS: Help message for IM/SMS command "stop" #. TRANS: Help message for IM/SMS command "quit" msgctxt "COMMANDHELP" msgid "same as 'off'" -msgstr "" +msgstr "hetzelfde als \"uit\"" #. TRANS: Help message for IM/SMS command "sub " msgctxt "COMMANDHELP" msgid "same as 'follow'" -msgstr "" +msgstr "hetzelfde als 'follow'" #. TRANS: Help message for IM/SMS command "unsub " msgctxt "COMMANDHELP" msgid "same as 'leave'" -msgstr "" +msgstr "hetzelfde als 'leave'" #. TRANS: Help message for IM/SMS command "last " msgctxt "COMMANDHELP" msgid "same as 'get'" -msgstr "" +msgstr "hetzelfde als 'get'" #. TRANS: Help message for IM/SMS command "on " #. TRANS: Help message for IM/SMS command "off " @@ -6958,15 +6944,14 @@ msgstr "" #. TRANS: Help message for IM/SMS command "untrack all" #. TRANS: Help message for IM/SMS command "tracks" #. TRANS: Help message for IM/SMS command "tracking" -#, fuzzy msgctxt "COMMANDHELP" msgid "not yet implemented." -msgstr "Dit commando is nog niet geïmplementeerd." +msgstr "nog niet geïmplementeerd." #. TRANS: Help message for IM/SMS command "nudge " msgctxt "COMMANDHELP" msgid "remind a user to update." -msgstr "" +msgstr "herinner een gebruiker eraan bij te werken." #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. msgid "No configuration file found." @@ -8333,90 +8318,5 @@ msgstr "Ongeldige XML. De XRD-root mist." msgid "Getting backup from file '%s'." msgstr "De back-up wordt uit het bestand \"%s\" geladen." -#~ msgid "Note" -#~ msgstr "Opmerking" - -#~ msgid "" -#~ "Commands:\n" -#~ "on - turn on notifications\n" -#~ "off - turn off notifications\n" -#~ "help - show this help\n" -#~ "follow - subscribe to user\n" -#~ "groups - lists the groups you have joined\n" -#~ "subscriptions - list the people you follow\n" -#~ "subscribers - list the people that follow you\n" -#~ "leave - unsubscribe from user\n" -#~ "d - direct message to user\n" -#~ "get - get last notice from user\n" -#~ "whois - get profile info on user\n" -#~ "lose - force user to stop following you\n" -#~ "fav - add user's last notice as a 'fave'\n" -#~ "fav # - add notice with the given id as a 'fave'\n" -#~ "repeat # - repeat a notice with a given id\n" -#~ "repeat - repeat the last notice from user\n" -#~ "reply # - reply to notice with a given id\n" -#~ "reply - reply to the last notice from user\n" -#~ "join - join group\n" -#~ "login - Get a link to login to the web interface\n" -#~ "drop - leave group\n" -#~ "stats - get your stats\n" -#~ "stop - same as 'off'\n" -#~ "quit - same as 'off'\n" -#~ "sub - same as 'follow'\n" -#~ "unsub - same as 'leave'\n" -#~ "last - same as 'get'\n" -#~ "on - not yet implemented.\n" -#~ "off - not yet implemented.\n" -#~ "nudge - remind a user to update.\n" -#~ "invite - not yet implemented.\n" -#~ "track - not yet implemented.\n" -#~ "untrack - not yet implemented.\n" -#~ "track off - not yet implemented.\n" -#~ "untrack all - not yet implemented.\n" -#~ "tracks - not yet implemented.\n" -#~ "tracking - not yet implemented.\n" -#~ msgstr "" -#~ "Commando's:\n" -#~ "on - notificaties inschakelen\n" -#~ "off - notificaties uitschakelen\n" -#~ "help - deze hulptekst weergeven\n" -#~ "follow - abonneren op gebruiker\n" -#~ "groups - geef uw groepslidmaatschappen weer\n" -#~ "subscriptions - geeft uw gebruikersabonnenmenten weer\n" -#~ "subscribers - geeft de gebruikers die een abonnement op u hebben weer\n" -#~ "leave - abonnement op gebruiker opzeggen\n" -#~ "d - direct bericht aan gebruiker\n" -#~ "get - laatste mededeling van gebruiker opvragen\n" -#~ "whois - profielinformatie van gebruiker opvragen\n" -#~ "lose - zorgt ervoor dat de gebruiker u niet meer volgt\n" -#~ "fav - laatste mededeling van gebruiker op favorietenlijst " -#~ "zetten\n" -#~ "fav # - mededelingen met aangegeven ID op favorietenlijst " -#~ "zetten\n" -#~ "repeat # - herhaal een mededelingen met een opgegeven ID\n" -#~ "repeat - herhaal de laatste mededelingen van gebruiker\n" -#~ "reply # - antwoorden op de mededeling met het aangegeven " -#~ "ID\n" -#~ "reply - antwoorden op de laatste mededeling van gebruiker\n" -#~ "join - lid worden van groep\n" -#~ "login - verwijzing opvragen naar de webpagina voor aanmelden\n" -#~ "drop - groepslidmaatschap opzeggen\n" -#~ "stats - uw statistieken opvragen\n" -#~ "stop - zelfde als 'off'\n" -#~ "quit - zelfde als 'off'\n" -#~ "sub - zelfde als 'follow'\n" -#~ "unsub - zelfde als 'leave'\n" -#~ "last - zelfde als 'get'\n" -#~ "on - nog niet beschikbaar\n" -#~ "off - nog niet beschikbaar\n" -#~ "nudge - gebruiker porren\n" -#~ "invite - nog niet beschikbaar\n" -#~ "track - nog niet beschikbaar\n" -#~ "untrack - nog niet beschikbaar\n" -#~ "track off - nog niet beschikbaar\n" -#~ "untrack all - nog niet beschikbaar\n" -#~ "tracks - nog niet beschikbaar\n" -#~ "tracking - nog niet beschikbaar\n" - -#~ msgid "Edit Avatar" -#~ msgstr "Avatar bewerken" +#~ msgid "Invalid tag: \"%s\"" +#~ msgstr "Ongeldig label: \"%s\"." diff --git a/locale/pl/LC_MESSAGES/statusnet.po b/locale/pl/LC_MESSAGES/statusnet.po index c656fd64bd..4dee907dac 100644 --- a/locale/pl/LC_MESSAGES/statusnet.po +++ b/locale/pl/LC_MESSAGES/statusnet.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:49:52+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:38:15+0000\n" "Last-Translator: Piotr Drąg \n" "Language-Team: Polish \n" "MIME-Version: 1.0\n" @@ -24,7 +24,7 @@ msgstr "" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: pl\n" "X-Message-Group: #out-statusnet-core\n" -"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" +"X-POT-Import-Date: 2011-03-17 10:19:27+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -3924,6 +3924,8 @@ msgstr "Język jest za długi (maksymalnie 50 znaków)." #. TRANS: Validation error in form for profile settings. #. TRANS: %s is an invalid tag. +#. TRANS: Form validation error when entering an invalid tag. +#. TRANS: %s is the invalid tag. #, fuzzy, php-format msgid "Invalid tag: \"%s\"." msgstr "Nieprawidłowy znacznik: \"%s\"" @@ -4777,7 +4779,6 @@ msgstr "Wiadomość od użytkownika %1$s na %2$s" msgid "Notice deleted." msgstr "Usunięto wpis." -#, fuzzy msgid "Notice" msgstr "Wpisy" @@ -5324,17 +5325,14 @@ msgstr "Profil użytkownika" msgid "Tag user" msgstr "Znacznik użytkownika" +#, fuzzy msgid "" -"Tags for this user (letters, numbers, -, ., and _), comma- or space- " -"separated" +"Tags for this user (letters, numbers, -, ., and _), separated by commas or " +"spaces." msgstr "" "Znaczniki dla tego użytkownika (litery, liczby, -, . i _), oddzielone " "przecinkami lub spacjami" -#, php-format -msgid "Invalid tag: \"%s\"" -msgstr "Nieprawidłowy znacznik: \"%s\"" - msgid "" "You can only tag people you are subscribed to or who are subscribed to you." msgstr "" @@ -8360,90 +8358,5 @@ msgstr "Nieprawidłowy kod XML, brak głównego XRD." msgid "Getting backup from file '%s'." msgstr "Pobieranie kopii zapasowej z pliku \"%s\"." -#~ msgid "Note" -#~ msgstr "Wpis" - -#~ msgid "" -#~ "Commands:\n" -#~ "on - turn on notifications\n" -#~ "off - turn off notifications\n" -#~ "help - show this help\n" -#~ "follow - subscribe to user\n" -#~ "groups - lists the groups you have joined\n" -#~ "subscriptions - list the people you follow\n" -#~ "subscribers - list the people that follow you\n" -#~ "leave - unsubscribe from user\n" -#~ "d - direct message to user\n" -#~ "get - get last notice from user\n" -#~ "whois - get profile info on user\n" -#~ "lose - force user to stop following you\n" -#~ "fav - add user's last notice as a 'fave'\n" -#~ "fav # - add notice with the given id as a 'fave'\n" -#~ "repeat # - repeat a notice with a given id\n" -#~ "repeat - repeat the last notice from user\n" -#~ "reply # - reply to notice with a given id\n" -#~ "reply - reply to the last notice from user\n" -#~ "join - join group\n" -#~ "login - Get a link to login to the web interface\n" -#~ "drop - leave group\n" -#~ "stats - get your stats\n" -#~ "stop - same as 'off'\n" -#~ "quit - same as 'off'\n" -#~ "sub - same as 'follow'\n" -#~ "unsub - same as 'leave'\n" -#~ "last - same as 'get'\n" -#~ "on - not yet implemented.\n" -#~ "off - not yet implemented.\n" -#~ "nudge - remind a user to update.\n" -#~ "invite - not yet implemented.\n" -#~ "track - not yet implemented.\n" -#~ "untrack - not yet implemented.\n" -#~ "track off - not yet implemented.\n" -#~ "untrack all - not yet implemented.\n" -#~ "tracks - not yet implemented.\n" -#~ "tracking - not yet implemented.\n" -#~ msgstr "" -#~ "Polecenia:\n" -#~ "on - włącza powiadomienia\n" -#~ "off - wyłącza powiadomienia\n" -#~ "help - wyświetla tę pomoc\n" -#~ "follow - subskrybuje użytkownika\n" -#~ "groups - wyświetla listę grup, do których dołączyłeś\n" -#~ "subscriptions - wyświetla listę obserwowanych osób\n" -#~ "subscribers - wyświetla listę osób, które cię obserwują\n" -#~ "leave - usuwa subskrypcję użytkownika\n" -#~ "d - bezpośrednia wiadomość do użytkownika\n" -#~ "get - zwraca ostatni wpis użytkownika\n" -#~ "whois - zwraca informacje o profilu użytkownika\n" -#~ "lose - wymusza użytkownika do zatrzymania obserwowania cię\n" -#~ "fav - dodaje ostatni wpis użytkownika jako \"ulubiony\"\n" -#~ "fav # - dodaje wpis z podanym identyfikatorem jako " -#~ "\"ulubiony\"\n" -#~ "repeat # - powtarza wiadomość z zadanym " -#~ "identyfikatorem\n" -#~ "repeat - powtarza ostatnią wiadomość od użytkownika\n" -#~ "reply # - odpowiada na wpis z podanym " -#~ "identyfikatorem\n" -#~ "reply - odpowiada na ostatni wpis użytkownika\n" -#~ "join - dołącza do grupy\n" -#~ "login - pobiera odnośnik do zalogowania się do interfejsu WWW\n" -#~ "drop - opuszcza grupę\n" -#~ "stats - pobiera statystyki\n" -#~ "stop - to samo co \"off\"\n" -#~ "quit - to samo co \"off\"\n" -#~ "sub - to samo co \"follow\"\n" -#~ "unsub - to samo co \"leave\"\n" -#~ "last - to samo co \"get\"\n" -#~ "on - jeszcze nie zaimplementowano\n" -#~ "off - jeszcze nie zaimplementowano\n" -#~ "nudge - przypomina użytkownikowi o aktualizacji\n" -#~ "invite - jeszcze nie zaimplementowano\n" -#~ "track - jeszcze nie zaimplementowano\n" -#~ "untrack - jeszcze nie zaimplementowano\n" -#~ "track off - jeszcze nie zaimplementowano\n" -#~ "untrack all - jeszcze nie zaimplementowano\n" -#~ "tracks - jeszcze nie zaimplementowano\n" -#~ "tracking - jeszcze nie zaimplementowano\n" - -#~ msgid "Edit Avatar" -#~ msgstr "Zmodyfikuj awatar" +#~ msgid "Invalid tag: \"%s\"" +#~ msgstr "Nieprawidłowy znacznik: \"%s\"" diff --git a/locale/pt/LC_MESSAGES/statusnet.po b/locale/pt/LC_MESSAGES/statusnet.po index 1b1e41be95..93aaccd378 100644 --- a/locale/pt/LC_MESSAGES/statusnet.po +++ b/locale/pt/LC_MESSAGES/statusnet.po @@ -17,8 +17,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:49:53+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:38:16+0000\n" "Language-Team: Portuguese \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -27,7 +27,7 @@ msgstr "" "X-Language-Code: pt\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" +"X-POT-Import-Date: 2011-03-17 10:19:27+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -3892,6 +3892,8 @@ msgstr "Língua é demasiado extensa (máx. 50 caracteres)." #. TRANS: Validation error in form for profile settings. #. TRANS: %s is an invalid tag. +#. TRANS: Form validation error when entering an invalid tag. +#. TRANS: %s is the invalid tag. #, fuzzy, php-format msgid "Invalid tag: \"%s\"." msgstr "Categoria inválida: \"%s\"" @@ -5308,17 +5310,14 @@ msgstr "Perfil" msgid "Tag user" msgstr "Categorizar utilizador" +#, fuzzy msgid "" -"Tags for this user (letters, numbers, -, ., and _), comma- or space- " -"separated" +"Tags for this user (letters, numbers, -, ., and _), separated by commas or " +"spaces." msgstr "" "Categorias para este utilizador (letras, números, ., _), separadas por " "vírgulas ou espaços" -#, php-format -msgid "Invalid tag: \"%s\"" -msgstr "Categoria inválida: \"%s\"" - msgid "" "You can only tag people you are subscribed to or who are subscribed to you." msgstr "Só pode categorizar pessoas que subscreve ou os seus subscritores." @@ -8326,87 +8325,5 @@ msgstr "" msgid "Getting backup from file '%s'." msgstr "" -#~ msgid "Note" -#~ msgstr "Anotação" - -#~ msgid "" -#~ "Commands:\n" -#~ "on - turn on notifications\n" -#~ "off - turn off notifications\n" -#~ "help - show this help\n" -#~ "follow - subscribe to user\n" -#~ "groups - lists the groups you have joined\n" -#~ "subscriptions - list the people you follow\n" -#~ "subscribers - list the people that follow you\n" -#~ "leave - unsubscribe from user\n" -#~ "d - direct message to user\n" -#~ "get - get last notice from user\n" -#~ "whois - get profile info on user\n" -#~ "lose - force user to stop following you\n" -#~ "fav - add user's last notice as a 'fave'\n" -#~ "fav # - add notice with the given id as a 'fave'\n" -#~ "repeat # - repeat a notice with a given id\n" -#~ "repeat - repeat the last notice from user\n" -#~ "reply # - reply to notice with a given id\n" -#~ "reply - reply to the last notice from user\n" -#~ "join - join group\n" -#~ "login - Get a link to login to the web interface\n" -#~ "drop - leave group\n" -#~ "stats - get your stats\n" -#~ "stop - same as 'off'\n" -#~ "quit - same as 'off'\n" -#~ "sub - same as 'follow'\n" -#~ "unsub - same as 'leave'\n" -#~ "last - same as 'get'\n" -#~ "on - not yet implemented.\n" -#~ "off - not yet implemented.\n" -#~ "nudge - remind a user to update.\n" -#~ "invite - not yet implemented.\n" -#~ "track - not yet implemented.\n" -#~ "untrack - not yet implemented.\n" -#~ "track off - not yet implemented.\n" -#~ "untrack all - not yet implemented.\n" -#~ "tracks - not yet implemented.\n" -#~ "tracking - not yet implemented.\n" -#~ msgstr "" -#~ "Comandos:\n" -#~ "on - ligar notificações\n" -#~ "off - desligar notificações\n" -#~ "help - mostrar esta ajuda\n" -#~ "follow - subscrever este utilizador\n" -#~ "groups - lista os grupos a que se juntou\n" -#~ "subscriptions - lista as pessoas que está a seguir\n" -#~ "subscribers - lista as pessoas que estão a segui-lo(a)\n" -#~ "leave - deixar de subscrever este utilizador\n" -#~ "d - mensagem directa para o utilizador\n" -#~ "get - receber última nota do utilizador\n" -#~ "whois - receber perfil do utilizador\n" -#~ "lose - obrigar o utilizador a deixar de subscrevê-lo\n" -#~ "fav - adicionar última nota do utilizador às favoritas\n" -#~ "fav # - adicionar nota com esta identificação às favoritas\n" -#~ "repeat # - repetir uma nota com uma certa identificação\n" -#~ "repeat - repetir a última nota do utilizador\n" -#~ "reply # - responder à nota com esta identificação\n" -#~ "reply - responder à última nota do utilizador\n" -#~ "join - juntar-se ao grupo\n" -#~ "login - Receber uma ligação para iniciar sessão na interface web\n" -#~ "drop - afastar-se do grupo\n" -#~ "stats - receber as suas estatísticas\n" -#~ "stop - o mesmo que 'off'\n" -#~ "quit - o mesmo que 'off'\n" -#~ "sub - o mesmo que 'follow'\n" -#~ "unsub - o mesmo que 'leave'\n" -#~ "last - o mesmo que 'get'\n" -#~ "on - ainda não implementado.\n" -#~ "off - ainda não implementado.\n" -#~ "nudge - relembrar um utilizador para actualizar.\n" -#~ "invite - ainda não implementado.\n" -#~ "track - ainda não implementado.\n" -#~ "untrack - ainda não implementado.\n" -#~ "track off - ainda não implementado.\n" -#~ "untrack all - ainda não implementado.\n" -#~ "tracks - ainda não implementado.\n" -#~ "tracking - ainda não implementado.\n" - -#~ msgid "Edit Avatar" -#~ msgstr "Editar Avatar" +#~ msgid "Invalid tag: \"%s\"" +#~ msgstr "Categoria inválida: \"%s\"" diff --git a/locale/pt_BR/LC_MESSAGES/statusnet.po b/locale/pt_BR/LC_MESSAGES/statusnet.po index fc2eacbe50..783aea3641 100644 --- a/locale/pt_BR/LC_MESSAGES/statusnet.po +++ b/locale/pt_BR/LC_MESSAGES/statusnet.po @@ -15,8 +15,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:49:54+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:38:17+0000\n" "Language-Team: Brazilian Portuguese \n" "Content-Type: text/plain; charset=UTF-8\n" @@ -26,7 +26,7 @@ msgstr "" "X-Language-Code: pt-br\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" +"X-POT-Import-Date: 2011-03-17 10:19:27+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -3959,6 +3959,8 @@ msgstr "O nome do idioma é muito extenso (máx. 50 caracteres)." #. TRANS: Validation error in form for profile settings. #. TRANS: %s is an invalid tag. +#. TRANS: Form validation error when entering an invalid tag. +#. TRANS: %s is the invalid tag. #, fuzzy, php-format msgid "Invalid tag: \"%s\"." msgstr "Etiqueta inválida: \"%s\"" @@ -4830,7 +4832,6 @@ msgstr "Mensagem de %1$s no %2$s" msgid "Notice deleted." msgstr "A mensagem excluída." -#, fuzzy msgid "Notice" msgstr "Mensagens" @@ -5375,17 +5376,14 @@ msgstr "Perfil do usuário" msgid "Tag user" msgstr "Etiquetar o usuário" +#, fuzzy msgid "" -"Tags for this user (letters, numbers, -, ., and _), comma- or space- " -"separated" +"Tags for this user (letters, numbers, -, ., and _), separated by commas or " +"spaces." msgstr "" "Etiquetas para este usuário (letras, números, -, ., e _), separadas por " "vírgulas ou espaços" -#, php-format -msgid "Invalid tag: \"%s\"" -msgstr "Etiqueta inválida: \"%s\"" - msgid "" "You can only tag people you are subscribed to or who are subscribed to you." msgstr "Você só pode etiquetar pessoas às quais assina ou que assinam você." @@ -8405,88 +8403,5 @@ msgstr "" msgid "Getting backup from file '%s'." msgstr "" -#~ msgid "Note" -#~ msgstr "Mensagem" - -#~ msgid "" -#~ "Commands:\n" -#~ "on - turn on notifications\n" -#~ "off - turn off notifications\n" -#~ "help - show this help\n" -#~ "follow - subscribe to user\n" -#~ "groups - lists the groups you have joined\n" -#~ "subscriptions - list the people you follow\n" -#~ "subscribers - list the people that follow you\n" -#~ "leave - unsubscribe from user\n" -#~ "d - direct message to user\n" -#~ "get - get last notice from user\n" -#~ "whois - get profile info on user\n" -#~ "lose - force user to stop following you\n" -#~ "fav - add user's last notice as a 'fave'\n" -#~ "fav # - add notice with the given id as a 'fave'\n" -#~ "repeat # - repeat a notice with a given id\n" -#~ "repeat - repeat the last notice from user\n" -#~ "reply # - reply to notice with a given id\n" -#~ "reply - reply to the last notice from user\n" -#~ "join - join group\n" -#~ "login - Get a link to login to the web interface\n" -#~ "drop - leave group\n" -#~ "stats - get your stats\n" -#~ "stop - same as 'off'\n" -#~ "quit - same as 'off'\n" -#~ "sub - same as 'follow'\n" -#~ "unsub - same as 'leave'\n" -#~ "last - same as 'get'\n" -#~ "on - not yet implemented.\n" -#~ "off - not yet implemented.\n" -#~ "nudge - remind a user to update.\n" -#~ "invite - not yet implemented.\n" -#~ "track - not yet implemented.\n" -#~ "untrack - not yet implemented.\n" -#~ "track off - not yet implemented.\n" -#~ "untrack all - not yet implemented.\n" -#~ "tracks - not yet implemented.\n" -#~ "tracking - not yet implemented.\n" -#~ msgstr "" -#~ "Comandos:\n" -#~ "on - ativa as notificações\n" -#~ "off - desativa as notificações\n" -#~ "help - exibe esta ajuda\n" -#~ "follow - assina o usuário\n" -#~ "groups - lista os grupos aos quais você se associou\n" -#~ "subscriptions - lista as pessoas que você segue\n" -#~ "subscribers - lista as pessoas que seguem você\n" -#~ "leave - deixa de assinar o usuário\n" -#~ "d - mensagem direta para o usuário\n" -#~ "get - obtém a última mensagem do usuário\n" -#~ "whois - obtém as informações do perfil do usuário\n" -#~ "lose - obriga o usuário a deixar de segui-lo\n" -#~ "fav - adiciona a último mensagem do usuário como uma " -#~ "'favorita'\n" -#~ "fav # - adiciona a mensagem identificada como 'favorita'\n" -#~ "repeat # - repete a mensagem identificada\n" -#~ "repeat - repete a última mensagem do usuário\n" -#~ "reply # - responde a mensagem identificada\n" -#~ "reply - responde a última mensagem do usuário\n" -#~ "join - associa-se ao grupo\n" -#~ "login - obtém um link para se autenticar na interface web\n" -#~ "drop - deixa o grupo\n" -#~ "stats - obtém suas estatísticas\n" -#~ "stop - o mesmo que 'off'\n" -#~ "quit - o mesmo que 'off'\n" -#~ "sub - o mesmo que 'follow'\n" -#~ "unsub - o mesmo que 'leave'\n" -#~ "last - o mesmo que 'get'\n" -#~ "on - não implementado ainda\n" -#~ "off - não implementado ainda\n" -#~ "nudge - chama a atenção do usuário\n" -#~ "invite - não implementado ainda\n" -#~ "track - não implementado ainda\n" -#~ "untrack - não implementado ainda\n" -#~ "track off - não implementado ainda\n" -#~ "untrack all - não implementado ainda\n" -#~ "tracks - não implementado ainda\n" -#~ "tracking - não implementado ainda\n" - -#~ msgid "Edit Avatar" -#~ msgstr "Editar o avatar" +#~ msgid "Invalid tag: \"%s\"" +#~ msgstr "Etiqueta inválida: \"%s\"" diff --git a/locale/ru/LC_MESSAGES/statusnet.po b/locale/ru/LC_MESSAGES/statusnet.po index 115aad39de..53039bd47d 100644 --- a/locale/ru/LC_MESSAGES/statusnet.po +++ b/locale/ru/LC_MESSAGES/statusnet.po @@ -18,8 +18,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:49:55+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:38:18+0000\n" "Language-Team: Russian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -29,7 +29,7 @@ msgstr "" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= " "2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n" -"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" +"X-POT-Import-Date: 2011-03-17 10:19:27+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -1141,42 +1141,38 @@ msgid "No such group." msgstr "Нет такой группы." #. TRANS: Client exception thrown when trying to show membership of a non-subscribed group -#, fuzzy msgid "Not a member." -msgstr "Все участники" +msgstr "Не является участником." #. TRANS: Client exception thrown when deleting someone else's membership. -#, fuzzy msgid "Cannot delete someone else's membership." -msgstr "Невозможно удалить подписку на самого себя." +msgstr "Не удаётся удалить членство другого пользователя." #. TRANS: Client exception thrown when trying to display a subscription for a non-existing profile ID. #. TRANS: %d is the non-existing profile ID number. -#, fuzzy, php-format +#, php-format msgid "No such profile id: %d." -msgstr "Нет такого профиля." +msgstr "Нет такого профиля: %d." #. TRANS: Client exception thrown when trying to display a subscription for a non-subscribed profile ID. #. TRANS: %1$d is the non-existing subscriber ID number, $2$d is the ID of the profile that was not subscribed to. -#, fuzzy, php-format +#, php-format msgid "Profile %1$d not subscribed to profile %2$d." -msgstr "Вы не подписаны на этот профиль." +msgstr "Профиль %1$d не подписан на профиль %2$d." #. TRANS: Client exception thrown when trying to delete a subscription of another user. -#, fuzzy msgid "Cannot delete someone else's subscription." -msgstr "Невозможно удалить подписку на самого себя." +msgstr "Невозможно удалить подписку у другого пользователя." #. TRANS: Subtitle for Atom subscription feed. #. TRANS: %1$s is a user nickname, %s$s is the StatusNet sitename. -#, fuzzy, php-format +#, php-format msgid "People %1$s has subscribed to on %2$s" -msgstr "Люди подписанные на %s" +msgstr "%1$s подписаны на %2$s" #. TRANS: Client error displayed when not using the follow verb. -#, fuzzy msgid "Can only handle Follow activities." -msgstr "Возможна обработка только POST-запросов." +msgstr "Возможна обработка только Follow-запросов." #. TRANS: Client exception thrown when subscribing to an object that is not a person. msgid "Can only follow people." @@ -1184,15 +1180,15 @@ msgstr "Можно следить только за людьми." #. TRANS: Client exception thrown when subscribing to a non-existing profile. #. TRANS: %s is the unknown profile ID. -#, fuzzy, php-format +#, php-format msgid "Unknown profile %s." -msgstr "Неподдерживаемый тип файла" +msgstr "Неизвестный профиль %s." #. TRANS: Client error displayed trying to subscribe to an already subscribed profile. #. TRANS: %s is the profile the user already has a subscription on. -#, fuzzy, php-format +#, php-format msgid "Already subscribed to %s." -msgstr "Уже подписаны!" +msgstr "Подписка на %s уже существует." #. TRANS: Client error displayed trying to get a non-existing attachment. msgid "No such attachment." @@ -1277,9 +1273,8 @@ msgid "No file uploaded." msgstr "Файл не загружен." #. TRANS: Avatar upload form instruction after uploading a file. -#, fuzzy msgid "Pick a square area of the image to be your avatar." -msgstr "Подберите нужный квадратный участок для вашей аватары" +msgstr "Отметьте квадратный участок на изображении для вашей аватары." #. TRANS: Server error displayed if an avatar upload went wrong somehow server side. #. TRANS: Server error displayed trying to crop an uploaded group logo that is no longer present. @@ -1304,13 +1299,14 @@ msgid "Backup account" msgstr "Резервное копирование учетной записи" #. TRANS: Client exception thrown when trying to backup an account while not logged in. -#, fuzzy msgid "Only logged-in users can backup their account." -msgstr "Повторять записи могут только вошедшие пользователи." +msgstr "" +"Создавать резервную копию своей учётной записи могут только вошедшие " +"пользователи." #. TRANS: Client exception thrown when trying to backup an account without having backup rights. msgid "You may not backup your account." -msgstr "" +msgstr "В не можете создавать резервную копию своей учётной записи." #. TRANS: Information displayed on the backup account page. msgid "" @@ -1320,17 +1316,21 @@ msgid "" "addresses is not backed up. Additionally, uploaded files and direct messages " "are not backed up." msgstr "" +"Вы можете создать резервную копию данных вышей учётной записи в формате Activity Streams. Эта возможность " +"является экспериментальной и результат копирования не будет полным; личные " +"данные, такие как email или IM-адрес не войдут в резервную копию. К тому же, " +"прикрепленные к вашим сообщениям файлы и прямые сообщения также не войдут в " +"резервную копию." #. TRANS: Submit button to backup an account on the backup account page. -#, fuzzy msgctxt "BUTTON" msgid "Backup" msgstr "Создать резервную копию" #. TRANS: Title for submit button to backup an account on the backup account page. -#, fuzzy msgid "Backup your account." -msgstr "Резервное копирование учетной записи" +msgstr "Создать резервную копию вашей учётной записи." #. TRANS: Client error displayed when blocking a user that has already been blocked. msgid "You already blocked that user." @@ -1363,9 +1363,8 @@ msgid "No" msgstr "Нет" #. TRANS: Submit button title for 'No' when blocking a user. -#, fuzzy msgid "Do not block this user." -msgstr "Не блокировать этого пользователя" +msgstr "Не блокировать этого пользователя." #. TRANS: Button label on the user block form. #. TRANS: Button label on the delete application form. @@ -1378,9 +1377,8 @@ msgid "Yes" msgstr "Да" #. TRANS: Submit button title for 'Yes' when blocking a user. -#, fuzzy msgid "Block this user." -msgstr "Заблокировать пользователя." +msgstr "Заблокировать этого пользователя." #. TRANS: Server error displayed when blocking a user fails. msgid "Failed to save block information." @@ -1446,13 +1444,12 @@ msgstr "Этот адрес уже подтверждён." msgid "Couldn't update user." msgstr "Не удаётся обновить пользователя." -#, fuzzy msgid "Couldn't update user im preferences." -msgstr "Не удаётся обновить пользовательскую запись." +msgstr "Не удаётся обновить настройки сервиса мгновенных сообщений." -#, fuzzy msgid "Couldn't insert user im preferences." -msgstr "Не удаётся вставить новую подписку." +msgstr "" +"Не удаётся поместить настройки сервиса мгновенных сообщений в базу данных." #. TRANS: Server error displayed when an address confirmation code deletion from the #. TRANS: database fails in the contact address confirmation action. @@ -1479,14 +1476,14 @@ msgid "Notices" msgstr "Записи" #. TRANS: Client exception displayed trying to delete a user account while not logged in. -#, fuzzy msgid "Only logged-in users can delete their account." -msgstr "Повторять записи могут только вошедшие пользователи." +msgstr "" +"Только пользователи, находящиеся в системе, могут удалить свою учётную " +"запись." #. TRANS: Client exception displayed trying to delete a user account without have the rights to do that. -#, fuzzy msgid "You cannot delete your account." -msgstr "Вы не можете удалять пользователей." +msgstr "Вы не можете удалить свою учётную запись." #. TRANS: Confirmation text for user deletion. The user has to type this exactly the same, including punctuation. msgid "I am sure." @@ -1496,24 +1493,24 @@ msgstr "Я уверен." #. TRANS: %s is the text that needs to be input. #, php-format msgid "You must write \"%s\" exactly in the box." -msgstr "" +msgstr "Вы должны написать «%s» прямо в этом поле." #. TRANS: Confirmation that a user account has been deleted. -#, fuzzy msgid "Account deleted." -msgstr "Аватар удалён." +msgstr "Учётная запись удалена." #. TRANS: Page title for page on which a user account can be deleted. #. TRANS: Option in profile settings to delete the account of the currently logged in user. -#, fuzzy msgid "Delete account" -msgstr "Создать новый аккаунт" +msgstr "Удаление учётной записи" #. TRANS: Form text for user deletion form. msgid "" "This will permanently delete your account data from this " "server." msgstr "" +"Это действие приведёт удалению всех данных вашей учётной " +"записи с этого сервера без возможности восстановления." #. TRANS: Additional form text for user deletion form shown if a user has account backup rights. #. TRANS: %s is a URL to the backup page. @@ -1522,6 +1519,8 @@ msgid "" "You are strongly advised to back up your data before " "deletion." msgstr "" +"Настоятельно советуем вам сделать резервную копию данных " +"вашей учётной записи, прежде чем удалять её с сервера." #. TRANS: Field label for delete account confirmation entry. #. TRANS: Field label for password reset form where the password has to be typed again. @@ -1530,14 +1529,14 @@ msgstr "Подтверждение" #. TRANS: Input title for the delete account field. #. TRANS: %s is the text that needs to be input. -#, fuzzy, php-format +#, php-format msgid "Enter \"%s\" to confirm that you want to delete your account." -msgstr "Вы не можете удалять пользователей." +msgstr "" +"Введите «%s» для подтверждения своего согласия на удаление учётной записи." #. TRANS: Button title for user account deletion. -#, fuzzy msgid "Permanently delete your account" -msgstr "Вы не можете удалять пользователей." +msgstr "Навсегда удалить учётную запись" #. TRANS: Client error displayed trying to delete an application while not logged in. msgid "You must be logged in to delete an application." @@ -1572,14 +1571,12 @@ msgstr "" "пользователей." #. TRANS: Submit button title for 'No' when deleting an application. -#, fuzzy msgid "Do not delete this application." -msgstr "Не удаляйте это приложение" +msgstr "Не удалять это приложение." #. TRANS: Submit button title for 'Yes' when deleting an application. -#, fuzzy msgid "Delete this application." -msgstr "Удалить это приложение" +msgstr "Удалить это приложение." #. TRANS: Client error when trying to delete group while not logged in. msgid "You must be logged in to delete a group." @@ -1623,14 +1620,12 @@ msgstr "" "записи в этой группе по прежнему останутся в личных лентах." #. TRANS: Submit button title for 'No' when deleting a group. -#, fuzzy msgid "Do not delete this group." -msgstr "Не удаляйте эту группу" +msgstr "Не удалять эту группу." #. TRANS: Submit button title for 'Yes' when deleting a group. -#, fuzzy msgid "Delete this group." -msgstr "Удалить эту группу" +msgstr "Удалить эту группу." #. TRANS: Error message displayed trying to delete a notice while not logged in. #. TRANS: Client error displayed when trying to remove a favorite while not logged in. @@ -1668,14 +1663,12 @@ msgid "Are you sure you want to delete this notice?" msgstr "Вы уверены, что хотите удалить эту запись?" #. TRANS: Submit button title for 'No' when deleting a notice. -#, fuzzy msgid "Do not delete this notice." -msgstr "Не удалять эту запись" +msgstr "Не удалять эту запись." #. TRANS: Submit button title for 'Yes' when deleting a notice. -#, fuzzy msgid "Delete this notice." -msgstr "Удалить эту запись" +msgstr "Удалить эту запись." #. TRANS: Client error displayed when trying to delete a user without having the right to delete users. msgid "You cannot delete users." @@ -1686,10 +1679,9 @@ msgid "You can only delete local users." msgstr "Вы можете удалять только внутренних пользователей." #. TRANS: Title of delete user page. -#, fuzzy msgctxt "TITLE" msgid "Delete user" -msgstr "Удалить пользователя" +msgstr "Удаление пользователя" #. TRANS: Fieldset legend on delete user page. msgid "Delete user" @@ -1704,14 +1696,12 @@ msgstr "" "всех данных о пользователе из базы данных без возможности восстановления." #. TRANS: Submit button title for 'No' when deleting a user. -#, fuzzy msgid "Do not delete this user." -msgstr "Не удаляйте эту группу" +msgstr "Не удалять этого пользователя." #. TRANS: Submit button title for 'Yes' when deleting a user. -#, fuzzy msgid "Delete this user." -msgstr "Удалить этого пользователя" +msgstr "Удалить этого пользователя." #. TRANS: Message used as title for design settings for the site. msgid "Design" @@ -1806,9 +1796,8 @@ msgid "Tile background image" msgstr "Растянуть фоновое изображение" #. TRANS: Fieldset legend for theme colors. -#, fuzzy msgid "Change colors" -msgstr "Изменение цветовой гаммы" +msgstr "Изменение цвета" #. TRANS: Field label for content color selector. #. TRANS: Label on profile design page for setting a profile page content colour. @@ -1839,25 +1828,21 @@ msgid "Custom CSS" msgstr "Особый CSS" #. TRANS: Button text for resetting theme settings. -#, fuzzy msgctxt "BUTTON" msgid "Use defaults" msgstr "Использовать значения по умолчанию" #. TRANS: Title for button for resetting theme settings. -#, fuzzy msgid "Restore default designs." -msgstr "Восстановить оформление по умолчанию" +msgstr "Восстановить оформление по умолчанию." #. TRANS: Title for button for resetting theme settings. -#, fuzzy msgid "Reset back to default." -msgstr "Восстановить значения по умолчанию" +msgstr "Восстановить значения по умолчанию." #. TRANS: Title for button for saving theme settings. -#, fuzzy msgid "Save design." -msgstr "Сохранить оформление" +msgstr "Сохранить оформление." #. TRANS: Client error displayed when trying to remove favorite status for a notice that is not a favorite. msgid "This notice is not a favorite!" @@ -1869,9 +1854,9 @@ msgstr "Добавить в любимые" #. TRANS: Client exception thrown when requesting a document from the documentation that does not exist. #. TRANS: %s is the non-existing document. -#, fuzzy, php-format +#, php-format msgid "No such document \"%s\"." -msgstr "Нет такого документа «%s»" +msgstr "Нет такого документа «%s»." #. TRANS: Title for "Edit application" form. #. TRANS: Form legend. @@ -2051,6 +2036,8 @@ msgid "" "To send notices via email, we need to create a unique email address for you " "on this server:" msgstr "" +"Для отправки сообщений по электронной почте мы должны создать для вас " +"уникальный email-адрес на этом сервере:" #. TRANS: Button label for adding an e-mail address to send notices from. #. TRANS: Button label for adding an SMS e-mail address to send notices from. @@ -2817,9 +2804,9 @@ msgstr[2] "" #. TRANS: e-mail addresses to which invitations were sent. msgid "Invitation sent to the following person:" msgid_plural "Invitations sent to the following people:" -msgstr[0] "Приглашение отправлено следующему адресату:" -msgstr[1] "Приглашения отправлены следующим адресатам:" -msgstr[2] "" +msgstr[0] "Список адресов, на которые отправлены приглашения:" +msgstr[1] "Список адресов, на которые отправлены приглашения:" +msgstr[2] "Список адресов, на которые отправлены приглашения:" #. TRANS: Generic message displayed after sending out one or more invitations to #. TRANS: people to join a StatusNet site. @@ -3959,6 +3946,8 @@ msgstr "Слишком длинный язык (максимум 50 символ #. TRANS: Validation error in form for profile settings. #. TRANS: %s is an invalid tag. +#. TRANS: Form validation error when entering an invalid tag. +#. TRANS: %s is the invalid tag. #, fuzzy, php-format msgid "Invalid tag: \"%s\"." msgstr "Неверный тег: «%s»" @@ -4822,7 +4811,6 @@ msgstr "Сообщение от %1$s на %2$s" msgid "Notice deleted." msgstr "Запись удалена." -#, fuzzy msgid "Notice" msgstr "Записи" @@ -5371,17 +5359,14 @@ msgstr "Профиль пользователя" msgid "Tag user" msgstr "Теги для пользователя" +#, fuzzy msgid "" -"Tags for this user (letters, numbers, -, ., and _), comma- or space- " -"separated" +"Tags for this user (letters, numbers, -, ., and _), separated by commas or " +"spaces." msgstr "" "Теги для этого пользователя (буквы, цифры, -, ., и _), разделённые запятой " "или пробелом" -#, php-format -msgid "Invalid tag: \"%s\"" -msgstr "Неверный тег: «%s»" - msgid "" "You can only tag people you are subscribed to or who are subscribed to you." msgstr "" @@ -8410,87 +8395,5 @@ msgstr "Неверный XML, отсутствует корень XRD." msgid "Getting backup from file '%s'." msgstr "Получение резервной копии из файла «%s»." -#~ msgid "Note" -#~ msgstr "Запись" - -#~ msgid "" -#~ "Commands:\n" -#~ "on - turn on notifications\n" -#~ "off - turn off notifications\n" -#~ "help - show this help\n" -#~ "follow - subscribe to user\n" -#~ "groups - lists the groups you have joined\n" -#~ "subscriptions - list the people you follow\n" -#~ "subscribers - list the people that follow you\n" -#~ "leave - unsubscribe from user\n" -#~ "d - direct message to user\n" -#~ "get - get last notice from user\n" -#~ "whois - get profile info on user\n" -#~ "lose - force user to stop following you\n" -#~ "fav - add user's last notice as a 'fave'\n" -#~ "fav # - add notice with the given id as a 'fave'\n" -#~ "repeat # - repeat a notice with a given id\n" -#~ "repeat - repeat the last notice from user\n" -#~ "reply # - reply to notice with a given id\n" -#~ "reply - reply to the last notice from user\n" -#~ "join - join group\n" -#~ "login - Get a link to login to the web interface\n" -#~ "drop - leave group\n" -#~ "stats - get your stats\n" -#~ "stop - same as 'off'\n" -#~ "quit - same as 'off'\n" -#~ "sub - same as 'follow'\n" -#~ "unsub - same as 'leave'\n" -#~ "last - same as 'get'\n" -#~ "on - not yet implemented.\n" -#~ "off - not yet implemented.\n" -#~ "nudge - remind a user to update.\n" -#~ "invite - not yet implemented.\n" -#~ "track - not yet implemented.\n" -#~ "untrack - not yet implemented.\n" -#~ "track off - not yet implemented.\n" -#~ "untrack all - not yet implemented.\n" -#~ "tracks - not yet implemented.\n" -#~ "tracking - not yet implemented.\n" -#~ msgstr "" -#~ "Команды:\n" -#~ "on — включить уведомления\n" -#~ "off — отключить уведомления\n" -#~ "help — показать эту справку\n" -#~ "follow — подписаться на пользователя\n" -#~ "groups — список групп, к которым вы присоединены\n" -#~ "subscriptions — список людей, за которыми вы следите\n" -#~ "subscribers — список людей, следящих на вами\n" -#~ "leave — отписаться от пользователя\n" -#~ "d — прямое сообщение пользователю\n" -#~ "get — получить последнюю запись от пользователя\n" -#~ "whois — получить информацию из профиля пользователя\n" -#~ "lose — отменить подписку пользователя на вас\n" -#~ "fav — добавить последнюю запись пользователя в число любимых\n" -#~ "fav # — добавить запись с заданным id в число любимых\n" -#~ "repeat # — повторить уведомление с заданным id\n" -#~ "repeat — повторить последнее уведомление от пользователя\n" -#~ "reply # — ответить на запись с заданным id\n" -#~ "reply — ответить на последнюю запись пользователя\n" -#~ "join — присоединиться к группе\n" -#~ "login — получить ссылку на вход в веб-интрефейсе\n" -#~ "drop — покинуть группу\n" -#~ "stats — получить свою статистику\n" -#~ "stop — то же, что и 'off'\n" -#~ "quit — то же, что и 'off'\n" -#~ "sub — то же, что и 'follow'\n" -#~ "unsub — то же, что и 'leave'\n" -#~ "last — то же, что и 'get'\n" -#~ "on — пока не реализовано.\n" -#~ "off — пока не реализовано.\n" -#~ "nudge — напомнить пользователю обновиться.\n" -#~ "invite — пока не реализовано.\n" -#~ "track — пока не реализовано.\n" -#~ "untrack — пока не реализовано.\n" -#~ "track off — пока не реализовано.\n" -#~ "untrack all — пока не реализовано.\n" -#~ "tracks — пока не реализовано.\n" -#~ "tracking — пока не реализовано.\n" - -#~ msgid "Edit Avatar" -#~ msgstr "Изменить аватару" +#~ msgid "Invalid tag: \"%s\"" +#~ msgstr "Неверный тег: «%s»" diff --git a/locale/statusnet.pot b/locale/statusnet.pot index ad93b2765c..79467b6c30 100644 --- a/locale/statusnet.pot +++ b/locale/statusnet.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -88,9 +88,9 @@ msgstr "" #: actions/licenseadminpanel.php:335 actions/pathsadminpanel.php:517 #: actions/profilesettings.php:198 actions/sitenoticeadminpanel.php:197 #: actions/smssettings.php:204 actions/subscriptions.php:261 -#: actions/urlsettings.php:152 actions/useradminpanel.php:298 -#: lib/applicationeditform.php:355 lib/designform.php:320 -#: lib/groupeditform.php:201 +#: actions/tagother.php:134 actions/urlsettings.php:152 +#: actions/useradminpanel.php:298 lib/applicationeditform.php:355 +#: lib/designform.php:320 lib/groupeditform.php:201 msgctxt "BUTTON" msgid "Save" msgstr "" @@ -857,7 +857,7 @@ msgstr "" #: actions/profilesettings.php:218 actions/recoverpassword.php:387 #: actions/register.php:157 actions/remotesubscribe.php:76 #: actions/repeat.php:82 actions/smssettings.php:249 actions/subedit.php:40 -#: actions/subscribe.php:87 actions/tagother.php:145 +#: actions/subscribe.php:87 actions/tagother.php:146 #: actions/unsubscribe.php:69 actions/urlsettings.php:171 #: actions/userauthorization.php:53 lib/designsettings.php:122 msgid "There was a problem with your session token. Try again, please." @@ -2005,7 +2005,7 @@ msgstr "" #: actions/groupblock.php:60 actions/groupunblock.php:60 actions/logout.php:69 #: actions/makeadmin.php:62 actions/newmessage.php:89 actions/newnotice.php:87 #: actions/nudge.php:64 actions/pluginenable.php:98 actions/subedit.php:33 -#: actions/subscribe.php:98 actions/tagother.php:33 actions/unsubscribe.php:52 +#: actions/subscribe.php:98 actions/tagother.php:34 actions/unsubscribe.php:52 #: lib/adminpanelaction.php:71 lib/profileformaction.php:63 #: lib/settingsaction.php:72 msgid "Not logged in." @@ -2819,7 +2819,7 @@ msgstr "" #. TRANS: Client error displayed trying a change a subscription for a non-existant profile ID. #. TRANS: Client error displayed when trying to change user options without specifying an existing user to work on. #: actions/groupblock.php:77 actions/groupunblock.php:77 -#: actions/makeadmin.php:79 actions/subedit.php:57 actions/tagother.php:46 +#: actions/makeadmin.php:79 actions/subedit.php:57 actions/tagother.php:47 #: actions/unsubscribe.php:84 lib/profileformaction.php:87 msgid "No profile with that ID." msgstr "" @@ -4549,8 +4549,8 @@ msgid "Share my current location when posting notices" msgstr "" #. TRANS: Field label in form for profile settings. -#: actions/profilesettings.php:162 actions/tagother.php:128 -#: actions/tagother.php:188 lib/subscriptionlist.php:104 +#: actions/profilesettings.php:162 actions/tagother.php:129 +#: actions/tagother.php:191 lib/subscriptionlist.php:104 #: lib/subscriptionlist.php:106 msgid "Tags" msgstr "" @@ -4610,7 +4610,9 @@ msgstr "" #. TRANS: Validation error in form for profile settings. #. TRANS: %s is an invalid tag. -#: actions/profilesettings.php:292 +#. TRANS: Form validation error when entering an invalid tag. +#. TRANS: %s is the invalid tag. +#: actions/profilesettings.php:292 actions/tagother.php:160 #, php-format msgid "Invalid tag: \"%s\"." msgstr "" @@ -4627,7 +4629,7 @@ msgid "Could not save location prefs." msgstr "" #. TRANS: Server error thrown when user profile settings tags could not be saved. -#: actions/profilesettings.php:428 actions/tagother.php:179 +#: actions/profilesettings.php:428 actions/tagother.php:182 msgid "Could not save tags." msgstr "" @@ -5312,8 +5314,7 @@ msgstr "" #. TRANS: Submit button title. #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292 -#: actions/snapshotadminpanel.php:245 actions/tagother.php:133 -#: lib/applicationeditform.php:357 +#: actions/snapshotadminpanel.php:245 lib/applicationeditform.php:357 msgid "Save" msgstr "" @@ -6163,40 +6164,35 @@ msgstr "" msgid "Notice feed for tag %s (Atom)" msgstr "" -#: actions/tagother.php:39 +#: actions/tagother.php:40 msgid "No ID argument." msgstr "" -#: actions/tagother.php:65 +#: actions/tagother.php:66 #, php-format msgid "Tag %s" msgstr "" -#: actions/tagother.php:77 +#: actions/tagother.php:78 msgid "User profile" msgstr "" -#: actions/tagother.php:120 +#: actions/tagother.php:121 msgid "Tag user" msgstr "" -#: actions/tagother.php:130 +#: actions/tagother.php:131 msgid "" -"Tags for this user (letters, numbers, -, ., and _), comma- or space- " -"separated" +"Tags for this user (letters, numbers, -, ., and _), separated by commas or " +"spaces." msgstr "" -#: actions/tagother.php:157 -#, php-format -msgid "Invalid tag: \"%s\"" -msgstr "" - -#: actions/tagother.php:172 +#: actions/tagother.php:175 msgid "" "You can only tag people you are subscribed to or who are subscribed to you." msgstr "" -#: actions/tagother.php:215 +#: actions/tagother.php:218 msgid "Use this form to add tags to your subscribers or subscriptions." msgstr "" diff --git a/locale/sv/LC_MESSAGES/statusnet.po b/locale/sv/LC_MESSAGES/statusnet.po index 289b4b09f7..53c43b45df 100644 --- a/locale/sv/LC_MESSAGES/statusnet.po +++ b/locale/sv/LC_MESSAGES/statusnet.po @@ -13,8 +13,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:49:57+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:38:20+0000\n" "Language-Team: Swedish \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -23,7 +23,7 @@ msgstr "" "X-Language-Code: sv\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" +"X-POT-Import-Date: 2011-03-17 10:19:27+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -3935,6 +3935,8 @@ msgstr "Språknamn är för långt (max 50 tecken)." #. TRANS: Validation error in form for profile settings. #. TRANS: %s is an invalid tag. +#. TRANS: Form validation error when entering an invalid tag. +#. TRANS: %s is the invalid tag. #, fuzzy, php-format msgid "Invalid tag: \"%s\"." msgstr "Ogiltig tagg: \"%s\"" @@ -4800,7 +4802,6 @@ msgstr "Meddelande från %1$s på %2$s" msgid "Notice deleted." msgstr "Notis borttagen." -#, fuzzy msgid "Notice" msgstr "Notiser" @@ -5344,17 +5345,14 @@ msgstr "Användarprofil" msgid "Tag user" msgstr "Tagga användare" +#, fuzzy msgid "" -"Tags for this user (letters, numbers, -, ., and _), comma- or space- " -"separated" +"Tags for this user (letters, numbers, -, ., and _), separated by commas or " +"spaces." msgstr "" "Taggar för denna användare (bokstäver, nummer, -, ., och _), separerade med " "kommatecken eller mellanslag" -#, php-format -msgid "Invalid tag: \"%s\"" -msgstr "Ogiltig tagg: \"%s\"" - msgid "" "You can only tag people you are subscribed to or who are subscribed to you." msgstr "" @@ -8352,87 +8350,5 @@ msgstr "" msgid "Getting backup from file '%s'." msgstr "" -#~ msgid "Note" -#~ msgstr "Notis" - -#~ msgid "" -#~ "Commands:\n" -#~ "on - turn on notifications\n" -#~ "off - turn off notifications\n" -#~ "help - show this help\n" -#~ "follow - subscribe to user\n" -#~ "groups - lists the groups you have joined\n" -#~ "subscriptions - list the people you follow\n" -#~ "subscribers - list the people that follow you\n" -#~ "leave - unsubscribe from user\n" -#~ "d - direct message to user\n" -#~ "get - get last notice from user\n" -#~ "whois - get profile info on user\n" -#~ "lose - force user to stop following you\n" -#~ "fav - add user's last notice as a 'fave'\n" -#~ "fav # - add notice with the given id as a 'fave'\n" -#~ "repeat # - repeat a notice with a given id\n" -#~ "repeat - repeat the last notice from user\n" -#~ "reply # - reply to notice with a given id\n" -#~ "reply - reply to the last notice from user\n" -#~ "join - join group\n" -#~ "login - Get a link to login to the web interface\n" -#~ "drop - leave group\n" -#~ "stats - get your stats\n" -#~ "stop - same as 'off'\n" -#~ "quit - same as 'off'\n" -#~ "sub - same as 'follow'\n" -#~ "unsub - same as 'leave'\n" -#~ "last - same as 'get'\n" -#~ "on - not yet implemented.\n" -#~ "off - not yet implemented.\n" -#~ "nudge - remind a user to update.\n" -#~ "invite - not yet implemented.\n" -#~ "track - not yet implemented.\n" -#~ "untrack - not yet implemented.\n" -#~ "track off - not yet implemented.\n" -#~ "untrack all - not yet implemented.\n" -#~ "tracks - not yet implemented.\n" -#~ "tracking - not yet implemented.\n" -#~ msgstr "" -#~ "Kommandon:\n" -#~ "on - sätt på notifikationer\n" -#~ "off - stäng av notifikationer\n" -#~ "help - visa denna hjälp\n" -#~ "follow - prenumerera på användare\n" -#~ "groups - lista grupperna du tillhör\n" -#~ "subscriptions - lista personerna du följer\n" -#~ "subscribers - lista personerna som följer dig\n" -#~ "leave - avsluta prenumeration på användare\n" -#~ "d - direktmeddelande till användare\n" -#~ "get - hämta senaste notis från användare\n" -#~ "whois - hämta profilinformation om användare\n" -#~ "lose - tvinga användare att sluta följa dig\n" -#~ "fav - lägg till användarens senaste notis som favorit\n" -#~ "fav # - lägg till notis med given id som favorit\n" -#~ "repeat # - upprepa en notis med en given id\n" -#~ "repeat - upprepa den senaste notisen från användare\n" -#~ "reply # - svara på notis med en given id\n" -#~ "reply - svara på den senaste notisen från användare\n" -#~ "join - gå med i grupp\n" -#~ "login - hämta en länk till webbgränssnittets inloggningssida\n" -#~ "drop - lämna grupp\n" -#~ "stats - hämta din statistik\n" -#~ "stop - samma som 'off'\n" -#~ "quit - samma som 'off'\n" -#~ "sub - samma som 'follow'\n" -#~ "unsub - samma som 'leave'\n" -#~ "last - samma som 'get'\n" -#~ "on - inte implementerat än.\n" -#~ "off - inte implementerat än.\n" -#~ "nudge - påminn en användare om att uppdatera\n" -#~ "invite - inte implementerat än.\n" -#~ "track - inte implementerat än.\n" -#~ "untrack - inte implementerat än.\n" -#~ "track off - inte implementerat än.\n" -#~ "untrack all - inte implementerat än.\n" -#~ "tracks - inte implementerat än.\n" -#~ "tracking - inte implementerat än.\n" - -#~ msgid "Edit Avatar" -#~ msgstr "Redigera avatar" +#~ msgid "Invalid tag: \"%s\"" +#~ msgstr "Ogiltig tagg: \"%s\"" diff --git a/locale/te/LC_MESSAGES/statusnet.po b/locale/te/LC_MESSAGES/statusnet.po index afc3188748..afcf3d11f3 100644 --- a/locale/te/LC_MESSAGES/statusnet.po +++ b/locale/te/LC_MESSAGES/statusnet.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:49:58+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:38:21+0000\n" "Language-Team: Telugu \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -20,7 +20,7 @@ msgstr "" "X-Language-Code: te\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" +"X-POT-Import-Date: 2011-03-17 10:19:27+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -3865,6 +3865,8 @@ msgstr "భాష మరీ పెద్దగా ఉంది (50 అక్ష #. TRANS: Validation error in form for profile settings. #. TRANS: %s is an invalid tag. +#. TRANS: Form validation error when entering an invalid tag. +#. TRANS: %s is the invalid tag. #, php-format msgid "Invalid tag: \"%s\"." msgstr "చెల్లని ట్యాగు: \"%s\"" @@ -5250,14 +5252,10 @@ msgid "Tag user" msgstr "ట్యాగులు" msgid "" -"Tags for this user (letters, numbers, -, ., and _), comma- or space- " -"separated" +"Tags for this user (letters, numbers, -, ., and _), separated by commas or " +"spaces." msgstr "" -#, php-format -msgid "Invalid tag: \"%s\"" -msgstr "తప్పుడు మారుపేరు: \"%s\"" - msgid "" "You can only tag people you are subscribed to or who are subscribed to you." msgstr "" @@ -8206,8 +8204,5 @@ msgstr "" msgid "Getting backup from file '%s'." msgstr "" -#~ msgid "Note" -#~ msgstr "గమనిక" - -#~ msgid "Edit Avatar" -#~ msgstr "అవతారాన్ని మార్చు" +#~ msgid "Invalid tag: \"%s\"" +#~ msgstr "తప్పుడు మారుపేరు: \"%s\"" diff --git a/locale/tr/LC_MESSAGES/statusnet.po b/locale/tr/LC_MESSAGES/statusnet.po index db1e94fb57..73b1ec1ece 100644 --- a/locale/tr/LC_MESSAGES/statusnet.po +++ b/locale/tr/LC_MESSAGES/statusnet.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:49:59+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:38:22+0000\n" "Language-Team: Turkish \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -22,7 +22,7 @@ msgstr "" "X-Language-Code: tr\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" +"X-POT-Import-Date: 2011-03-17 10:19:27+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -3916,6 +3916,8 @@ msgstr "Dil çok uzun (maksimum: 50 karakter)." #. TRANS: Validation error in form for profile settings. #. TRANS: %s is an invalid tag. +#. TRANS: Form validation error when entering an invalid tag. +#. TRANS: %s is the invalid tag. #, fuzzy, php-format msgid "Invalid tag: \"%s\"." msgstr "Geçersiz büyüklük." @@ -5274,14 +5276,13 @@ msgstr "Kullanıcının profili yok." msgid "Tag user" msgstr "Kullanıcıyı etiketle" +#, fuzzy msgid "" -"Tags for this user (letters, numbers, -, ., and _), comma- or space- " -"separated" +"Tags for this user (letters, numbers, -, ., and _), separated by commas or " +"spaces." msgstr "" - -#, php-format -msgid "Invalid tag: \"%s\"" -msgstr "Geçersiz büyüklük." +"Kendiniz için etiketler (harf, sayı, -. ., ve _ kullanılabilir), virgül veya " +"boşlukla ayırabilirsiniz" msgid "" "You can only tag people you are subscribed to or who are subscribed to you." @@ -8179,9 +8180,5 @@ msgstr "" msgid "Getting backup from file '%s'." msgstr "" -#~ msgid "Note" -#~ msgstr "Not" - -#, fuzzy -#~ msgid "Edit Avatar" -#~ msgstr "Avatar" +#~ msgid "Invalid tag: \"%s\"" +#~ msgstr "Geçersiz büyüklük." diff --git a/locale/uk/LC_MESSAGES/statusnet.po b/locale/uk/LC_MESSAGES/statusnet.po index c4fe7648b3..b4e2b8bf22 100644 --- a/locale/uk/LC_MESSAGES/statusnet.po +++ b/locale/uk/LC_MESSAGES/statusnet.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:50:00+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:38:23+0000\n" "Language-Team: Ukrainian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -23,7 +23,7 @@ msgstr "" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= " "2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n" -"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" +"X-POT-Import-Date: 2011-03-17 10:19:27+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -3887,6 +3887,8 @@ msgstr "Мова надто довга (не більше 50 символів)." #. TRANS: Validation error in form for profile settings. #. TRANS: %s is an invalid tag. +#. TRANS: Form validation error when entering an invalid tag. +#. TRANS: %s is the invalid tag. #, php-format msgid "Invalid tag: \"%s\"." msgstr "Неприпустимий теґ: «%s»." @@ -4732,7 +4734,6 @@ msgstr "Повідомлення від %1$s на %2$s" msgid "Notice deleted." msgstr "Допис видалено." -#, fuzzy msgid "Notice" msgstr "Дописи" @@ -5275,17 +5276,14 @@ msgstr "Профіль користувача." msgid "Tag user" msgstr "Позначити користувача" +#, fuzzy msgid "" -"Tags for this user (letters, numbers, -, ., and _), comma- or space- " -"separated" +"Tags for this user (letters, numbers, -, ., and _), separated by commas or " +"spaces." msgstr "" "Позначити користувача теґами (літери, цифри, -, . та _), відокремлюючи кожен " "комою або пробілом" -#, php-format -msgid "Invalid tag: \"%s\"" -msgstr "Недійсний теґ: «%s»" - msgid "" "You can only tag people you are subscribed to or who are subscribed to you." msgstr "" @@ -8290,84 +8288,5 @@ msgstr "Неправильний XML, корінь XRD відсутній." msgid "Getting backup from file '%s'." msgstr "Отримання резервної копії файлу «%s»." -#~ msgid "Note" -#~ msgstr "Зауваження" - -#~ msgid "" -#~ "Commands:\n" -#~ "on - turn on notifications\n" -#~ "off - turn off notifications\n" -#~ "help - show this help\n" -#~ "follow - subscribe to user\n" -#~ "groups - lists the groups you have joined\n" -#~ "subscriptions - list the people you follow\n" -#~ "subscribers - list the people that follow you\n" -#~ "leave - unsubscribe from user\n" -#~ "d - direct message to user\n" -#~ "get - get last notice from user\n" -#~ "whois - get profile info on user\n" -#~ "lose - force user to stop following you\n" -#~ "fav - add user's last notice as a 'fave'\n" -#~ "fav # - add notice with the given id as a 'fave'\n" -#~ "repeat # - repeat a notice with a given id\n" -#~ "repeat - repeat the last notice from user\n" -#~ "reply # - reply to notice with a given id\n" -#~ "reply - reply to the last notice from user\n" -#~ "join - join group\n" -#~ "login - Get a link to login to the web interface\n" -#~ "drop - leave group\n" -#~ "stats - get your stats\n" -#~ "stop - same as 'off'\n" -#~ "quit - same as 'off'\n" -#~ "sub - same as 'follow'\n" -#~ "unsub - same as 'leave'\n" -#~ "last - same as 'get'\n" -#~ "on - not yet implemented.\n" -#~ "off - not yet implemented.\n" -#~ "nudge - remind a user to update.\n" -#~ "invite - not yet implemented.\n" -#~ "track - not yet implemented.\n" -#~ "untrack - not yet implemented.\n" -#~ "track off - not yet implemented.\n" -#~ "untrack all - not yet implemented.\n" -#~ "tracks - not yet implemented.\n" -#~ "tracking - not yet implemented.\n" -#~ msgstr "" -#~ "Команди:\n" -#~ "on — увімкнути сповіщення\n" -#~ "off — вимкнути сповіщення\n" -#~ "help — список команд\n" -#~ "follow — підписатись до користувача\n" -#~ "groups — спільноти, до яких ви входите\n" -#~ "subscriptions — користувачі, до яких ви підписані\n" -#~ "subscribers — користувачі, які підписані до вас\n" -#~ "leave — відписатись від користувача\n" -#~ "d — надіслати особисте повідомлення\n" -#~ "get — отримати останній допис користувача\n" -#~ "whois — інфо про користувача\n" -#~ "fav — додати останній допис користувача до обраних\n" -#~ "fav # — додати допис до обраних\n" -#~ "reply # — відповісти на допис\n" -#~ "reply — відповісти на останній допис користувача\n" -#~ "join — приєднатися до спільноти\n" -#~ "login — отримати посилання входу до веб-інтерфейсу\n" -#~ "drop — залишити спільноту\n" -#~ "stats — отримати статистику\n" -#~ "stop — те саме що і 'off'\n" -#~ "quit — те саме що і 'off'\n" -#~ "sub — те саме що і 'follow'\n" -#~ "unsub — те саме що і 'leave'\n" -#~ "last — те саме що і 'get'\n" -#~ "on — наразі не виконується\n" -#~ "off — наразі не виконується\n" -#~ "nudge — «розштовхати»\n" -#~ "invite — наразі не виконується\n" -#~ "track — наразі не виконується\n" -#~ "untrack — наразі не виконується\n" -#~ "track off — наразі не виконується\n" -#~ "untrack all — наразі не виконується\n" -#~ "tracks — наразі не виконується\n" -#~ "tracking — наразі не виконується\n" - -#~ msgid "Edit Avatar" -#~ msgstr "Аватара" +#~ msgid "Invalid tag: \"%s\"" +#~ msgstr "Недійсний теґ: «%s»" diff --git a/locale/zh_CN/LC_MESSAGES/statusnet.po b/locale/zh_CN/LC_MESSAGES/statusnet.po index 1b63db606d..dbb62b98fc 100644 --- a/locale/zh_CN/LC_MESSAGES/statusnet.po +++ b/locale/zh_CN/LC_MESSAGES/statusnet.po @@ -15,8 +15,8 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - Core\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:50:02+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:38:24+0000\n" "Language-Team: Simplified Chinese \n" "Content-Type: text/plain; charset=UTF-8\n" @@ -26,7 +26,7 @@ msgstr "" "X-Language-Code: zh-hans\n" "X-Message-Group: #out-statusnet-core\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-POT-Import-Date: 2011-03-11 18:52:41+0000\n" +"X-POT-Import-Date: 2011-03-17 10:19:27+0000\n" #. TRANS: Page title for Access admin panel that allows configuring site access. #. TRANS: Menu item for site administration @@ -3792,6 +3792,8 @@ msgstr "语言过长(不能超过50个字符)。" #. TRANS: Validation error in form for profile settings. #. TRANS: %s is an invalid tag. +#. TRANS: Form validation error when entering an invalid tag. +#. TRANS: %s is the invalid tag. #, php-format msgid "Invalid tag: \"%s\"." msgstr "无效的标记: %s。" @@ -4602,7 +4604,6 @@ msgstr "来自 %1$s 的 %2$s 消息" msgid "Notice deleted." msgstr "消息已删除" -#, fuzzy msgid "Notice" msgstr "消息" @@ -5127,16 +5128,13 @@ msgstr "用户页面" msgid "Tag user" msgstr "将用户加为标签" +#, fuzzy msgid "" -"Tags for this user (letters, numbers, -, ., and _), comma- or space- " -"separated" +"Tags for this user (letters, numbers, -, ., and _), separated by commas or " +"spaces." msgstr "" "给这个用户加注标签 (字母letters, 数字numbers, -, ., and _), 逗号或空格分隔" -#, php-format -msgid "Invalid tag: \"%s\"" -msgstr "无效的标签:\"%s\"。" - msgid "" "You can only tag people you are subscribed to or who are subscribed to you." msgstr "你只能给你关注或关注你的人添加标签。" @@ -8027,87 +8025,5 @@ msgstr "不合法的XML, 缺少XRD根" msgid "Getting backup from file '%s'." msgstr "从文件'%s'获取备份。" -#~ msgid "Note" -#~ msgstr "注释" - -#~ msgid "" -#~ "Commands:\n" -#~ "on - turn on notifications\n" -#~ "off - turn off notifications\n" -#~ "help - show this help\n" -#~ "follow - subscribe to user\n" -#~ "groups - lists the groups you have joined\n" -#~ "subscriptions - list the people you follow\n" -#~ "subscribers - list the people that follow you\n" -#~ "leave - unsubscribe from user\n" -#~ "d - direct message to user\n" -#~ "get - get last notice from user\n" -#~ "whois - get profile info on user\n" -#~ "lose - force user to stop following you\n" -#~ "fav - add user's last notice as a 'fave'\n" -#~ "fav # - add notice with the given id as a 'fave'\n" -#~ "repeat # - repeat a notice with a given id\n" -#~ "repeat - repeat the last notice from user\n" -#~ "reply # - reply to notice with a given id\n" -#~ "reply - reply to the last notice from user\n" -#~ "join - join group\n" -#~ "login - Get a link to login to the web interface\n" -#~ "drop - leave group\n" -#~ "stats - get your stats\n" -#~ "stop - same as 'off'\n" -#~ "quit - same as 'off'\n" -#~ "sub - same as 'follow'\n" -#~ "unsub - same as 'leave'\n" -#~ "last - same as 'get'\n" -#~ "on - not yet implemented.\n" -#~ "off - not yet implemented.\n" -#~ "nudge - remind a user to update.\n" -#~ "invite - not yet implemented.\n" -#~ "track - not yet implemented.\n" -#~ "untrack - not yet implemented.\n" -#~ "track off - not yet implemented.\n" -#~ "untrack all - not yet implemented.\n" -#~ "tracks - not yet implemented.\n" -#~ "tracking - not yet implemented.\n" -#~ msgstr "" -#~ "命令:\n" -#~ "on - 打开提醒\n" -#~ "off - 关闭提醒\n" -#~ "help - 显示此帮助\n" -#~ "follow <昵称> - 关注该用户\n" -#~ "groups - 列出你加入的小组\n" -#~ "subscriptions - 列出你关注的用户\n" -#~ "subscribers - 列出你的关注者\n" -#~ "leave <昵称> - 取消关注该用户\n" -#~ "d <昵称> <文字> - 给该用户发送私信\n" -#~ "get <昵称> - 获取该用户的最后一条消息\n" -#~ "whois <昵称> - 获取该用户的个人信息\n" -#~ "lose <昵称> - 强行取消该用户对你的关注\n" -#~ "fav <昵称> - 将该用户最后一条消息加为'收藏'\n" -#~ "fav #<消息id> - 将该id的消息加为'收藏'\n" -#~ "repeat #<消息id> - 转发该id的消息\n" -#~ "repeat <昵称> - 转发该用户的最后一条消息\n" -#~ "reply #<消息id> - 对该id消息回复\n" -#~ "reply <昵称> - 对该用户的最后一条消息回复\n" -#~ "join <小组> - 加入小组\n" -#~ "login - 获取网页登录的地址\n" -#~ "drop <小组> - 离开小组\n" -#~ "stats - 获取你的统计\n" -#~ "stop - 和'off'相同\n" -#~ "quit - 和'off'相同\n" -#~ "sub <昵称> - 和'follow'相同\n" -#~ "unsub <昵称> - 和'leave'相同\n" -#~ "last <昵称> - 和'get'相同\n" -#~ "on <昵称> - 尚未实现。\n" -#~ "off <昵称> - 尚未实现。\n" -#~ "nudge <昵称> - 提醒该用户更新消息。\n" -#~ "invite <电话号码> - 尚未实现。\n" -#~ "track - 尚未实现。\n" -#~ "untrack - 尚未实现。\n" -#~ "track off - 尚未实现。\n" -#~ "untrack all - 尚未实现。\n" -#~ "tracks - 尚未实现。\n" -#~ "tracking - 尚未实现。\n" - -#~ msgid "Edit Avatar" -#~ msgstr "编辑头像" +#~ msgid "Invalid tag: \"%s\"" +#~ msgstr "无效的标签:\"%s\"。" diff --git a/plugins/ExtendedProfile/locale/ExtendedProfile.pot b/plugins/ExtendedProfile/locale/ExtendedProfile.pot index 76634319a5..72ef814f07 100644 --- a/plugins/ExtendedProfile/locale/ExtendedProfile.pot +++ b/plugins/ExtendedProfile/locale/ExtendedProfile.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -20,41 +20,67 @@ msgstr "" msgid "Extended profile settings" msgstr "" +#. TRANS: Usage instructions for profile settings. +#: actions/profiledetailsettings.php:40 +msgid "" +"You can update your personal profile info here so people know more about you." +msgstr "" + #: actions/profiledetailsettings.php:63 msgid "There was a problem with your session token. Try again, please." msgstr "" -#. TRANS: Message given submitting a form with an unknown action +#. TRANS: Message given submitting a form with an unknown action. #: actions/profiledetailsettings.php:74 msgid "Unexpected form submission." msgstr "" -#: actions/profiledetailsettings.php:145 +#: actions/profiledetailsettings.php:136 +msgid "Details saved." +msgstr "" + +#. TRANS: Exception thrown when no date was entered in a required date field. +#. TRANS: %s is the field name. +#: actions/profiledetailsettings.php:147 #, php-format msgid "You must supply a date for \"%s\"." msgstr "" -#: actions/profiledetailsettings.php:155 +#. TRANS: Exception thrown on incorrect data input. +#. TRANS: %1$s is a field name, %2$s is the incorrect input. +#: actions/profiledetailsettings.php:159 #, php-format -msgid "Invalid date entered for \"%s\": %s" +msgid "Invalid date entered for \"%1$s\": %2$s." msgstr "" -#: actions/profiledetailsettings.php:269 +#. TRANS: Exception thrown when entering an invalid URL. +#. TRANS: %s is the invalid URL. +#: actions/profiledetailsettings.php:275 #, php-format -msgid "Invalid URL: %s" +msgid "Invalid URL: %s." msgstr "" -#: actions/profiledetailsettings.php:517 actions/profiledetailsettings.php:529 +#: actions/profiledetailsettings.php:523 actions/profiledetailsettings.php:535 msgid "Could not save profile details." msgstr "" #. TRANS: Validation error in form for profile settings. #. TRANS: %s is an invalid tag. -#: actions/profiledetailsettings.php:574 +#: actions/profiledetailsettings.php:580 #, php-format msgid "Invalid tag: \"%s\"." msgstr "" +#. TRANS: Server error thrown when user profile settings could not be saved. +#: actions/profiledetailsettings.php:622 +msgid "Could not save profile." +msgstr "" + +#. TRANS: Server error thrown when user profile settings tags could not be saved. +#: actions/profiledetailsettings.php:631 +msgid "Could not save tags." +msgstr "" + #. TRANS: Link title for link on user profile. #: actions/profiledetail.php:52 msgid "Edit extended profile settings" diff --git a/plugins/ExtendedProfile/locale/br/LC_MESSAGES/ExtendedProfile.po b/plugins/ExtendedProfile/locale/br/LC_MESSAGES/ExtendedProfile.po index 7811b90c57..fdc8ebe42b 100644 --- a/plugins/ExtendedProfile/locale/br/LC_MESSAGES/ExtendedProfile.po +++ b/plugins/ExtendedProfile/locale/br/LC_MESSAGES/ExtendedProfile.po @@ -9,12 +9,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - ExtendedProfile\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:50:37+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:38:58+0000\n" "Language-Team: Breton \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-11 18:53:18+0000\n" +"X-POT-Import-Date: 2011-03-17 10:19:30+0000\n" "X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: br\n" @@ -24,23 +24,37 @@ msgstr "" msgid "Extended profile settings" msgstr "Arventennoù ledanet ar profil" +#. TRANS: Usage instructions for profile settings. +msgid "" +"You can update your personal profile info here so people know more about you." +msgstr "" + msgid "There was a problem with your session token. Try again, please." msgstr "" -#. TRANS: Message given submitting a form with an unknown action +#. TRANS: Message given submitting a form with an unknown action. msgid "Unexpected form submission." msgstr "" +msgid "Details saved." +msgstr "" + +#. TRANS: Exception thrown when no date was entered in a required date field. +#. TRANS: %s is the field name. #, php-format msgid "You must supply a date for \"%s\"." msgstr "" +#. TRANS: Exception thrown on incorrect data input. +#. TRANS: %1$s is a field name, %2$s is the incorrect input. #, php-format -msgid "Invalid date entered for \"%s\": %s" +msgid "Invalid date entered for \"%1$s\": %2$s." msgstr "" +#. TRANS: Exception thrown when entering an invalid URL. +#. TRANS: %s is the invalid URL. #, php-format -msgid "Invalid URL: %s" +msgid "Invalid URL: %s." msgstr "" msgid "Could not save profile details." @@ -52,6 +66,14 @@ msgstr "" msgid "Invalid tag: \"%s\"." msgstr "" +#. TRANS: Server error thrown when user profile settings could not be saved. +msgid "Could not save profile." +msgstr "" + +#. TRANS: Server error thrown when user profile settings tags could not be saved. +msgid "Could not save tags." +msgstr "" + #. TRANS: Link title for link on user profile. msgid "Edit extended profile settings" msgstr "Aozañ arventennoù ledanet ar profil" @@ -142,6 +164,3 @@ msgstr "Skiant-prenet" msgid "Education" msgstr "Deskadurezh" - -#~ msgid "Details" -#~ msgstr "Munudoù" diff --git a/plugins/ExtendedProfile/locale/ia/LC_MESSAGES/ExtendedProfile.po b/plugins/ExtendedProfile/locale/ia/LC_MESSAGES/ExtendedProfile.po index 3db39dee2f..9b393a529c 100644 --- a/plugins/ExtendedProfile/locale/ia/LC_MESSAGES/ExtendedProfile.po +++ b/plugins/ExtendedProfile/locale/ia/LC_MESSAGES/ExtendedProfile.po @@ -9,12 +9,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - ExtendedProfile\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:50:37+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:38:58+0000\n" "Language-Team: Interlingua \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-11 18:53:18+0000\n" +"X-POT-Import-Date: 2011-03-17 10:19:30+0000\n" "X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ia\n" @@ -24,23 +24,37 @@ msgstr "" msgid "Extended profile settings" msgstr "Configuration extendite del profilo" +#. TRANS: Usage instructions for profile settings. +msgid "" +"You can update your personal profile info here so people know more about you." +msgstr "" + msgid "There was a problem with your session token. Try again, please." msgstr "" -#. TRANS: Message given submitting a form with an unknown action +#. TRANS: Message given submitting a form with an unknown action. msgid "Unexpected form submission." msgstr "" +msgid "Details saved." +msgstr "" + +#. TRANS: Exception thrown when no date was entered in a required date field. +#. TRANS: %s is the field name. #, php-format msgid "You must supply a date for \"%s\"." msgstr "" +#. TRANS: Exception thrown on incorrect data input. +#. TRANS: %1$s is a field name, %2$s is the incorrect input. #, php-format -msgid "Invalid date entered for \"%s\": %s" +msgid "Invalid date entered for \"%1$s\": %2$s." msgstr "" +#. TRANS: Exception thrown when entering an invalid URL. +#. TRANS: %s is the invalid URL. #, php-format -msgid "Invalid URL: %s" +msgid "Invalid URL: %s." msgstr "" msgid "Could not save profile details." @@ -52,6 +66,14 @@ msgstr "" msgid "Invalid tag: \"%s\"." msgstr "" +#. TRANS: Server error thrown when user profile settings could not be saved. +msgid "Could not save profile." +msgstr "" + +#. TRANS: Server error thrown when user profile settings tags could not be saved. +msgid "Could not save tags." +msgstr "" + #. TRANS: Link title for link on user profile. msgid "Edit extended profile settings" msgstr "Modificar configuration extendite del profilo" @@ -142,6 +164,3 @@ msgstr "Experientia professional" msgid "Education" msgstr "Education" - -#~ msgid "Details" -#~ msgstr "Detalios" diff --git a/plugins/ExtendedProfile/locale/mk/LC_MESSAGES/ExtendedProfile.po b/plugins/ExtendedProfile/locale/mk/LC_MESSAGES/ExtendedProfile.po index 895be3757e..7f96838a8b 100644 --- a/plugins/ExtendedProfile/locale/mk/LC_MESSAGES/ExtendedProfile.po +++ b/plugins/ExtendedProfile/locale/mk/LC_MESSAGES/ExtendedProfile.po @@ -9,12 +9,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - ExtendedProfile\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:50:37+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:38:58+0000\n" "Language-Team: Macedonian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-11 18:53:18+0000\n" +"X-POT-Import-Date: 2011-03-17 10:19:30+0000\n" "X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: mk\n" @@ -24,23 +24,37 @@ msgstr "" msgid "Extended profile settings" msgstr "Проширени профилни нагодувања" +#. TRANS: Usage instructions for profile settings. +msgid "" +"You can update your personal profile info here so people know more about you." +msgstr "" + msgid "There was a problem with your session token. Try again, please." msgstr "" -#. TRANS: Message given submitting a form with an unknown action +#. TRANS: Message given submitting a form with an unknown action. msgid "Unexpected form submission." msgstr "" +msgid "Details saved." +msgstr "" + +#. TRANS: Exception thrown when no date was entered in a required date field. +#. TRANS: %s is the field name. #, php-format msgid "You must supply a date for \"%s\"." msgstr "" +#. TRANS: Exception thrown on incorrect data input. +#. TRANS: %1$s is a field name, %2$s is the incorrect input. #, php-format -msgid "Invalid date entered for \"%s\": %s" +msgid "Invalid date entered for \"%1$s\": %2$s." msgstr "" +#. TRANS: Exception thrown when entering an invalid URL. +#. TRANS: %s is the invalid URL. #, php-format -msgid "Invalid URL: %s" +msgid "Invalid URL: %s." msgstr "" msgid "Could not save profile details." @@ -52,6 +66,14 @@ msgstr "" msgid "Invalid tag: \"%s\"." msgstr "" +#. TRANS: Server error thrown when user profile settings could not be saved. +msgid "Could not save profile." +msgstr "" + +#. TRANS: Server error thrown when user profile settings tags could not be saved. +msgid "Could not save tags." +msgstr "" + #. TRANS: Link title for link on user profile. msgid "Edit extended profile settings" msgstr "Уреди проширени профилни нагодувања" @@ -142,6 +164,3 @@ msgstr "Работно искуство" msgid "Education" msgstr "Образование" - -#~ msgid "Details" -#~ msgstr "Подробности" diff --git a/plugins/ExtendedProfile/locale/nl/LC_MESSAGES/ExtendedProfile.po b/plugins/ExtendedProfile/locale/nl/LC_MESSAGES/ExtendedProfile.po index 1adbdc93ec..9028acbf78 100644 --- a/plugins/ExtendedProfile/locale/nl/LC_MESSAGES/ExtendedProfile.po +++ b/plugins/ExtendedProfile/locale/nl/LC_MESSAGES/ExtendedProfile.po @@ -9,12 +9,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - ExtendedProfile\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:50:37+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:38:58+0000\n" "Language-Team: Dutch \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-11 18:53:18+0000\n" +"X-POT-Import-Date: 2011-03-17 10:19:30+0000\n" "X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: nl\n" @@ -24,33 +24,59 @@ msgstr "" msgid "Extended profile settings" msgstr "Uitgebreide profielinstellingen" +#. TRANS: Usage instructions for profile settings. +msgid "" +"You can update your personal profile info here so people know more about you." +msgstr "" + msgid "There was a problem with your session token. Try again, please." msgstr "" +"Er is een probleem ontstaan met uw sessie. Probeer het nog een keer, " +"alstublieft." -#. TRANS: Message given submitting a form with an unknown action +#. TRANS: Message given submitting a form with an unknown action. msgid "Unexpected form submission." +msgstr "Het formulier is onverwacht ingezonden." + +msgid "Details saved." msgstr "" +#. TRANS: Exception thrown when no date was entered in a required date field. +#. TRANS: %s is the field name. #, php-format msgid "You must supply a date for \"%s\"." -msgstr "" +msgstr "U moet een datum opgeven voor \"%s\"." -#, php-format -msgid "Invalid date entered for \"%s\": %s" -msgstr "" +#. TRANS: Exception thrown on incorrect data input. +#. TRANS: %1$s is a field name, %2$s is the incorrect input. +#, fuzzy, php-format +msgid "Invalid date entered for \"%1$s\": %2$s." +msgstr "Er is een ongeldige datum opgegeven voor \"%s\": %s." -#, php-format -msgid "Invalid URL: %s" -msgstr "" +#. TRANS: Exception thrown when entering an invalid URL. +#. TRANS: %s is the invalid URL. +#, fuzzy, php-format +msgid "Invalid URL: %s." +msgstr "Ongeldige URL: %s." msgid "Could not save profile details." -msgstr "" +msgstr "Het was niet mogelijk de profielgegevens op te slaan." #. TRANS: Validation error in form for profile settings. #. TRANS: %s is an invalid tag. #, php-format msgid "Invalid tag: \"%s\"." -msgstr "" +msgstr "Ongeldig label: \"%s\"." + +#. TRANS: Server error thrown when user profile settings could not be saved. +#, fuzzy +msgid "Could not save profile." +msgstr "Het was niet mogelijk de profielgegevens op te slaan." + +#. TRANS: Server error thrown when user profile settings tags could not be saved. +#, fuzzy +msgid "Could not save tags." +msgstr "Het was niet mogelijk de profielgegevens op te slaan." #. TRANS: Link title for link on user profile. msgid "Edit extended profile settings" @@ -67,29 +93,29 @@ msgid "More details..." msgstr "Meer details..." msgid "Company" -msgstr "" +msgstr "Bedrijf" msgid "Start" -msgstr "" +msgstr "Begin" msgid "End" -msgstr "" +msgstr "Eind" msgid "Current" -msgstr "" +msgstr "Huidig" msgid "Institution" msgstr "Instelling" msgid "Degree" -msgstr "" +msgstr "Graad" msgid "Description" -msgstr "" +msgstr "Beschrijving" msgctxt "BUTTON" msgid "Save" -msgstr "" +msgstr "Opslaan" msgid "Phone" msgstr "Telefoonnummer" @@ -97,9 +123,8 @@ msgstr "Telefoonnummer" msgid "IM" msgstr "IM" -#, fuzzy msgid "Website" -msgstr "Websites" +msgstr "Website" msgid "Employer" msgstr "Werkgever" @@ -142,6 +167,3 @@ msgstr "Werkervaring" msgid "Education" msgstr "Opleiding" - -#~ msgid "Details" -#~ msgstr "Details" diff --git a/plugins/ExtendedProfile/locale/sv/LC_MESSAGES/ExtendedProfile.po b/plugins/ExtendedProfile/locale/sv/LC_MESSAGES/ExtendedProfile.po index f935d8de42..13ff3e2f9b 100644 --- a/plugins/ExtendedProfile/locale/sv/LC_MESSAGES/ExtendedProfile.po +++ b/plugins/ExtendedProfile/locale/sv/LC_MESSAGES/ExtendedProfile.po @@ -9,12 +9,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - ExtendedProfile\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:50:37+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:38:58+0000\n" "Language-Team: Swedish \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-11 18:53:18+0000\n" +"X-POT-Import-Date: 2011-03-17 10:19:30+0000\n" "X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: sv\n" @@ -24,23 +24,37 @@ msgstr "" msgid "Extended profile settings" msgstr "Utökade profilinställningar" +#. TRANS: Usage instructions for profile settings. +msgid "" +"You can update your personal profile info here so people know more about you." +msgstr "" + msgid "There was a problem with your session token. Try again, please." msgstr "" -#. TRANS: Message given submitting a form with an unknown action +#. TRANS: Message given submitting a form with an unknown action. msgid "Unexpected form submission." msgstr "" +msgid "Details saved." +msgstr "" + +#. TRANS: Exception thrown when no date was entered in a required date field. +#. TRANS: %s is the field name. #, php-format msgid "You must supply a date for \"%s\"." msgstr "" +#. TRANS: Exception thrown on incorrect data input. +#. TRANS: %1$s is a field name, %2$s is the incorrect input. #, php-format -msgid "Invalid date entered for \"%s\": %s" +msgid "Invalid date entered for \"%1$s\": %2$s." msgstr "" +#. TRANS: Exception thrown when entering an invalid URL. +#. TRANS: %s is the invalid URL. #, php-format -msgid "Invalid URL: %s" +msgid "Invalid URL: %s." msgstr "" msgid "Could not save profile details." @@ -52,6 +66,14 @@ msgstr "" msgid "Invalid tag: \"%s\"." msgstr "" +#. TRANS: Server error thrown when user profile settings could not be saved. +msgid "Could not save profile." +msgstr "" + +#. TRANS: Server error thrown when user profile settings tags could not be saved. +msgid "Could not save tags." +msgstr "" + #. TRANS: Link title for link on user profile. msgid "Edit extended profile settings" msgstr "Redigera utökade profilinställningar" @@ -142,6 +164,3 @@ msgstr "Arbetserfarenhet" msgid "Education" msgstr "Utbildning" - -#~ msgid "Details" -#~ msgstr "Detaljer" diff --git a/plugins/ExtendedProfile/locale/uk/LC_MESSAGES/ExtendedProfile.po b/plugins/ExtendedProfile/locale/uk/LC_MESSAGES/ExtendedProfile.po index 9cb239b9b3..3aed7b288e 100644 --- a/plugins/ExtendedProfile/locale/uk/LC_MESSAGES/ExtendedProfile.po +++ b/plugins/ExtendedProfile/locale/uk/LC_MESSAGES/ExtendedProfile.po @@ -9,12 +9,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - ExtendedProfile\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:50:37+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:38:58+0000\n" "Language-Team: Ukrainian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-11 18:53:18+0000\n" +"X-POT-Import-Date: 2011-03-17 10:19:30+0000\n" "X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: uk\n" @@ -25,23 +25,37 @@ msgstr "" msgid "Extended profile settings" msgstr "Розширені налаштування профілю" +#. TRANS: Usage instructions for profile settings. +msgid "" +"You can update your personal profile info here so people know more about you." +msgstr "" + msgid "There was a problem with your session token. Try again, please." msgstr "" -#. TRANS: Message given submitting a form with an unknown action +#. TRANS: Message given submitting a form with an unknown action. msgid "Unexpected form submission." msgstr "" +msgid "Details saved." +msgstr "" + +#. TRANS: Exception thrown when no date was entered in a required date field. +#. TRANS: %s is the field name. #, php-format msgid "You must supply a date for \"%s\"." msgstr "" +#. TRANS: Exception thrown on incorrect data input. +#. TRANS: %1$s is a field name, %2$s is the incorrect input. #, php-format -msgid "Invalid date entered for \"%s\": %s" +msgid "Invalid date entered for \"%1$s\": %2$s." msgstr "" +#. TRANS: Exception thrown when entering an invalid URL. +#. TRANS: %s is the invalid URL. #, php-format -msgid "Invalid URL: %s" +msgid "Invalid URL: %s." msgstr "" msgid "Could not save profile details." @@ -53,6 +67,14 @@ msgstr "" msgid "Invalid tag: \"%s\"." msgstr "" +#. TRANS: Server error thrown when user profile settings could not be saved. +msgid "Could not save profile." +msgstr "" + +#. TRANS: Server error thrown when user profile settings tags could not be saved. +msgid "Could not save tags." +msgstr "" + #. TRANS: Link title for link on user profile. msgid "Edit extended profile settings" msgstr "Змінити розширені налаштування профілю" @@ -143,6 +165,3 @@ msgstr "Досвід роботи" msgid "Education" msgstr "Освіта" - -#~ msgid "Details" -#~ msgstr "Деталі" diff --git a/plugins/SubMirror/locale/SubMirror.pot b/plugins/SubMirror/locale/SubMirror.pot index b152575321..95f10897ac 100644 --- a/plugins/SubMirror/locale/SubMirror.pot +++ b/plugins/SubMirror/locale/SubMirror.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,33 +16,36 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: actions/basemirror.php:71 +#. TRANS: Client error displayed when entering an invalid URL for a feed. +#. TRANS: %s is the invalid feed URL. +#: actions/basemirror.php:73 #, php-format -msgid "Invalid feed URL: %s" +msgid "Invalid feed URL: %s." msgstr "" -#. TRANS: Error message returned to user when setting up feed mirroring, but we were unable to resolve the given URL to a working feed. -#: actions/basemirror.php:83 +#. TRANS: Error message returned to user when setting up feed mirroring, +#. TRANS: but we were unable to resolve the given URL to a working feed. +#: actions/basemirror.php:86 msgid "Invalid profile for mirroring." msgstr "" -#: actions/basemirror.php:101 -msgid "Can't mirror a StatusNet group at this time." +#: actions/basemirror.php:104 +msgid "Cannot mirror a StatusNet group at this time." msgstr "" -#: actions/basemirror.php:115 +#: actions/basemirror.php:118 msgid "This action only accepts POST requests." msgstr "" -#: actions/basemirror.php:123 +#: actions/basemirror.php:126 msgid "There was a problem with your session token. Try again, please." msgstr "" -#: actions/basemirror.php:133 +#: actions/basemirror.php:136 msgid "Not logged in." msgstr "" -#: actions/basemirror.php:156 +#: actions/basemirror.php:159 msgid "Subscribed" msgstr "" diff --git a/plugins/SubMirror/locale/de/LC_MESSAGES/SubMirror.po b/plugins/SubMirror/locale/de/LC_MESSAGES/SubMirror.po index 76a5203c5e..e5354f04fe 100644 --- a/plugins/SubMirror/locale/de/LC_MESSAGES/SubMirror.po +++ b/plugins/SubMirror/locale/de/LC_MESSAGES/SubMirror.po @@ -9,27 +9,31 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - SubMirror\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:52:01+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:40:24+0000\n" "Language-Team: German \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-06 02:19:34+0000\n" +"X-POT-Import-Date: 2011-03-17 10:20:13+0000\n" "X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: de\n" "X-Message-Group: #out-statusnet-plugin-submirror\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#. TRANS: Client error displayed when entering an invalid URL for a feed. +#. TRANS: %s is the invalid feed URL. #, fuzzy, php-format -msgid "Invalid feed URL: %s" +msgid "Invalid feed URL: %s." msgstr "Ungültige Feed-URL." -#. TRANS: Error message returned to user when setting up feed mirroring, but we were unable to resolve the given URL to a working feed. +#. TRANS: Error message returned to user when setting up feed mirroring, +#. TRANS: but we were unable to resolve the given URL to a working feed. msgid "Invalid profile for mirroring." msgstr "Ungültiges Profil für das Spiegeln." -msgid "Can't mirror a StatusNet group at this time." +#, fuzzy +msgid "Cannot mirror a StatusNet group at this time." msgstr "Kann im Moment keine StatusNet-Gruppe spiegeln." msgid "This action only accepts POST requests." diff --git a/plugins/SubMirror/locale/fr/LC_MESSAGES/SubMirror.po b/plugins/SubMirror/locale/fr/LC_MESSAGES/SubMirror.po index 1216906eb9..c2e0aebfe2 100644 --- a/plugins/SubMirror/locale/fr/LC_MESSAGES/SubMirror.po +++ b/plugins/SubMirror/locale/fr/LC_MESSAGES/SubMirror.po @@ -10,27 +10,31 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - SubMirror\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:52:01+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:40:24+0000\n" "Language-Team: French \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-06 02:19:34+0000\n" +"X-POT-Import-Date: 2011-03-17 10:20:13+0000\n" "X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: fr\n" "X-Message-Group: #out-statusnet-plugin-submirror\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" +#. TRANS: Client error displayed when entering an invalid URL for a feed. +#. TRANS: %s is the invalid feed URL. #, fuzzy, php-format -msgid "Invalid feed URL: %s" +msgid "Invalid feed URL: %s." msgstr "Adresse URL de flux invalide." -#. TRANS: Error message returned to user when setting up feed mirroring, but we were unable to resolve the given URL to a working feed. +#. TRANS: Error message returned to user when setting up feed mirroring, +#. TRANS: but we were unable to resolve the given URL to a working feed. msgid "Invalid profile for mirroring." msgstr "Profil invalide pour la mise en miroir." -msgid "Can't mirror a StatusNet group at this time." +#, fuzzy +msgid "Cannot mirror a StatusNet group at this time." msgstr "Impossible de mettre en miroir un groupe StatusNet actuellement." msgid "This action only accepts POST requests." diff --git a/plugins/SubMirror/locale/ia/LC_MESSAGES/SubMirror.po b/plugins/SubMirror/locale/ia/LC_MESSAGES/SubMirror.po index 19eb4e9f01..c3ca96379b 100644 --- a/plugins/SubMirror/locale/ia/LC_MESSAGES/SubMirror.po +++ b/plugins/SubMirror/locale/ia/LC_MESSAGES/SubMirror.po @@ -9,27 +9,31 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - SubMirror\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:52:01+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:40:24+0000\n" "Language-Team: Interlingua \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-06 02:19:34+0000\n" +"X-POT-Import-Date: 2011-03-17 10:20:13+0000\n" "X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: ia\n" "X-Message-Group: #out-statusnet-plugin-submirror\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#. TRANS: Client error displayed when entering an invalid URL for a feed. +#. TRANS: %s is the invalid feed URL. #, fuzzy, php-format -msgid "Invalid feed URL: %s" +msgid "Invalid feed URL: %s." msgstr "URL de syndication invalide." -#. TRANS: Error message returned to user when setting up feed mirroring, but we were unable to resolve the given URL to a working feed. +#. TRANS: Error message returned to user when setting up feed mirroring, +#. TRANS: but we were unable to resolve the given URL to a working feed. msgid "Invalid profile for mirroring." msgstr "Profilo invalide pro republication." -msgid "Can't mirror a StatusNet group at this time." +#, fuzzy +msgid "Cannot mirror a StatusNet group at this time." msgstr "Al presente il es impossibile republicar un gruppo StatusNet." msgid "This action only accepts POST requests." diff --git a/plugins/SubMirror/locale/mk/LC_MESSAGES/SubMirror.po b/plugins/SubMirror/locale/mk/LC_MESSAGES/SubMirror.po index 8ca0053775..109120f33e 100644 --- a/plugins/SubMirror/locale/mk/LC_MESSAGES/SubMirror.po +++ b/plugins/SubMirror/locale/mk/LC_MESSAGES/SubMirror.po @@ -9,27 +9,31 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - SubMirror\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:52:01+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:40:24+0000\n" "Language-Team: Macedonian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-06 02:19:34+0000\n" +"X-POT-Import-Date: 2011-03-17 10:20:13+0000\n" "X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: mk\n" "X-Message-Group: #out-statusnet-plugin-submirror\n" "Plural-Forms: nplurals=2; plural=(n == 1 || n%10 == 1) ? 0 : 1;\n" +#. TRANS: Client error displayed when entering an invalid URL for a feed. +#. TRANS: %s is the invalid feed URL. #, fuzzy, php-format -msgid "Invalid feed URL: %s" +msgid "Invalid feed URL: %s." msgstr "Неважечка URL-адреса за каналот." -#. TRANS: Error message returned to user when setting up feed mirroring, but we were unable to resolve the given URL to a working feed. +#. TRANS: Error message returned to user when setting up feed mirroring, +#. TRANS: but we were unable to resolve the given URL to a working feed. msgid "Invalid profile for mirroring." msgstr "Неважечки профил за отсликување." -msgid "Can't mirror a StatusNet group at this time." +#, fuzzy +msgid "Cannot mirror a StatusNet group at this time." msgstr "Моментално не можам да отсликам група од StatusNet." msgid "This action only accepts POST requests." diff --git a/plugins/SubMirror/locale/nl/LC_MESSAGES/SubMirror.po b/plugins/SubMirror/locale/nl/LC_MESSAGES/SubMirror.po index 9c567df960..4117b8eeea 100644 --- a/plugins/SubMirror/locale/nl/LC_MESSAGES/SubMirror.po +++ b/plugins/SubMirror/locale/nl/LC_MESSAGES/SubMirror.po @@ -9,27 +9,31 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - SubMirror\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:52:01+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:40:25+0000\n" "Language-Team: Dutch \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-06 02:19:34+0000\n" +"X-POT-Import-Date: 2011-03-17 10:20:13+0000\n" "X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: nl\n" "X-Message-Group: #out-statusnet-plugin-submirror\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#. TRANS: Client error displayed when entering an invalid URL for a feed. +#. TRANS: %s is the invalid feed URL. #, fuzzy, php-format -msgid "Invalid feed URL: %s" -msgstr "Ongeldige URL voor feed." +msgid "Invalid feed URL: %s." +msgstr "Ongeldige URL voor feed: %s." -#. TRANS: Error message returned to user when setting up feed mirroring, but we were unable to resolve the given URL to a working feed. +#. TRANS: Error message returned to user when setting up feed mirroring, +#. TRANS: but we were unable to resolve the given URL to a working feed. msgid "Invalid profile for mirroring." msgstr "Ongeldig profiel om te spiegelen." -msgid "Can't mirror a StatusNet group at this time." +#, fuzzy +msgid "Cannot mirror a StatusNet group at this time." msgstr "Het is niet mogelijk om een StatusNet-groep te spiegelen." msgid "This action only accepts POST requests." @@ -94,7 +98,7 @@ msgid "Add feed" msgstr "Feed toevoegen" msgid "Twitter username:" -msgstr "" +msgstr "Twitter-gebruikersnaam:" msgctxt "LABEL" msgid "Remote feed:" @@ -123,10 +127,10 @@ msgid "Stop mirroring" msgstr "Spiegelen beëindigen" msgid "Twitter" -msgstr "" +msgstr "Twitter" msgid "RSS or Atom feed" -msgstr "" +msgstr "RSS- of Atom-feed" msgid "Select a feed provider" -msgstr "" +msgstr "Selecteer een feedprovider" diff --git a/plugins/SubMirror/locale/tl/LC_MESSAGES/SubMirror.po b/plugins/SubMirror/locale/tl/LC_MESSAGES/SubMirror.po index 05089e9660..26e229b974 100644 --- a/plugins/SubMirror/locale/tl/LC_MESSAGES/SubMirror.po +++ b/plugins/SubMirror/locale/tl/LC_MESSAGES/SubMirror.po @@ -9,27 +9,31 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - SubMirror\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:52:01+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:40:25+0000\n" "Language-Team: Tagalog \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-06 02:19:34+0000\n" +"X-POT-Import-Date: 2011-03-17 10:20:13+0000\n" "X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: tl\n" "X-Message-Group: #out-statusnet-plugin-submirror\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#. TRANS: Client error displayed when entering an invalid URL for a feed. +#. TRANS: %s is the invalid feed URL. #, fuzzy, php-format -msgid "Invalid feed URL: %s" +msgid "Invalid feed URL: %s." msgstr "Hindi tanggap na URL ng pakain." -#. TRANS: Error message returned to user when setting up feed mirroring, but we were unable to resolve the given URL to a working feed. +#. TRANS: Error message returned to user when setting up feed mirroring, +#. TRANS: but we were unable to resolve the given URL to a working feed. msgid "Invalid profile for mirroring." msgstr "Hindi tanggap na balangkas para sa pagsasalamin." -msgid "Can't mirror a StatusNet group at this time." +#, fuzzy +msgid "Cannot mirror a StatusNet group at this time." msgstr "Hindi maisalamin sa ngayon ang isang pangkat ng StatusNet." msgid "This action only accepts POST requests." diff --git a/plugins/SubMirror/locale/uk/LC_MESSAGES/SubMirror.po b/plugins/SubMirror/locale/uk/LC_MESSAGES/SubMirror.po index 6693d90adb..423ac24fee 100644 --- a/plugins/SubMirror/locale/uk/LC_MESSAGES/SubMirror.po +++ b/plugins/SubMirror/locale/uk/LC_MESSAGES/SubMirror.po @@ -9,12 +9,12 @@ msgid "" msgstr "" "Project-Id-Version: StatusNet - SubMirror\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-03-17 09:47+0000\n" -"PO-Revision-Date: 2011-03-17 09:52:01+0000\n" +"POT-Creation-Date: 2011-03-17 12:35+0000\n" +"PO-Revision-Date: 2011-03-17 12:40:25+0000\n" "Language-Team: Ukrainian \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-POT-Import-Date: 2011-03-06 02:19:34+0000\n" +"X-POT-Import-Date: 2011-03-17 10:20:13+0000\n" "X-Generator: MediaWiki 1.18alpha (r84120); Translate extension (2011-03-11)\n" "X-Translation-Project: translatewiki.net at http://translatewiki.net\n" "X-Language-Code: uk\n" @@ -22,15 +22,19 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= " "2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n" +#. TRANS: Client error displayed when entering an invalid URL for a feed. +#. TRANS: %s is the invalid feed URL. #, fuzzy, php-format -msgid "Invalid feed URL: %s" +msgid "Invalid feed URL: %s." msgstr "Помилкова URL-адреса веб-стрічки." -#. TRANS: Error message returned to user when setting up feed mirroring, but we were unable to resolve the given URL to a working feed. +#. TRANS: Error message returned to user when setting up feed mirroring, +#. TRANS: but we were unable to resolve the given URL to a working feed. msgid "Invalid profile for mirroring." msgstr "Помилковий профіль для віддзеркалення." -msgid "Can't mirror a StatusNet group at this time." +#, fuzzy +msgid "Cannot mirror a StatusNet group at this time." msgstr "На даний момент не можу віддзеркалювати спільноту на сайті StatusNet." msgid "This action only accepts POST requests." From 86fcd73a843e7b2f6e846d16deca5b33aeb9b545 Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Thu, 17 Mar 2011 15:11:30 +0100 Subject: [PATCH 144/146] L10n/i18n updates * number multiple parameters * put messages in plugin domain (use _m() NOT _()!) Translator documentation updated. --- plugins/SearchSub/searchsubsaction.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/plugins/SearchSub/searchsubsaction.php b/plugins/SearchSub/searchsubsaction.php index f888613349..54563ed0e7 100644 --- a/plugins/SearchSub/searchsubsaction.php +++ b/plugins/SearchSub/searchsubsaction.php @@ -115,13 +115,13 @@ class SearchSubsAction extends GalleryAction $current_user = common_current_user(); if ($this->user->id === $current_user->id) { // TRANS: Search subscription list text when the logged in user has no search subscriptions. - $message = _('You\'re not subscribed to any text searches right now. You can push the "Subscribe" button ' . + $message = _m('You are not subscribed to any text searches right now. You can push the "Subscribe" button ' . 'on any notice text search to automatically receive any public messages on this site that match that ' . - 'search, even if you\'re not subscribed to the poster.'); + 'search, even if you are not subscribed to the poster.'); } else { // TRANS: Search subscription list text when looking at the subscriptions for a of a user other // TRANS: than the logged in user that has no search subscriptions. %s is the user nickname. - $message = sprintf(_('%s is not subscribed to any searches.'), $this->user->nickname); + $message = sprintf(_m('%s is not subscribed to any searches.'), $this->user->nickname); } } else { @@ -165,7 +165,9 @@ class SearchSubscriptionsListItem extends SubscriptionListItem } $url = common_local_url('noticesearch', array('q' => $search)); - $linkline = sprintf(_m('"%s" since %s'), + // TRANS: Search subscription list item. %1$s is a URL to a notice search, + // TRANS: %2$s are the search criteria, %3$s is a datestring. + $linkline = sprintf(_m('"%2$s" since %3$s'), htmlspecialchars($url), htmlspecialchars($search), common_date_string($searchsub->created)); From 0d30dff6d6daffcc93b1ca43bfc348d3f38572f2 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Thu, 17 Mar 2011 12:13:46 -0700 Subject: [PATCH 145/146] Fix reversed poll & poll response object types in ActivityStreams output --- plugins/Poll/PollPlugin.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/Poll/PollPlugin.php b/plugins/Poll/PollPlugin.php index ea6ab9ecd9..941c13dd37 100644 --- a/plugins/Poll/PollPlugin.php +++ b/plugins/Poll/PollPlugin.php @@ -267,7 +267,7 @@ class PollPlugin extends MicroAppPlugin { $object = new ActivityObject(); $object->id = $notice->uri; - $object->type = self::POLL_OBJECT; + $object->type = self::POLL_RESPONSE_OBJECT; $object->title = $notice->content; $object->summary = $notice->content; $object->link = $notice->bestUrl(); @@ -290,7 +290,7 @@ class PollPlugin extends MicroAppPlugin { $object = new ActivityObject(); $object->id = $notice->uri; - $object->type = self::POLL_RESPONSE_OBJECT; + $object->type = self::POLL_OBJECT; $object->title = $notice->content; $object->summary = $notice->content; $object->link = $notice->bestUrl(); From 60a237ac624e99f7066986f973b4fcbba05a5b49 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Fri, 21 Jan 2011 14:23:02 -0500 Subject: [PATCH 146/146] some flushing in the UI --- lib/action.php | 8 ++++++++ lib/xmloutputter.php | 11 +++++++++++ 2 files changed, 19 insertions(+) diff --git a/lib/action.php b/lib/action.php index 20de71aec1..654ec7aa43 100644 --- a/lib/action.php +++ b/lib/action.php @@ -100,10 +100,12 @@ class Action extends HTMLOutputter // lawsuit { if (Event::handle('StartShowHTML', array($this))) { $this->startHTML(); + $this->flush(); Event::handle('EndShowHTML', array($this)); } if (Event::handle('StartShowHead', array($this))) { $this->showHead(); + $this->flush(); Event::handle('EndShowHead', array($this)); } if (Event::handle('StartShowBody', array($this))) { @@ -471,11 +473,14 @@ class Action extends HTMLOutputter // lawsuit $this->elementStart('div', array('id' => 'wrap')); if (Event::handle('StartShowHeader', array($this))) { $this->showHeader(); + $this->flush(); Event::handle('EndShowHeader', array($this)); } $this->showCore(); + $this->flush(); if (Event::handle('StartShowFooter', array($this))) { $this->showFooter(); + $this->flush(); Event::handle('EndShowFooter', array($this)); } $this->elementEnd('div'); @@ -695,14 +700,17 @@ class Action extends HTMLOutputter // lawsuit $this->elementStart('div', array('id' => 'site_nav_local_views_wrapper')); if (Event::handle('StartShowLocalNavBlock', array($this))) { $this->showLocalNavBlock(); + $this->flush(); Event::handle('EndShowLocalNavBlock', array($this)); } if (Event::handle('StartShowContentBlock', array($this))) { $this->showContentBlock(); + $this->flush(); Event::handle('EndShowContentBlock', array($this)); } if (Event::handle('StartShowAside', array($this))) { $this->showAside(); + $this->flush(); Event::handle('EndShowAside', array($this)); } $this->elementEnd('div'); diff --git a/lib/xmloutputter.php b/lib/xmloutputter.php index 15b18e7d90..528f633050 100644 --- a/lib/xmloutputter.php +++ b/lib/xmloutputter.php @@ -242,4 +242,15 @@ class XMLOutputter { $this->xw->writeComment($txt); } + + /** + * Flush output buffers + * + * @return void + */ + + function flush() + { + $this->xw->flush(); + } }