From fee55c17921d65ee11135b734cbe8afee9bce394 Mon Sep 17 00:00:00 2001 From: nyaadev Date: Mon, 22 May 2017 18:35:48 +0200 Subject: [PATCH] comments can be added+removed. gravatar for user avatar --- nyaa/forms.py | 2 +- nyaa/models.py | 9 ++++++++ nyaa/routes.py | 35 ++++++++++++++++++++++++++--- nyaa/static/img/avatar/default.png | Bin 0 -> 6793 bytes 4 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 nyaa/static/img/avatar/default.png diff --git a/nyaa/forms.py b/nyaa/forms.py index 1fec2ee..f6e35a8 100644 --- a/nyaa/forms.py +++ b/nyaa/forms.py @@ -129,7 +129,7 @@ class DisabledSelectField(SelectField): class CommentForm(FlaskForm): comment = TextAreaField('Make a comment', [ Length(max=255, message='Comment must be at most %(max)d characters long.'), - Required() + DataRequired() ]) is_anonymous = BooleanField('Anonymous') diff --git a/nyaa/models.py b/nyaa/models.py index a048edd..2f6d730 100644 --- a/nyaa/models.py +++ b/nyaa/models.py @@ -392,6 +392,15 @@ class User(db.Model): ] return all(checks) + def gravatar_url(self): + # from http://en.gravatar.com/site/implement/images/python/ + size = 40 + # construct the url + gravatar_url = 'https://www.gravatar.com/avatar/' + \ + hashlib.md5(self.email.encode('utf-8').lower()).hexdigest() + '?' + gravatar_url += urllib.parse.urlencode({'d': config.DEFAULT_AVATAR_URL, 's': str(size)}) + return gravatar_url + @property def ip_string(self): if self.last_login_ip: diff --git a/nyaa/routes.py b/nyaa/routes.py index 82aa062..4df27a6 100644 --- a/nyaa/routes.py +++ b/nyaa/routes.py @@ -615,7 +615,7 @@ def submit_comment(torrent_id): current_user_id = None else: current_user_id = flask.g.user.id - + comment = models.Comment( torrent=torrent_id, user_id=current_user_id, @@ -626,6 +626,7 @@ def submit_comment(torrent_id): return flask.redirect(flask.url_for('view_torrent', torrent_id=torrent_id)) + @app.route('/view//delete_comment/') def delete_comment(torrent_id, comment_id): if flask.g.user is not None and flask.g.user.is_admin: @@ -633,8 +634,8 @@ def delete_comment(torrent_id, comment_id): db.session.commit() else: flask.abort(403) - - return flask.redirect(flask.url_for('view_torrent', torrent_id=torrent_id)) + + return flask.redirect(flask.url_for('view_torrent', torrent_id=torrent_id)) @app.route('/view//edit', methods=['GET', 'POST']) @@ -792,6 +793,34 @@ def _create_user_class_choices(user): return default, choices +# Modified from: http://flask.pocoo.org/snippets/33/ +@app.template_filter() +def timesince(dt, default='just now'): + """ + Returns string representing "time since" e.g. + 3 minutes ago, 5 hours ago etc. + Date and time (UTC) are returned if older than 1 day. + """ + + now = datetime.utcnow() + diff = now - dt + + periods = ( + (diff.days, 'day', 'days'), + (diff.seconds / 3600, 'hour', 'hours'), + (diff.seconds / 60, 'minute', 'minutes'), + (diff.seconds, 'second', 'seconds'), + ) + + if diff.days >= 1: + return dt.strftime('%Y-%m-%d %H:%M UTC') + else: + for period, singular, plural in periods: + + if period >= 1: + return '%d %s ago' % (period, singular if period == 1 else plural) + + return default # #################################### STATIC PAGES #################################### @app.route('/rules', methods=['GET']) diff --git a/nyaa/static/img/avatar/default.png b/nyaa/static/img/avatar/default.png new file mode 100644 index 0000000000000000000000000000000000000000..7cde0a66cf181375c1ec3b3630c4a018fe611845 GIT binary patch literal 6793 zcmV;48g}K0P)Ly>Gea_dMs}dds|H?)|?rXXeZ~AvbQ^ zfZk+YLFnF0wB2zU$@|Zu<)Wjgo|}iH?CYqVbq(RU`3U|+|86h_(5Nc#;r&351g}4u zD=b@Bmar4TjtV;_Y_G5l!VU}jMO{xFQ$|mLOxlISjVJNq#9jF9*&LMD?Lv$xd87gG zRc|1&oG#6iXg(7*TG%;Vt^gebB1VY#)ZG|3?-2TI$v`U}8LUTe8K6=aa8caD^EBL} zE0hIBbq5AFRo^!Uu!g!ZKAhu1p{&vk>+6Dh!{n6GN`#Ayi4DjNhm(#`l+7 z1KsP%X;JxtZ}8{K!1R5;Yx`O*o-|HMQ9lOF{-*Y)mm^lKS3 zOMG^B(Q{%(hIcvx!|sufO~ejiJ%s(NwE;~6IhTXb_ts*_*sXZ;LN21UUYs$8H`)Qi zI~Gl&yyaRx@ZK6Biq+Cr`K%|?J8P+^mxVbx2MKvE`S&b-6u<@E;{!+EC@ z@Ky&kZH?OwJd`N>mk2fO>CETCp7ZuYUI}DnI+9;lfGNAqpozB^VvHrStn?2CH8#2@ zhO$!FlfsUB`T>sx^385M^4vU(y?hN-GbhT?%CP8Q@pnVLDH%tjX9EpmzhKdtq8g924BV$*DljUq#5DmSFb& zbGS=sw-~?hTyx+VUP^ICCt+jYLI+NLkQW!=<f3Ld@sqH-g`F<_!fgWCb_$hJCS&u- z%c$q4&IJ@SDs;O8=$Qz#i7pbc&*WePuvd}ikkP+I0-3T0j~Ue?tI|qLMt{>Bc&wp37s1$u-Y71RL+22)<22eD+9eBdXEk8t z{qp=aV@tXTt03(1O@Vy96EEfcVz$$g=7Rn>z3R&m;{hRzvcX38h|v*pHON^Xc~c+} zp%_e&pITD9*qvJ9J~Hr5nb_b?PDv3+JTGh{tzuDBWBU7RfuYNc?vr__DTFbsJ@9KW zVuateoyr6Vb?B>aO^;r0C#Ma679z>bH@I5{5hUhO4<-Ol-36p1a>fNp~(2rpXNFssUQT!R2YbR9!em74Zn6fi8jiO{{Pd1hj zwG2~=JIDuF2)V3Pg7a5_ho=IoJkI}M9mv`KlbBKtXb6;J|AKMOA`-|R@t~ojSMz@X z{wbXIw^z$#VOEA#qsX_Q;6ch8%OU2B2ka$*&=}z|b?B;epx+F67{_Wfi;-dGBn;lW zV7%l63504ZRCf1HI@)oYY|oMxz9Y;O-jII@S@>C*fa&vR}dIh!TO6X2)q@-l3aW z8L|E+;EV?6K1}@Z8cxbF^G1kwbBS(pGr7l9Oq8b5wfu7G8dPo@-eL`-MsX-BBx62UAR3|a5N|C9#%y-Ibn6M#$^&=B zsOS}=8WxBKXv44fRJn|+0xHMA&Y(GAfp`H4;-71P(VM+nzI8`a9z9G83&caHZ{jbwLj!QV085T$>sJ_W7i)93^Kj_TySEhyqQjC%7fj5=`d44P_*M$XQ zYFHqGOS!%CY}pY64myv-ShO zpATgC7)Pa*dXG9@nx23X$Pb5sC+EmwqGlkntkFGS+z~JWp?!_s(|~LFM)#zMtZPR1fN@7a#A2oH z0v?)TE^!bP0Lhpe+m9gsyAF6`snNY~%)%o;ZXQt1_TPeav2C67TrpY<6~Y*`v1Dpb zv(clT5O8~-Mg<`40#I2v?rma??iEvrZ3Xh`B4FeOqkG{!A9n*@Zf$fgm_lqfxRamp z<}%Us^DdOSh(=t>&O%G#boT!8HQ>s1d5V($zO?&K{UnPl2h@#{7B8$} zRiLbmq62IvkiV<|KKRk-UT7!Wz;C2}G*GJ|@Xc;unedNJX36aHBo0p@(e$bh{Jw=f z0x@kf#iEmcl$(m2ax?oJ?wI;0(7%z&A@D?Fppiunh1p`6 zm%`Hr%>w?p*4pAA%yf9_)y3MyK^#60yeqzwJ3o`l?5mHf>zlu@g+OT3@OP-XUX&?g zbPpsaE&*TfRM+13hk%Y>1Akwwu1$Ynd4WvX1H5CgKe{VSqK}(?h#ruS`0!L9!y=oc zmKMm0W5B?fz*U7gs*J`gBM6m<(~CI=fxa_rI$RHUndfn)gNeH za6Fif3aH2t_V0}{?dp>z&TMbV5rlTh4_`347y5A31Ob&xj}<-cmkjKCzDOJdCG1wk z^Yi6umszotK_tOnd|g4=s9)$~+Xlt^%43ys}7L zd#bUNK)%@pd}!faa!<(iV%J&^Xlg~%reET&ymwT-{WS{X*{R@1OaYlu1qmz43;$+DU!bO#(tUr>_qJ7|Odyn*(>v=GC8 zw#psXLR260p*v}p3Bd77YTGqCMhk?J*+rFe{F*9(bg$?5`6nBzX!6x*G zO9+I-u>Dkl2_bAc3G6@T{)|P4_#bPlDA52N(xD2n>-w9S zwDG+YbXJ+l5ipWula__1%{@xO;4OWVfzdtG_s1XjB#^sffJc&i>%dQ0@^o2_jZOvn z0^OnOnz*pe2lsoPm7Yq>jp`0e?<;rbt%y&%7jJj+?cx;I({r*6Z(t;~DwsR|hf<`j zcuGu(H_9l7iw<_yDS;gAX}r)o)B+h|059bN+5K)Y~kZFrKA=p8no?ruB_yW zS~i-V*a5Hn!H>EDjh#e#x`V_)AtWpg*HFR)JLUPZIvxw;@111EZY}ITE1b74j9C&;t?+uv&w*sLkUD_Pd0u@`K zrCb$B#sZC52Y_y=EE1z}DG-XYn$|~Kcrrz#wi_>_gc)tn`I~{?3XynmPW`;WM|SOo zQ-QqH5?J{(5Etovqgyh7P7~z6jBilRsAglOALkBA_&_yM7I<&1V38U#Q(_;40_8pw{>DqKv^BQiF!0PA^A+s30~I_7 z5S+Om*nLKx0JYMoJu`DlAQiY?bMX_}#6f3!KHqB3S{-Jha=7c)sa#rNmYJna&XhCW6EvU^u=O`G znU@wut_Pl*XMD;`yW=kQ?Y%WckI5Hd)DSeGHxR6GzB)nNwR}C(&Ul8alsHta>0q&( zRm(VBMHxX_)60CiSx&3+EKq084!F99k#k-gN&~AZ$#kIO_2D&g247zSys*IfHOZ}n zv*Mm~f10)b_UG51)U`VSgI5CCmnnReFM$u%>(w2`8O}zKnfri44pM?HF=;^>tKso^ z5IW#=f2vHf!1y0$Bgp4Y%F(GRbQ9=!G=hA05NJM@#bG3lobFRD>II&@0&M0uIG=GV z5Lzq`E44;Zz`$K>4E|frqE@N|hOKlwM~^n(NPewS$*? zeZ{Fjem4(zWwANR5;HRMerep5W2Vng@F=65+XO;~n>tSbzT9C%cNk}sE+j<7Ha*D< zv*3t6{RtFG2xQwSd5&X6x>4O>oN=O*K*l;*y($ewSTowWDG>5E{kn_)$!+&gOXbIa=g; zdzEh8vOPhZ<)7*vvq1eDNTjXOZ;-eQV5StSg?0flU zGcx1{akD50zuC?LVYJeynyl+$C;qh#n7FIxzxCX|v+3d=Q;40WSGjq>-&O(dl}fMr zn1<5Sp27mLId|J+1#9~$St;OXsk)X)(ZIW1^t&z##O5@&fj}s`Jw-2fsS6}mkyXm5 zqHd1_;OV>c-2^Rzzu(}^bc;iUReL4^?P6t>TsmBJ;4CnGAF%FOpnRy&J+v+?5Q|bH z0(hng@Nfg5RW1AOlp76Cu`C89HyPd$c&h`8!XL0eECdzof44KxsjksI2^?4;79d7U zr$+Yx`X(FQlfYueJ{E}SX(RlL9|pP4?#`%%PGV9qD4xZd6si#QLJMFai^K2y_>;`d zKqWnR1TiV^bOMImV{|V952_MOmC_2U1+zd*Mx+=mKDr-xwwcjA2|Us+06iv`OtHiQ zF&ST^0R41~En*x)Wj!9Bb$hvO_CZXvUV4ah5{-zQLt=3eJ0IGz`05ys!qWn);HcweY1yuifuhG2-JSZayIpnUAU>GWp z)-{29>jE8X16|@}t@hGTpcqxQ+L|F%PN_5LEwG>qPgzB|`+#Rfu9_ zH=wBphj}RWs9{xUgBr`{NbzGf1G5h}E(>5aINH{~PzqP7dE?2A)^7p{4FZ1E6!=Xu zphYd$Ra@QBHdb0ro~)v@`Z%!gh|C+6aaoQ!R>H1H-OR}DGjg?Rr-$d*{qohc5>u(k zeSmtE)V3Qgdf%b8w4v?gbLWN6vMECzu-PDNTZT;hZ03r*;Vclpa9E5O-BP_v(5~xw zkV?YoeyuI=YFlIPlC;K6>2hc}kBZ7r{k}8Va(b414Y+(=))uGG0?J`a|5CDOTH&CC z0C@#QS=H%ZDtktuAi-ooCI6)mbozg#Y12(BcpNS)QutWW;nHX!B05Yyt`iBwR50%E z69`P%Ba1?LJ0;icXG?eWxsL%+CU8LM$4e2hWK3W|H^(=Z1MjcX_W2OH6RMnk(5OMv zoguB*`DBcRR;p;!n6I&j5c$m^VZq41k_VqNCy~$w-3k1ovzRhO`Pv%8Xy?dznRW3$ zTYM|~5Lph_LPCOZ9SQ{U#Y4ceO?+*IVYES$ptZ+=|Jwvi-|M6g&X+YggCruSuWFzOk)6!>Ph z+^;aQZf3)(I1<#NCcG{+PwV~j2Lj#e>Cr7F&>>&;r!3=(%65oDT2QkXcvx|}2s#dW zPi;NA#4tc|Rp9luM)v|}6Nha<^(tY9Hy?T^5qN{oN;5h`iScS099>W&0^5V)BC#vB zBF=d70ZKtbF;#pFk6%YGqia(+whQ~$XR{FRSE4KgWj1OAWz@ftbrah0= zvHs~8!?=QKEjF&E?=_lM$DwDN;?v^Kl@LhfFyz1179Y@KIy(C4gZg%eVLXM-8~s`5 z4eFHo7!?+R{1VqK{ifaxFuqkyY@s* zTt-aRHLR&0jRbwV!!X*Qq#3U-20q@XuFVF~NMHLbT2=|aJ)*>6)JTmAI3>jKvbruX zj2dX_|50~ffWlR+5%*%4BXJO}!m7R(_Kv!4FpN4r=>a5G_Prh9N_^fk5tE#~?r@4# zif@HI>U&ohMlDn-t^HTpv+_LJ0878^510G&o&@GTCv2a#E-;LKw29Ro@f#n7^f5j0 zq`UWdB9KgB1BBTiO*CUS9;)wsU6r!IxFM!!17jlav%B|tdbEQMRkZ?-B#a69pVpqI zoT?Lv^wdYtF(nZm)XG z;W($YEnfvf&@tWq!rl*}^Uf rqx{in1xB0I8z4sx-TD6j00960@=Sr#o?{2)00000NkvXXu0mjf1s2Z^ literal 0 HcmV?d00001