From 6b280c69017d12ccb96e594439dc2b70fdc39a60 Mon Sep 17 00:00:00 2001 From: Lephe Date: Wed, 22 Jul 2020 10:44:56 +0200 Subject: [PATCH] trophies: add icons --- app/__init__.py | 6 +++ app/static/css/widgets.css | 2 +- app/static/images/trophies/actif.png | Bin 0 -> 397 bytes app/static/images/trophies/aficionado.png | Bin 0 -> 563 bytes app/static/images/trophies/artiste.png | Bin 0 -> 490 bytes app/static/images/trophies/beau-parleur.png | Bin 0 -> 558 bytes .../images/trophies/bourreau-des-coeurs.png | Bin 0 -> 529 bytes .../images/trophies/codeur-invetere.png | Bin 0 -> 581 bytes .../images/trophies/concourant-encore.png | Bin 0 -> 584 bytes .../trophies/concurrent-de-l-extreme.png | Bin 0 -> 602 bytes .../images/trophies/dessinateur-en-herbe.png | Bin 0 -> 574 bytes .../images/trophies/encyclopedie-vivante.png | Bin 0 -> 424 bytes app/static/images/trophies/gourou.png | Bin 0 -> 490 bytes app/static/images/trophies/grand-joueur.png | Bin 0 -> 509 bytes .../grand-maitre-des-traits-d-esprit.png | Bin 0 -> 604 bytes app/static/images/trophies/grand-manitou.png | Bin 0 -> 519 bytes .../images/trophies/guerrier-du-savoir.png | Bin 0 -> 643 bytes app/static/images/trophies/hard-tester.png | Bin 0 -> 541 bytes app/static/images/trophies/initie.png | Bin 0 -> 528 bytes .../images/trophies/je-code-donc-je-suis.png | Bin 0 -> 524 bytes app/static/images/trophies/maitre-du-code.png | Bin 0 -> 788 bytes .../images/trophies/membre-d-honneur.png | Bin 0 -> 575 bytes .../trophies/membre-de-creativecalc.png | Bin 0 -> 564 bytes app/static/images/trophies/open-pixel.png | Bin 0 -> 727 bytes app/static/images/trophies/papy-casio.png | Bin 0 -> 519 bytes app/static/images/trophies/participant.png | Bin 0 -> 646 bytes app/static/images/trophies/pedagogue.png | Bin 0 -> 547 bytes .../images/trophies/plume-infaillible.png | Bin 0 -> 460 bytes app/static/images/trophies/premiers-mots.png | Bin 0 -> 443 bytes .../trophies/programmeur-du-dimanche.png | Bin 0 -> 490 bytes app/static/images/trophies/roi-du-pixel.png | Bin 0 -> 666 bytes .../images/trophies/romancier-emerite.png | Bin 0 -> 526 bytes .../images/trophies/survivant-de-la-v42.png | Bin 0 -> 402 bytes app/static/images/trophies/testeur.png | Bin 0 -> 401 bytes .../images/trophies/veni-vidi-casii.png | Bin 0 -> 516 bytes .../images/trophies/veteran-mythique.png | Bin 0 -> 572 bytes app/templates/account/user.html | 2 +- assets/trophies-generate.py | 35 ++++++++++++++++++ assets/trophies.png | Bin 0 -> 9813 bytes 39 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 app/static/images/trophies/actif.png create mode 100644 app/static/images/trophies/aficionado.png create mode 100644 app/static/images/trophies/artiste.png create mode 100644 app/static/images/trophies/beau-parleur.png create mode 100644 app/static/images/trophies/bourreau-des-coeurs.png create mode 100644 app/static/images/trophies/codeur-invetere.png create mode 100644 app/static/images/trophies/concourant-encore.png create mode 100644 app/static/images/trophies/concurrent-de-l-extreme.png create mode 100644 app/static/images/trophies/dessinateur-en-herbe.png create mode 100644 app/static/images/trophies/encyclopedie-vivante.png create mode 100644 app/static/images/trophies/gourou.png create mode 100644 app/static/images/trophies/grand-joueur.png create mode 100644 app/static/images/trophies/grand-maitre-des-traits-d-esprit.png create mode 100644 app/static/images/trophies/grand-manitou.png create mode 100644 app/static/images/trophies/guerrier-du-savoir.png create mode 100644 app/static/images/trophies/hard-tester.png create mode 100644 app/static/images/trophies/initie.png create mode 100644 app/static/images/trophies/je-code-donc-je-suis.png create mode 100644 app/static/images/trophies/maitre-du-code.png create mode 100644 app/static/images/trophies/membre-d-honneur.png create mode 100644 app/static/images/trophies/membre-de-creativecalc.png create mode 100644 app/static/images/trophies/open-pixel.png create mode 100644 app/static/images/trophies/papy-casio.png create mode 100644 app/static/images/trophies/participant.png create mode 100644 app/static/images/trophies/pedagogue.png create mode 100644 app/static/images/trophies/plume-infaillible.png create mode 100644 app/static/images/trophies/premiers-mots.png create mode 100644 app/static/images/trophies/programmeur-du-dimanche.png create mode 100644 app/static/images/trophies/roi-du-pixel.png create mode 100644 app/static/images/trophies/romancier-emerite.png create mode 100644 app/static/images/trophies/survivant-de-la-v42.png create mode 100644 app/static/images/trophies/testeur.png create mode 100644 app/static/images/trophies/veni-vidi-casii.png create mode 100644 app/static/images/trophies/veteran-mythique.png create mode 100755 assets/trophies-generate.py create mode 100644 assets/trophies.png diff --git a/app/__init__.py b/app/__init__.py index 8a53d17..01ca7d3 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -5,6 +5,7 @@ from flask_login import LoginManager from flask_mail import Mail from config import Config import time +import slugify app = Flask(__name__) app.config.from_object(Config) @@ -49,3 +50,8 @@ from app.routes.forum import index, topic from app.utils import pluralize # To use pluralize into the templates from app.utils import date from app.utils import is_title + +# Add slugify into the available functions in every template +app.jinja_env.globals.update( + slugify=slugify.slugify +) diff --git a/app/static/css/widgets.css b/app/static/css/widgets.css index 4b4ee68..8d06ef7 100644 --- a/app/static/css/widgets.css +++ b/app/static/css/widgets.css @@ -61,7 +61,7 @@ border-radius: 2px; } .trophy img { - height: 50px; margin-right: 5px; + height: 48px; margin-right: 8px; } .trophy div > * { display: block; diff --git a/app/static/images/trophies/actif.png b/app/static/images/trophies/actif.png new file mode 100644 index 0000000000000000000000000000000000000000..aaebe3a4482e337e87505c520c4171a24ae4a27a GIT binary patch literal 397 zcmV;80doF{P)yr~A>(6I_H`JoZ;9pzCZNhG}DrQ4!d-?c;mj_c1P` zE>T+jBRaGJo;)YCiE4nbCC>?Eq8gAU&pB$MTmwgw=lGf^&j3nZFN^5HW*m2qOHGtx zfG00a+y*z|Y9fCFv6JUWO(buiK_`6Y`Nuqq%6HTB^E}-LGLgK2uQ4E<=cS3;AS15p zL_P*=eV!Yjecwg-;4 zj`hQ)t_f59{dG9!m6(G}JcmIkg_HJ$+Pi}l zINPUDxDKE(5h{7tcC!CP=DjPiu(8lt>e~|MeZTHXAkge|dmC{@I@=)1GeFec=|I#s rG-p%aQl3qHQ-3zW4G{I;DvrDWjUdh%1VtC}00000NkvXXu0mjfu@AG| literal 0 HcmV?d00001 diff --git a/app/static/images/trophies/aficionado.png b/app/static/images/trophies/aficionado.png new file mode 100644 index 0000000000000000000000000000000000000000..a3160ed33060532c2769cffddb2d1c22dc6c09c7 GIT binary patch literal 563 zcmV-30?hr1P)NmFJ6C9 zmMnq2WRiQoH8TzX=w}uI0P)5Z03b6TqwE@YUtGKN(+Ah@cDE}NmiYu?!%b*Sq*By) zZfObtkgzua0KMuf0AL|MM%mpYKDl=7w`a<(+36_7V?2TA1^!yfYk>VmuP^%mfPV83 z01$7~0RWFZ!7jwur91pxNLI!ZkgfwnY=!k&suept1VowNIK9vc;AnN3dta7B@Cgjd z{KI}pD}dRpT>$P$7*9Z02UNfL^Lk5Z;@ota>z5@#;t-Jt9s$4idAAag2o8b&nt4_% z3G)efmHFG_6D9jxc}HtL61VvTymD05%&1$LPk^ju-L>#?zfO&dr8YG#6!P@*;+occ z!P$k#g)9lutFS%MPA@ww-OV%T@&{E;EY!)XVh4A4TPr~B~m3(tya8= zNDzle!6iT>OTxAb1D~tbfzX^vNcTdz61t~2mgS(LpL|+?jPtNse)^9u>~i8gNxwWNf8$ZX^TTCba8WP5eLDgbafMS za%vp(E99f`lJ?Rj*F4)LM-tvAcNgwU!S{Wi1Q-s7fp)oEPU1Ec6S?XVDcClklh@cb zksA<9$!lzx$PL6zUSl#*-`ftf$Dbbn^k2S!bvCeQ@)~VIl0U5<0`NY51>oZT30P+X zwv*RfpB(_^)mswEAxV9ACDqJm~s-jcUY%PCkrkwF*GH-L~<3#+|#& z8!)cKIsyI83#C#C09)mTsJqvhH!vLo&yB{+4*T6M01uVQ%=4344FK=&-8YR96LISX z?idin#8IyY!1rYG?*%rCzZu-M7Mt(qt=PC{KnNQX!fvw(BwwL1;jV$WD+8Q@6{#Ci79<#8WME|C02P7&L&X3Tgn9rb4#5HvOC_dOV&xPtaDXs< zt^Bo*XSYrzC;2ufwVk}5-yb_|6-7}<2^x(?PP^T1mobg3lrriP)rw7kEzgQgq9FiT zmS@Ex(GUo=JZn)B)hDojc;vKyf4-e||Nb`0gUm~!x&&bP{G#t%e;s@|?ZHb=M066} z-s8;c8p%)+)gz!;UK5Cb1hlrk@$Wbq$#MJr&1?ST39QB*@aEy!>vwzECSA#$R<^S% zA~uQS2?R$Wh}XWaYI^6eSyc}@w5yN66q5d4u?(@g5^UqG2}}E{XRdQL`3%~tJ+PTK=e!uU7a0^$fPFH zWcgO-{8B`863G)VqflryiM6jq7p!^9$EJhHQD?{Ge%T`$R-0QA*1fzQmFzV4e%XCqgqc%c^-;*+K5yug`vf1)t#k z!MwGSCeF0Tz?P~{0P;OCvnMJE6?|5owT9|R92ZCs@2r~m)}07*qoM6N<$f{&&CXaE2J literal 0 HcmV?d00001 diff --git a/app/static/images/trophies/bourreau-des-coeurs.png b/app/static/images/trophies/bourreau-des-coeurs.png new file mode 100644 index 0000000000000000000000000000000000000000..e46dcb7ef3e0a0671cec39a07810178a5a1482e6 GIT binary patch literal 529 zcmV+s0`C2ZP)So#f>{x-oZ^F1+O6J4P3YqJVbkqf-8?8SP*X@B+!j_aA7@wt90X|%uoMj zGRY{JCh9LI6&V;DSn>Gh6^Gy)&PApqd(axvOhrxO5R zF&G%_Fa16M;B~$JcfhJighznRQjb_wI`s~M$6VLZPob7+{3EVyhjdgWiDqQ z@SX3OZES0>&8f^$zN*vO`(im>^D1+iY@NwVv9@pOIiBV`)f@tptuyVvRV?)bNDy`% TPtXr&00000NkvXXu0mjfYhUhI literal 0 HcmV?d00001 diff --git a/app/static/images/trophies/codeur-invetere.png b/app/static/images/trophies/codeur-invetere.png new file mode 100644 index 0000000000000000000000000000000000000000..c63c28d1e6fe2f7230fdc2ce6687ce5e04f02b91 GIT binary patch literal 581 zcmV-L0=oT)P)_s017 z;o57xtpY@|yrh5k0suHVtQzwlpK}22N(8UKuIq)PX44qA$72Ax za%{}+_x{GgE09DXo8^5i%j;#esbySS)r!kK0E-Gt-^#KFe0^SnmY1CttIpT)VCj9D z!ZHd)?I!?bP#~`d*?eD;HcHXrlJFH^ts(b9;&cB|Kq8}tw5;s365sFSlPCDz!7H#( zjWWa8;w~P40HpWjtQlKYr@<@W9fh*iI%#VsTVD{o0@jX7-cq>Qu~B90Z}_SP(7L z(Ml&rB@X3T?#eZHmqy5+Z^~=a-0{BLyGyQy>$)xipw((Iv1yt?G=r%?uKJG{lQzI- zo`+1d8+qpQ*X|b+Z5TgWdQ)reHp-TJ`fRp12mew#=?1NuxjMjL`$dq zT4+Y9;ZFBsaL{FEU|FJ5h3G)m1dr7lpYeMAhKX&b2>@6XYq}fcUIN30V`CRUG?0KM&aUu4LEPeu#*!0YbMr5hGPd(tzxaPV@~Be;HAHBd3b$ zURrz%=wcW-R6m}0THr0^^+noAR_sCcXns?YDG~Lv;pOL?zEF6*@PL|+sIe9sM@*-pyyHRCJ{e@ zEX#;!=Gk7ax9~m9^C*b~+he6^y7W826R1la>a~CBwA-yiA|k3c&lkS`Gk$d1PtQZAeVHy_LlTML35aVz5_-OK zd~Gu{CBr1nPTEfYLpE6h8VOW&2ymQlOxrx?QTxpcr~Nzby9R-TWXHN=$4|hz!=mT$ zIg+s2)kwrgfa5>zkpHFVcj7q$+MNGBxFaH>;b?O9=`<(Ld5&vQNZOH)6897;jSFW) zJOrd1R*MGgQRxg+R??Xa#}hsQYYuCT%hFn~%6b~+@dQtxHW&=NsuDh#P74mZmw1vKv~a66NTn-VvU4Ux8b#b8JczOE@C3w+%r`no;{8FZ)M?|86g&a*{eVWIY!s4InW}{M4ULrq&;8-( zgNW==$TtVC9sw4TSal7Qt$tLO01Ku5dZ)H07*qoM6N<$f^R?>?EnA( literal 0 HcmV?d00001 diff --git a/app/static/images/trophies/dessinateur-en-herbe.png b/app/static/images/trophies/dessinateur-en-herbe.png new file mode 100644 index 0000000000000000000000000000000000000000..b24d5dfbed25fd5aad492a27e6ca1c42560b232d GIT binary patch literal 574 zcmV-E0>S->P)3`9qj&*M-h&-l2RleFK&y)vAQo}4qaZjGii3k7I4I)cAm|`2B0317&pOUY?|==W$uST#`SRNi0AOQc z-Pdu_L@_t1Y&SkX0K~w+sBQ<-yj@Y+$#ICPek89wOUo? zfN2%+O5T*$tzBi?Gfq;v6QlFnCv&FQr_&)}-_Q&j`<8Op*f;gVCUgVD{#(V6ANEj0isFX>!UI*GZ-HMvxtx+TOv)1ger+8o}DZfcwm#R9EO6{+vaHK8CNd zM2MvBi9C>WF$}|i8R+|dbX}I^9L?ZimRkRiBD4V>c}{2(*#O~+JSUWiY(N@$&QufX z4J@P&Y&Or<^26cXTE5%ut>ta|De6!92HuKdblp0J3>o4kDDtid^Y)I8_S742&O#Is zS0p%mtVq9Y-*(j-5YIxsY_~6SRXrkI15-0>D5xK%jGdl=dx<>9WFj2{Jn|pwH30ei z9|~%h^1$+d>`#$fBdIMMcLVQ2Q6)_G){&M*q-CwPi0D!8hMD>vo z(>_tU25#kCJz2{iyRS+0r*A-tX)SGn*0#jIKcUH|l(ESt^|1+VfXM$=@#F`xSFc8; Sm)h|F0000T&pTYL?!Hi`O=I+Z4%&Z|n3s01j_c~vPA;R#%?4M67~pI@^+ z_wn`uU_FWB61cm6njO>8uIm5*ec#XC*Yis3>+^lleH@Pfou}iJI;_t&&s&5TH`>GmSHjBLJXj8UVn}?ZcmO`T6(+ zJg2-oUrHL+>RKt@cYFfg1zv?+DyH+SA$B{t^+sXdV;b;`>!xjhgSo`6{gtY7T)@3}KGkEpkD7oI@z zRSC-LTI;IBS=svoOIIoAsMZrI*LmuA1gO;2X_8Rq>+1AbtM|z24$Vr{UCK+V?$lpe g#R*XL-ztgv235Umvem$=pa1{>07*qoM6N<$f{Y{NuK)l5 literal 0 HcmV?d00001 diff --git a/app/static/images/trophies/grand-joueur.png b/app/static/images/trophies/grand-joueur.png new file mode 100644 index 0000000000000000000000000000000000000000..4004b23e2a0aa8a8a3a981a5a8c8852aa9d64f95 GIT binary patch literal 509 zcmV4uWSW)<~e06VHF@$ zndg+HgjJwu<~ge>(Om^r%{*sWCAz0T*_r1QRl;}$`l^8K{lhxyA?4%cDc9dV1$f5q z!|O^b5XW(@pVx;gV!Q%>qY(Ymq8UF4F0|t4xvGq-czk{Xuu#Hy1*D@8Whw{)p*##j z0D$Lt0Lt$p;hQyS@RX( z1-#9x{81DYdf~&*Sg>z#CD^>pZ%ihF{WTZ}cKZ~lo7rq8*qJ`T6yUT^0UGBC**w7U zeIG!!Pf$7i?zle`{5zYkf<65{6Kvk*Ip!-sYYM&=Qq2c6{;M+2%T>?ieS*`SwGd@k zHO|ZYy7R;PbWbZzhVcqyP9=)&$aMDuGH7ihgW5dN-W{0?)u{xnVwdIe<}TOY`cnye zGS@Wrbh>Hm4NcS7Tgs-fH}y?Zx&nm#T1Asz)Yjf1Z&ZH=00000NkvXXu0mjfYL)Lb literal 0 HcmV?d00001 diff --git a/app/static/images/trophies/grand-maitre-des-traits-d-esprit.png b/app/static/images/trophies/grand-maitre-des-traits-d-esprit.png new file mode 100644 index 0000000000000000000000000000000000000000..2bcb7c50c92e7ac6d158a997862708f9b4158a73 GIT binary patch literal 604 zcmV-i0;BzjP)yI?f7Sgt-E3wr!+bNdm%CW5>$*rlo6SbC8;wR1AA_?*R{cd;aTAc4mx`N2 zL7?64`0|_0CW;*wiTn~^=BLw9~|_+n)Z_YE`ipiv@t6BxD>q z64@ibZ_L_$y#4?H>3vega`{yn4G+?9cAAr+?V#V^aDFu$#H((bYbu52uk%=TA3^ zZ6YJpY&HP^>-E~xFFRA{uLF=`=1D?c&+e0WwR!>YvlmRY&l;DtA62pkNJRd8$qs>} z6m|Zy=9ziRvJ^Xe1Y|GFTHzLEZ-mW%aVkOSp3tW0b8-K!*!%tdq+ihUpzQa66nmo6 zQO`!5uJ?U1<8m7H`+WexPvWFfPayOg8c9S-p8rtHxZLZQ!jQF3<(Ghz-;+E_);u$; qlP=7HfK>6OKA>VJKo$R1@u@G!sP6>McSn!_0000b??vh~d(r;>d>3gs5<9?8Md7kHBF*E;NKv`N<1^Ry4*1CUo`Kpq< z)*J9l=YVdOF@vK*>fR+7Y002m1v){XGAj>iU0Px$z@7D%C z_x_vbSFOaIr3G%>G#+#72!enc$2|l1k0%Y033m)kYUf#46ZRXRIzRq80002LeJZ^# zy|~m$-02@FM=j>UCIYbd)Tncx0Vno#hOZYDDc#>Qfu0?Y|L~~A~h^~pz zD5<6*K^-F8HGrs^2*XG^uDTDfc`4jCfS9gMi0Ue&+Igfo29UoF4f$sxQ*=9zG|zx3 zp0`y?+^GSiuAP{|dIQGqi4lCdY)aXu+fxG~*d5z+ou{zgz%P?Lpt87{{89h_002ov JPDHLkV1k&j@V@{6 literal 0 HcmV?d00001 diff --git a/app/static/images/trophies/guerrier-du-savoir.png b/app/static/images/trophies/guerrier-du-savoir.png new file mode 100644 index 0000000000000000000000000000000000000000..9dc5c6ebbb300eba180d7a1ac866eaa57b419294 GIT binary patch literal 643 zcmV-}0(||6P)^JZ7xM1E>aNa z7)?0@%|icx4f;c#pZDC|qvyeM`dQ?;m*NDixs|i^ckJ8I1I$ zRv!s@ZGb1w@!G`D0O6E8$14+qXCS(FqI7}V^#$AgZcQw$tXXa!90QbmHFu$9v6BftA``OShR&CliIY*7HEigkQ-M+8b~^ z7vhP`Oiu~F#^o*mz%)xe-H__Kf%XPmw*i{ttS&d7ZS$?fiA-t{0ASoa189#EZs~T# zMtcK}ZGb1=en0aEptE;UrPsAG?F~rVfIRt{)#1Zc%5ISwh(sbnS(ZF!xKgi(=if>Y d!>?6b@(<$|H9Z|!_6-04002ovPDHLkV1l14C7%EQ literal 0 HcmV?d00001 diff --git a/app/static/images/trophies/hard-tester.png b/app/static/images/trophies/hard-tester.png new file mode 100644 index 0000000000000000000000000000000000000000..dec554244e15c54421289e2469dc198717ea4ea1 GIT binary patch literal 541 zcmV+&0^?uijWZI5=UkcRL~? zqIFF_&KofP1196)+|{lV=MDVq#H!WD6zl`4)ky9Wvfci)&*J;u9gDF;%bnSI1D&ep zd0APViL&ifAaC~#RP8{Xg;W*QotfmAH^qGewr&SZ$Fi+66Y_T7K-u*_&vPOox)|M9 zO+@#8`5bw>Z@{#n+zBtwj;tmkjhdbWnr8r&Mg`<8!J;tDqj?5^>VC%d*azqra{;T8 zZUi*f0FdYJs;5^Sc#rC4P~yCSKflN%syj*BCRArKU0%&GFfZ*Fnu@evDVI(ArGD91 fHvroIRx#uYigV>F=F=&u00000NkvXXu0mjfJSF=R literal 0 HcmV?d00001 diff --git a/app/static/images/trophies/initie.png b/app/static/images/trophies/initie.png new file mode 100644 index 0000000000000000000000000000000000000000..38386401e87d4fba056c1e885d2ab222fbff05f9 GIT binary patch literal 528 zcmV+r0`L8aP)B z@2sK7KA5|Qehg5{piT-ylw2_MV*r+$Da{LaPo|>qGi%?V@B;$_P~|h@DY9?)ltM5D zu`vN_tDv`ulqaFLg}6v^2(H#BIvBn+F$|EKC){4+5ApTuH=yuI%>yH+H3|cy#>B2& z>#5@+9PYpchHnhO0I@OQ<`#%op456^#EeQ1-4>#>#wNBD8gV0YB)3N4Aw=Pb98Pmd z1S2m7$OVjyp)@gfGzMURRy8ppFyv!^!(?6kWzRaI3OfwC+c+ewm)aT#ola@GxEh8i%&008JTJn|ghCgL+d z5#`Wsyj>f4jxQ7O8K@gr-wys25d;9O`4_vHg6(c1AG+X zxgkZ`w+Y*57_WhP2W8~XpI)3Ue1Ck@`aL&D+tC`>mKtcZvGrw&{QKRt(}njhZUN{` zNCa=-PY!7BDtVtL1J55{oyRTqb^!buAS4qUUMGS#Q0IW_{k(6e&)cA!AQRym@E!Tr zhsVzL#p+VXdMH-djt;7U>5+bzY^Z^r)=XqnBa=;boSvfuf z93FY;p2e(h008s(VQc$r<~Q<0d=nQ O0000WP)@74iXF^8LB}VOtM&UXqpBQ zTQDHvQim=|Dw%?Ga0#_w*DRS5hj^6l^F90CYf^bh|5NVW`|i8k|GRtdE*WaK+iiM) zy}dm}_W69h*oF%|v3iEM*lmM)lutZ$+ z<#O3@{r>(w0Mpac05qFT0IJohEq`3kz>w1_B$1TJ*XwmfzqGUjKqiwhT%Ss%6xnX% z1%u1L_V%_Sd%a#;>vhKF=H{HZ;eG~eSD{ODsmUG~w z$lu@iXlvt_cW)YAfBf`0V4aEnXTWOYzr9G>+W7i|&U4_jOt_u_(<(GRJ`RA#<1y5m zo%#3Q>xS0_vr}sI5j#2)_d<7o17?a?ECw9+yv1Ts(M#Rdp9ep_MgUk??nEvW3Mu-<#jv3r9g>T`j*bAh zJT?aW-DA6-0m)`P7jn5A0EvXXGkrDdEO&HBq-SPk6j{(eRY*SQOxTUQ;D$y(sZ>&A zJqOGnIZ!ARlsQtI?1cmYEIm6KLd_`C;oYGpvc#z zrT{2zYyfa+bQFMBYir7Vk{bf2kr%k00mnID2EDV>asErahORRpIRCebMf?VC`y($C Se^BTE0000Z+NW$ literal 0 HcmV?d00001 diff --git a/app/static/images/trophies/membre-d-honneur.png b/app/static/images/trophies/membre-d-honneur.png new file mode 100644 index 0000000000000000000000000000000000000000..88c0bf31e714dd1e2cc37fe02406ab6163273e13 GIT binary patch literal 575 zcmV-F0>J%=P)qkqu0=CL?IUqa=NQ2XbAC2 zR!fjmFp}FdJ3Bk$v3vI~_rCdN?*H3w=DxYITrQWxK&y^pGMok1H5y-TH2NQ?(pIA3 zo*u3E2B#S)biTqF z1K`cw%X=;(QM#E^NjRjc3E{j~uWs5muda%ZfRJ$PHuITCvg-uR6IR7bAgILdBYXEv z6?p>M=YUMNnNa{5J7@Bqd!2uDKmN^Z89B5uZHYjE1PPgJIWH7>0`G#y%lZz&7tH_w N002ovPDHLkV1jUU46XnG literal 0 HcmV?d00001 diff --git a/app/static/images/trophies/membre-de-creativecalc.png b/app/static/images/trophies/membre-de-creativecalc.png new file mode 100644 index 0000000000000000000000000000000000000000..ee9cbbaea4959abfc0c4e17e3f215c6e6146ecc9 GIT binary patch literal 564 zcmV-40?Yl0P)Y5Qd)>LDa^Gph5&|BUmIU#73~NuohAX))sPKjWn*DwkwUAWMPe_A zR)VCEAX)ZXPnTw;Sa+jzbSruh%=;g+iehX6Wn5tbZtF zn}8m9UA9T21Vmnu*JX=DO2BXAb%iAnc>?`GZj z`RObGYU&k$$G2esUIttJldZrrs>Y1wGbIsU0%0qxEqRfM9|5J5>kYM9t!K{sRIyle z9hW6sd|j-~(@*#3Q7{|$td_#J%$@mQ=9_;0000NklkPH@tiVhK7Qwb=DScM1y#i9k3PK6-VrC=8a-NZ(m zED6+tG})a=mwViE!8ZE_d%P?|whNpZD+HCDv}Y+w?*8 zdfigaWHS8-!?wOW^*<`sYXZ9Sy1bGoj15`JjrH$9M4%%l=XIHq5a)}9aR8c)4*=YM z{uYP`xOZNc9SJArtM7jTTbY1g=XD7QQ|Cp2C$QaZ1>N~aAOHAD;95$h;MRFj;0YM_ z0p0oO(kuY4%FjFn)@N3?&Wi$1z_AaQjyCTK7XV0HZvwFTdjNpXt!V&`tg7paOGN<2 z3MEVZX5%T)aen6UvQgad5^y`tj}9dOh#gu7pz&)L0N-}1>x)Y{01naDG< z0rt*I9(FT!@Cjs(?gn6Z&pykI%MZ$Z4P5!5jw_|BfODI-BN2Q8a+1p)24HY_1c14l zs?GMA#LDDJYXZqLuIlR~f=@u&-kk~M%&l|khRlqnBx1L%w; zcbT%1kO)2jIq^%PTCD=mYPA4}$K#up^LcO1>k2*r>CMunOi8f+nB_s)k(U5`ZQt!0 zs8*{19TI*Oo>53nT$7kz06OdX$;=f1cHHP5Nbdt)72cUxWJ*F`&(F?Jso!z2YoJsr z2G$rmOrHdNT)ZCW2&t~K%_h5v~#AbSI&z9 zPr&yV8n16uBCmU^qKJT~UtcMm6cNzXuP^m>iU`;#`nQUq{sE`KD~?wXdL#e<002ov JPDHLkV1jUzO{M?< literal 0 HcmV?d00001 diff --git a/app/static/images/trophies/papy-casio.png b/app/static/images/trophies/papy-casio.png new file mode 100644 index 0000000000000000000000000000000000000000..961eea580b69a8e7c75a85a779bbc4f86352e0de GIT binary patch literal 519 zcmV+i0{H!jP)+L-x$-{uE z1q)X3qRu;5#fN+hVD~N($c{Hc;UD4uj8z@KTLudMcVq)-8bZ8 zVAKNx4G87|^fZXG6uLJ9h0l8XI!W>{aPcESC!v5L9|Jh+0bBsRhNU(jwZF@UqsB{j`&y#9zJi~Tj_ zu$qe=6EJt+iizPD1GFyZ$pyG#V)(?sU=4Y6fF2V=KL)53^2Zh|B1ye}XAMR6!Q4Ic zV}M!)by66jZz1w?Mq|q}Br?W>kXcwh*N?HnFA9h#Q$Bxitz8Aqq$2aGFaZ7{_wvmcZ%;fVkM002ov JPDHLkV1l9D)(Zdt literal 0 HcmV?d00001 diff --git a/app/static/images/trophies/participant.png b/app/static/images/trophies/participant.png new file mode 100644 index 0000000000000000000000000000000000000000..ebf3694458131e4e4cd8848e3dfadcd64cf3e055 GIT binary patch literal 646 zcmV;10(t$3P)J@9afm4(aT6UCVg@N` z7b_|Vad2q|5u_BfDCa6D#NqN&-X(YM-Ft~}clk{B{@m|(e82bp+@C_P*XuC`y4|i) zE|<&WNW+1#ME#ExM(sdY`7oQFmnhzC-;Zriy#ohF6-cLinDeuNl=^3#9RMC|eKv}ddIz*)KzGl#cXksctk0YTV7k5xz>#WIX`e2>Qu69{ zvDtONcAhuoV|xvNvp+Z0`u-TG_MOo=kv#{-t-K&(;7p~h)PE>05A7f2M0OmoRsQXx z$BFvaSMLCDrLX+a((&LzO0}S#Al@F;A!iRdk$wkU@A=ifqNaR(Jr4{jFGxN9Edch4 z_lCxi>rTG|t^q#1yRMX*E8mrJqj5x6dUKn zg)QLUSU6S+>VNwk0DkzvvvSnEFJxyHk^@sG!g$}}6>qhkE9GYM8UTw=F9PslNnJ-w zl^3$(fRNOQjg6Mm1?UtP^0ONiOr7w&Mr?a{9gs0#N`9Zn1l!q3h?<2=^XkaH1HxZL zEZ@i_&SOY^9I&NOSTgEo`xSHIfa^-^`u#Zd4p@IDK6mr3Q)1V*+d_UFh(fnwkNTg9 gi33qg{#G&M59qqZA9ma%DgXcg07*qoM6N<$g2XT|cK`qY literal 0 HcmV?d00001 diff --git a/app/static/images/trophies/pedagogue.png b/app/static/images/trophies/pedagogue.png new file mode 100644 index 0000000000000000000000000000000000000000..0bd30dec152f09f736c51b80c1b571c6d39f936b GIT binary patch literal 547 zcmV+;0^I$HP)YLJKut1-Bk%=45%dxgvVjDJfG<)6`;YW( zuYI?6BzNo2Z0)7j<^As6Yws2%Ns?dzj7Fo>alKw&#BH#$kY4|hNHY*c5dc6o^E{F5 zGV+qLO@wDaM&5cn91fjsT$YJ&4M=3fiEHE~MNNcjz&hsRI8GhU%e*F**8nLRd5Nou z@C<0=RoJp%PH7`R;=O@YtwE~?66V0+-J{cuulIH{`?FT~a1B^z7dd9FY#m<$m^LBn zN?!lo8HpzI3!d~=)G-s+vEjyI1k0N8VY@OS%fpzIENBEqg{bwI02{u^L6yXFGN ztgHv0F9!gC{gdC>sNHU-+PmG(%zj)6XBOg@c}+;x`)+kWk~j8)tHkOXnP!5K(P%Wb zGusD)Cjj=RQKG#odv8Fk12QMH$Z!^Vy*dK`G@Cm!`>WMDGtWz`ktg9AAdGG zDAx5M?+xUx%uQXOtQM5DDzUsPbH1&KlI1Zlxj>vR`s`Hg&=fU5TuoHFlw-_wAaD1Q lR6F&Kn0IJgss62E4L-+O!Xsqw3B^! zHn5xhIzMD@{%<|r^=38x*L95B&_R@|?vR~a_-;K8S&wzIFNL&IYc=8~5 z1Bb3B#!lX~&vWuO5UbjJZ`Q``^NVXDB3eFNI$b|`17a20Rkh)LUrJsYJLP9UJ9+eJ z8?Jqxo5;sNtZF0STWvTnk-mYpZ70nKq-rC*SwU#>oa7BSkA-aTI=}h)G@iFwF0^h* zL>U+eu0pn|!=DAMJ`b{~Lch-devz*U+qgbf@*sHw-lI|UeOtYcojge1fcPG;JrkHg z@tM`@>QSq0qjpFnZ@~GxP*qi1k2g)D(jega^*VV2-eV!{q&dFp2KgI6-|zc=w14Uh zjuX0Kle~d{vqBR}F#yUcWgumx{;yFt0Ls5r9Qgr-53C)( z&YNUc`@PuX$!0Z8(?kWZ);eQjOo_|TQIWI$A*8(8cOSZhVqeX%znWpS&J58s?<&jA14J#Jr|aj8lyg_~%{fOJ34jhvj`IAfkP zh)vuFOw?~+9LK1R?Dp<~h=|sg8zR!LD!HiMz;Wsc{wsMJv`@(Trb3kca)8H@k`002ovPDHLkV1muH$=d(` literal 0 HcmV?d00001 diff --git a/app/static/images/trophies/programmeur-du-dimanche.png b/app/static/images/trophies/programmeur-du-dimanche.png new file mode 100644 index 0000000000000000000000000000000000000000..3fc9680f84eebaa04453ab2710e8900560af97e4 GIT binary patch literal 490 zcmVSsQ1S(2%g51D#Z~}&kk}e&S15k5G|7yKf zN|~Lfaz!Fs0@U&2*-RVYbF*o+r^}_)3-l!s9sxMdIc^e&+*g%od|lU8_lHLS8Y>5& zEX$NqkpM4l9gsQ>!Fj5#B*G^^S6Dcf=eg4t;o_RsiEs&Udz-!l7Egs}9Q5*h+iH7H z;E;BhoTqImiPMv*)&1`uU)p}}3G8y9>waG9Jm$XC`NiF3s~^?Le*#5OXseL4T2QC@ z#xuqBp1`jvMAdc9a#aH29E7B~h($ literal 0 HcmV?d00001 diff --git a/app/static/images/trophies/roi-du-pixel.png b/app/static/images/trophies/roi-du-pixel.png new file mode 100644 index 0000000000000000000000000000000000000000..875742ef602aca86183c208ef80681a0bf86ada7 GIT binary patch literal 666 zcmV;L0%iS)P)ONqq{G*du z051C$W93KXA`tb3>F52i>(xJJ0Brp{Z&|PR4s_fH(kd@}{e0Ru_5*M{^DKVD{Fk=% z-#rIhDgSY%0KnAJdduqzhwqG@b9WptRo<3Lr2;@Un~jzKZM1z|^bx{$z*c$FwqM8( z0dUeN7bjHqH^%@Nda>K`dbkdB+U6_2F968&#mhzcH`C*>^7Z98AR2Lng%3LbTsF?d z2|*kQ&w);rmpP4!PWhwiFCbE06i-6!3*I}>oQ=AU^GV9TUHc9sE3b=clG*w1K&e!6 zniIQHUiwrfx6<}L?;UWK6Q@;Pjbcg43*I}BIttk;uNyB+6&HeuLd`xP|H#ydv~Av2 zarHd~?;X&t3#m@Xh$tNHJp>>#Fbvqod0TX=+u=GOh!fK0-!G2<(EB70!0xB|s=`ex zFNE)atW`=5J2qK&;$UwT_%8$NFskS<-O=&hfopRiHTM)G+C**s2LP{&gHB(_b}ubF z2ZX_=695$Qb;WNh&L#&{0 zs=rH%_YO2iV%`3&?M}MsPQ5F_alkeAU#l4M4}X^`b`>!*H2?qr07*qoM6N<$f`)N9 AAOHXW literal 0 HcmV?d00001 diff --git a/app/static/images/trophies/romancier-emerite.png b/app/static/images/trophies/romancier-emerite.png new file mode 100644 index 0000000000000000000000000000000000000000..631e9e594bc82b6e0759ab14108e79fe6847e572 GIT binary patch literal 526 zcmV+p0`dKcP)kzay-Ag_mW;)Ns=U}fXQT%I*#MGipOB7l2&V^<=TKuUgFwB zV}R(AmzbK^+&#%W-xx4WUZOLhN`7m5AHX6TD4V=QnqcxP?e)z2+pB8;7SVv~R6UrH(lV zt}k|S+X>GAlkfFHyx z8}o!F{5LQjj}u^i%+tWjN4|+}^p`vh5S0nlyUz3DRe|o#vCW z{%P(5s!E=OV?f2m!~awnqN|eL8<_hh<{VJX35mR~>M<|z-hlPHP!!#{?8gk#eS`1~ zn6AjS*zTQqZ$SCWoUZyvY^zV%UCVF{m{RpFrHaOYq}i!A#JK^|{9C0Uzv2doQZj)fmgz(-^9kIoo)*&es9D9qhI+MYFO8Gr3%dR{I)#|LygnW zp~_Jk5=tB3mFJW;u|EULIM$jA5fPoIDQo;)__ z(h{ROZnGC)4Z2i0Jw?n4ZNNM+M5)RQUU3qrG_?+rw|A8go*AAgp|_9Qt;kyU3uR75`GPU zt)&pBdjm(@&Ap@$@RLH?lNhv4rIDGq3Tq;N1^`TyN}=V;{iMnRzXq&tM%JE3PftJg zJjbsAU^Sst*gB4z(2nQd0Ix`E+#3+TnUm0ZxAZ-r(Y*olFErM4C}m<`=bMFb{teVl wA#IH$RUY^^0C-Qb1UMn|)R_jR#Q*>R07*qoM6N<$f_N;qBLDyZ literal 0 HcmV?d00001 diff --git a/app/static/images/trophies/testeur.png b/app/static/images/trophies/testeur.png new file mode 100644 index 0000000000000000000000000000000000000000..22ecb265994999300ae58eba5b097c31e9866921 GIT binary patch literal 401 zcmV;C0dD?@P)1N zn;O^s^50FIrmeCpOQ?Z7&nxXDN$R)^{M2&R25E&>fJUAYS_xGEu|=K|N(ohf8+ppR zN_@Tof1^n)<3Lk1^A7+56wn8VO`94px46v4Lze&Uc=oyueOKiv z&@|iA!O3qvnmo13SHLzt;5*}+)27I}B3}U{P18y{%d$$lsa}X8PXTUCg#JZQ006-6 zbo$c&y5Fo z#sQn3>+xLVDM04~uC);QnIdbln{wM^r^r*lge_-%XL4M=Z${=CS*=DrdAl0*MQfo4 v`gJ-sxVZXGHsD|1(MQZ=T&j;op1vmMC`(`4|}W zz(50{^8k99Jh1aO3jg9q{G|*bdAYaPOCdsF$j1P|dH@}u*Ra$Eq}JFYCkAkZeEQ<; z6ggmKtS44+Vq;?X#{i*_KRdCOA_o}fH#0CWkRKC6J_c~s1Ei+;jn^NMWU;@d99DDD zV*=(5Trn~HVu04=Jh=c@ObnkG7_1?W4$xy_=*IxHLjKr-MI@>B@2sK7KA5|Qehg5{ zpiT-ylw2_MV*r+$Da{LaPo|>qGi%?V@B;$_P~|h@DY9?)ltM5Du`vN_tDv`ulqaFL zg}6v^2(H#BIvBn+F$|EKC){4+5ApTuH=yuI%>yH+H3|cy#>B2&>#5@+9PYpchHnhO z0I@OQ<`#%op456^#EeQ1-4>#>#wNBD8gV0YB)3N4Aw=Pb98Pmd1S2m7$OVjyp)@gf zGzMURRy8ppFyv!^k}@P)=aK|#bp@MA4hC$YG=6ol&9 zK?QNu#o6H;IFd%K%l+t2>`%GpyRY|9PSgKH9!u~7xN+q z__;^~3Ue6%z^K0q0QhW_nfLhm+D#ikhX6@84(AD^=z+dSHW&M~8|lX3Jb^!JfFyH* z>RYWA0N`Y^z_jb`Ld(?}03e&qb{$VvA0Gm$BIlzLkx*4~2*{jYy|}gt;CN|XSg%SV z{sh9Df7mYz+f_Ba{&PZ`l5n0tO4gt|=daptS_9`YW5RxU5)_AwMEnRuz0aFUMj}20 z{;Tu6coOat=#}%$({ru&bCn&d@hEQh3G}L?ilw8ba-RULX4|#!a=*fqOXUxyoX;WZ5XM_@2Zh(>3A0cXzyAzhug~YaltLd=6^8~d2q2Wch%ciou-5wB-i9fMT_xUh6Pv9GzXyG`1rN6HL0000< KMNUMnLSTY {% for t in trophies if t in member.trophies or t.hidden == False %}
- +
{{ t.name }} {{ t.description }} diff --git a/assets/trophies-generate.py b/assets/trophies-generate.py new file mode 100755 index 0000000..af6bd2d --- /dev/null +++ b/assets/trophies-generate.py @@ -0,0 +1,35 @@ +#! /usr/bin/python3 + +from PIL import Image +import os +import sys +import slugify +import yaml + +if os.path.basename(os.getcwd()) != "assets": + print("This script should be started from the /assets folder of PCv5.") + sys.exit(1) + +# Read the list of trophies from /app/data/trophies.yaml +with open("../app/data/trophies.yaml") as fp: + trophies = yaml.safe_load(fp.read()) + names = [ slugify.slugify(t["name"]) for t in trophies ] + +# Write trophy images to /app/static/images/trophies +try: + os.mkdir("../app/static/images/trophies") +except FileExistsError: + pass + +# Skip blank squares in the source image +img = Image.open("trophies.png") + +def trophy_iterator(img): + for y in range(img.height // 26): + for x in range(img.width // 26): + icon = img.crop((26*x+1, 26*y+1, 26*x+25, 26*y+25)) + if len(icon.getcolors()) > 1: + yield icon.resize((48,48)) + +for (name, icon) in zip(names, trophy_iterator(img)): + icon.save(f"../app/static/images/trophies/{name}.png") diff --git a/assets/trophies.png b/assets/trophies.png new file mode 100644 index 0000000000000000000000000000000000000000..c4a7c170a8d658a848a26ad472088e0e1a1190b4 GIT binary patch literal 9813 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 E0FS+l3IG5A literal 0 HcmV?d00001