From 0dcffc62274c49758bbff821c117ad15e3ceb418 Mon Sep 17 00:00:00 2001 From: danielvincent Date: Thu, 28 Oct 2010 14:07:52 -0700 Subject: [PATCH 1/6] made 404 page message clearer. --- public/404.html | 6 ++---- public/images/404.png | Bin 0 -> 17649 bytes 2 files changed, 2 insertions(+), 4 deletions(-) create mode 100644 public/images/404.png diff --git a/public/404.html b/public/404.html index 13597a69a..02624c38a 100644 --- a/public/404.html +++ b/public/404.html @@ -18,9 +18,7 @@ -
-

The page you were looking for doesn't exist.

-

You should try going outside.

-
+ + diff --git a/public/images/404.png b/public/images/404.png new file mode 100644 index 0000000000000000000000000000000000000000..f7a87253295485fdf416c3200c71f106c2f598ae GIT binary patch literal 17649 zcmXtg1yozl(>6|Vm!buV2Ps;-Kq*>WLa`JtQXGm~p;&R!;#NFBaEIXT5Zp@9;O>0+ z{onJ=IXU;UO<{^ zx(diEk|_U2?EfRt|B>SV$l!lu^FR9bKZ^Jt{rVpj|Bo8}NB#Z%^Yin&ySqFGB%S9A!5b>su+9HOjYx&uqS5_AT_wsGb z8QXKm^;5f8d9R=&r{nGYYkz5o{gAn)VT083)erCRr}jtGc0TyOz%-==*7{h)C1^77 zA(dJ0`7rMC+(!%usV=5Tsc{OdWt?m2+;^}q(6v2^ugT)N1T-mUtm0GhF+r-;rSgvV znT;kDtMlx>RNFAMQ3Jp&CCt6lZ8h~Hug;WAJ#culSMl_Z-9zm(2JYFgSN`D}B$@kZ zR$>nKQk3i}=@F!H$t$EEfQ_6mqs0>Oe+GTm5z^bN+5Zk!<-?3#Iw4oHTrZ19cQ00B zn1ri#R&RQ0i#kKHCKe%HA(#aU*JUb%F69OxvzcSFpwmUCXI+=QpP`>p+1?Y`-S;g z3?sHW4ys=%)*cqjrx36-F_OLDRh%DDorck|XTq#W!uyV(QBJ^10x=%AZ6yZ~vSlD( zm~VIbmODhf?KJ$4KwuOHT?Fmv@ns+j{um) z?yf(a0hzn+nhPrMmdlxX)NNa(YR7~usI2_O(er#B^}z!srI2QwEdDE=S{lb&LxWou zL`htImm6&e{L6=61&!*Lwpqht${Xg!S}~C2s)pm-YQ21FOwr)U4g=DPi?2oYws3y@ z3KGuTm{DwgUH{*cS5N^v?NQ{4S+?^xY@ndpL)Jy{OiL)lD@fQ8qgVg1aNZxF>tDHw zs$Wokxy34&w7O#dObFF&<+UgL8nv=!x^aRFE&QwX8G018@@#5)`-F=WW_@`M_+d(K z*@gy4VMtl3l~AEgHkArJqyYUqZ5{!xYW)-4o0Wxg!)UPmltMkmacZa11r420>}$0* zUksqjTh=2+W#P0iZCcqX<(4<@&%R!42m(;u>^BYN?xPs!6C2B|dK)SvJjyq#1=r)p zT#1iM{3RB&@Lof#$T8C_-kYkGwBWQO*;I1rm;gjkM&8&+TT~Lg>?@y<&X{QBZJMk% zi*L6SJC$|mKyHxu{N~|}Bds~yk|5B3XZ%sG4F!-THm;9_b=Pj6-dv*UjjGeG^k8GC z?_r`E)SQrAZtQMR@!Y*w3c#vauu8qpm(+4XK^WwH5aN#ROG3 z{rviG!OUbho>%83&smm57FEz};Gu)UAz8J4n@mGq#m>GmXplN$JngCRaj|y6A#C;s z1s_*|H$D(zPctNas5`BA#u@qAj<%iDDiXEXTNGV=Fnz3m5slJ*|CH2b)vNZ<&ii$- zS{T5!<9A>6M<= zKLxG&;k4=pJ~MU0>NHbVpMFfOkE!Ex4V2|i(vQp3LgN4S32Y*WP|EazqdgZeIMW6t z2NihIZXehx7b|RRGRh-nqz)IG0q`Pu`%FqGtZxh#+-q$t z25pCp9#2x^0aP|3eJd>}-#DU-bJ)2a$ex zY1TsnZ{%ct!S#IVLxO{(rHEd#cb3gdoRk$yVUzs9J)i2I81^@4tuV4DX<$aN_~<(^ zwa)k2f2)W7LF`7`Q0*acx`Hl3k5T7c+1U2tIQXVJ3YIRqYve@+_hLC|V_D@t&NNPA z2MuM2DE0cCE-LX;PV_eSYpOJF$rJL9e$%I2)*IS0Auy_vx4-fH_DAZK3(Z7up}0=i*F*PMN)OJvRZZNA@AcXaP7))2$T z`SH-p!Ty53O+faM^~Kh@`ukF~Cdyk*!@P{ak6e@YP7R?iP6+H%FmyDAfKo zNy9UM5%Ni)J4}U?saATxjq^8;iPUeAC-Mbc#Hm=mqd&hPGQO3i<@=_OR4P4c)<@IC z#j{IiRHXqn87mL#-w@ZGcb55s`~9`(%p+;@T!$CaSdqJc-y2ZjLx#Tg=N&Li1_h#T zVw@D0?2yJTKNQ}4?Ztrer_|3T%i}5lS;N8J7&`1O-ld7gqkg#br#to$G@es z9vV^RlX8g=2mb@_3uG4dgTj)&Ox|QAEak1|CO(d~?K^;_Mw2}qx$P`GYt>u+6exx< z`a94(;ecFb3pB^8P8@5NMY*S8q}gXx8~0?eM4ifTip@Z-k-xcHk7-eb6kbZgR)|7M#9n1FO`#p5?8CIe#1 zEnV{-_QtHK)eb+`9QI!jRJ1(D%Zz3Dvfo<379|=)DwitkMacn4T?guxNh@dF<)c68 zu0o}r5#i$xx*9ih(24$WZaqQf4CbTs={t&@9pP%0dg3Lmz>D?^nc>sz3GS(PB)6B0WM7K*(NprJ2Ltxz@^B7amBNe)C9LKvRPIz;jN z0Kw83Bdw+ijx_dBkQ2v1bN|tcFa|6*TlH&JbgZ6fcC9!PE=+-}3(vp*kd{3I2!K7N##3qTVl=rL>)1aY+l*VVp zlX!3`>Cs{w2Wb&tdSx9CJlb5XS5z9tVIaDVmTZ|u=l>F>Tyky6y6`CPKmEp^4@EBL)-{cdvrc0_ zCum>}yS^tksVhXYdT2-Il4vDV0VU?BF+kN z2k&1Oq;(c~*E=*_N4hg+(I%I&D4Y`r9sdfsHUslH&IVBy*N3_zwxd;yyN2%yOC)&5 z;*@H9gzM5Tf@UQ>$p`XwLbet#qugj;1;P%1D)a|DDW>23zlmh+MwDg0FB(6y`=bvZ zz)(F8P#9``u6S!eoFDC3#p%$h+s#5({!rD5F~Z>ju}>umif zLsl*y-d{HYm4)5UaSYj`ULGH72S+e(ogE!QeaiJ_M;D6{wXIp_Z}!LIRj#cbsLmk*h#4zngM%re7;eB7G zbGGH{Rb|5z1vdM(YO0wyX-dG_yrqQ+D=*w%`TR?M_(t+O&9Q`Xk<9I?>I6h_oq_k0 z_t;Je$h)77R=UhB^o=9FFz!6etUyLrLbSSzjb&CgO}$O~DvCRo5f>adaldFDgBoBV z*1cTFPesum#_&huC7&;TD2wN>!o+r_xf5>y(6kz!B=w$OSDZ3^p+~5?&e=b~n%gEA z2oxWF=*b_*R}2RDZ~@!9T7|JPv>ON#94d^BkE=ym-7Y^srt-gEX=gVzBW`^F!1fR= z%ZrRuqOGGLjjtW6;tSCCdKUymV%l+-!=j1gdq0aQcB$soI%yCu0axMrvs#rHc!=0D z84K*WSJ_{z6^k%1y=9reQx=_xRH78`=s8`LES#jFiarANh*#P0j$ADdq>SrHsXy0M z8nW@~gHM!E1;lG*d>;xn#=0GM8cV&@h0cHLL%U36-YJ`7!%2;_Oi!5di?^@P;wk(g z=~dcNUKElN=aGj7_&cD-{E<@d+P9!C{~$7jI@HH#t!GxJv$R*hvkj$eqaq8I+42Ne z*W<5NS9y!IqNa}!PPj*gevo8o0a|1+1woX!DOp88R;4nKnec z-^t^$uFre@6f^r&cWlB5)o1OynMp)N5U>X1GvH8GmKLTIBKrOEpLg zr!{lAjV#A2u6@WwB!F;E{Zt4VGs&vhsm|?e4(hB{2aK3+ib8q?n$Gi+gJp?0TT*1m zZ)4jwHeob*uXy(* z`-j@r)lv&+l5^w`V>oMt3r2jlp-+;;fV4=FPILFSe*AJzdRh3IJ8flOw6-p+mcDxV zhY9-80XK^s!tf{>qJ;|haQN$&XO6hEjhbd-m}(CNG7XZ)B#9uOsopB8kN(El!f!t@ z44So>UoJS9g5oTHo4%!0gQItv2f7*5@ay&3wgtHuzWmh?Lp9(-nQC8Wvi$+N3aVy! z0iMtQiFyWHdS{nVjRwye7-pRqWHq$4Vi!BT4*cmOYX~RnOjC{8@sUV0fEP>ioVXrh zeMz-3{IVLtg<5?bM#}@IJv-LGum@V>fcb%#?)iS#dqr8=Hegx3_m&8{{WURA+pAxf z@1fEu_zMbsZa~>>YVJ~AMml!iMwTp2;W`yLT@>JE1@!0>MAa{VbC0DnFOZ)r519cp#f5gsG1K2%PnfJ2N4^LOPR;onlP47K=Ji}%;I72^WN7zbolsHBMjV`3IU z&d}%^t(&wE3irM zKJoh&+3gf6OkL7E@8`A8VMvy(YNSW4rQd)$l_u;B*6>B;ieeQK?91Fy&d)OWdr|`; zpsjbN5qM9@m2QqNyWwU8XJcbc2D&7L}T_qo`irWEW%tJL#Rr9V#f@T8BH-bGFL>hX>31WeuH^6_1j%hVBZ~bFF6yVmaxOG3#q1PX-Z{}n zu-gavg*c`Fr)@tte0z7+SLW6F9V&Eeg`9T*MQ=+kErGwjKIZeU9^dotsWZa^Y5q75 zhK7%usB;L|6xg1=MX$^l{pkCAvx}efvjh|G!y)Ji8-`oQ>X2yK2W=-}ofCE0MK`zT z*(2|CR1*3ob9lUnGz2l@&|ND1!PiPoye*NMQRaNMU&m&W-Fmh9PSoP|e{%T`EnnM9 zy>OsLV;;keC3y-B>iO6!zhStXP8q1#zT18Pq@C)cB1#EztkXLraa~ikAjg(>a_8Zs zfG>Aw=V_t=Ap5MTA7J=LOD)a-=-8-;+Rz`0T^rkl(h}?R>q+U{SK8rUdl%R?2lib z4h$lN4fUuUAp~qf^|9rw%Ad;30_}*M+Lo+3F1w=`A#V1x^$;57DOb3BMEU16a&It& zUO#pD*xHv*||Ab$hHj2L@FSmq8#^P^Ry6jDEDR)p3o;L>zYF!xE@ElfI$u zr9tSvM||gX-D~&hspRs3s&l=Q1>k4!pC<^X72S0g9J>A*ixzDfD(K(;&pcqLyk>K@ z8wD%*Po?+X`c43%5&K)Ql6w|BXvNTZpLh+MCzN-Uyh19{;*@qU-9{BXTcOTCJJ31_|PSFx$+fxNJKY6LTnOpw#5y)xZ!DJ2@o^naJ>zeOu7Fh!MuQ;}7 z`xmq0HJxQmZvwcN%-P0|_5QT;dqUND`-Cj5Na?1lByGYG)s|xUEr>7nZ65-y;IFmK zs3m~E7-VU4$((rfzrRu(koe|(zRTe_ ziA}7KE0lMI{L}Qx-tQmgGp&-ZM7QzZtj)hv9j%j5%-9L53iVj=d3zMTZW+~aC?#(y zLVxJH=*Wn&YTAk&S?$T@3av0EM%8M#a-ChiakXBIG&RODGVG{-K`sU~_=?+PeC+e+ z+18j6lx@#-A1&X@u>@nrMsy{0smy%bLcGX|{#N|JeN!S**mCy(QnRYlI;9W;QUy$7 z=L}h|+oXU-1oi?DI^Boc`+3!G{KoU6>i%LOx}1E3$L@~je7jXnz0-zccFA;fG^xWdcIBCMGA(7zK#*X#p~ud+PYr$eFSh1Y$nno2yNFT z1u!3#+j8nO`DboMv$Ow7fJmL0Vm=aOENnnXUWbU#$pa1_=Akq(ptjLlaW~QVmD@BJ zuB897#_rf|TOIV-W1-Ob!S&n$#r{(2cxxG}V%Be;YR(P5F+xpZkfI1I}rkDY0mIvDC$X+doA;?ECJiL}|W6ab7YA0+HHSlqm$JhI+C2%yXxFHY=dqr=A(& zFA+4#1eGe=sKW)K1C*z3LEl3<6m2#j;@ zs(s(#YG*X}KV5!jZFhMlsvdi;hSq3866!G+B_!a!lyUM>dYBqcq+YXY`$|wDX0yMA zT<6%X2V_FhGR*4qtBvu~A^Du(NN09dU5=Vk@#O2gb?twVxLAm+J2VJDb@a1;Le0w$%FJ!zbTc7be{OE_rm|<5WM) zF%cnrcb4DgKg4yWg+RiWrp%}Np8C4GMr{ytocho)nc#};4A~B`H9=^~+}{bCh{-ML zBOV>nukPU_b#jWh@LMK0sBn9-u5HJaPRaG*KDlABHb|6V|Gm(els0tCEG9V2jxYtN z>RTbMC5E_~-DirQ!X-yk#*wQpqAa z;cvcYK@STSc%dr#;h1ELmKhUq0RZ3p{8c7sdwvx;i#9vIvRj7fzTHLNN%)H}Lxl%oarm6t8gy-6%TNg+vsGL37(Mf_;KXL-}Z ztMdgcGIpze|s^e z04R&66AAPxKh!%BFMqFb>h^FtV9+>|`T$i|5sA^;OZRfs{ING?I7hYGxT^~wpm-DF zq3+}_xN27|^_$|*Uz;BE^@Sf@G4Z) zh$zf`Ma=Uf7x?4n7!bXLsbD}&{}e$+)Y%kz`Un!PicYp42c7`yasTdc?UZ(1&J`g8 zsydPmiM5H>LYA1%H^QHwm&LYOe3?7(G}|n(L_AuEZ1k(5GM<<;$E818cd91$=)YQO z2u_!A=~;m-@}?55P9hGZh6YWl_+CyzPU9l)YdB-bAS?3Mhu?J~%QgPaOq(|%gP!FW zVXZ^W4)nE8!YaMP`~U9((3gaxr3Rb`FCU8tek3~^0S;bn;7;=b7hh7omK>P|OK0YG0wrzPC zGc$Y%tCnxu;}aMk`vcL^06J~?(lqe2=g1|bj$6pZ>DhI}DcyVZL@9WB8qzL6`^)-nyO5-P(*rfK{93cXpfZ2I&qS}wg?i|~q615=)Zd@|?| zuWI?l3~GM2-zE0Hb(}#Y*0~eH2*3nI<8y(zigvP>* zP(i3vD@)B1GBjHCOmfhx!%3z})(0+QF*2YxY-VghP@yWXfnGa`7O72a6!buehF#F|;~F7vFK$k2=~W981n7QaB(W0Ks< zgEa7Zjx;CCm_Bx|L|*@%0#*grd9iF6+L5%id{i6IlkIf=iEq7{@hy%3(q_MLiq^H( zM1o^TK7cPW5c7a65;62(j&ARTnzZA^#X@gG%}^a1|MDOnv|{p`PUo+b0Ms+EUkaoQ zG`WAAjAv3a>|$72*Y2ZYj>WNnrs@Os=Ykc7)AP|sY(?v$evRddkrhhFAp*TBC_@LOwiBoFNxXosRPYCH&GIHupr{_* zP?|-Ib~9ig>gINp6tLkH`;D4)4ML$weD9AX(d(YSjfmy~Em3KsQ^V3PaRZ&m+E)tni!z2)k$*ZS7Tcc?#Qxc+4?NpiV zC}K+RwsP_+m;Vy$_%q&O5&eM6;w~40sTsh>XYVJSSC74xr zR5Wi0reHNdqDlNE2o>hXTgT31X5uA8fDFD-0TZ?=*`zQbCv)JC8oOM125Nx57fXKD zn={d1irI*lACVc=GV@xJI6sI1-TEyE8a@&A&%=Z&E3B=kk*T6u>pz8idxn@*F?S`r zox9vO9~ghq@Gm(}N2-E-l@@^w-`CdHgTxk>@63O^`HVMBy5 z(Sey45DLk~H*{F^94sBJc5K@NkLMgvIEmJkLChw#57sHk(VQ4@ud%d%Sn0-6Jp%@O z(Q>o|4nPkf>6v1DQC-3Cj%K!3jIb9IUiG&zrGFaglKq_TnR6csDI3pW5d|g$dz{!; z*bM2R=!HDtThU)*8&ZW*v~(i7S7=$)ouilkQoVabT@I~_X5~#eBkP}e0(cF~m6{rt z{)Q=zm85;bQGz$N%3Kskgg#uYPWKw!n^yO&?|8=TZFC&&=GbQ(DSSXEdRC|`=@o$Q zH_v`1P5}az2o~A@(=yWy6KEfj@>7dGj3EFgH>lhAz62JWRFV7|R`a0&+Oh{@4!1q- z`yPfJVU#6bQoD$3LoVJzp=;Le*2`b2qga1Tio20g1?vrc?0jn5_xE7{zD?hv-%gE zDjyDDV4$~_=NQ3C_+EVyAW83Og^)6VQSL(UL!cVRB@p`0{B1a8okYDoT>DBEI@T@) zq6=n~zh+c2_h%pk|D;^;{%+#~&*7H5E!K3Dw2FPby_%tbJe&HR*VwW;Tx+=KMW`VBfgxwoM}I;vWpUg)y{ zFVQH+E9!x_538<c1xA$dF$$s)KCJx9 z$7UO1_Cen_OriGNS{V`dtqZvzVgsIMA@|w-2=2Oi_!m7Sl?7b0a|eedPR6@X0TFcf zM69%=Kqc=^S6#(SG_d#D_nX6q4~vgUFu5T-aQ?(`3|ZzB{cxJY}owh`t`9#cB9g=3TeyB9gYG*Fn5+TIRLGJ zC~E%Epc;q+_=8VYjfOZ7v|XRl-@c(E`Ok-{99`_;*?(Rr0NXY8^P>(e0T$%)a1a|j z>~e^W2e75`zFv!5Ap^dB37So1ggi!iHTD}i;0Cfur6JuziRJ@$6TrtBn6g&At2iH0 zFKit^RaG&OmfDs#Hm1TKmqb3A7+4uv(((lRv;pVbc-Xn{(% z>C9b^TCSf%*;fr$h*VeRFdcT43|k;E$59ML4e9M4Hf4-S`NaB;whekG!p$~Qq6i_0 z-+LcB-`xM(nA>f7#?{qUE-i&#)0Ho(NGE*?NP{W5<*~yOt9+@xdA|0anhf6Rh_lz- zqTkjwC)9O48hv3|o>SV>XZgoeq67sPY~c1m`!6eE!v6VDVcLO&9$368b5ycS^MDzG zy)7?DHhN3D#D`0dy>?W;hz;g=Py*4Duwm`)dYN=4ESr_{*=Q?=y`QyNA=oKDWhoF}atp${3_i_+~9e3?WaS-Az zkA@&;f~apfv<;AGu+lky$9$d;yhFv7mO3~B1n5GsDuv7pFI>7k~qiH~%chh4`gLf>q|qD4mp4iOo(Y{;$F-IE59e zPWpEMDypXcHI?7!dyCtV6qj$kEXLx}5teES&ueHb&Koj5(UWth^CAT|nnY3y=7tg! z%@rz(1Pr*L+)T%`9&gz@YRIy`(%bLv@71yW?UpePRpPIP8QGz+T&**=T))C1p*{_P zcGpDvS8b_oc!|fTs($pkC3a|tVq)32uhjzIJGoX+tlq7AXr>B|41J>pl%28%dlYu* z|CwNzVG4ic;`KGzTm{{0z;I6m_yTgIL;iu)pEZc?Svc4O7{MYhE@L~thRwLr7}wyo z8?yub-Tl%WHZ)2iqDsRZ>=Dv+dSCqp(v203Vla0-PkZ=$miHB#V*YGu`7+l31pz9! zQ!y2JI>Ex#!a|@6;t&=zCvd3eaOI9`iQ_90#|5CT!@p z!RJs+Rxrm9$S~hpB4%NT{&*p*Gf^fF;cTI#L44Ad{SRZ&d~%AV$pWT@Jg$dxm8}6~1In zVgJwc55a|^h}r2aFZ-;MESR|JMq&q>rN^fMm7sD^^dGT{Ac~l^z5P*aO(^Im5upF$ z=V*WAR@|o_imTh}2Yt*+hx4BfQMq?jhf`?3cC&r+uJL=&IK|mMMD{aD`tl>ob?$dk z;fpN)-28Q{|(70yiwVZ%2QCXJfXPvYstL&`aa zFcuvy6&YBeBD)h(;hJ?Zz-mxLL3qp!4EIj1`NpVea0vyT=z#PsSKa{N1?48NsnT`K z@q+nqD1YK(d{=Qt3Ef_CKtqtyN36LK@?pO9vIeJ_ZenuR&h$EX^+9IXpvn0rM?hsz zX6fT;OQp2XH%+CPfGIqE4)x(}YA551kDwAU=i!4p40y@n$_Jgh-}vyGk0}?XP&w?B zg^RseV4Ne!|66(XE;2jdtFpeUiB_O@19_zA`cO0rJ3?*yb`rpCH#@XqYV4-%RJ;^a zpWD~i_3A<`xB%_sC+JNTx9Jc!vZ3wg_;gh2 z*lF$EwtueZM=N}*2L7_UHxAsEAsjN~C}OIKKQQHql(sYR1nJdGUvlV$ z)apDvs(#Vao(?s{S|t|O5kvLBxXy+h%1gX$4mGq;pQLJ$=lLA%lOl9&7D0NIzHwfRv4-mt6IcpG*8ZCVvbhc(O5exQwG>q1C% zn@nUfPZQ}kW|xiE{&13++Vg!#XN7v=n4F0!u(lihdf`X#TRRL5uL^VG^8z8b0t3z} z*MIB=FaD7aAeH3q38qkiUNRP9f5CxJhpCC#%0}+A-#L49D}&0DVNu%iT0YSrZmNUO zEZoOd5T;qrybc>QkG%9>{!0iheU@%eA%Qy{CFX#I~M#EqfjX;jv^knNd z7{FYIP%%^PV2UE*hE>QfEW+Tf(8i@V-TRo_IwF-~ zSLu-WXBZ-1+-T#d@~1|z@o~u01{v~;5IY((#)$p^%GoP2gQvgCpCgn_jE0v{z+Ly| z%N5V#Yv4wRd4Y&!9P!+4gtw10G(=>aA%-?+A=+hk5bXbu7(fbfUfC&jPLVXPcNA>R zbSeogkn~(<1a;F+hN0DBz)_hx<(BbJ6yKo#Z3Bh*l~@$SeOKOabfEJQ0RA5SyYC$R z;c-tAgdEpc$ceU8{lX?TCPiF!**m*>fxkERA&R;M0{4B>h8uQxKW=fFY~v*4)n3KO z%ivHBnSZuJt9chV&#}%%U$UOiXdg}Gr}{RDqPFWvJm&r)36wiUK&{AOz+}v;6=WH< z*0Tiy&7CGTJE) zKHb1Xf^qC&veEc0tro?dyDepRhPK{bovWm)_uC}HkeyD%fv9TsAd)bI$_x#789vh+1Ecl=R>c@Iw{*oS zw*E@O~X?? zYphIv(XRKNeLO9T5Uj-!o8bW4m$DTbnsMnOuR$MTRy7+%F3AuaSoA-kcHEz~5~RaD zvt>r|#2JkDFhP5kjzB-S1JFU6(J?M}iQb%~td7(N9mptdlEIi)v4Y?@}}*Di4J>Ih-OrO<%HnQ#A0dfJ5m!$gnRHyoEBh%5=VqnTjhs(0(BWF}whqI}10Q zjd8jqQ&Vok0#stz*^R22mJNMD6W^!WbA8F3pJ%4B!MuwER1@fO9E)zLv z#mRBTzW18}eID+rX{CFyL?M4&AZivCF%rDaaMt|J38KZ(w!vno>XM-(g9gzutnvFTF|Vsz5pGfSPIPKYesD<-N}L?XP0{@(YSB(0%~)5*d~_ZVNvgV#s5^}zI463 z(G@){Xp|LS8RHM82==UB%^kZ>$d68z+!=nAeH1&3p^u!XPAiA>zHvYd(xHx{Z5X(Y zooRp+avn#!!qynCmdecE0i}Y|hC|t)%oD-9?oNhQ4Q25}K>oNxH?eMHd2yjt6zTQ_ zN>iRi>B0F8d@>-(?))--1mrP#+gQM<)>`6!T5sbq=Z_h8yIgJ!_<;3-YRD?`lL9hG z9uf+v=T;{=I%@UBkS4~4q=*fO!$~(ec5z#CBF)jb(de^2T4RqZnoXJ3p#ZJTH2-5U z`q*G8bS~9|RA+4TrE~sQ=Ud=5-3F`}!?0q{X52MgcCGotsSi|pK~0kwXed=WQXP-^ z=@`F_3X{CFB2LFiBlinND5yMD42!a)TO}+&Ru=Rnm+aW+c&LIPW+yl7E3mPsb418+ zV+A%ON{`MBme}vUQ-;Q9vxhfF?rmn?eX*XEGM$IMh;S?%b3od})Hx-g&9jGvg*7o& z&}BN!Z}(c-w;mc~OfAIKg)|#UoB0^_r=C z*ON&y>M4kfoJcSx;d#a~F?FnbIq9p&GM?9jkcF53wHg}~X57_7@SdR+7=LWsCUd6i z>qGd?9u1-Hh=z9&HVr0XhAo`G!dz(7OQEPYHdhI3l3^1$U+v5@p%c5-B0|F((&lu2 z*N-Jia7O%E4hSu@7?uZNl25)$!Vbo?BAZDI26^kF@53ey-&1`n0Vtp$?iaE2U-1S% zq#ZL`aSTie8r}?bPL8oc+beZCL-5m_h8VZe*E?xQ)It7cOE9$j>oD_Gim8J8@l7Z!1g5nl4ZS2@r3?Xt z<2{lCow@UKb<_NckPYk;H^?jtN9T1yIsDKlGcrdLtB|IrNu%i!)uQ^ z7JLomodquttS9m~4!`mZ8Vvcw3IC-Z4(mepb9iP~DCRijEZBTglh}C~-;QGdjdBQ? zUPm)8&#P+l-+c=+p_TtV>tSX~449$d#(_wLVGeukB}&6AhS!C$82Z<-D)){kT$29F zyA9ZxX-ab*Opt5pHQqL^7#FEno~t%e5cXrqbvxV9zGsVJx{Bc|;wUU$;3&O6D9kw= ziHI4y`Sk-uaOweg>5KvQS0+vW%3S*|;r?}V7_Nl;f#K)S_)7Ov5#*5n&5>>>;4dbc zJv3zOqz4ZJkbXxYMGLTR_z~fW)@AB#{;yAN>_iQkck(L^D|(*d4Q-ToW;GevTc{jz zr1U6?4cWpKAvOwJOIyH(D?!nO1CiBx5Ce7`6%=`aE3PDk9%}y@QvPG&19Hap2cnzR zUQq%9QT>ok(4*l&)|MEp9h)5J{6}w!k--y31KS+TnpQ8%wrZtvF&Qv8huk|Ea-g1|rSYs5R`=ag@3 z`SywCMGPU%NsCCc3KlUa2ko1ydNbxWO6U#AUi>GTfD|a>KvcspqAk5=C;ZXhd~!;` z=j@90pasSY3aOZAFN_rIBjVEnCaSckTe*XWnWHGrhsy7hf-_neof?f89tQn8lI1(% zlE{UD4JF6>0!Al8)zwGLG&mR0cRWzwv~J!&jYEBtw0e3Wxdy;b!}5{i5EbHRXQ;m@ z#1n0+r1@}14+SPwn&_Kugj{Y!T8@+PFe-!A=JWnAEN?JKDSpBC!-%H3GDD4~tav5S zXhk;JBp6UCr}3u%K@e=qK)2Ke&O=Fkmu}&_c7d&}TdZ{A`G^H1{~BW3+5x8=WB)dJ z)|$(W9!<+B_)|nqoh`ElD>pcaLG@1R5d*j?Xrb|`^%~C99jQUspoX`wBe905+FJX3 ze~I~s0?aD>r=>Z>@f!=>+Vd(`bY$e=X|5ADi)gvxrt^%zTGKUYOH^WWv1ysfIwvL7 z^G+JLKKD;GiUBaQEI?)Wq9TL9ywS=yi2@UNR5{o{E&)8@&rNZt)-)EQNw1o=HCW{* zgc_SARdRYl$yp8au0R2llh7+N++;w=n7a{*9iz z-x1G6G^tgjFow;dF4p6AVoM_i6Oh^Ac>YgE~c zVlG>R4T1-Nst758tBk{bzcil)A6zKOh8-3yBCE}@hH0$pNE{JozamQi4orlc0Q# zC%2=C2;iGX>kjj%LBdMPiHvEfg^HxJ;?bR}I}pOTV_P3z}(9vKXb5~c$cA@ z#k|<_4Db6l<=wSC{V-SMqHZGarBoEl2Jsu9Z{TM(AmJKFK!S}<4SFCdRNj3t<;f78 zK4r=pd}(s{7?zrwhz^)WzDb^n*Uktqy6d~J{C@$N17`fN%#ae8<8`y*1LXKxFX@!qP#oe-$kEx8&Q37c9s+e88p{wHSzBwDYwSSZC@d!2%kn5?IjB z`voPi=GRVOov8%Y{MreuGxa-Q>DB3*z;X;wMg{M#W178j|H-Ov_{bP8sw>v)dV33llgqTmdRi zzX_K0vqlnP#SE6+ys!?ItZwIdfvjeV^|#pM18$~R6A71>e+?|VnavtT@g>C!mZz=o zm7l29PUcKF-BhlD~{tFp}4^UZ((yvkI;7yUc)}mJ9zC| zU_~_GHgd4giy*Yxwj)PH2Af#{t*0_Z0#-Bu)+c_jg0r|at@A;sFv~Hu6KCuE!)?C< zRvZ<6O0k2rg{(Csfm;Biik;)QiE(K`6kx?4_E<0;JX}{-;IW^Jh>gLJeGv}tRDbt_{{=I0P!u=lBl*{^D$}T zp~;aC)!)>5pRa;Ns_+HFx9casa$gQNS{yCbb_Gn#jR>g&o`bu_;0`LCrorl<^}aTG zl)QSp_gcB_SFGQo9|3Fl+OBV$pRZD5OEI1M7tCp8P?_N_!n7{X9NrTuL|E4rH~xH* z@nBHXt1##RG+l&wiWpV*=+@1~Z|U&NrU+i$Ym4{luHfM<)78D3^h;nR{g4t^Ntfs! XF#+0 Date: Thu, 28 Oct 2010 14:26:20 -0700 Subject: [PATCH 2/6] A couple specs for create overwriting users --- spec/models/user_spec.rb | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 351d5347c..6dcc153ae 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -14,6 +14,30 @@ describe User do user.encryption_key.should_not be nil end + describe 'overwriting people' do + it 'does not overwrite old users with factory' do + new_user = Factory.create(:user, :id => user.id) + new_user.persisted?.should be_true + new_user.id.should_not == user.id + end + it 'does not overwrite old users with create' do + params = {:username => "ohai", + :email => "ohai@example.com", + :password => "password", + :password_confirmation => "password", + :person => + {:profile => + {:first_name => "O", + :last_name => "Hai"} + } + } + params[:id] = user.id + new_user = User.build(params) + new_user.save + new_user.persisted?.should be_true + new_user.id.should_not == user.id + end + end describe "validation" do describe "of associated person" do it "fails if person is not valid" do From 512f40eac2f0cf4db67ebde89f96ac2f9eb6652d Mon Sep 17 00:00:00 2001 From: Raphael Date: Thu, 28 Oct 2010 15:50:19 -0700 Subject: [PATCH 3/6] attr_accessible on Post --- app/controllers/albums_controller.rb | 16 ++------------- app/controllers/dev_utilities_controller.rb | 2 +- app/models/album.rb | 2 ++ app/models/photo.rb | 2 +- app/models/post.rb | 6 +++++- spec/controllers/albums_controller_spec.rb | 20 ++++++++++++++----- .../dev_utilities_controller_spec.rb | 2 +- spec/models/photo_spec.rb | 7 ++++--- 8 files changed, 31 insertions(+), 26 deletions(-) diff --git a/app/controllers/albums_controller.rb b/app/controllers/albums_controller.rb index f5a43360c..fc12437f6 100644 --- a/app/controllers/albums_controller.rb +++ b/app/controllers/albums_controller.rb @@ -16,9 +16,7 @@ class AlbumsController < ApplicationController def create aspect = params[:album][:to] - data = clean_hash(params[:album]) - - @album = current_user.post(:album, data) + @album = current_user.post(:album, params[:album]) flash[:notice] = I18n.t 'albums.create.success', :name => @album.name redirect_to :action => :show, :id => @album.id, :aspect => aspect end @@ -53,9 +51,7 @@ class AlbumsController < ApplicationController def update @album = current_user.find_visible_post_by_id params[:id] - data = clean_hash(params[:album]) - - if current_user.update_post( @album, data ) + if current_user.update_post( @album, params[:album] ) flash[:notice] = I18n.t 'albums.update.success', :name => @album.name respond_with @album else @@ -63,12 +59,4 @@ class AlbumsController < ApplicationController render :action => :edit end end - - private - def clean_hash(params) - return { - :name => params[:name], - :to => params[:to] - } - end end diff --git a/app/controllers/dev_utilities_controller.rb b/app/controllers/dev_utilities_controller.rb index a556547b0..549b25b00 100644 --- a/app/controllers/dev_utilities_controller.rb +++ b/app/controllers/dev_utilities_controller.rb @@ -39,7 +39,7 @@ class DevUtilitiesController < ApplicationController def set_profile_photo render :nothing => true - album = Album.create(:person => current_user.person, :name => "Profile Photos") + album = current_user.post(:album, :name => "Profile Photos", :to => current_user.aspects.first.id) current_user.raw_visible_posts << album current_user.save diff --git a/app/models/album.rb b/app/models/album.rb index 4f7294ff9..fbc64b2cf 100644 --- a/app/models/album.rb +++ b/app/models/album.rb @@ -16,6 +16,8 @@ class Album < Post before_destroy :destroy_photos + attr_accessible :name + def self.mine_or_friends(friend_param, current_user) friend_param ? Album.find_all_by_person_id(current_user.friend_ids) : current_user.person.albums end diff --git a/app/models/photo.rb b/app/models/photo.rb index a6e20ba33..94985e2bf 100644 --- a/app/models/photo.rb +++ b/app/models/photo.rb @@ -5,7 +5,7 @@ class PhotoAlbumValidator < ActiveModel::Validator def validate(document) unless document.album.person_id == document.person_id - document.errors[:base] << "You post photos to that album" + document.errors[:base] << "You can't post photos to that album" end end end diff --git a/app/models/post.rb b/app/models/post.rb index 0e1fc1959..5f9e0ca5c 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -33,7 +33,11 @@ class Post after_destroy :destroy_comments def self.instantiate params - self.create params.to_hash + new_post = self.new params.to_hash + new_post.person = params[:person] + new_post.public = params[:public] + new_post.save + new_post end def as_json(opts={}) diff --git a/spec/controllers/albums_controller_spec.rb b/spec/controllers/albums_controller_spec.rb index 74bec4045..8bfcf61e5 100644 --- a/spec/controllers/albums_controller_spec.rb +++ b/spec/controllers/albums_controller_spec.rb @@ -13,11 +13,6 @@ describe AlbumsController do sign_in :user, @user end - it "should update the name of an album" do - put :update, :id => @album.id, :album => { :name => "new_name"} - @album.reload.name.should eql("new_name") - end - describe '#create' do it 'all aspects' do params = {"album" => {"name" => "Sunsets","to" => "all"}} @@ -28,4 +23,19 @@ describe AlbumsController do post :create, params end end + + describe "#update" do + it "should update the name of an album" do + put :update, :id => @album.id, :album => { :name => "new_name"} + @album.reload.name.should eql("new_name") + end + + it "doesn't overwrite random attributes" do + new_user = Factory.create :user + params = {:name => "Bruisers", :person_id => new_user.person.id} + put('update', :id => @album.id, "album" => params) + @album.reload.person_id.should == @user.person.id + @album.name.should == 'Bruisers' + end + end end diff --git a/spec/controllers/dev_utilities_controller_spec.rb b/spec/controllers/dev_utilities_controller_spec.rb index deb7b1975..6278952d7 100644 --- a/spec/controllers/dev_utilities_controller_spec.rb +++ b/spec/controllers/dev_utilities_controller_spec.rb @@ -8,7 +8,7 @@ describe DevUtilitiesController do render_views before do - @tom = Factory.create(:user, :email => "tom@tom.joindiaspora.org") + @tom = Factory.create(:user_with_aspect, :email => "tom@tom.joindiaspora.org") sign_in :user, @tom end diff --git a/spec/models/photo_spec.rb b/spec/models/photo_spec.rb index d97f14d75..1cf1340d4 100644 --- a/spec/models/photo_spec.rb +++ b/spec/models/photo_spec.rb @@ -39,13 +39,14 @@ describe Photo do end it 'must have an album' do - photo = Photo.new(:person => @user.person) + photo = Photo.new() + photo.person = @user.person photo.image = File.open(@fixture_name) photo.save photo.valid?.should be false - photo.album = Album.create(:name => "foo", :person => @user.person) + photo.album = @album photo.save - Photo.first.album.name.should == 'foo' + photo.reload.album.name.should == 'foo' end it 'should have a caption' do From 09fb02ec9fc421e820d30145088390199a0c25d8 Mon Sep 17 00:00:00 2001 From: Hexagon Date: Thu, 28 Oct 2010 20:08:00 +0200 Subject: [PATCH 4/6] modified: config/locales/diaspora/sv.yml --- config/locales/diaspora/sv.yml | 305 +++++++++++++++++++++++++++------ 1 file changed, 256 insertions(+), 49 deletions(-) diff --git a/config/locales/diaspora/sv.yml b/config/locales/diaspora/sv.yml index 764734e55..f09e938e4 100644 --- a/config/locales/diaspora/sv.yml +++ b/config/locales/diaspora/sv.yml @@ -3,6 +3,9 @@ # the COPYRIGHT file. # Localization file for Swedish +# +# This file has parts from rails-i18n project at +# http://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale sv: activemodel: @@ -14,6 +17,11 @@ sv: taken: "är redan taget" email: taken: "är redan taget" + person: + attributes: + diaspora_handle: + taken: "är redan taget" + hello: "Hej världen!" application: helper: @@ -24,24 +32,24 @@ sv: home: "hem" error_messages: helper: - invalid_fields: "Ogiltiga fält" + invalid_fields: "Ogiltiga uppgifter" correct_the_following_errors_and_try_again: "Rätta följande fel och försök igen." people: helper: results_for: " resultat för %{params}" - people_on_pod_are_aware_of: " personer på denna pod är medveten om att" + people_on_pod_are_aware_of: " personer på denna plats är medvetna om att" layouts: application: edit_profile: "ändra profil" logout: "logga ut" shared: aspect_nav: - all_aspects: "Alla Aspekter" + all_aspects: "Alla sidor" manage: "Hantera" - manage_your_aspects: "Hantera dina Aspekter" + manage_your_aspects: "Hantera dina sidor" sub_header: - all_aspects: "Alla Aspekter" - manage_aspects: "Hantera Aspekter" + all_aspects: "Alla sidor" + manage_aspects: "Hantera sidor" publisher: share: "Dela" aspect_friends: @@ -52,66 +60,66 @@ sv: you: "du" new_album: create: "skapa" - add_a_new_album: "Lägg till ett nytt Album" + add_a_new_album: "Lägg till ett nytt fotoalbum" show: - edit_album: "Ändra Album" - albums: "album" - updated: "updated" + edit_album: "Ändra fotoalbum" + albums: "fotoalbum" + updated: "uppdaterad" by: "av" edit: editing: "Ändrar" updated: "uppdaterad" are_you_sure: "Är du säker?" - delete_album: "Ta bort album" + delete_album: "Ta bort fotoalbum" cancel: "Avbryt" index: home: "hem" - new_album: "NyttAlbum" + new_album: "Nytt fotoalbum" create: - success: "Du har nu skapat albumet %{name}." + success: "Du har nu skapat fotoalbumet %{name}." update: - success: "Albumet %{name} ändrades." - failure: "Ändringarna av albumet %{name} misslyckades." + success: "Fotoalbumet %{name} ändrades." + failure: "Ändringarna av fotoalbumet %{name} misslyckades." destroy: - success: "Albumet %{name} är nu borttaget." + success: "Fotoalbumet %{name} är nu borttaget." helper: - friends_albums: "Vänners Album" - your_albums: "Dina Album" + friends_albums: "Vänners fotoalbum" + your_albums: "Dina fotoalbum" aspects: no_friends_message: nobody: "Vi vet att du har vänner, bjud in dem till Diaspora!" - nobody_in_aspect: "Aspekten '%{aspect_name}' är tom." + nobody_in_aspect: "Sidan '%{aspect_name}' är tom." add_friend: "Lägg till en vän" add_friend_to: "Lägg till en vän i %{aspect_name}" invite: "Bjud in en vän till Diaspora!" no_posts_message: start_talking: "Ingen har sagt något än. Bli först!" manage: - add_a_new_aspect: "Lägg till en ny aspekt" + add_a_new_aspect: "Lägg till en ny sida" add_a_new_friend: "Lägg till en ny vän" show: "Visa" - update_aspects: "Uppdatera Aspekter" - requests: "Förfrågningar" + update_aspects: "Uppdatera sidor" + requests: "Vänförfrågningar" ignore_remove: "Ignorera/Ta bort" new_aspect: - add_a_new_aspect: "Lägg till ny aspekt" + add_a_new_aspect: "Lägg till ny sida" create: "Skapa" create: - success: "Klicka på plustecknet till höger för att välja vilka som kan se din nya aspekt." - failure: "Aspekten kunde inte skapas." + success: "Klicka på plustecknet till höger för att välja vilka som kan se din nya sida." + failure: "Sidan kunde inte skapas." destroy: success: "%{name} är nu borttagen." update: - success: "Din aspekt, %{name}, är nu ändrad." + success: "Din sida %{name} är nu ändrad." move_friend: failure: "fungerade inte %{inspect}" - success: "Personen flyttades till den nya aspekten" + success: "Personen flyttades till den nya sidan" add_to_aspect: - failure: "Misslyckades med att lägga personen i den nya aspekten." - success: "Personen tillagt i aspekten." + failure: "Misslyckades med att lägga in personen på den nya sidan." + success: "Personen tillagt på sidan." helper: remove: "ta bort" - aspect_not_empty: "Aspekten är inte tom" + aspect_not_empty: "Sidan är inte tom" users: edit: editing_profile: "Ändrar profil" @@ -119,12 +127,12 @@ sv: cancel: "Avbryt" update_profile: "Uppdatera Profil" home: "Hem" - diaspora_username: "DIASPORA-ID:" + diaspora_username: "Diaspora-användarnamn:" info: "Info" picture: "Profilbild" editing_profile: "Ändrar profil" albums: "Album" - you_dont_have_any_photos: "Do har inga foton! Gå till" + you_dont_have_any_photos: "Du har inga foton! Gå till" page_to_upload_some: "sidan för att ladda upp några." or: "eller" destroy: "Ditt konto är nu stängt." @@ -138,21 +146,21 @@ sv: prev: "föregående" full_size: "full storlek" next: "nästa" - edit_photo: "Ändra Foto" - delete_photo: "Ta bort Foto" + edit_photo: "Ändra foto" + delete_photo: "Ta bort foto" are_you_sure: "Är du säker?" comments: "kommentarer" edit: editing: "Ändrar" are_you_sure: "Är du säker?" - delete_photo: "Ta bort Foto" + delete_photo: "Ta bort foto" photo: show_comments: "visa kommentarer" posted_a_new_photo_to: "laddade upp ett nytt foto till" delete: "Ta bort" are_you_sure: "Är du säker?" new: - new_photo: "Nytt Foto" + new_photo: "Nytt foto" back_to_list: "Tillbaka till listan" post_it: "skicka!" create: @@ -176,7 +184,7 @@ sv: already_sent: 'Du har redan bjudit in denna person.' already_friends: 'Du är redan vän med den här personen' invitation_token_invalid: 'Din inbjudningskod är inte giltig!' - updated: 'Ditt lösenord är nu ändrats, och du har loggats in.' + updated: 'Ditt lösenord är nu uppdaterat, och du har loggats in.' status_messages: new_status_message: @@ -199,14 +207,14 @@ sv: people: person: add_friend: "lägg till vän" - pending_request: "väntande förfrågan" + pending_request: "väntande vänförfrågan" index: add_friend: "lägg till vän" real_name: "verkligt namn" - diaspora_handle: "diaspora-id" + diaspora_handle: "diaspora-adress" thats_you: "det är du!" - friend_request_pending: "förfrågan är skickad" - you_have_a_friend_request_from_this_person: "du har en väntande förfrågan från den här personen" + friend_request_pending: "vänförfrågan är skickad" + you_have_a_friend_request_from_this_person: "du har en väntande vänförfrågan från den här personen" new: new_person: "Ny Person" back_to_list: "Tillbaka till listan" @@ -220,18 +228,217 @@ sv: requests: new_request: add_a_new_friend_to: "Lägg till en vän till" - enter_a_diaspora_username: "Ange ett Diaspora-id:" - your_diaspora_username_is: "Ditt Diaspora-id är: %{diaspora_handle}" - friends_username: "Vännens Diaspora-id" + enter_a_diaspora_username: "Ange ett användarnamn:" + your_diaspora_username_is: "Din Diaspora-adress är: %{diaspora_handle}" + friends_username: "Vännens Diaspora-adress" destroy: success: "Ni är nu vänner." error: "Var god välj en aspekt!" - ignore: "Ignorerade förfrågan." + ignore: "Ignorerade vänförfrågan." create: - error: "Ingen diaspora seed med detta id hittades!" - invalid_identity: "Detta id har ett ogiltigt format" + error: "Inget diaspora-frö med denna adress hittades!" + invalid_identity: "Denna adress har ett ogiltigt format" error_server: "Problem att kontaka den andra servern. Är det möjligt att den inte finns?" - yourself: "Du kan inte fråga dig själv!" + yourself: "Du kan inte lägga till dig själv!" already_friends: "Du är redan vän med %{destination_url}!" - success: "En förfrågan har skickats till %{destination_url}." + success: "En vänförfrågan har skickats till %{destination_url}." horribly_wrong: "Nu gick något rejält fel här." + +# The following is from the rails-i18n project at http://github.com/svenfuchs/rails-i18n + +# Swedish translation. +# By Johan Lundström (johanlunds@gmail.com) with parts taken from http://github.com/daniel/swe_rails. +# With contributions by: +# * Sven Dahlstrand (sven.dahlstrand@gmail.com) +# * Henrik Nyh (henrik@nyh.se) + + number: + # Used in number_with_delimiter() + # These are also the defaults for 'currency', 'percentage', 'precision', and 'human' + format: + # Sets the separator between the units, for more precision (e.g. 1.0 / 2.0 == 0.5) + separator: "," + # Delimits thousands (e.g. 1,000,000 is a million) (always in groups of three) + delimiter: " " + # Number of decimals after the separator (the number 1 with a precision of 2 gives: 1.00) + precision: 2 + + # Used in number_to_currency() + currency: + format: + # Where is the currency sign? %u is the currency unit, %n the number (default: $5.00) + format: "%n %u" + unit: "kr" + + # Used in number_to_human_size() + human: + format: + # These three are to override number.format and are optional + # separator: + # delimiter: "" + precision: 1 + storage_units: + # Storage units output formatting. + # %u is the storage unit, %n is the number (default: 2 MB) + format: "%n %u" + units: + byte: + one: "Byte" + other: "Bytes" + kb: "KB" + mb: "MB" + gb: "GB" + tb: "TB" + + # Used in distance_of_time_in_words(), distance_of_time_in_words_to_now(), time_ago_in_words() + datetime: + distance_in_words: + half_a_minute: "en halv minut" + less_than_x_seconds: + one: "mindre än en sekund" + other: "mindre än %{count} sekunder" + x_seconds: + one: "en sekund" + other: "%{count} sekunder" + less_than_x_minutes: + one: "mindre än en minut" + other: "mindre än %{count} minuter" + x_minutes: + one: "en minut" + other: "%{count} minuter" + about_x_hours: + one: "ungefär en timme" + other: "ungefär %{count} timmar" + x_days: + one: "en dag" + other: "%{count} dagar" + about_x_months: + one: "ungefär en månad" + other: "ungefär %{count} månader" + x_months: + one: "en månad" + other: "%{count} månader" + about_x_years: + one: "ungefär ett år" + other: "ungefär %{count} år" + over_x_years: + one: "mer än ett år" + other: "mer än %{count} år" + almost_x_years: + one: "nästan ett år" + other: "nästan %{count} år" + prompts: + year: "År" + month: "Månad" + day: "Dag" + hour: "Timme" + minute: "Minut" + second: "Sekund" + + activemodel: + errors: + template: + header: + one: "Ett fel förhindrade denna %{model} från att sparas" + other: "%{count} fel förhindrade denna %{model} från att sparas" + # The variable :count is also available + body: "Det var problem med följande fält:" + + activerecord: + errors: + # model.errors.full_messages format. + format: "%{attribute} %{message}" + + template: + header: + one: "Ett fel förhindrade denna %{model} från att sparas" + other: "%{count} fel förhindrade denna %{model} från att sparas" + body: "Det var problem med följande fält:" + + # The values :model, :attribute and :value are always available for interpolation + # The value :count is available when applicable. Can be used for pluralization. + messages: + inclusion: "finns inte i listan" + exclusion: "är reserverat" + invalid: "är ogiltigt" + confirmation: "stämmer inte överens" + accepted: "måste vara accepterad" + empty: "får ej vara tom" + blank: "måste anges" + too_long: "är för lång (maximum är %{count} tecken)" + too_short: "är för kort (minimum är %{count} tecken)" + wrong_length: "har fel längd (ska vara %{count} tecken)" + taken: "har redan tagits" + not_a_number: "är inte ett nummer" + greater_than: "måste vara större än %{count}" + greater_than_or_equal_to: "måste vara större än eller lika med %{count}" + equal_to: "måste vara samma som" + less_than: "måste vara mindre än %{count}" + less_than_or_equal_to: "måste vara mindre än eller lika med %{count}" + odd: "måste vara udda" + even: "måste vara jämnt" + record_invalid: "Ett fel uppstod: %{errors}" + # Append your own errors here or at the model/attributes scope. + + # You can define own errors for models or model attributes. + # The values :model, :attribute and :value are always available for interpolation. + # + # For example, + # models: + # user: + # blank: "This is a custom blank message for %{model}: %{attribute}" + # attributes: + # login: + # blank: "This is a custom blank message for User login" + # Will define custom blank validation message for User model and + # custom blank validation message for login attribute of User model. + # models: + + # Translate model names. Used in Model.human_name(). + #models: + # For example, + # user: "Dude" + # will translate User model name to "Dude" + + # Translate model attribute names. Used in Model.human_attribute_name(attribute). + #attributes: + # For example, + # user: + # login: "Handle" + # will translate User attribute "login" as "Handle" + + date: + formats: + # Use the strftime parameters for formats. + # When no format has been given, it uses default. + # You can provide other formats here if you like! + default: "%Y-%m-%d" + short: "%e %b" + long: "%e %B %Y" + + day_names: [söndag, måndag, tisdag, onsdag, torsdag, fredag, lördag] + abbr_day_names: [sön, mån, tis, ons, tor, fre, lör] + + # Don't forget the nil at the beginning; there's no such thing as a 0th month + month_names: [~, januari, februari, mars, april, maj, juni, juli, augusti, september, oktober, november, december] + abbr_month_names: [~, jan, feb, mar, apr, maj, jun, jul, aug, sep, okt, nov, dec] + # Used in date_select and datime_select. + order: [ :day, :month, :year ] + + time: + formats: + default: "%a, %e %b %Y %H:%M:%S %z" + short: "%e %b %H:%M" + long: "%e %B %Y %H:%M" + am: "" + pm: "" + +# Used in array.to_sentence. + support: + array: + words_connector: ", " + two_words_connector: " och " + last_word_connector: " och " + select: + # default value for :prompt => true in FormOptionsHelper + prompt: "Välj" From b5bea7f14dfd23e27c42b1c7dafd48568cf0efd1 Mon Sep 17 00:00:00 2001 From: Raphael Date: Thu, 28 Oct 2010 16:13:04 -0700 Subject: [PATCH 5/6] Add specs for photo mass assignment --- spec/controllers/photos_controller_spec.rb | 38 ++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 spec/controllers/photos_controller_spec.rb diff --git a/spec/controllers/photos_controller_spec.rb b/spec/controllers/photos_controller_spec.rb new file mode 100644 index 000000000..90bc9c183 --- /dev/null +++ b/spec/controllers/photos_controller_spec.rb @@ -0,0 +1,38 @@ +# Copyright (c) 2010, Diaspora Inc. This file is +# licensed under the Affero General Public License version 3 or later. See +# the COPYRIGHT file. + +require 'spec_helper' + +describe PhotosController do + render_views + before do + @user = Factory.create(:user) + @aspect = @user.aspect(:name => "lame-os") + @album = @user.post :album, :to => @aspect.id, :name => 'things on fire' + @fixture_filename = 'button.png' + @fixture_name = File.join(File.dirname(__FILE__), '..', 'fixtures', @fixture_filename) + image = File.open(@fixture_name) + #@photo = Photo.instantiate( + # :person => @user.person, :album => @album, :user_file => image) + @photo = @user.post(:photo, :album_id => @album.id, :user_file => image, :to => @aspect.id) + sign_in :user, @user + end + + describe '#create' do + end + + describe "#update" do + it "should update the caption of a photo" do + put :update, :id => @photo.id, :photo => { :caption => "now with lasers!"} + @photo.reload.caption.should == "now with lasers!" + end + + it "doesn't overwrite random attributes" do + new_user = Factory.create :user + params = { :caption => "now with lasers!", :person_id => new_user.id} + put('update', :id => @photo.id, :photo => params) + @photo.reload.person_id.should == @user.person.id + end + end +end From 78acdb73683433a15c94d46ab1c6d3eb13b0646d Mon Sep 17 00:00:00 2001 From: Raphael Date: Thu, 28 Oct 2010 16:19:02 -0700 Subject: [PATCH 6/6] Pushing broken photo controller spec for dan to fix --- app/controllers/photos_controller.rb | 25 ++-------------------- spec/controllers/photos_controller_spec.rb | 4 ++-- 2 files changed, 4 insertions(+), 25 deletions(-) diff --git a/app/controllers/photos_controller.rb b/app/controllers/photos_controller.rb index a3a815f69..1d4faa310 100644 --- a/app/controllers/photos_controller.rb +++ b/app/controllers/photos_controller.rb @@ -37,9 +37,7 @@ class PhotosController < ApplicationController params[:user_file] = file - data = clean_hash(params) - - @photo = current_user.post(:photo, data) + @photo = current_user.post(:photo, params) respond_to do |format| format.json{render(:layout => false , :json => {"success" => true, "data" => @photo}.to_json )} @@ -94,9 +92,7 @@ class PhotosController < ApplicationController def update @photo = current_user.find_visible_post_by_id params[:id] - data = clean_hash(params) - - if current_user.update_post( @photo, data[:photo] ) + if current_user.update_post( @photo, params[:photo] ) flash[:notice] = I18n.t 'photos.update.notice' respond_with @photo else @@ -104,21 +100,4 @@ class PhotosController < ApplicationController render :action => :edit end end - - private - def clean_hash(params) - if params[:photo] - return { - :photo => { - :caption => params[:photo][:caption], - } - } - else - return{ - :album_id => params[:album_id], - :user_file => params[:user_file] - } - end - end - end diff --git a/spec/controllers/photos_controller_spec.rb b/spec/controllers/photos_controller_spec.rb index 90bc9c183..0afd2ad9e 100644 --- a/spec/controllers/photos_controller_spec.rb +++ b/spec/controllers/photos_controller_spec.rb @@ -5,7 +5,7 @@ require 'spec_helper' describe PhotosController do - render_views + render_views before do @user = Factory.create(:user) @aspect = @user.aspect(:name => "lame-os") @@ -31,7 +31,7 @@ describe PhotosController do it "doesn't overwrite random attributes" do new_user = Factory.create :user params = { :caption => "now with lasers!", :person_id => new_user.id} - put('update', :id => @photo.id, :photo => params) + put :update, :id => @photo.id, :photo => params @photo.reload.person_id.should == @user.person.id end end