From 92907bd5c14281e670c53ab4295c55e08427d69b Mon Sep 17 00:00:00 2001 From: Roman Date: Tue, 11 Apr 2023 22:38:48 +0300 Subject: [PATCH 01/22] *** --- .../migrations/0009_alter_authuser_avatar.py | 18 +++++++++++++ ..._options_alter_subtype_options_and_more.py | 25 ++++++++++++++++++ dnt/requirements_1.txt | 1 + .../templates/user_profile/games_list.html | 19 ++++++++++++++ .../templates/user_profile/leaderboard.html | 1 + .../templates/user_profile/profile.html | 19 +++----------- dnt/user_profile/urls.py | 7 ++--- dnt/user_profile/views.py | 26 ++++++++++++++----- 8 files changed, 89 insertions(+), 27 deletions(-) create mode 100644 dnt/authapp/migrations/0009_alter_authuser_avatar.py create mode 100644 dnt/questions/migrations/0005_alter_category_options_alter_subtype_options_and_more.py create mode 100644 dnt/user_profile/templates/user_profile/games_list.html diff --git a/dnt/authapp/migrations/0009_alter_authuser_avatar.py b/dnt/authapp/migrations/0009_alter_authuser_avatar.py new file mode 100644 index 0000000..88e6818 --- /dev/null +++ b/dnt/authapp/migrations/0009_alter_authuser_avatar.py @@ -0,0 +1,18 @@ +# Generated by Django 4.1.7 on 2023-04-10 21:38 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('authapp', '0008_authuser_current_lp_authuser_division_and_more'), + ] + + operations = [ + migrations.AlterField( + model_name='authuser', + name='avatar', + field=models.ImageField(blank=True, null=True, upload_to='users', verbose_name='Аватар'), + ), + ] diff --git a/dnt/questions/migrations/0005_alter_category_options_alter_subtype_options_and_more.py b/dnt/questions/migrations/0005_alter_category_options_alter_subtype_options_and_more.py new file mode 100644 index 0000000..799112e --- /dev/null +++ b/dnt/questions/migrations/0005_alter_category_options_alter_subtype_options_and_more.py @@ -0,0 +1,25 @@ +# Generated by Django 4.1.7 on 2023-04-10 21:38 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('questions', '0004_alter_question_options'), + ] + + operations = [ + migrations.AlterModelOptions( + name='category', + options={'ordering': ('name',)}, + ), + migrations.AlterModelOptions( + name='subtype', + options={'ordering': ('name',)}, + ), + migrations.AlterModelOptions( + name='type', + options={'ordering': ('name',)}, + ), + ] diff --git a/dnt/requirements_1.txt b/dnt/requirements_1.txt index ae209bd..a6f31f2 100644 --- a/dnt/requirements_1.txt +++ b/dnt/requirements_1.txt @@ -7,3 +7,4 @@ rsa==4.9 sqlparse==0.4.3 Telethon==1.27.0 tzdata==2022.7 + diff --git a/dnt/user_profile/templates/user_profile/games_list.html b/dnt/user_profile/templates/user_profile/games_list.html new file mode 100644 index 0000000..3afbacd --- /dev/null +++ b/dnt/user_profile/templates/user_profile/games_list.html @@ -0,0 +1,19 @@ + + + + Games List + + +

Мои игры:

+ {% if games %} + + {% else %} +

Игры не найдены.

+ {% endif %} +

Назад

+ + diff --git a/dnt/user_profile/templates/user_profile/leaderboard.html b/dnt/user_profile/templates/user_profile/leaderboard.html index 2ce1426..a08fb7b 100644 --- a/dnt/user_profile/templates/user_profile/leaderboard.html +++ b/dnt/user_profile/templates/user_profile/leaderboard.html @@ -23,6 +23,7 @@ {% endfor %} +

Назад

diff --git a/dnt/user_profile/templates/user_profile/profile.html b/dnt/user_profile/templates/user_profile/profile.html index 52387ef..626bbb8 100644 --- a/dnt/user_profile/templates/user_profile/profile.html +++ b/dnt/user_profile/templates/user_profile/profile.html @@ -1,5 +1,4 @@ - {% block content %}
@@ -15,21 +14,11 @@

Опыт текущего уровня: {{ user.current_expe

Уровень: {{ user.level }}

-

Мои игры:

- {% if games %} - - {% else %} -

Игры не найдены.

- {% endif %} - -

Список всех игроков

Пятёрка лидеров

Список друзей

-{% endblock %} +

Поиск друзей

+

Мои игры

-

Выйти

+

Выйти

+{% endblock %} diff --git a/dnt/user_profile/urls.py b/dnt/user_profile/urls.py index 981634d..e771d9a 100644 --- a/dnt/user_profile/urls.py +++ b/dnt/user_profile/urls.py @@ -1,7 +1,5 @@ from django.urls import path import user_profile.views as u_p -from user_profile.views import UserDetailView -from user_profile.views import leaderboard app_name = 'user_profile' @@ -9,8 +7,7 @@ path('', u_p.index, name='index'), path('friends/', u_p.view_friends, name='friends'), path('users//', u_p.UserDetailView.as_view(), name='profile'), - path('users_list/', u_p.user_list, name='user_list'), - path('friends_list/', u_p.manage_friends, name='manage_friends'), - path('users//', u_p.my_games, name='profile'), + path('games_list/', u_p.my_games, name='games_list'), + path('search_friends/', u_p.manage_friends, name='search_friends'), path('leaderboard/', u_p.leaderboard, name='leaderboard'), ] diff --git a/dnt/user_profile/views.py b/dnt/user_profile/views.py index 16daba5..db16857 100644 --- a/dnt/user_profile/views.py +++ b/dnt/user_profile/views.py @@ -69,18 +69,30 @@ def manage_friends(request): return render(request, 'user_profile/manage_friends.html', context) +# @login_required +# def my_games(request): +# user = request.user +# objs = Game.objects.filter(players=user).order_by('-started') # all() == filter(players=user).order_by('-started') +# games = [x for x in objs if str(user.pk) in x.players] +# context = { +# 'user': user, +# 'games': games, +# } +# return render(request, 'user_profile/profile.html', context) + + +def leaderboard(request): + players = AuthUser.objects.order_by('-current_experience')[:5] + return render(request, 'user_profile/leaderboard.html', {'players': players}) + + @login_required def my_games(request): user = request.user - obj = Game.objects.filter(players=user).order_by('-started') # all() == filter(players=user).order_by('-started') + obj = Game.objects.all() games = [x for x in obj if str(user.pk) in x.players] context = { 'user': user, 'games': games, } - return render(request, 'user_profile/profile.html', context) - - -def leaderboard(request): - players = AuthUser.objects.order_by('-current_experience')[:5] - return render(request, 'user_profile/leaderboard.html', {'players': players}) + return render(request, 'user_profile/games_list.html', context) From b3b7c90c7e1ad30e1d5afb7344479236c6b27fb8 Mon Sep 17 00:00:00 2001 From: Roman Date: Wed, 12 Apr 2023 22:57:23 +0300 Subject: [PATCH 02/22] finished profile --- dnt/authapp/templates/authapp/edit.html | 12 +++++---- dnt/dnt/settings.py | 2 ++ dnt/media/users/avatar_rMO7Sgc.jpg | Bin 0 -> 20090 bytes dnt/media/users/doom.jpg | Bin 0 -> 8709 bytes .../users/if-union-pay-2593673_86618.png | Bin 17327 -> 0 bytes dnt/media/users/{user.png => user002.png} | Bin dnt/media/users/user_7fBqBIR.png | Bin 20918 -> 0 bytes dnt/media/users/user_8GAE07v.png | Bin 20918 -> 0 bytes dnt/media/users/user_Nj1oBxZ.png | Bin 20918 -> 0 bytes dnt/media/users/user_YpxxOby.png | Bin 20918 -> 0 bytes dnt/media/users/user_vtbvLzD.png | Bin 20918 -> 0 bytes .../templates/user_profile/friends.html | 12 ++++++--- .../templates/user_profile/games_list.html | 23 +++++++++++------- .../templates/user_profile/leaderboard.html | 19 +++++++++------ .../user_profile/manage_friends.html | 15 ++++++------ .../templates/user_profile/profile.html | 18 +++++++++++++- .../templates/user_profile/user_list.html | 16 ------------ 17 files changed, 67 insertions(+), 50 deletions(-) create mode 100644 dnt/media/users/avatar_rMO7Sgc.jpg create mode 100644 dnt/media/users/doom.jpg delete mode 100644 dnt/media/users/if-union-pay-2593673_86618.png rename dnt/media/users/{user.png => user002.png} (100%) delete mode 100644 dnt/media/users/user_7fBqBIR.png delete mode 100644 dnt/media/users/user_8GAE07v.png delete mode 100644 dnt/media/users/user_Nj1oBxZ.png delete mode 100644 dnt/media/users/user_YpxxOby.png delete mode 100644 dnt/media/users/user_vtbvLzD.png delete mode 100644 dnt/user_profile/templates/user_profile/user_list.html diff --git a/dnt/authapp/templates/authapp/edit.html b/dnt/authapp/templates/authapp/edit.html index 23cdf4c..bee1c97 100644 --- a/dnt/authapp/templates/authapp/edit.html +++ b/dnt/authapp/templates/authapp/edit.html @@ -1,8 +1,11 @@ -{% extends 'authapp/base.html' %} -{% load static %} +{% extends 'main/base.html' %} -{% block content %} -
+{% block title %} + {{ title|title }} +{% endblock %} + +{% block body %} + {% csrf_token %}

Edit

{% for field in edit_form %} @@ -19,6 +22,5 @@

Edit

{% endfor %}
-Back {% endblock %} diff --git a/dnt/dnt/settings.py b/dnt/dnt/settings.py index 85ffa83..25cb1d1 100644 --- a/dnt/dnt/settings.py +++ b/dnt/dnt/settings.py @@ -74,6 +74,7 @@ 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', + 'django.template.context_processors.media' ], }, }, @@ -147,6 +148,7 @@ MEDIA_URL = '/media/' MEDIA_ROOT = BASE_DIR / 'media' +DEFAULT_AVATAR_URL = '/users/' # Default primary key field type diff --git a/dnt/media/users/avatar_rMO7Sgc.jpg b/dnt/media/users/avatar_rMO7Sgc.jpg new file mode 100644 index 0000000000000000000000000000000000000000..22fe548e7a4293f64818a50690535f42cd826e00 GIT binary patch literal 20090 zcmb@t1yoc~)G&JKmJ;cb0VI@?juB8oM7mQ_x;sWhLWvO&5D-SBr6h+&a%iNxOS)lz zVR+;BeeeIi^{@5T`rlh`-#K^oy=R|$&pv0beb0__H+{DZP`p%9RRXZEumBaz0o<(s z4`28@*a3jLI=~A603oK13c$f&SeWBK;BFQBk*cDig{HQKlIp7$7yi$nIiEM1WtTBW~nBwh; zc{!%THW>WA{eR;A|8T4S#AE;Ap1RtK7@F@G{E_|tz^(oV?&t09jiKrJM{n)!`46AR z;4&`GKL6hJ5B`k_sjaJ?4(8twQGlHvB+dZ<=ktHxvq}R1 zcmx2@&Hnd2(02eJ{{R5B!|rc9-~2~sa4~0WJIw5!6aWC35dcvC0RUo?|GT6A-S)rd z;{SnHHcT5P44-b8!ya%3Yymbv6>tTtfhQPD7!U-60I|C{KoP*k!ut37FTlaW`3Ly8 zxHxzO_yh$13Ly~*5g{QlAprp~88I;lDFz6L?vay`-us9Dd&s}$|5{;wq=W>7|0w?7 z!QF3wk`Pz`7ICm10@##TIFwj-od7Fl{_rre|4;n?3$U;X(9+Q} zaB^`!;^BQNDkd%=DW&-Qg_5$0>PsD6J$(brKwI0`+S$K#aP;!_@%8f$2n_!a5g8Tz z@l#^bm*kYxuW9K&a&q(X3kr*VR#sKl)WYlP8`?WMySfoQy?vu&;}erp(=)Rxt842U zn_GXkcaBd^&(1F{kyqFM_`(8k{*$f$#o7PH7bS)-Y|I?s68z%}3)>G33@eYXeI%-8-FF=;nwC(`X?G?AH^Ts>icS_kBJx=`m$cWQ;oW!}x z+E!WzbY`r*^>o|s4hVZJf14@82Sc9yC+UWRY8Oj4(QJ?TsM!!LntrT(>2&u$=v0=f z$|K(00Z@~26p`b>sXYDt+b_}t)u~?L8Z&e42ky10QQPk0kPa!NDHM6$@bAs#xp#n7 zD=iYI&4Tglru-vANa-CAWkVWq;Ig>7IQfe8iE54#=~2{Nv!=-Y&>szgT?<-Bn;44v zMj54WOb{7N{kS|lltZ*6eK9USCMtxy^Fim9PjTHmn;kz*^2eyR@w&Jo@s7zn^0O*+ zea-eSoPyfmqsw=I zjy7y2seLD)w&ff%98h$#pRsMaS)-eQ41{pdl!4ThkVH&&4ZNmY6=f}MR92AAI@8gf zhH2-A(76alKZSINAr0QTaUHTu5rBspw@dWg*5c&x-qCf7z>11>`~yr;Ep7wSF0SbD zphvz>HyTFa@Q=(IsLJC!Bl?2|Vp$>0=I0Hyh@2!!UFu zZCO7Td+O;(eItW3Wkp{86QIa)dCQB$p1fuy-5Ud!8*u0#`pIpP94BH0ioY$+Q2Tu( z;7oTS)7V4P<>89qn#mX(N;)5fiZ zG3J))(FxZf!}pZcTe5}%=S7`pBbOo;jfK7(yU(7<`?(*-h1-Aj_quGh{6OX%Q=3lQ z0oKrWp<+k3`x~&2a;!^Ep{$KfwO>kh*i&X#7shWCJt@LJFEfQF!M-jkWdOOMQO+-= zZy+zP{Vra8Yzn#&Ms~dLP1HX!hr6wUE8oAqk*=E@I#6$xQ;zJJ=nd_3hHNeQXaVj9NZ!=^1F4@UNp&p#!_PpU^vNFO}SsZNZ6F{ z#h|R;AQWg;CktYfTZzA0XQ28;c=_9^=F$t8Zw6OwLSXT|tmW89TnZJosZk4Z+hguM z$s2{gt@mXJKnV-}u7`tlwe!ydBQmUq;h%B(R3GSGGnWYV<%WKPv{^zdp=9X!MG9CK z!&9+z`%Vk;=NSTPrjIv@i)GZ@Jx-thW-jejpgY4eNsQ;zLDr(;jtvdyjeNj_-blS% z_V?FYu8x1J2>x)Glkz8GfhcE$UDROD>gqnFP(!rx2C zRrh!!$2KjbrzvtFQs>@@4Kg#zCc>ZETjz-D=Ih&t2~iE`QFJYgR zyk2=IOZ0MAk8_z<*eBb@ zGrk?H;2J*oWz4(j9VIf|8}4M{-c7`}GlEUy#*+OLTBl;MHAG%e)E>?qfV+Eqh`P_Z z>UTjK;WCL(7+YX8Ii{I^{ zTMcq`DL&(BN>9$yH#Z}H9Z#<$b1LN1vw5^L`Rnh!?i2WYlW{MHL-sa`8PZ<<;tkUXzD1Sy_602Cq)Q%DKNj4? zy~xdW!aHC*+C^2K>4C5;LR{?{OP_&?y_np8ChN`5TdFp)e$THq*LD?nKu8dYpINk! zf#|+W@CvJc2F_zMG;pQMlEn2s`?-S+5)iyHkU0u*8iY8~;H(Umf&X&QqCcfK3uc7W zKZfHJn!>is?QgW`hCBMr;_4s{$`c-U0Dt~v$!;(y$8pw=6ykxt$x~DlsYKob;x34n z`!i=M8`HI{tUF*uhZ($KamI-oKgGH=8eRQIW6%zN@q?+~t}&Kg_4z^=)6(TE8a(;M zu-nXw^y+V@PtmIvAibN%ErR62KDQ3V*iRc@d~-$)Q+>033anWDB2Qs_=h1twdOhw7 zpG(pP5U&g_6>TsQ%=}pc^B*XEOKarfjEx1Md0n0~^ivaL`X7IUlMI{r$sSVAeLG#p$ zSvKXZ%_sUb_MAj+t7D0E!ApYl^n}eA`PzcNQC)Wc0i^xssPkbBpJZ-L<=1WFJ~8mf zx{^?e%*8Uy4!`voMi-Pvi!D6>+bLXbhRB2FSp$!5 zty~x{+K}=qt*j<7M$VxE{sB)!NeuhK+)9nvBQGdq2RyM5s9)Nl$l=60pp7TkE#zo; zZK?C{om76#2BJhEeJb*avDK@`u9f_SB_20jP+$z8XA08g4e*ot$-##h!vu)W)iQ}-QEqtP`7 z!Sfe?k$7WjW&XD>OT8tHs&>9h`C>rh+pO%~zD6#*}h^Z51 zoTD_eX6OPUX2SSlApz0!yMM7uLtfm_p$9{mZ`0-I%@v*O-{kDJuqFElP%OL{xJ;!Z z{&bjdQ}_AZcT1bbkZt;mS5J6#=L*J7WCosFgYw3YA=4aaBBEu;^y;K+;2oe?aSVr+ zYDzoJ4!qRv_UbVq;p+L|fo^bH@<`^%42Ryf%4o30v~W0Fi0hM;`nzd28P?F$o#evn z5=#4N@O3@sx>^=G7+<|Kzzws|_8;p^FNo=yOj;3jyZ2Z9WKfDbBPdXH(@s)4)O6XS zm!6xBl?5~OYBJKrCjQ#Ya*VgylP41}Eh<^!BV?QpX7Iire(Sr|s6MVUJsi*|~+ z<8v60{2RlZxkS=%+eilHip0P(h0^^abg$Z5X(CN$&L63b|q(pr;NSL z!W%J_Yb+Kj#&VLctdZRiKLYXj;XK!6Uefn(~O^%)hSMOi$s~rz_!YEOy56ds|dftwcr&6+GGiE-bs1%Q}RDQ9ASy$mx{TJH|VHMth>=WOR{jh{!%Uz$B~*CK$kewd7{c) zbY528nF^kHp!s)yGa$QZu059avYF;y5F6;$;x>H%sUy0O1-k=?WY<~DCco!D79Rf= z@JQm+WJW_V-eg*PUX4*~#i_v#geRh6c)8<$8)V@7AoCWTNz`qi8YF@0`_snUj0zCp z74wSH8Y?Kz{#m|mdKD0Fck+icAZ85en2<3D^HS3LC1)Xx=b_C7qmMH*D%z568H09Q zP2~pU8Csr>yM9a;wUaOaE;)({x8QKqFHc2WxS6C*clDPv;zSzylXpTV{#;&m?{F(WK#`YqmP$&@K|ViEZc~H}oNp0}G?os>xe*K#@OzN8bxYDa z;JS#b@}m$sYVNbE{PpRx`{O36?53~g;t4n&Htk;I|8la3oGh(*pZQvl$kOYksKPw^ zHmfM|hIic~!RHX8>kUqi4yLbOeb~|Rv|akA>;I|x!d+0{o3SOoL3?snnL~6lr4fCu zzL?m4^%jW$LG1Oowxd>+z=2EcR>9NG6vmh@WVnto?-q^P*d{-uf~#Pzo7Lf)ba#MJ zti9Yh(*qZb0XA7TL|k3R(Q3>-Hpy5fR&5zuE2jlBu1i?%jb=A14f~4VI2xAaarsX3 zf#*I%wD}h=5q}xoFR-ye#z&O;l^%VLHsn1?N)1N%D;Ksi~sf;HK$`k-fk zKG^_w{cQL&pCO5n;*;K+Fr&J8(4ewxl?iX$&VVW|&ZWcTCHBg5&t8ve>R;iX$#o3a z;2+9SA!74upS{L*<;9)6_Mk{m`M!ogq+3}i)h=znb-sU;Zj8~ICn`r34 z{PUl6xVAaO;K}rB`-^@gd%*WyH0f=2D7}d=a;!ZtUBe^4dv0tXJSN77m??UJBpXE4 z%kGH!VbWdQWWnn|qZ_GDPfBhYK28xxY4OwINZn#?9{uM5B~qh{_CgHJ7r8`>|Ccal z>hW4H)rt;_Cy$+-WdJ=JyO+7#n<&4FU(&zoB3M0xL}tNnS*hpH3lNePn(Y?qaNQf$ zPJy#=9Ude8FBUyhlu{=#AZ#ARL<0xbP9X~;R;+o8w^Dp&<}*t&$Sg&?j@wAlq<32G z`LDt=PsEQyM&0@P=9W9?GSrSjBD(UE0$lk8WM1&bSO~lpc{;^Mbu@Rtm9WkwDh>ac zh`qjt(wVA}E>^T&$rQg4o0Qh8hG*tsY+D9les*2f6=Fm@mSqT;N4MBS+IUjnLpWk- zc326iRPbV~Mva+wb@Jg8X7@om$=M8@4gJHgVUWGM#1;7}euQ;_f4J%76M^!4r_zT9 zJ8BEii!>XN+3#NL^!6;io&`7Heh`t&u2eA2C>=I(Ib3uSB|y%BcMaQ#EJo7mROgJ>urPehHbTNOGuD z&!nx~0aRtsuqIKDLW`MFSkxPZZLgx2m*n0nuW^Y7ga=-G*3AunAMQjyxv}_!^4K(7 z(jb`eY+v+Q;OJWtB$<`$L^;IT*P;+<&8QE{Xb;`D9BJjd)6`9XM^Xi7%MS0>y zqoIGmHSmv3LPy=F?UR1m;t}WWpBJJx=0|X)TL$BQmdr4|eg?!YF9&S3YXIV(R-j!h z{C0`sayQIEjA%K=SdR%E9K4>tf|9HC0!&UK${ebqC4LX!v9CtdhY)1nSeBVWf^I{M z`@5{o$Mz4c+S@?ZR=E+l*0GPYe&d8e9h;bG#QQL7yTP5wFZvPtPNof$qI!w?Cqol) zRH1t@y-oyl(o*JMD4WV#8dIO31>>i1Wt?qdUuaC%vyd6CKdu@$I4r;!ap z`I$kvxq48=r?uUl@N6!!1` z-mevE;|;Fff|lyT$6}j$?~e)`t&Di=fQR!md-Swu4Cjo`7X}turONi1UO`5dT{@ZG zza}hJ%fY!UwRLp|hc-d79>HGDEd17m zCHrrmmD#75cXECg&KZH$%Gnr*sty#IB8SbJod#PSFb3;`lc}j2CGah+XrK+uZjW1^ zBlg!FKzwR38~wbMe7`g34p`@;?-#?UStqF_oTu-Dr(|ENv-ppBf8LwT0XNFHYm`cj zy-IjsME<2kb6(yQv%VPD>#R9laX=4sFPOfln?IqiXY$$p%lqr&b73Nx!9hlAN&59W zAmXhmoqhm^X6UKqwOtASQO7AS-&2>^E8BqKvbTvN2cQ>v^NsS(*3kZD!+^x8*S}p# z$Yr7Ch^s%iP%qHr{NP&?%i;bM34+<|NFI9n;2z(K_4`*LBBL<;?0Vf|^<)ITGx=*+ zgp8vn&n}1SdYGJYAkmyBhr>ogwHvX3B)duLihhC`b%WuWX0|V1iv$kHo_qduDfS*u zTyaH=-{B>7SQ-{O>x@kQ#S2>paeHpzdzm*OkI3k86Y$1qHy08K7G**~1`8Osi&FW_ zr(qK$l(nms(in6NiS)r63l^~EIi=N`%wUz94<4CQTIoUafTD3u>R9jnO`%=np5otk z;a_hV7vPLvoFts{PEzUQeHgzt@C;{s>cDN!`p9u=84`Au$-C5_CP#0aNyYco#B)cg zA9Wqk=PT3!8gr5DjkPB^Ia+h{L?rt>5jqG`A4G+UjF+*G=Qq|>jM|)}thmL3U42ML z#jq(jde{WF9R7CDZ73C#1gl4`y+A^&J-O=&2YO4iU0;iky1I;@@lyowY_bOucJ$a3kIpZ+SQlchX!~Sm@upilZw1 z(D{S+N9_B)XQnuH%RJ@!x8bd}vaA=uNDl0|*C&QiY3n(MWD z)A6{z+cZq&wxv{VGVX!sI)uP)25N zAc=0C352_HxJaG8s!^`5JmsiM9~;6-9nx*Dp7Tw```G`cD%?UE!xo`ylgSDMsakDl ziyj?YF|to%7b=}M2_VZVX$o5+R_1Vhj2=l%hj+Qn_8U&rIBg5msNKHQs4?wHTSNy% zuHmkQAtdN%4o`x0oWNwt`2!WEMz^qDTGF~WBYC}HKla)q<-#j@{Bm!dG3(PiK>fJ! zX>tDU=c_k!8=s5t#rBZ~xxr6c;1v!}#~Q@C&rRb>h<1dfAaT04--C%fFz#I{#(>hv z-IwE^H5|J|zP5F5;JtGueJ?ChT^8b$c;s5l6;;+@?Mpm}aU=dcxC8jqSiLcdpj+g^ z=l+zEcd%B)u7SR}b$oGSQO{q38fC{9Ul?1C%nh#?-)}Li3p$#+tUEWVo&2s?-kLw+ zNfp=5YgE3}v6MJfn#V~PYYt(UUKvlQdEDQjTzx$7%tO&JA^h|yURBBh!4+z|*4W#^ z);8e@gXRr+iZIrWB%(%a2>XfAGuu-TabIWLZum)N)AHK)e9q|vA39yv1()950cNnV z-$m|Y*rHJ(lcfo|dUu~;-b`gDp)<`{sh9%`LC2jnVXpo};*iEVav{0pFZ+>(B&rS^ z$IVBYbfbhvDl_dB`^IwjdTg+hQgM?%Wjh4~`4NeGBE@=orEe2mHtGV0QeO76tS#o& z)Wq-bh>NGZq{=d07r|!|mm#IbtnA+H789Z-uGVee)CJeED{oIvrJ~1riG!tUPiB?e z_8%cRm;!VRN^!xB^VW&r$Df}Z3F2fmc`U)Yn=&rGztD*Kg~xhI4JD9ms&BoX$aD)! zX8p)g>J&hl4xW+8@OORSB`_;_%K3`*ORYz>C56y9+8O>ynRp+>U(ZXK&lE3z?d~{B zcd>uUuaMnCx^Z#VOMk8DvY$CTXs7E(KNJcZt>$)#B!Tj>ro3U(x%s8C;^{AOsM!X2 z2qtlCer=>Amn>{D7u6wKjG6&bn5Y7+zCNu3rMhJ`ra?(ysmCbDOCZ5iiciMZJgl`z zc{I@{?g*t zXY?2Rf;rfcQtM3FR(A_{QjXiyM5%XqN?p3c$`I`Hq|sfhgNMoWhF3f@HdgwXS2y{N zc!vO~vHa={>%G~pODadDb@4oOsG%IZb+329y`U$D@!~-=G^fzL^A)GV8QKf&Be#eL z63de%`SxB+L|3K?x5Ta)5YPRxB#kCo#^XEr~b9E094wtnu3 za!|pz`w@(C+Dp7E{`Ssje-u~!_#NO{J}ay)ZwGgWJ02;-)4P21s>o6xuGn%vvrdSY zKfVLzNG?7hlkWgLMdY^A3OK4kuD7%^tf zc=V$AGNvTJgcU$ZRgRcZtABGS(+Vj)Mm77<`)`(Y6*M{6(6Gt)491SC2bTZEySi?~c_A9q0 z%2gxXd6Mr;xszoFhE^BkG#Q6pu*$iY1oRZpCHW2~%MtohEp;!^)x?=-8tz*w2c=Qq z(A6w@`o?-p0a#(5B_B4c860Uut|qM2O>)=N#=7)(4-&Hblht^{+HX9b_9-oA3dMZC z?}f^k%r5$eT9EF{?!A{Ns2Q&=e{!-tN60v6Rwj1Z7Ah(G+G(qm>FxF9NAIh$>bX)i zjh4E%n}Q3ynsr3Q-o@3)=IKv__vXKQL}>WeXJDsLv9O4C(m#EHs__07+B3L8eS^6qyZ zCT(=hmJ};>dz4lCMtbW|HGuGQkCf|-@_mH9rp+yR@>LrWg1FK;JRqt6S+2E zUhaqO-CC{EaP-$D*ek+P`2|(v)_G7)RkS^r??Diw*s7q`FyOn{97|>%=+v*6RU`d! z;M0)9!@BvAtFU3>11;V3geOMKdA6qfeeNJ`I{jhUps^=5@y8inD%k1G^(h*XMt)33fy{S+IJkfDdzcu$OW)ioxFh~t%+fqY*fF74 znV3IqDYI@pZ2N56THJ1 z6~?b&-qdM`zFm_G}Gy%GUu2jzL&8I%a42kfwR5;5-^42btE&t zJVyN-1NDfN{Q2eD{t#lS6FMxT7WTL`UnZyb4rp<*dXmOuApEd0Cc{!FHX*B;AXZxS zqHyNYCgSkV9RSNy=BHBiVCX%YPbPVWka)9$hx6EcQQ7b0z$D$hd6bt9RI!4uV&qCtg&aA>jdAG^eq(Qw9_Q*W|S;j5e#S zO0CNYOJq;ZT4!LL48{Du;&S4X!3i=W`-atX_xlIGxo6qHIo^}d^_6K5z-YAEvoe0g z7fd$5Iv?Z6kBYiQvj`_jLkN(Xj2}U1gyNN`ekLKW@J4IuDf%}Z65Lxo=m*FfG_lvQ z1TtyWH@noIe1$=kX_h7IVT_By^*Bz=20&ibzSHOF#Zms~=Z9C#Tl--*uYx&mqfj_` zPD?a3LIDA}-y4sj!X9Uv%(!e?$`sGleVn_1YnFjBJQeP7e4LeCJ1#~O(_)luHnQNx zXUD+U)Q|Nj!k;YHFGgXE%jJ?S;nduedegMWo#=`0){k}TK0sGxj}YIiPd&K&MhQJ-!3cJS zMFvJRU(}07qQIOTPp{3hV(5fZPw#7RiG%q|3L^ea6L7UYTnSb3oIi2eKSXlF_k&nF zz_BdkN0+hZc8y1@(GR8M%6#ab=corTk1pEyN{>EWVp+cTJEDiatWUx~OHQdQ`FwXB z6FORsxMJ{aKtYA4S_l`^ip)e$2070>UFs6GjiyiEt8Q_puRVoEE;&pcET6br&&nO@ z42DLAjr9RR{Ed4)EL4w_mCG)ho$Jmr9SvToIOQ&ry$K{kkPBf*fe<1vm z>s;bW|7Aap;4(7%xoxI@i;!^F4IMU4G=EIf7pl;t)O zU>y0r{w--F_oT5Ziom0X z9(T3r&~)rDn7tSi*!A~ZUESR)F~3wxMs3DIsJa7Asp*$(_J=&N9FJJ(q9 z#IjN9Fur}1s z((bHEwVF)5hPA!YrE8BD1AY|B4XW%3shi*yNl9j*{Z}Tb$%+BTU4Oo!+J*7KnL)ul zYy8a_60>7HP40L_biEu&n*F&wZF=VFKLzhAA!Q{|Ue`KVAsvx5YXr9ro7r{scw&|9 z(%A7DHQIjDMEIHO(>);5TCw6j<;fkO-lWKYenx99Jx@YwBsG z>sncU_Qi<=SLiQue$gh$q>X;IYfqHUnX6ERK!!oQlFP3yx;Nn;02rbspnPBDriErY zu5(QXx-qP=pl<%D`}Ys@fzKL&bK3B>xyOyJsnXKD#~cwhx(r{O{k|mz7gb#A`?TQe z`pJfs+J2;YF5(W^TK0JP-V`-5{7watMMfwNO?eyW%_woL>v{0;Yjw(Q__w&+1Y`Q5 z`&x|Ms23$l(Uroe!>d}G1<>(FH8?r&35oYs20 z^}bdLkwf_SvJ&4Vqm`mO$Wu2tOs4{Jd|5nu_OuEs&kGd1a zvzR#4*EhVCvSaV^Gg|r^?E8+ph_1``$W>0as@WW6o3>BIq{+iWp>9nffk6hl8Yl|2 z3j()D2GR2FR{Bo%@fs4YsE!oZ9N$a_kIS+-nX55Gax8h{{SuQjz&!ALoWt`+#-B6R zX*D$2^%1zelw57HMf56E>R4}$NavYqn()*GgwI;VWI0*;O7&wbC|*< z*K<-y%K4`i)os2>jc<*P$5`2zD8n`y5({rP4FsNthM=cfSr1#^YQ$V$M!T~3TedXV z!>jEVn18vtha)}3k`7d5l3*a8egRMaQnSDZCK;u3aQ?2!pm6B6k#)h?Xl?$1x3h!4 z&MSrp^o)e@HOWfBZz4IqnUGIBv;%QMantic@lIRQvucvb8JrT%-&ka;U>g=Dm_VDT z+{10_wbZCHGX>R_{vxw3S6`ftDofJLVrcp3rxA}vE-HhH%Yr>jKpMC54)~z4jExNM z^b=8CEmhT>oi`KD;HL!cD+K>`f9Ec?CLIPsC9f=1gZG^LRt#%+K=G4YU)gzxl%O*9 zZa32Y^tg%pe++h&(lFLO^0kcho8@UAGO%igdwzis*`y^&5GYO8zia4gN&bS=-zO z0+zm|(J+;Lm3bqNG;z4q&#o|~NqL5$L zxSDq_!hR*1$bvN+;3*_A#SqC9twiN=XZu3tFeWc^vQ@sCd+lO+rao=pTgYhR55vW-119Q@{x zwPR)cSS-_nx%ndFry7H4mmt2RmQiZeH@QwrmHyMG5aju53bm`kfZ#%rv^vO`{jJ>aeD> zrHz!7>$;VM_D35?SZPdl7)m?kULL^Rp&Q-hN!`!ZV%M6zmyc&pbZ>e~qtp!3sb?h~ zcSgl~F$HIR3r)7LLhxvUtP05LsSDh;Uo*tsEA8XiKPdp`DO|b>-SkLGUg;EUn6FAy z&nND_6n9|R2r2Ht)3iP+4E;?xzn>sU_O9qaN_S+362aX!ay~Civ6``^D1y`QB(H&O z*f`6~RVZ6Xpr`T%PZvkxto-q9={^iivtQZ)O*@wuKl&;BFylMx%X9kYpaU|Z-ka~= zx6iJpQbH%WM3G*OKl_%BMWT=7drtDtib{`!x>{@kJ9czBbNn*vimrkq02TxowxLyn zTC%p@6kBP-r+hDQh#W6+9cJ+}6>}#zM95Hpbx_;K3Q>_a&rDH>Ap*aZ!>+fFYdPRI z)fseZ%3cneet!o z)rnX5*$MN(l7vwC&^NuXT_xkVbn?0I^EbpMpnn53-FszUv6h+L#Q%Ijbt!vf>s)~Qn0FQeyl}X)T`pIAA z{Ov&pSIZW7z+;mS$x7y|9d(7M#wENRK}WH&N|JyFZ}ZLN+j=+(6l5#RSfhgN-HLv6 z_&DwgqZ&ulV$c5Kzc4}f$MmJS1eYqbFQYFArvnmThurRqIjvK;eyU1Zk{sgnj?ih1 zX?rxW{K^u>Wn=6jqMK&2il0PkcMVGFZ~eH|Jy$2z@XM@^HJGhZsKb&JK7`5Sl9Toy zTRrSHbL{A1;T)II`mv2kUHsUY;>0wY5Mg^l_WMOAlr?>s`MW*nz0%qh%w3c`${1zf zD{i2_&lpfUr9Ub|{k$WGkB2l?ibaX9p!v2y#^>j>3h3A(I(^f+(j+{1mw)7)ZD zm~ddy_*BZaXH|u2jrXwAZLN&Xn_Ne-{8>|z(uq31tVv1nUYAD3;Gx%JJv{^*vV0r+ zu2=R6HqiBXZ~!Ceo?H1b&Ny|?x>s!4*;e`xQ5hqn?K-`ru#l`qIiyVGueuI;*r~Ft zuP3UAgRU%sao2LPOCqOjtJTf;n)-qc$>XtlNICD6WFlhH9=W*iDYM1ehWZT0ZXeiq}>N?c3GD6-N5q z1C~?f3*F^8RX7NEb90z+*M~E~4#TV+0c%Cszq~lhQi&ZVk%)njA32o!P4<6V&inpS z!XwoaYYp}&MEB~!UC__0o#aD>{%#sB<~wF~H=*a?7xa@xM(v zCT%=hbAGl?8sc$1MWYd<@1&uypVbNqEKNVOn$+J^(6HO6FoVAnu&X&*ngh9%hj56X zT1C8mvwU023y6w*Y&T(_Y`|qwJJYxmfRYXs-QQhlE0}TkWt$U^3kskAv5qz(I4TR! z@ojjj_n>>DC5aF8bjCW46G=j{tkqM=24x#N*o=Io>69Q7 zMO&=np>h)qqCynyibSTK_aGQMv#ceY$VfLIrk5kJqnz@5cx8G~BXyrw>JBI#W(t}p zfB0Na?_OUscm#o*G;u85T$ZQJ7s0H-cO0IZSZj_ZKEs8&)+4mcl!BZMn`#nmuEtlq z{uxYAgy;siCb0)b?vk9X7bhz5{uk5%+>qY(bQD=zaGYdZGe>HD1MV0Z2*{M5@sgq*!j6m;++v@~u?dD8aj$S*b}vO=D~0FB z*tux0u&2DC2G3a2JAk%s3hCDBiKP-Oa;HiuGUShZ!yG)wqr6k2UPV8nd-m9B*6h+{ zz7LT8x=iI6Ai+e}mjV^=%%QE%IVM?k{0pnO%}?cQzhWq%1_c)qZhxf3`OZWkD5&fy zWHM>a5z(X}-791WQc?yiu@_881&QB>S_#EVO%21U#~Cuq_obJ?l&V`Lk4u!_o>H~F zp%VXs#Y{_Y+tVF*qFPD_acI3)XLK)o^&<(}70eK>Ggc-y(8&_$$`+Wu5=S&X$@%g} z{N`l@TllMEv5MSbO^w&F}nk6}B zw?gA$|8s}r=aL~@7fLo)%;%IYkw}&tgw=yYtWE9BJe=wG$gdWsGHk?CzXO`|=Fue}EDBadc*H2x1zVl)Snrb_d(P?axLW}Tv znX#ODTQMeg+kC&o8Avezv>$oD~8>b7f2hmz&LuE zrv3$5Dle}nw!R-)$oJl``g@96Hq^r5MJ%Q==r8h^Z3YnaIwNrPc|Nb-J$8%RFB3tM zLPbi5+|Z6zB5yZre*x3u$r_Mvy7@;EYR^4dTx(9R`3jZsb?ia7%;_?iS&j>iAdeQG zoy_Jn>5wK>fJ|&pRveSnZI1-7`N`!s&#jVHAUl@3la{4};uKZ?RL_NnxIcWmo}^vZ zI|IrsT)F?bQ1E*q!lPRz)Ve-=AQr9CV$&Ruoml^HxtP;pN`R zRgL~}&A6DD>V+Ba(gyA~dZ1hNVy$3HH&~~Lb7S6#_WG+%e{|42OsY?fe+W0U9$L-vMf`BpJr(7$QLEs+GGuIBujR*JmRv}yUovs$&Yl)-3k!Gz3plz zs1B&<<(BB;3+_zf%6L;8I1|*dw;Jj6(_d_m|D43E@+Wg!50=OH*+r=v!R(+9$$_4p zW^fH#?62ie$X1@$3f~RyWRS=Y@9`XWffl_}@u1I=XT@S=?3On3{YQ7V`95W${#={TC{)JW68abXxf1Gn)f_%K2|g zp3t{286#>%ade_H6ZVG>^2=XU)}L^9A2x}To^i8Uv^OCxDi=dp=Tdv!_9fc3ByPv& zbtjSZnnxvc+fO7q&>JWdS6&K?m3IR_Cpb`X7{SiIGfI(>|km zo`?iC%|kbOIRrm5t~wLF|^gF>M!QZt>nO( zNY}=0#8z$lJq!SnSHo*jC??Jo7`b^!)NkVlr6r1QHbJ!T6PMHQM8rnVZ_qbD6$e;L zF!v)s(FO!N@fji!ZC+;Eskmt(ygeh~^N$$)x8E0VEG2BnIY{@6UK8O4er1s0fH75A z(Ib}z<`0oNtKrMdPS$E%>2ijy_lT}m`LV-43pb`_rO}nYtPScp%M^5cu^RMq6_GkqO1;aF6X8ZV5Q;sw{n&)}O_;|r~jr=ZO>eb(LQaDWc z0X$a?EXk=p9?d43yXj=Q-t0{!JcsTiZ|5Yv|1%VPe<4V2e;ey`YT4fb~4e6z|=d}x84~`6J*lv3FXzr+tT0o=vB!6y% zze>}dSV#|@>oy}K> z!M)V|H}_W?9fsI_`ZXHfT?YO|7CrQzM7!8`Syp_Kl5M>@Ly|jEe%o56s?62IE_O*& zTw5I2VjzlVbZgMz*=FZfiUO9`h21q`nIj}hZNbekClzern0#A35lDM&jsC*Pj>j_f zx6mEOGy9O~zhcLTKujK45?Zyn{PqJT6?;U-AjI~jcHqbDIy4__4}I_!lgNw)iO1A5 z>R|R_5`I%JoHn9a-8pl9u;Y0TyOBs(o<7#yEBpkqZ-7~lcePe?casbnbV+@ijaYlv zs6xUN`UzOZLcAhfpZYT^Bj*eAbFKI~yGq1CSm`EGul38)>oT<*Y4B+_n4>C6tL~Wm z6DV=&mAy4hwey43LkG5>TL({c->Q+OKHxNbl z3HVt~oZpMw}^5c{_8w9#{zi zOMG<_R%!+du&T@7u=fyb6i(sqbkVHTl^`=tf%9@o4P7RxVhB?g}9z9IyFm~6t4Q)_{MuZGO}`Kkkps{8qPB;|Gp#1 zuN_h&fJt3a?lhi?XtibifMz{neRoC=Us{-nuFjBn9t&B!*!AS=Sx%&|dxrDIx2U@_ zkhN2tW2LhHn7W&V@;E-*t+>f|DiCjAO3UQqLpd7(k;fwX_tsN88tr+!f9dvUt`O=7kHl zj)S*7b0=`wIBQ2*=@{{o{Xsmu!J+kQSYOo>0jw(}*&;YRK*IE5(B5p`bJ}(MKL1Je zsEZ!|fI=ZXX#I?a^Dr{6zV(j_J7&{sspkTx<`!|@0q4hnv)NBGXP}7?uyNfVQ8klY zBbkh1`nCG7-@~a71#MkJ=!kDD)NhM}N$hU~13cQ89yFvtiyr-nScb>t$Em5l&B)Bv zwNLZqwf*pla8^kEiHpc`N<*Jp2U#CE2SLKN?z+of;Q4u}8!a+xw>#_6glNoCRq0}} z59fS8uEHa&%ov*IOuVEky6)exW-At*z0ZnG91URFVvr=(1yQENfM*b1(y*X$YKD zju<yxz_=m308uteZO#_TvgR`QXG6aE7EQ=!(CGeb{a%GsoMMf z?V`9hj?jzmOHCofpSEhsBU3|Zn{Q+%CM#BUQ?}iTX4PCf{sy6esRi!Ud!?)UV9hAa z+N4fO;|9edBt)m09Fi}{>(||%@YERx=%{jS`;9Z)!X7L;{?v^a;^Hr0UN`YnGF)h+ zM#1MMh3p^5ek@M3z z8C?1>2D-0?9~d<#^%!mMX7jCNa3lm^fOsqb<8b|JR!&VC&)#OW-Sg8&%WpblD>E?rsDUY-8lBH{D^73XZu4@ZzRQ+O5it zx-;INOY$`MWRa0teC+`I!v`Garh1QR^AFmwQGOfQ`Fpni0BJ{^%n8qzH>G-I+y*6# zHd!%&md@Zf=DfT1rd_`eE$}vv?Ks9gKXo;GH6-0Oa?`&uK7{c1fi!j(=IMyw}v(?9E+XM~rUvRqtWc(Ya4*3L_oc@`UsYdFkOG%+)jiXXIHG-(`b z8lu1k-bp?y{{RG!_?6-R02t|>JNRX-UBdd$j4kXh^j$*Sg`e#@ak+md0P`zFb0ez^ z5@6fOVV_a>ovvt}9<|fF8*BEfeNx9qyt|qk&FyhL!PGv}B&Cj3w0&roGHWWaUq-QM_9*<$8|1x!ecM z_j8)byuMdI)83hVt6-0tp7^Yb%|tTs)cep{SJ;y7_ixHM_o_EH8wcJz`&E0J@T@~0 zraRRs@7Eve7c>>i+_N>_SMO)*S@X;o{M>~(8R)$~zazEvN3s86Zw<9EJl^w?VT(7QFzApV)EcNc4x>6)W9s-aIk z>pt&SRoq#rYJ=V`Uuqa6=e2VlA=SuEzm-2y*AYW)Vf4*&8rHFp!*HXNsM#KY;exT> zDbaPULrd1y-V2C`k)9dDs%};tMmgkkz!`@MWxDpQR^v!1YPU)@nYkfZK`PTAD8A%U2SuY>a+uSza~xi4LJ;EbZP$j&@g+ zu-X+zA$`f225E!NH!?@Az(kA`zR_=W#^8Y9 z6Tr?nJRUK(_JpMQ8XCj$u4|vrRK66pR@?S?7~|#nKMzl(bKWKRN8zs%+O#^BkEC8K z$8Ou3SlBt_kOOBVdVOoZ)zD~qat?SEs4%`POyThZ{`W zRwdempOuG0+YB+*wpfah-LpSs3tah{)Aj=RQ{g+?d)+I+-XGF+3mFo7dF_-zHMFQh zE2EE@Sx5{RbR#{hPyPyl`#5M8-?6ua{xbMx#yuiSHo4P$RU82Qn8`FxZ|4OkYOmU( zL|v!l`)c(Ak9oM!QtmCGys;s008l{3J@cCI58E&Hk=K7`e}MY^y_S>VKM-g>It!-i zx^A;&Jb<#txhIZDXNi^9XdLdw)GM^FKCV}oIMlTEXAV0KrB2lJ?tWnEJ~xIjjmwW} z!PLBY3cGEQfA67OhP$n68m_T4k8R+U6G&JA;qST$JZH}5>Uph?4}2rN@mi}iz7L1Y z9S4UCWB&jqE9$i%N8YhT$4^H8;hU+s?y z$L4k(7tT2&{(gO`oWHUS<4Vi@wc)k$#&W(G9RC31#SzRXzNI`o-$R7F@vKCDtY7=; zv9CO787;O|_50P{>L0Ro)MK4z!~Xy`IUXB9{{XeC8UFxe`K}_}{k5a6c;i4%{yAGm z6;1Uc*qmIxJB0PPkJIneGWhZmG3O`!^bK^^U$Uf;pZN`G-2VX76+igpWzYLJ$qIkS zUdPjo9zXsrwN)a?Qw8;{xUM0|g1+Vkn9ApZc_ zs;r;0{E9b!Y(w~Iss8}QQ|5_0sLHwV-LXIM@gM#7S(iRKw{U-ZA3yC^N`3&d#h>kk z?8>vsyLIb?IP3OQG@WjP(4fDvRYXJ?0#+zI~U8yv{%1uTJnDQ*`Tqdn@B9**;HIqu zpB4O3*R)v_0~5oeUm{8Cxo)grROhGfNIl4{uMGbH!8ASs&*J-iF2~}`>uTBaZ?!)S z>5|*TLKna(srjx+8-7&#$DTQ_voCa8UkPcD%#pn9aN!R2+q9j-JP&Hm)bC+iyZd{H zUg8^g1ko>=R|9AzPX{?9^T!7m?_PV&o8AcOS#S6M00ZXff8d*62s}S|aI533F8VlM zY!b)d;S6^k`{cU{p!($Isc65lUxsv@yRiqh1)Gj9?wL60nLIqo`Ri~-a9^PFmC3Z=PKjj7<=J|}bL+5QJ; z`fb1ZJ)BCZ!+C3#j1ite9ep#`+P-!F0D_nJIz0pSf75Ow&dGd5ZmJ4x$NDwbP6r%% zcQyCcuc5Cyy21XPOB1*DgVD7{JVQIHzx9YRo$Djfl(MFpf2dgvX3ARrw= z4FQo7NRSfx#ry8uH}n2__nzII*_l1NbAI2>o^y7;%bCk%0KKNFhAM!Bgan{|RREV5 z!2Ra|&JF;8jt)Qo002;2jWGg%S3Q!e@}F`!2T%cABO&=$|4V>mz<+X`loUutex02B zU!$O;rlg>tq97-yqNSpurnwSw${TdFG&lbB|1I)w`oCFMm41K1 zKroQxKHwSy36O#0vIoF*Wh>bg(LbpF5|V2`QnKq;CQ(seDb&$lnGXbByE2xHl=MnF z$6-G(La*LJiHZR|Uhx`JM zC8eZgWaU(zJy%sz*U&UHGBzfDEK$_r$IN@LZh=M>&Ivc=2P8ax_?d@u z;EQ7}1@p1wCE)r9lrvnTnt)6YNewwKZ&H34|29unX!WoYcz~#FcjAf$q0yIs!;qdA zb=fgArP80CWt81{9H9M5U;Sp7*_}8BBwrio5lX-?$EJK1S}RwKInSSXfwQ;-;B+8` z3w*_rv(}6YwdK>2|a*r&Z#|n1o03 zG_k)O&vT*5%zG;C7%;u?M2hX>EaP{1TvnX$crVN!42Ex~o$jwo-r44a+O7t)w*qmjAfW#o zy4%-(`J6fbp7yOH!+t%selbD1skS^K8)k5WT|+u?nZv?cRJl=*QgEN+2eOEE2_-fD*X?U<$L@>gT7y^*u9S(ediu!uS(YA6z=TQ{Szq7_;d z`g&1&Xbpys)NZjmUG^s>BwtAGfg>bC8KF}6f{%+r_{CC8sr-*Iidnb&&GBaSQgESk z{sd`g{teGu!P&C9R!hrzWaHl1R?!bBB)wd%8*$ws5CiCk$;ikef`PGVa+>1c;=i9_ z1q|+=H(cDZID?+&v?zbsWJ%g&fCv5)k(NOdK2q zuLCCte{FQ`ZTo)u3x#~CkZ|$d^w&#ItC>#&qN?qKXCvZ9$A(JAd*(T5FxUBW{?ev< zbqN&31`iIk@tGv_-&C)4BJtm>_SoO7Q;W+wblkUjZ>QfZe`uhS^9L=4#I z63{7n30Tgt0O2N!i3MjGSaz=K8*;o&1uf%4Yju-@J}>s*A4z^-)4>)i<or7p8=T4N@^#4?BRIZE{9L~7`m>wqEAd(w3)K9vX zLABVO|DqSdX(vCRqI_0?199t_zX;lugJn(^Ok=mHLo9n~Y5b=zyr1)?X8;(iPz?-k z$DUmR{Bwpjz&R`BCS`@UhS=l_+Y&GC99C9U*O)-OM-|uzNaaxl-%|5GCwkFmCO?as zhK4h4A6w{7pD%ojfAG07ohL%4M3V%WohW!-a&dPaYU$esW+Y-eq)&od-;POAtMjJW zZLJG2l=0dMR%Xlx?T&UYY1XVL5)G3`WMpwR;c@)R z&leZ{mWCw0#f9YWltJUMTvP#hT_*f6sGfbr@%sqt2l~z;ntzi<{WiuGx8OQKTEV5D z+NFR}oxjvO$h3NihrqWKib1BX1VK!D1nz#ENJdEjxW}OXJs*}2E`P`I_2<`fNEv~k z#Byo1ng;w~p+ibQc+YL9ICo38OMZA<#Hwr3%R6?mznl0c@-ZVPmS;na0%{Ak0ii1n z8Q(RNP+tR5j!#ii-v+qmU6pZQ6)2E6>g?=o$2;Ar$GD(Ut#)cMz2{MiR;5w#>^vxI z4>QetzP8F>1%W9v?fn*8=zZged>x;Zd~|K+Wv4oIYUFzC2|GskBj=qc*RrKsqIn52 zGzRg4Ls?Kav)ZqD^Bw%gR=|Oz0Oobm;+wcZ#KEdNLKuEP%#Ft*v58@BP-VM9^p-_b zxUXQ$eWRrkoj_X~-F+f zD>&mL7=_N(mlm3B4&2Ke9>d#g9Bwz>JB;*;h#6Vv+LQm?u%&5L|KXw?!Oi8!GKW0) ztC-hwAt~iv2!8Bbzb%vEly&4rJXXI11Y~0;rZMm{mR2*^WK%&mPqI`|vBzrF`7XP^ zU7^ef7F^23pd`dD&+ju^cir-Fx@61}Tck#1OvBZ8qJ?Q+oo8E7-cU3@uEILMsj6N* zQ_6LS74(Sf2?g_py`;6a5jgd9Ut!x=$xQk;^v(T;t2w=qO zV-wv#yYh$4K)y*_VU|4E>Cc4|({XUsC7_p9YZ=}lKcu3WAm6H~#}p`TsRb7?%VcIf z(-@h24#jxiaO2UJL$2AZozl-}5ZHSe1LT4eYv%O4Z+xkK=^<t8`3C*VX1NbyS&f zDk%Nu^XBV#HFmu$*S7u9{apB|8U#)T1I+|T+l=qf1Yx^`IW<7RuFQQDG8cPy5Ez?s zY$&D5cjBNjp}sNDGjBs9#3PZTx*DuUm&H3qF)TydA&X79AvfJ~38-K1n^n*`)!598 zV}c!Z%XO(Z%1iH3<&nKWxo5~6N$xJ;^+VC2W>v)UvNtBRqqQMQls`6ITB%nU7Rl-{&ai=Su+OL8{aMG zT($h+QtE;e(#`dHW+s+F+GzI{TA9aNt>j9~AV^@A`ec0m;9x^vTX?!@&<506L)s64 z(8hjrFwH8*Bpw_KlM4v%v$;EWm=%NnnG|-~QiQ^X1wH)HfiuVUW$s4$I_)qcwHVJn zvxm{FC!#VBxs!C!Bj7FX6xsK7C2G^tx1=-unmHm8+AU+Y~t>a0Y*aO%jk54nrpCGA+I!Lsfn1o7@TV6dl8yHm1>_O3Z= z*wzCF(zw{h6;QMs3{Ifp(9%L?_Ajpd{zIu`+Q7E><9vSo-5hhdP=(Q4T*eu@zjSG0 z-1bVyJ-j+m&4OSbKiPW}$FjpXFy&!=b+in;NJB0Gnx|UJ>u2{ZR1=|ht6^P|Ay$ayX)Q5 zDlYFqf1Ea4_2$Vx8qv+ss8CQfjV^{+D`C!EC{IWJg5F$k24pCY`RW+#$y-~{ZF}C) zD|E3$?90D<0Q9;aW&CO{h8fJ>i4HPJuX5yyuG`|U)BJTNjX5`9wawmdFdu{o#l&j6&mH0tAn?Lv+a zP{GOj5*rb90v#tr%3>;m-(dzF-dW^4Rt@cAH_|GkUD~Zl>}m@=FTRS{nYp0z77)Zb zNEBF*Eoa^GZr8Wf;+3oY>$or*J)x(iBps4F@LT(V3i9|2D}wdX?8PW1L{5-B*sR*l zykdtJnbGb9Ed$z!5&m9K@vpQ}cgP)uDcriRrc_r=YiW+;l3GW%J+*rmfzCfzjvb3D z&~))(Illnosq?}DiUpic;JH^}W_xl)Z&qa`=jc6D=aAA}IFjgA=E#Iz>}`lhm*z08 z^h}}++(hl21e-QoESwztt|J7xx)(w|#NQZJe3ULL8;2xLzpvG$GeI>MvVkyjN+eWKNbRiVSNdyxk|rU18;}MDLl8cE7Cl)sLzkm8fz)aG>Lxo>^S;$ z7zx#D`9lVD?NtVE&9`Kgt~F;_LzAK9F4_B2=Yv+`)T4Xxp{;viY)y=U8+7p(LgN?w zFjNvUNrQf&SW<6b+*^$fB~Bn4U-59>*zJ(1Q^X0E za*pBox`JshVyXBTjz=8wObc6RjnJ#P7i{c3O{G&(PW^jrU_g99M(KTphamS#)b=>! zl|S!VVf4OaIHaWO=AgzTF9A#tuk&v@N-MLkL4vwn3gMd?K*<9$_wpyPL4}Rwh8@_FJT}q&e>iXZK7#@+EcN`T-5aT06KL4)67UEo~6O!V?_f0v+ z!(ae>>wdC1fe-#kQsMl1sp=*$esrlog(@)zO`{ zb?s*cTI$O?yDDeahf-N1lxZfZejdFPY_h2CMN$0qVtif?u3$+`P&MyoeZzBk$N09b z8<&6=6ZDW~@=roWq8eN0FiVhxzzo=4P|tY&F#gt|K%zD=q*!u2#^?JKZhW}Drm9sd z=5wE)t9`$*;1ALSPn!={$#edBfkFu0d&PdTF7fc=H2Mylurr28sv3COeA8|)TU06;tN6vsH~53B3PZKg5nQj zQ-CyZ`;eN)fg+s~VpeVda%02UYB3v5`~>o{W~cU>k4IRD7AwPxYzTMT ziS4guRXjX4&&(wzUa5G3RYE&WeS#5jw-dv5nSFxIB^4#xMm=3+A@q8168&48mrYey2Oke{j`{tTrzmL&u2lpD@|b~aBtW9|5w zSE#o(yvA+j6}xj+tA11jX>nzrZ=Pn;HETZFPEq2bKQ56yax`a{XRZv{veSyU!FZmj zu%RsaDy?y~Q)_WbMkPl32)P!~s%&1z;yG)m#e^G_tI$dAz31j_n~Zzui{hG1((YMp zvV9?t=?g}v<791Oc$4URoSV>2`gvUai+)hB(~y{cHB)CCl9gkIGwtu3dihahXhG0n z{4yO?;tZ&FQFh{coBK_tlco){m7f>u>N|7#&#ZB0aEWU&C)02NqqO3|XXw+VGmc^6 zO38o#ol*T>6}Ggr>q4-pExzJ$@bUM6f+s!2*{?qh)IYJ>?>HzMf^>rB^hHX20|NsF z`2&S@0aUG)vK!e6VpuIa2I08^Jd~&K<3qh#DAp!z|g z=$Rcsb@4<|fK@>l^O?87oaaqXK@FQ-pZTDyq6cNa6^-cYz)rHXaAxh#P`$LcS4A)Yny5{&85b`>p5EqXxN0PP!)!v`cypy^seUGz_$of1CAf+C2AH z)E2_fc~zXBHH)eo-nyWc#8a)KxULI9-@s>24nGtQ#ygA;OW_{9_~f9b-zTLyPe*eD zgOcUC5n#8x-aUerzVeOlMU;M3JE2!iy?XgdDUp5?QsD>q-1VX;>KOIRuH0X3T-hzy9@oSLE}V_QOop`< zbS)((VRR?kA?6q^B6n3?=91B9ZNtv~vBGyGQpeRzrTNkF^R;J|mw#NT@`JIC_(bXUYC{ zcGde(cwk3I>eo$OU6_@ZEykkGShZ{?ZEosBRAl#iL7#wFOAxN`;FvSQ?$mB0v{p26 zCw<7Sg>Wm{mlF3zMD*_5ji|yw_dD9mw?6aQ-w^j`ZhP}`rA2fl^n(w0b{bO{qagi7 z@}PAjRyaPz%&HHF?rdS)Q3i<_D}>frljD>_zFiE%>qBF2b+ByR$iU3HmR*Hw;XTCa zTwg@YZeuuOa0+A{9=E74(IyapGMJWhW^q-~Pa2dU>-e!v{_Y6d^Bc0tcth23)Bcu7-`TeUCwuY}NoK(kp%a@R@tiZ8|$ z$K;qrlz%>cCis=Or8REX)|9G0e%m4ap=R_?*Jj#;s@#Q|M9no2#_JN$RZC39gsAAa zi@9Q>jv4M&}^tH)!8WKpNdAmA>Y#mw&gi z{d=M3rBJ5SUN~bN`v+%xNWiKU!&p@>+P6f}H1eH%{0!8IjHN z+gDFXBMiNw(T~};*h>dnfj{8}d&kM#$gxX+{DbdNrD|jcnTx~X(@1+*vkO;MJ8t*O#h?w%>k&&M!7 z)(Wm`+JP=lhE+9C%wJE9FQ(x%mjGA6`1_mP8g;)8Mk=j41B>Rh`JAOtS^B6HL`#~? zpGUJiNeYRFabxZZp34Z90Jp!oslAIrEmQPEr5i^K-LCFIM%xRl`sOASaCQ$+fS1>G zFBtpP9bQf?(jCfHYz?9FSI&&rS91eQRP?e4>0m&M$$-{#0uJUOe z;<^D5b*kH2u{qk!3y*MhtD|J@!}3&Ili)J&XxJ9BVb(Itvt+#(+TDT(A8cL%fL01t zTdLIGWcB9wBty|^eJ*8X+!Og$g+Oi&!EVV9viBR0+dsq}CdMC;_rjT=$|aS_x_QO( zR`lIu{_1+%1cW3(I9g3OFp)kW^Ky0e1 z^(mLQvviQB)zH3x+v>^m=&KUzJCfWpRqizJPO-A#dnAY|e}Gg;u#m8m*fi&xjT_#+D5a^Jt( z9{Bd)L3>?@1R?A2YpMm&vgFThvD*TW?WP##Yn#Y6364x1({#>}y0fJ}iC??zab1$` z>w6$Eg?rfkiyP3_TJrs`>MEy1^-=Qa!*Id2ZUK6aN9Cz-&0oaiFD`8igt~*D+tVyC zpBm+&pJlm$-bn)*$43thbAw`kx4SlL1^1VW-i39exPSYivDRM=e8JB7! zgA}4q6y8UOvi8pmEx7~yJ5eqtXrDC&1y2tP^q6(Xi+GJ-xgEL+6ub9IY5ZLcPkG7x zEp8sIAWFk9Wt6JHbB&!s50pb5-vZ`;N(inlw$ZMw){HV zZb@>9Y9d=U4QKfA@q*7ynRNO4uP?qJ@v}#G z|Hw146=9`KdH8ZHupIK*!@g*1{|p=VlxMM}JWvGe{}J4!dv8Np zOAK{|6mCe<&s!{MXM{a}In-zzNqP9AOkz_roqa~SEN978IJEzuy5V#<4`;U@j0K%B zZ7uKOG?pVKr?oCR332Hlf1Qke^8)ImUa{JgU~DT)?JS5$TLcwvnYh)T36W=uZ>gy~ zt++u2_Xt3=LM2YkL%Sp~Tm5yk%6Sv6uYBs=-r|M@S4XI!9+kuzEFI$px}ZmzVcy0q zh2JwOxqcP93Hcz{XWXk(NbOaA0wO+0{Dgs(at3dBuMXKhkD19Sk*Tn_a6<1rEl?i{ zf}`4_AQ%o40?uv$vM&C%&`%a|uOZpQfl3BZ*15%L*T1e~&EfWLMUX?nfXjEa&paB7 zFQ;QX(~Vp=yv81185ry($7CbsUNTSpX>QncE_$TSsv)Os80G)<9D+_~Vb66yHg1E+ z+Qg;bN;a3WA%(nutUp_j2F76t7rr+)t$AKmU@(8xlKd&q8FM`3j5n_a`X&d ztITf%-OGzTXbv%1*}^Pk@Rarc+M|OBu6y69&n&(@x_AQD$iVV!oXYxG+~G<*_=>fr zb+t~=XKZ^Pi*L1HdmN%)@!OmmT8h9Y&zlx23(~{v_L@m>HojO-qP?ss?3WinOgZkW>0Q;e%Wn6`9+~daIxEK0+ZS#h$7UL9Tc(16{Vl0mU&*D zlP(_(Gbd447Q15_2Yp3sEQbApv-l=5Z&I(#yQD;#9kI~gC3!(|2!P2}K(t!YE;tsR z4r{|+%IlRI;C*)Z=9*(M-57qukA=(?OWak1iy!tB!!b6w?P#grj@Bh`u_HvD(#^9c zshR{Hse7j9EWpU6cd0|rZj5})J#kmtcJWZTo!WSV6%MT-^L%s4zU9C^LDbJmms03? zq9bi|wFYM|Ar$K)ZMVIrp4>Di(LQuU4l3@w`a{*3$g1Xo44NMc$*HJ7n~i{zL(h$W zUjo>DPdkfiLcVENQt1_Sl+%iiF6RzJ567?5h@^gXIVm2x0hx zUg~3)Z?6?(@;OQg%-+|t_#0wox#VJ~bEm4WTI^+8+A!o6qw0^k&mO_XP7eNYj6&|V84qF+tmukH<$o{zT^+)l%&97t+ zyp*d>9QmI=e8BYon;#CRdrtgNIQn1Droa+Jn?Fpa(|7OP zTV58hB+Gd~cQF%F&uE=ewLc?exQb?M^5f&v=ACKK0gAD)@&33STqSeAH~kzPt(uUj6#VB+g%g)l4fk;B7#Xp}9SlxA zmLV)FyHe(4ZE2LT&xKFbS46gLJI1oSR_)@?pFcOgvX)hSaI^=ns+Via^Lwm6AoomL z;+|{ktQ!&;i|2mZd@S}}rJ1BXt{BAqpQ;RWz z#q1Z|upxrJ)OSt3sH9}|({p`NXFkY2Inzc}@E9vC_MUd=sa(4MrtH##2M;>9x>ona z`(6$VTzvh;jl{IH{bJpPERrGr{<^=BMUr2-wY3!sUjF&zHO}SB{gZZG5#F+eYu&Y_ zDJdytcLZ72Br^o$Y}~LxMMZ@n*S6I^LS$Fsz918fB_Q*hG&z_}w_wKdmvpoM_Cr-!IZG`!$`{+6>MGzx}+I7pmxGYA- z%HikdJ%b;gt}ynU-9i=D57Y>y3Sl>Cl1A#<+7aB=M|CxmIJen-EPbexI{fpMWYY1+ zC*20p^D=FkC00_YiTCd_S5;NXIdm;xV&`YsxpQYrYiok{^f>dfW&Zl(^{r0+tw+D_Nd}yj3!+^)kK*{4@3^R}tc)B0-E@6=Wu^LHN71Sy_YP`I{Alm) z?_auP$r8C8I}#7v+8Vvho`3m@6;*GTPwfc^C1oHexZw4zZNZ_T6pyj5eyI4bzdTlQ zaV6k$VKvtux*ZrFAJ1)spEtv?2)T5L-e4X0(n1vv*R&wuKOc;bMe_a*slxl+qyP>- zkaGQD5GJ6+-*_Qj{cJ8d`=-|&e-Q*t?MdRIS%Y5wEu_yMO{F{zF zTDd5sr^hU7XJT^lVysBM_w-h(gh5EPfbVJ-7ZIN}VM^v@Nl!38m$9iuCDsqUstN zDhXO9uWpFnH!e|(jg2+2w`ceC^n7C7u+Y!XuO;76#N*dDMs{}gFn$GI)cSiKp~c)! zpFWLN@Z5THiwzUj6gyQ`UA^Sqp?InqMJQiXOibO@R&3q=XhDi3@0Qbx1q1{>_w|V= zDH&5um}R6|y#FnyF>5sBCckbC)*BHKerMWpO<#lygPEywt{DU(k^x^csZ5| zk8a)ckn7~@oAjNoKf2zhpWs&XlEde%&oEZPt0&#Lqs$@|rYV90pXJc4`oyN0?aiAv z4rkB$2L~^~>A$0!D()XzUamUWSt4Lx^y`LL;qdTq=^d4T@TjOIMMjdhUs-HU$j{fy z^NE7!4}ROo93XnIKIN7B598? zYl9LW!@=8R*;G{g^xE?5cTJCfx9rwH2Ob%3vsb(KR^{H?3k*S0Ukj3x)!%!Uv9bKq z&Ju54`Ln0*zPyU!UL>rGWpDm>>B&ppvIz1miFm6tHHKBcC?u6u5uHpQWGh` zojX^(ijoY*ufdOp6sOiazaqe%u1iVR-NeM*_#-qsd-I#(f19mGpj6?VZ>7VDOdBO6 zG_|xiFpmOo9upE17cvDfTw8a*zo4K%OqpBCWP!_2$ECtTc?&BmbDY+%4M|I4_YrXbo;K5nCTQe0eIWTqzXxyFGNL?=PR?P*Ne z$1Q6eu5n(<`?r%pu@?`Pj)#XQTFF;YKhKWU)zvkOTUvGSV!rbL70zfWY z3llor=PzF_EXx1oq3}ds{O*BUL8#&y|4^%VZz?*1+R2l5HQewNo8ml2M4!11@n5`n zarl*FiOGj2r?}-D1Ur1^y~zmF(9rnLVEP(SKJ5Q+QAH^4b8A_%#^gPd*hEemEg0*H zMsHSik;|={PV4&oIS}t?hHBHxv*W`KF1(}}fZ{i=2x7Hv&0f2jkFNpe-?pQW=X4Hl zR#q0bv{_))jU(vZRcKxbx~WxNs@%omi@Dbyj4j0!x}cwP`ohrY&!1!%I$|7I%kqBy z{22wli)w_PIAc>z2`D>%Y1KBfuk{IJgnw&F4aTf8L37qhZMuK|K1Zk!(?5s5$>~og zH(j=DnUrAU*E5+~@9YKMYNw?b~_2eEDJ)6Z{{{v4!PZT_4kFgRE(T{pB%{>$gjU4yNUqqo>l|8DqK`fhu&Vf3hb zc@L6eV>v5{VyN5cIc<*r@vO759c9LsZI^NXOl(#;%YDn2f%g@g*ef^sC zkkYKIW*E2MxxP1lS`6mHi&gjQ%BfA|Xw;Z* z=pa*5Q{>>H9J;@JVZ_)%m7COD-;nRnz0hZV)^&1f>UeEx=Htf!d3oE)%gZYtEj=|6 zi0%zE8pOimPd?4%%a^}?$k}v5(wGg8$oA`fzmr*?1`f^>{dBp{)1CZAZtm`;t=X3O zo)Z!mLqoL<48pEnUGBI_oax^U7{laA$`7a!cu-ha7_8{(Os6r{h>biO)E5slOr=jw zY00moEaGfV=IgonBtUn%#FsWVs(~IRN@Y?Ud)gmgJ)9UM&3lQ!5;9fdedl=4!9~Tz zHB3!~@Y>u)IIISRZk%uL9#BiwO~>h3Y-MG|!n1iXW<^DNf$PZILrMvbpPo|u9w!b7a26MHuwTr9<&lu%$>=>$90*Ouc#n*s!0uk^75-?tlm^& z%cR_YT95&j+x80 z(r!01GYgN6wH>L;(HF-*-)TBM@0a?pb))CqrAwDGv$ATOJlU({pfex#`Lji3W#v(Q zU#n;iUS2?(`jYQnTOx;JVq{|WWBW@nw(z5WLzUlF^2@rbnuW5kxVw!7n4HHrM}8-F z(}(L0M|p1=Xq5B%_C_r}e(pFKePF&QM?ugBFtX}*4~~$nv;FX7DbT%Mw#8B~&|uP| znwq%m?CjirJnicm7zjl>78Dm}#jpTG)4X>uPHcz7$B!TDpE=vC-hOs5zW6*^+PwbW zApsV?9V-Q`QE(Uo#;!-8lhncmYbu?n8Lxgkbq3dzZ92um(5F8=!QsSE-2K+T22 z<&;TOY8Eg%%c`v`th}H0Zj`mrm`a9Gvd#;!ABuHMlS%{<+-vG8ZjChK?iIgPwV zG`!|#CtkdHLk+f!ii}iAY9LL!rO0!es+w9Bc6_zG8^^}TWgvRK){e$*2i)DagL72g zL7^m~Ju)&fnuVBdjtP&CzXHf+-u}!Pvqc574pivE?_UGpiu?q{6Rvd3*qiJ2?c4Wt zQmNmXGp_K+ob19P_jpIM&!ZpayNw9@2LwpleUuyPf4ii}bAqfSp|0Sz=2Jhv$hrSa zZklK_3(s;JF-xUHzI^#ouh1>4NyF{o%^a(n;o;}2LTSJ%W5!&}Rh5+?6K9MV7#MtQ zqDzN+%9!J0o_2MaEM{apKI{26H5j|^F`dL`-LUQJA)Udg0(R#g-g*57tp2tG%Ubk&{inW@qGfnNZE zY6P|)j63aIa39ZCQCG+A=;%leIQk-4Q(%0eD-h1uS?n$C^i|8YHJkCmg$uxuJ*tJ7 zXRhm~Ywq9A0_4I3%7$@M`sNKAdDBAoQLUp#Nk1GLb0Tf(M6PWa(1DcKq(k9U@2zMV zD>edCfr4-hE32xyQ!|QH3tYZisAaUF%Iw;oB>b3 z7Pt@=elT9~(r90u`AAO{5gdBo#BC}*COYbw!^I-`Fn&sAOU!<=sHTzwmXz+&PJwkq zLXwxCvEONY!1BAyPUmkc7cN{lr&G4-Z%8(59Z1VtQnWs3rSB7#tP+K>ss8vX%*_ai z@TeO%@BtQK)cpm>x`PGGpgRpuOjHBKbMo^0QikN@WaX5@Di4mT;?Hzl5wIcxD_gS62~R?!Hg8DO2)S}4O1yO7mj@0#)yK!j z!Pz-7F3D&1x7$$BgqD`pd2D@}aS1>Eji1O;6qs$>;{VqcZq8nU$%QrmifY;Ui9UExH zgNcMwd|`gZr_J}cr)E?Cl|Wi~&O(k7bG(CY#*j*JaQT#)ni}Vd6#?izPz8)<6w#Yr z6h}3V?u*;uT+{QEl94`Gus(LWPO+_}MNiDAFu&&FrAxC%s*43i>uN1F3keF|X-rS% z|2*V3rL?W{<~Nl&Pbhb}zw_>7n=hQ7=GPf_kFht@ZL+!%8(SN*;V+gqugW3`(g}8P zn){TSwvo|gFg@@vAyf+Z!;2R$luw>qcXT5c<~&HGWr9D{nk52W=fUOm18L~eZjkE| zv_v5WhZ7<1%RmPnTa? zf9N@m63(&TlP9t>lb^1*{c1X9+1#1DXGI{Let|OGSmkYM^DsYOZtO? z&oAYizg@4op$)7LBqrxIDfP^$pTPG0h0p&`iBhzGCTO{U3Q4X*9T;IZ+zy=i@T4r; z@)cR4?*)MjT_6g2&zv?GxpgxV7z;s3LPCN-3A>KM3z&|iX?ApUI5;^478LAMoa|b( zl12+%yO^h!AxL~uq?-=Tpsaj8-+8~f`eLf2k!^!^CPp1LG$b?t+G=){XIIIIdQz34 zFEQGf+1PIItrrqf`KZ5JF5Y3aY4=V!Iqp!Jq^5&IW|dj~u;Pa9U%p@bi^gJ>QA!$> z8O}EyWHGhbAY{$)W5B2GM2r6^aZ%bv1v+I~Pqhs$I}r;O2LDrRZthS3E-ugoZ9 zQU`a}IhM@drZ3Q%yiD;`N^Z9B+28$`!p^=6blney54Mm==tqY5_;&!?|&+GKr*&oeB_Jo%cp zvbtIg3MJsn*Vf1D`F&>`-8?)JEnnRL>c5|MqP(JFQIh7Ra%crrr6>E|#6ia_&c8F% z)8qfhu%M@>Din1&`J-S+>SQgq*KpYqZUv7gX}8KTTpvApWZjl44%{Aq2@Y;aR8t5o zUpq@mG)f=C<8aK(b#gS0jvV{C+ta zKBnD=o|(9zorX5Y%+Ig8wr9L9P(!m{@}7*0OuEGHTlS;o#pm^#dJ3n?3!S8AGT0;o ztu_X-_Xbw!JpkExwGf5bG_wVDNsSN4vD)CRxkb8AiroWX&$8|dX^~mUCD*r=G^07c zydCH6Cgimw{fzxuv9Mdl1@9_?Xy<<|_>{pSvEbGAwWxaCoosV2Is>NZH2<373_Pa` zf4BX`u>v!nTC~{Ix{`-OYbq#z5rWOGHZPbB+`qLd=}cv<7x?zEiOa~KAY%NUm61VF zg!}x8@B`*<+7)^fNrGt?Bte*^nh>7=TjWv1@A~6oneW`FfUIpxJ?6Nxa}|-bdTV)7 z4QXJyKx^O`M0g^I{qE$~q$>{H<%|T&VWL){lV)OffyZlm44l8cE88bo6o^lV&UUeF zt@FV90|piu1PZ@T-*lpOVt7~?htctCy%6RMbhB7F$A#w4!y@=f0N99%0`SGj!*c^_DRh7;gM>APZ!qT&dk3{st~ifD*Z%WCEHcB+N5I{M%m3<>^oK`BqTufy)OQP za!!miBB;eLcbouKT>=Nopupt-bt4y*s(SA&ndp;szHnm>>VEo zD3BFq&ONH8YV$VhXM7< z+S?7^b3y!~(ojQGbq6o8#A7L|V=9IQ`0CP@YrL$H&h5|p5lnV%E_ zKBu9JsFFHB>87QLNk8Ez_d_Qj9>=eN=Dg@WpnM4?zGd`<_K)O;|H%SSsA9_Kw-!Pm z7oP}{v(C|%Hoze*M|+dDc)zH4ikH-t|#Ug#(U78H4G!C4B0S#k%U48t)9G|I=P zI4x8yI>ofZ+mzB>6=1u{xg=cq*?p_IeU78&j=CJ|Pc+k^gy|UGn{r;-$LT|#b!8Eb z>WG(0Ytt_k6uZ1=o^mWXH0Ay6Ynj$!f&4nNhgWBQytt>OcNg=K(?rNRxb9lNUrF%$ zXKT~iZBRp*mN8DDn>Uz_`%mTE5;*apX-(j6Urk%v!OrCd3vR^6)E^LHHRc~5^3&=C zZ56RKUc1;Ol1@|Ap~`-gEaXs>F)i5HU9#nmg)o2ciYgJuBkncLJH6|1<|%XEG%3NFtcI9hWxW%mf_GZg(M3( z@#xW`A!}JBliO*H92M5G!k80KD6*e&;HaCKNSReK&%iXz7Eh`zkih0PzI`k0JLeVZ zkN~X&7QecM#hT4BGLGLrY=Ok3LDeKaCnPAnEHipOW2Dq$voAG~KsQf#jau5;l3-yI z-6%XVa&3?(sbknx78#!7tyUvV$Bf}vktQnVF(%sc>62sM8$Mt(QfczRMMVlI9VuW( zLUAGU_H2QpLCBU_)WzXgcz)-B^)505OC71SmhJiZ3q$Y;gzo&RTyWQ}U4>W; z;=uxzLEv`U!IzkrSPzQhG}OVjYO5{e<*RP?9z{mP5=_e1&^^E+nH)#yt)=y)3_+bT z>!WA>3d=D*yNJU|f5H3-shsgw{SO}<+516T*vV<8y_-H3+go?=nP>?}Na*>B4_4+r zvylp~YK$ZUHb*j^1T(50$qx<+sszS1L>1?AO7fNwp!ZSoFqU2 zk^c_d5$g|6Ht6TtUO=edqbWZmA4vWRh4n2#ZGU1t@`-!DRT%DT2-kVWk>EP{h@%{zwmG zH8wV8Vx5Rekp2CBazb!Mh9sf>_#S4EF#HN=tWnNlz;>qagP?KxyA6UV-aoo=wVcBO z2o?U1A3wHLnSa`MTkYu4m4}ZUiGYF%+-PBG*^P0CITzfLBFrM%i9iahlufyba6p7$ zwZgec8!g1{qX3CkDZM7lOrKFc{SuQ41i9b#L z#e|kz#+du9&eSQYS^3oKfHgMV^eL(_`*Ne`I-e|^_h?RXd1F2Veg(I0t?)Ucazwm`ZtQyQ{7Iph#H86n&_3Vm#7;6&@+1+)_p9nB0F zKoPG^ee&ce%VttvR}_Dvb+b|9SRqTn8|4`P-nKr7`iHdY>fXpVyq+0SL5$5A#??p?41d0MNZ)o3gmOuc zc+~{0kf9Sfr@4$g`qv)UBC4%zXE7fPSom7I4;+9BUyeN>ngbIn?~BXrV3PY|%7EhiX6MSZN=ycO>|{ zEY$rT-RUlUcn;wFf=Y-Jv&-4D*;Q87q1_rlPTX&pn>QKe`-BfAWQIt{)8K6dnU}l1 z@rr)t;4>P&$0KgtwFfn4t|teMQrelyb$9iS9sQ0 zV58RxU!SJ*?KyamI&Zgh{`Ka++f`!8s=sYV+x@WfsA7781ES$BdqB@Fj;=s*s4_e; zn?nR^icpwaZ;X}L^Ab2C%cAM>-grHCk7RmEuR z{fkS&Apbm|jp)i{GYC=;UYE~!BPmJbV|#m+Q~zOur)L@S>^q+$6a{%hiKI%bH|x&!3*OJwOYNdPkXaV8a`W7ybg&ea6U7w zHS!c2hQO%_EswbJoEX>DN2x};HxXvAbzkn?hjsg-> zQ)t_jqea|LSUBOBVciwMp=JJ=?N>qF58jsF;9|HtfUG>SQ3-(D*_RneItzg!7$zDB z$pC1LOb?Zq!`^e78L6&nMk%mol+69*okIe~&zZu6Ci2poxShcSnLoI9`>J6Eq$MJD zVBAXQqj1YX28nIk4YEj!k3sb8w&#!SBRc}!dCS8tKyhRdP&D{Bw}+W$-ND!p%upnO zxA>ORQ@8dhZEx7(^ws|#MR-39^u@-V9axR11B)^9+mXM6hk*#SbxOYo9 z8D5Wydc{=TtPUl*=_lo9ZSDThs)Ogs@AOW;F1ddpFg-Bs%$2oCH7yRK;J58O&nZYbautb1sR1u zmle;?dBOz_J)z0N!UUg%bQka6V_9-HAdCjF3tV2bgiUbc#=Wt5f(DNf48s-@nMOLF zqdXLF#US5-0m+$MxktzgC{7Q`5U7B&pJ&%zj$zkuM`e+tOE4M;q9%0W;-X`arG&E) zitn4(-But8M!b<-mZ2`dSLWF-dyhw7g$f3@ttaV<;#Ec_h(u*5AIUd?cvFC!4n5PzXXBHY`OO4T_42 zYPryZG*Fb0$5N&F85x){r0PaKRVUeZ7PmaMV#ll0r=Qq%-1P!55P*yye2I{NHz^fG zk$cyYm_*_9kAlgr0QOA#PQ~NaLW^mQLs9k4Dr;uWw%@FI#>TJX>wGLMrpc#MsQIWU75&G*0L?RXI6QP4{j)EMzqSTJaB1` z?Nu=P1jtaszkXE#ZIQI%@!_>B<7`Wps-WV<@;ScYBasItay1bf0Yl8JVVqdBE2v66 zANGg+zt--8POC1ggom_0ikk4lJ%5K4P0bajKCf`|^bD2Ru*2!=0>tLT4DvbP23oMky*wfsluh@W7R`GGueV>H(Fgm7m=GDUZ~3=(rs z>{0uhH*6%$W@aW#Y6`jdJEj#uL=znDy=9;1^8EvK;`j4a_JRmb6WWUd+~GN-&{}#9 zVZxDOBFqtogHAIl4dE0aXJpNqHC^DW)VzV^&umCU0FL;@HUs3ULJUPve)KC>*pU$w z_Zctu3QbHDPHnroCoe3~Hv`6%qm+YA#?-bm*OHn}qwGeb&M2+nvpD$o(Xtr$vxRDC z^TF7yB+MVgREhq`iCjJjs4FV+FQcn&%|H;UW`{`N4>GCJ^mCRWjhSrA7Jxo?+pT9Q zjQLM+T*#C`jdg$e6i`~Ki~x}~3pMZ&rO4Yq$ZGi1N;gedbObls$R?ga&>QtDq_RrX9|CR zOU>@v)c#=;3_;T6!+2!=62U7&I3adac9jLB+ZAka=u%#@cCFC5bxZ<2lR}^nCml2F zi>KD1*!&(Gxkqx|#AeC@4Zz>)h8RIGn(fJuTenvI9{(PSAW%pd9ZJ;c(;LAX{ea)Q zQ=*LgOG=cG4TrR2nLy9!D%WLlUhyXs81dcgZ*ao;6lqA3rzgP)LWe;NaFpNyFDNpy zcRuMSbxn1$$_qxG%a4y2P_)NcO6-tdR-BtOU#;Y`8iN+Pn4HsB4y4_~(1+kWUo7*N zy1x@`9mYS@U25O{-Fa(x;hPg6h#MAgTQzdKI?#h^NXT4iQPC5Y?DqC3paNy!qfw+FnfMR9#4Y z$mV6XWDmUF*7?`1k+~W7)rwx+5UPhqN7aTpivEJ--xEnX_`bHt{@e0A5Cc`gm>Tlz zjZwrVIN!t%*~EJKhJ@ioKn?*kmB$_##8pJ%;UWOgCj=O(uyAYbs)6sf%i4Dsj4Pr$ z6pnweAxi>ri@3SCNx)_EKCKKs5DBo76g?^w>gH|RTcS4IBsY^6_7{f0ABofdy)!Ui z!d_lm{|SOZ1$s0>R;E(icbW$hnoe7eE=!i#u#7^%KXU>(aEfTY@M$tGa5*DCS}PNc z!2NykM_J?1)7Jz|81{#&p4=2mIqi{RPEhFRb>2aOn zHD@7mJz%)23>jhsF0RvQ<=b(OWEjBa)uZMad3eJlzi+YV$?I2yYJY30AjU4a__B5_ zBgjV3ty{Om3=m5=|M;;CuthNPW-oi~VS$}s)!yMU7(y~}KzYOg9(i}+3U;`mU?1MhPI4a_p2FqJZqMR4}8{8yPWI2Jmt;ofbGuh8b@8>;l5;`u1%Z25K1J zPHHf_0Fv9BB}(thDWl>@e*Tk=!#qNVtaTtGK^B{}g8kX4XlEyE-H`0;~;w@H^I7Zwni`&$g_d4Gi5&moE#&a!P= zE-Si}ncz=k0f@j$$hFvl`-TNu2`PgjEQFdx#{fd;33p5|@|m(Ex()gmlqq@EfU*TC zhc6%t|K^*CBf`)u+)@i5mPBv1yjZoJTr@%~uQqo33Xs<-xV;g#Z(q*LlnR~V{@dFM zLK7x+)(9>?l$?f(3VB?2(T;2}0#K z``g*EEsZDx@Z_xP@Ax&@tlDyVCDxoi(c#GsSC%^Q0fGWz9o*!W5};SwtuHuq(5CaE zBZb64`Ut(6#Gd|jd+y#nu*lGEy88rUpW(lo5|1;0v^!;$uow%8=^;CWc1%(gB>Z)* zcfS`@b)qX0q4oUv1%$vuTy-0Ly^Rb*r?2%4gu2bl%y3|Mf}V7txXoOHrap$@09QVL zo`?!3p>XsuqK4xo$fkotM2Ocak(MQ8x{x#>#4)k)NMxFz0o^}xk1aMXt{c1nRE4ln zxpTc?wjFf$W_qTz&(u%L+8CK7;`&d{V-`XUA;=ag3Y+KnU>O!R({sWuZ1wi#fDYtF z)NQYydm!mC<5q>7V^1LWRnj-&eSU91+PMqf6A9aqDRbMsmxt^#9EIJ`igro_Dr=mC9|N6VgCjwM@ys56End3(Hr!?|;6P*jHB>>M&do5j_} zG%=3lw{39VFY_y01Xfzix5J4eFa9CwnW!@8Rs@}slobJq;I~;7nk_E1`tXrxknnmY zuKnlUq|Tp=rOgLzx;Egy`0nk0n zXC_C8nFG{+5qQ-c;ct==-n;i=+9y@s`{3dvAwhEOBn3^z*SB{MNEC-Kb+X}5k9(#! zZ{AE;JW|wM;K=2GCL{svxNrR_Ya#hX*ja)FMtfgZz;h(IW-pu`B2<7aK#U=D1z3-G z3xreQE-bM$k@wYKOe<&MG~Jm6+-%h$_Sgh>i}ypcX;`5ji93<7MQQ z0J5M-4I%#i3rX%Uj@BEA1_!-|tk>7JJjordKf*95KjDf4!JAN`I0OXPFKLPd36_5h zBd*H1gzT$KG+ZjdYxaaOcGKq8u3g(xw9HT#mxsVp0PVAx7Y1gJ*QF!`VoUdV6sg7- zN8zRu44=u`R;>rfmIQ9ukd|@jk5)j!KnX6ReJAFNf=P&HDV6^ z0H-ZiPjdBJ{iW4X+$=rQDHRoTWn8?u*SLJ)LeuBCq z68Zo~uJ3ZiLkYEuSVrsA@~PcB1-Ku|mN<$=FS9gMX%!w)3BDy!244G(3nqGBSsaB_Ww_ zRipT=rXhXo538Ik`kfMB_Nc(@{M^xSa@&)i^)rZ+*RN2{9Pp-?BKJ1O#h2LM^6iC&1o&WERL*d`+$y+rF zy=?puSfk1^DyYVLGFsA>QY|&)70%x*UwYqGyEwab)qB+yqvwvfT=6}bD%SrrdBX7c z{UbWzBG+YKL@=>N#?^iJr8~}}M+u$#>aFYiJ(8~7t8#U0XIb~hKN^_2x&;L(&IRwO zlj(FG9mZ9SzE&M0TF2eAbk3XbvmMQqGCpo%=3{3waqPJAsNgTbx=OEx4*lblg=y_W z0kIVy-1$HM=Ksu}`pn0sTi0@;uKwS039)6s<+;y3p|k9VBk4>N6zPZhlf|72JuI6Y zN~WiiCdRD>RBqGVTeRZ(rZ#1C>I+(Y=WjXlZ~d$11|lB+OHfGN^4Fc}B4gKGI)52W%|2wfEi1xp}^w(doeaLN;`M>`%zLWjH m%&qMIei`bkyWi#+lGAT8kFhBq!GDNj!5)o+>W@@S{QnPt#Nd4Z diff --git a/dnt/media/users/user.png b/dnt/media/users/user002.png similarity index 100% rename from dnt/media/users/user.png rename to dnt/media/users/user002.png diff --git a/dnt/media/users/user_7fBqBIR.png b/dnt/media/users/user_7fBqBIR.png deleted file mode 100644 index 228c3f9b02570c1a6f5e1bd139642b9b6f823d3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20918 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Список друзей -
    +
      {% for friend in friends %}
    1. Имя-{{ friend.username }} Дата рождения-({{ friend.birthdate}}) Уровень-{{friend.level}}
    2. {% empty %}
    3. Вы не добавили еще ни одного друга
    4. {% endfor %} -
+

Назад

{% endblock %} diff --git a/dnt/user_profile/templates/user_profile/games_list.html b/dnt/user_profile/templates/user_profile/games_list.html index 3afbacd..e4e1c92 100644 --- a/dnt/user_profile/templates/user_profile/games_list.html +++ b/dnt/user_profile/templates/user_profile/games_list.html @@ -1,19 +1,24 @@ - - - - Games List - +{% extends "main/base.html" %} +{% load static %} + +{% block title %} + Мои игры +{% endblock %} + +{% block body %} + {% include "main/includes/inc-info.html" %}

Мои игры:

{% if games %} -
    +
      {% for game in games %} -
    1. Тип игры:{{ game.type }}, Начало игры:{{ game.started }}
    2. +
    3. Тип игры: {{ game.type }}, Начало игры: {{ game.started }}
    4. {% endfor %} -
+ {% else %}

Игры не найдены.

{% endif %}

Назад

- +{% endblock %} + diff --git a/dnt/user_profile/templates/user_profile/leaderboard.html b/dnt/user_profile/templates/user_profile/leaderboard.html index a08fb7b..e00dfc5 100644 --- a/dnt/user_profile/templates/user_profile/leaderboard.html +++ b/dnt/user_profile/templates/user_profile/leaderboard.html @@ -1,9 +1,13 @@ - - - - - Rating - +{% extends "main/base.html" %} +{% load static %} + +{% block title %} + Профиль +{% endblock %} + +{% block body %} + {% include "main/includes/inc-info.html" %} + @@ -25,6 +29,5 @@

Назад

- - +{% endblock %} diff --git a/dnt/user_profile/templates/user_profile/manage_friends.html b/dnt/user_profile/templates/user_profile/manage_friends.html index afb59b3..31a541d 100644 --- a/dnt/user_profile/templates/user_profile/manage_friends.html +++ b/dnt/user_profile/templates/user_profile/manage_friends.html @@ -1,13 +1,12 @@ - - - - - Title - - +{% extends "main/base.html" %} +{% load static %} +{% block title %} + Поиск друзей +{% endblock %} -{% block content %} +{% block body %} + {% include "main/includes/inc-info.html" %}

Поиск друзей

diff --git a/dnt/user_profile/templates/user_profile/profile.html b/dnt/user_profile/templates/user_profile/profile.html index 626bbb8..0b1b071 100644 --- a/dnt/user_profile/templates/user_profile/profile.html +++ b/dnt/user_profile/templates/user_profile/profile.html @@ -1,8 +1,22 @@ +{% extends "main/base.html" %} +{% load static %} + +{% block title %} + Профиль +{% endblock %} + +{% block body %} + {% include "main/includes/inc-info.html" %} + -{% block content %}

Профиль игрока.

+ {% if user.avatar %} + + {% else %} + + {% endif %}

Ник: {{ user.username }}

Дата рождения: {{ user.birthdate }}

{% if user.email == '' %} @@ -12,6 +26,8 @@

Email: {{ user.email }}

{% endif %}

Опыт текущего уровня: {{ user.current_experience }}

Уровень: {{ user.level }}

+ +

Пятёрка лидеров

diff --git a/dnt/user_profile/templates/user_profile/user_list.html b/dnt/user_profile/templates/user_profile/user_list.html deleted file mode 100644 index 5727b80..0000000 --- a/dnt/user_profile/templates/user_profile/user_list.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - User List - - -

Список всех игроков:

-
    - {% for user in users %} -
  • Имя-{{ user.username }} Дата рождения-({{ user.birthdate }}) Уровень игрока-({{ user.level}}) Опыт текущего уровня-({{ user.current_experience }})
  • - {% endfor %} -
-

Назад

-

Поиск друзей

- - From 6024d877287a944298a8726a2e55378af9bd5d20 Mon Sep 17 00:00:00 2001 From: Istrione Date: Sat, 15 Apr 2023 17:51:27 +0300 Subject: [PATCH 03/22] update grade_quest and add front --- dnt/authapp/models.py | 3 + .../templates/questions/add_quest.html | 39 +++--- .../templates/questions/grade_quest.html | 105 +++++++-------- .../templates/questions/offer_quest.html | 125 +++++++++--------- .../templates/questions/qes_list.html | 57 +++----- .../questions/question_confirm_delete.html | 64 +++++---- .../templates/questions/question_form.html | 17 ++- dnt/questions/views.py | 7 +- 8 files changed, 202 insertions(+), 215 deletions(-) diff --git a/dnt/authapp/models.py b/dnt/authapp/models.py index 4c2a32a..210a7b1 100644 --- a/dnt/authapp/models.py +++ b/dnt/authapp/models.py @@ -62,3 +62,6 @@ class Remark(models.Model): class Meta: unique_together = ('question', 'author',) + + def __str__(self): + return f'#{self.text} {self.rating}' \ No newline at end of file diff --git a/dnt/questions/templates/questions/add_quest.html b/dnt/questions/templates/questions/add_quest.html index 0467fb4..13daf72 100644 --- a/dnt/questions/templates/questions/add_quest.html +++ b/dnt/questions/templates/questions/add_quest.html @@ -1,10 +1,10 @@ - - - - - Добавление вопроса - - +{% extends "main/base.html" %} +{% load static %} +{% block title %} + Добавить вопрос +{% endblock %} + +{% block body %} {% include 'questions/includes/messages.html' %}

Добавить вопрос

@@ -45,17 +45,16 @@

Добавить вопрос

-{% block js %} - -{% endblock %} - - \ No newline at end of file + + {% endblock %} +{% endblock %} \ No newline at end of file diff --git a/dnt/questions/templates/questions/grade_quest.html b/dnt/questions/templates/questions/grade_quest.html index e456186..4e08c00 100644 --- a/dnt/questions/templates/questions/grade_quest.html +++ b/dnt/questions/templates/questions/grade_quest.html @@ -1,55 +1,56 @@ - - - - - Title - - -{% include 'questions/includes/messages.html' %} -

Оценить вопрос

-
- {% csrf_token %} -

- -

-

- -

-

- -

-

- -

-

- -

-
+{% extends "main/base.html" %} +{% load static %} +{% block title %} + Оценка вопросов +{% endblock %} -{% block js %} - -{% endblock %} - - \ No newline at end of file + + {% endblock %} +{% endblock %} \ No newline at end of file diff --git a/dnt/questions/templates/questions/offer_quest.html b/dnt/questions/templates/questions/offer_quest.html index 147d41e..4b90c5d 100644 --- a/dnt/questions/templates/questions/offer_quest.html +++ b/dnt/questions/templates/questions/offer_quest.html @@ -1,65 +1,64 @@ - - - - - Предложение вопроса - - -{% include 'questions/includes/messages.html' %} -

Предложить вопрос

-
- {% csrf_token %} -

- -

-

- -

-

- -

-

- -

-

- -

-

- -

-
-{% block js %} - -{% endblock %} - - \ No newline at end of file + + + {% endblock %} +{% endblock %} \ No newline at end of file diff --git a/dnt/questions/templates/questions/qes_list.html b/dnt/questions/templates/questions/qes_list.html index 3bb3e5c..1426ceb 100644 --- a/dnt/questions/templates/questions/qes_list.html +++ b/dnt/questions/templates/questions/qes_list.html @@ -1,36 +1,21 @@ - - - - - Модерация вопросов - - -

Модерация вопросов

-{% for item in object_list %} -{% if item.is_validated == False %} -
-

{{ item.category.name }}

-

{{ item.created_at }}

-

{{ item.question }}

-

{{ item.answer }}

- Одобрить - Не одобрять -
- {% csrf_token %} - -

- -

-

- -

-
-
-{% endif %} -{% endfor %} - - \ No newline at end of file +{% extends "main/base.html" %} +{% load static %} +{% block title %} + Модерация вопросов +{% endblock %} + +{% block body %} +

Модерация вопросов

+ {% for item in object_list %} + {% if item.is_validated == False %} +
+

{{ item.category.name }}

+

{{ item.created_at }}

+

{{ item.question }}

+

{{ item.answer }}

+ Одобрить + Не одобрять +
+ {% endif %} + {% endfor %} +{% endblock %} \ No newline at end of file diff --git a/dnt/questions/templates/questions/question_confirm_delete.html b/dnt/questions/templates/questions/question_confirm_delete.html index 104eae3..c1edddf 100644 --- a/dnt/questions/templates/questions/question_confirm_delete.html +++ b/dnt/questions/templates/questions/question_confirm_delete.html @@ -1,37 +1,35 @@ - - - - - Title - - -
-
-

Удалить вопрос?

-

- Удалить вопрос:
- "{{ object.question }}" от {{ object.created_at }} -

-

-

-
+{% extends "main/base.html" %} +{% load static %} +{% block title %} + Удалить вопрос +{% endblock %} -
- {% csrf_token %} - -
-
-
- Отмена +{% block body %} +
+
+

Удалить вопрос?

+

+ Удалить вопрос:
+ "{{ object.question }}" от {{ object.created_at }} +

+

+

+
+ +
+ {% csrf_token %} + +
+
+
+

-

-
- - - \ No newline at end of file +{% endblock %} \ No newline at end of file diff --git a/dnt/questions/templates/questions/question_form.html b/dnt/questions/templates/questions/question_form.html index 220958e..313b938 100644 --- a/dnt/questions/templates/questions/question_form.html +++ b/dnt/questions/templates/questions/question_form.html @@ -1,10 +1,10 @@ - - - - - Title - - +{% extends "main/base.html" %} +{% load static %} +{% block title %} + Подтверждение добавления +{% endblock %} + +{% block body %}
@@ -14,5 +14,4 @@
- - \ No newline at end of file +{% endblock %} \ No newline at end of file diff --git a/dnt/questions/views.py b/dnt/questions/views.py index bc1b80b..3c7c848 100644 --- a/dnt/questions/views.py +++ b/dnt/questions/views.py @@ -1,11 +1,12 @@ from django.contrib import messages from django.core.cache import cache +from django.db.models import Q from django.http import HttpResponseRedirect from django.shortcuts import render, get_object_or_404 from django.urls import reverse, reverse_lazy from django.views.generic import TemplateView, DeleteView, UpdateView, CreateView, DetailView -from authapp.models import Remark, AuthUser +from authapp.models import Remark, AuthUser, QuestionRatedByUser from questions.models import Question, Category, Type, SubType, Answer, QuestionComplaint @@ -110,7 +111,9 @@ class GradeQuestionView(TemplateView): def get_context_data(self, **kwargs): context_data = super().get_context_data(**kwargs) - context_data['question_list'] = Question.objects.all() + context_data['question_list'] = Question.objects.filter(~Q(pk__in=[x.question.pk for x in Remark.objects.filter(author=self.request.user)]) & + Q(is_validated=False)).order_by('?').first() + context_data['remark_list'] = Remark.objects.filter(question=context_data['question_list']) return context_data def post(self, request, *args, **kwargs): From cc497e0802d1f9f3b4b74d4cc5d4f41872fbb8ff Mon Sep 17 00:00:00 2001 From: Barrakuda8 Date: Sun, 16 Apr 2023 17:32:44 +0300 Subject: [PATCH 04/22] Games lobby front --- dnt/authapp/models.py | 4 + dnt/games/templates/games/lobby.html | 107 ++++++----- dnt/games/urls.py | 1 + dnt/games/views.py | 53 ++++-- dnt/main/templates/main/base.html | 13 +- dnt/main/templates/main/includes/header.html | 20 +- dnt/static/css/games_style.css | 183 +++++++++++++++++++ dnt/static/css/games_style.css.map | 9 + dnt/static/css/games_style.scss | 142 ++++++++++++++ dnt/static/css/style.css | 83 +++++++-- dnt/static/img/chat_open_icon.png | Bin 0 -> 4026 bytes dnt/static/img/invite_icon.webp | Bin 0 -> 2486 bytes dnt/static/js/queue.js | 42 +---- dnt/static/js/queue_functions.js | 22 ++- dnt/static/js/user_websocket.js | 73 +++++++- 15 files changed, 613 insertions(+), 139 deletions(-) create mode 100644 dnt/static/css/games_style.css create mode 100644 dnt/static/css/games_style.css.map create mode 100644 dnt/static/css/games_style.scss create mode 100644 dnt/static/img/chat_open_icon.png create mode 100644 dnt/static/img/invite_icon.webp diff --git a/dnt/authapp/models.py b/dnt/authapp/models.py index 4c2a32a..a088f53 100644 --- a/dnt/authapp/models.py +++ b/dnt/authapp/models.py @@ -41,6 +41,10 @@ class AuthUser(AbstractUser): current_game = models.ForeignKey(Game, on_delete=models.SET_NULL, null=True, blank=True) avatar = models.ImageField(upload_to="users", verbose_name=_("Аватар"), **NULLABLE) + @property + def get_friends(self): + return AuthUser.objects.filter(pk__in=self.friends.values_list('pk')) + class QuestionRatedByUser(models.Model): """ diff --git a/dnt/games/templates/games/lobby.html b/dnt/games/templates/games/lobby.html index cdbfdd8..5631bfd 100644 --- a/dnt/games/templates/games/lobby.html +++ b/dnt/games/templates/games/lobby.html @@ -1,11 +1,11 @@ +{% extends "main/base.html" %} {% load static %} - - - - - Title - +{% block title %}Игровое лобби{% endblock %} +{% block style %} + +{% endblock %} +{% block js_first %} - +{% endblock %} +{% block js_second %} - - - - - - -Начать игру -: -
-

{{ user.nickname }}

- {% if users %} - {% for u in users %} -

{{ u.nickname }}

- {% endfor %} - {% endif %} -
-

{{ user.current_lobby.pk }}

- -

Пригласить друга

-
- {% for friend in friends %} - {{ friend.nickname }} - {% endfor %} -
-{% if theme %} - -{% endif %} - - \ No newline at end of file +{% endblock %} +{% block body %} +
+
+ Режим игры: + + {% if theme %} + Выберите тему для игры: + + {% endif %} +
+ +
+ {% for b in blanks_left %} +
+ {% endfor %} + {% for u in users_left %} +
{{ u.nickname }}
+ {% endfor %} +
+ {{ user.nickname }} +
+ {% for u in users_right %} +
{{ u.nickname }}
+ {% endfor %} + {% for b in blanks_right %} +
+ {% endfor %} +
+
+
+ +
+
+ Начать игру +
+ : +
+
+
+ +
+
+
+{% endblock %} \ No newline at end of file diff --git a/dnt/games/urls.py b/dnt/games/urls.py index 506e578..0ed2b7f 100644 --- a/dnt/games/urls.py +++ b/dnt/games/urls.py @@ -6,6 +6,7 @@ urlpatterns = [ path('lobby/', games.create_lobby, name='lobby'), path('join_lobby/', games.join_lobby, name='join_lobby'), + path('join_lobby_ajax/', games.join_lobby_ajax, name='join_lobby_ajax'), path('change_game_mode/', games.change_game_mode, name='change_game_mode'), path('queue/', games.queue, name='queue'), path('quit_lobby/', games.quit_lobby, name='quit_lobby'), diff --git a/dnt/games/views.py b/dnt/games/views.py index 16d688f..0fade31 100644 --- a/dnt/games/views.py +++ b/dnt/games/views.py @@ -33,13 +33,16 @@ def create_lobby(request): 'user': current_user, 'modes': Game.types, 'max_players': GAME_MAX_PLAYERS, - 'users': '', - 'friends': AuthUser.objects.filter(pk__in=current_user.friends.values_list('pk')) + 'users_left': [], + 'users_right': [], + 'blanks_left': range(math.floor((GAME_MAX_PLAYERS - 1) / 2)), + 'blanks_right': range(math.ceil((GAME_MAX_PLAYERS - 1) / 2)), } + return render(request, 'games/lobby.html', context=context) -def join_lobby(request): +def join_lobby_ajax(request): sender = AuthUser.objects.get(pk=int(request.GET.get('sender_id'))) lobby = Lobby.objects.get(pk=sender.current_lobby.pk) @@ -49,7 +52,7 @@ def join_lobby(request): current_user.current_lobby = lobby current_user.is_lobby_leader = False current_user.save() - friends = [x[0] for x in current_user.friends.values_list('pk') if x not in [player.pk for player in lobby.players.all()]] + # friends = [x[0] for x in current_user.friends.values_list('pk') if x not in [player.pk for player in lobby.players.all()]] last_place = True if current_user.current_lobby.players_count == GAME_MAX_PLAYERS else False data = {'action': 'player_join', 'joiner_pk': current_user.pk, 'joiner_nickname': current_user.nickname, @@ -58,23 +61,35 @@ def join_lobby(request): for user in AuthUser.objects.filter(current_lobby=current_user.current_lobby).exclude(pk=current_user.pk): async_to_sync(layer.group_send)(f'user_{user.pk}', {'type': 'send_message', 'message': data}) - theme = True if eval(lobby.type)[0] == 'theme' else False + return JsonResponse({'status': 'ok', 'url': 'http://' + request.META['HTTP_HOST'] + '/games/join_lobby/'}) + else: + return JsonResponse({'status': 'full'}) + - context = { - 'title': 'Игровое лобби', - 'user': current_user, - 'modes': Game.types, - 'max_players': GAME_MAX_PLAYERS, - 'users': AuthUser.objects.filter(current_lobby=lobby).exclude(pk=current_user.pk), - 'friends': friends, - 'theme': theme, - 'themes': Category.objects.all().values_list('name') - } +def join_lobby(request): - return HttpResponse(render_to_string('games/lobby.html', context=context)) - else: - return HttpResponse('full') + current_user = request.user + current_lobby = current_user.current_lobby + + theme = True if eval(current_lobby.type)[0] == 'theme' else False + + users_left = [j for i, j in enumerate(AuthUser.objects.filter(current_lobby=current_lobby).exclude(pk=current_user.pk)) if (i + 1) % 2 == 0] + users_right = [j for i, j in enumerate(AuthUser.objects.filter(current_lobby=current_lobby).exclude(pk=current_user.pk)) if (i + 1) % 2 == 1] + context = { + 'title': 'Игровое лобби', + 'user': current_user, + 'modes': Game.types, + 'max_players': GAME_MAX_PLAYERS, + 'users_left': users_left, + 'users_right': users_right, + 'blanks_left': range(math.floor((GAME_MAX_PLAYERS - 1) / 2) - len(users_left)), + 'blanks_right': range(math.ceil((GAME_MAX_PLAYERS - 1) / 2) - len(users_right)), + 'theme': theme, + 'themes': Category.objects.all().values_list('name') + } + + return render(request, 'games/lobby.html', context=context) def change_game_mode(request): @@ -175,7 +190,7 @@ def quit_lobby(request): current_user = request.user # если пользователь в лобби один, лобби удаляется, если нет - лобби убирается из current_lobby объекта пользователя - if current_user.current_lobby and current_user.current_lobby.players_count == 1: + if current_user.current_lobby is not None and current_user.current_lobby.players_count == 1: current_user.current_lobby.delete() elif current_user.current_lobby is not None: data = {'action': 'player_quit', 'quitter_pk': current_user.pk, 'quitter_nickname': current_user.nickname, diff --git a/dnt/main/templates/main/base.html b/dnt/main/templates/main/base.html index fb90254..a1d8f9e 100644 --- a/dnt/main/templates/main/base.html +++ b/dnt/main/templates/main/base.html @@ -7,17 +7,18 @@ {% block title %}{% endblock %} {% block style %}{% endblock %} - {% block js %}{% endblock %} + + + {% block js_first %}{% endblock %} + + {% block js_second %}{% endblock %} {% block header %} {% include "main/includes/header.html" %} {% endblock %} -
- - Принять - Отклонить -
{% block body %}{% endblock %}
diff --git a/dnt/main/templates/main/includes/header.html b/dnt/main/templates/main/includes/header.html index 231cebd..9ec2b3c 100644 --- a/dnt/main/templates/main/includes/header.html +++ b/dnt/main/templates/main/includes/header.html @@ -1,3 +1,5 @@ +{% load static %} +
+
+ + Принять + Отклонить +
{% if not request.user.is_authenticated %} Войти Зарегистрироваться {% else %} Выйти Просмотр профиля - Редактировать профиль {% endif %} {% if request.user.is_authenticated and request.user.current_game %} Продолжить игру {% elif request.user.is_authenticated %} Играть +
+ Друзья +
+ Добавить друга + {% for friend in request.user.get_friends %} +
{{ friend.nickname }} +
chat + invite
+
+ {% endfor %} +
+
{% endif %} {% if request.user.is_moderator %} Модерация вопросов diff --git a/dnt/static/css/games_style.css b/dnt/static/css/games_style.css new file mode 100644 index 0000000..0e43c34 --- /dev/null +++ b/dnt/static/css/games_style.css @@ -0,0 +1,183 @@ +#site_content { + padding: 0 10px; + width: 877px; +} + +.lobby_content { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + width: 100%; + height: calc(100vh - 302px); + position: relative; +} + +.lobby_mode { + position: absolute; + left: 5px; + top: 5px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + z-index: 1; +} + +.lobby_mode > span { + margin-right: 5px; +} + +.lobby_mode > select { + margin-right: 10px; + border: 1px solid #F79F00; + background-color: white; +} + +.lobby_invitation_rejected { + position: absolute; + top: 5px; + right: 5px; +} + +.lobby_players_block { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-pack: distribute; + justify-content: space-around; + height: 100%; + padding-bottom: 50px; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +.lobby_player_block { + height: 100%; + width: 150px; + border: 1px solid #F79F00; + border-top: none; + border-bottom-left-radius: 20px; + border-bottom-right-radius: 20px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + font-size: 18px; +} + +.lobby_player_blank { + height: 100%; + width: 150px; + border: 1px solid gray; + border-top: none; + border-bottom-left-radius: 20px; + border-bottom-right-radius: 20px; +} + +.lobby_bottom { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + position: absolute; + bottom: 0; + left: 0; + width: 100%; + padding: 10px 0; +} + +.lobby_start_block { + position: relative; + color: #F79F00; +} + +.lobby_start_game_button { + cursor: pointer; +} + +.lobby_start_game_span { + color: gray; +} + +.lobby_countdown_block { + position: absolute; + top: 0; + left: 110%; + display: none; +} + +.lobby_accept_request_bg { + position: fixed; + width: 100vw; + height: 100vh; + top: 0; + left: 0; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + background-color: #A6A6A6; + opacity: 0.8; + z-index: 2; +} + +.lobby_accept_request_button { + width: 300px; + height: 300px; + border-radius: 150px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + background-color: white; + border: 5px solid #F79F00; + text-transform: uppercase; +} + +.lobby_accept_request_button > span { + border: 2px solid #F79F00; + padding: 5px; + font-size: 24px; + font-weight: bold; + letter-spacing: 0.2em; + cursor: pointer; +} + +.header_friend_invite { + display: block; +} + +.header_friend_invited { + display: none; +} +/*# sourceMappingURL=games_style.css.map */ \ No newline at end of file diff --git a/dnt/static/css/games_style.css.map b/dnt/static/css/games_style.css.map new file mode 100644 index 0000000..a47075b --- /dev/null +++ b/dnt/static/css/games_style.css.map @@ -0,0 +1,9 @@ +{ + "version": 3, + "mappings": "AAAA,AAAA,aAAa,CAAC;EACV,OAAO,EAAE,MAAM;EACf,KAAK,EAAE,KAAK;CACf;;AAED,AAAA,cAAc,CAAC;EACX,OAAO,EAAE,IAAI;EACb,cAAc,EAAE,MAAM;EACtB,eAAe,EAAE,aAAa;EAC9B,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,mBAAmB;EAC3B,QAAQ,EAAE,QAAQ;CACrB;;AAED,AAAA,WAAW,CAAC;EACR,QAAQ,EAAE,QAAQ;EAClB,IAAI,EAAE,GAAG;EACT,GAAG,EAAE,GAAG;EACR,OAAO,EAAE,IAAI;EACb,WAAW,EAAE,MAAM;EACnB,OAAO,EAAE,CAAC;CACb;;AAED,AAAA,WAAW,GAAG,IAAI,CAAC;EACf,YAAY,EAAE,GAAG;CACpB;;AAED,AAAA,WAAW,GAAG,MAAM,CAAC;EACjB,YAAY,EAAE,IAAI;EAClB,MAAM,EAAE,iBAAiB;EACzB,gBAAgB,EAAE,KAAK;CAC1B;;AAED,AAAA,0BAA0B,CAAC;EACvB,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,GAAG;EACR,KAAK,EAAE,GAAG;CACb;;AAED,AAAA,oBAAoB,CAAC;EACjB,OAAO,EAAE,IAAI;EACb,eAAe,EAAE,YAAY;EAC7B,MAAM,EAAE,IAAI;EACZ,cAAc,EAAE,IAAI;EACpB,UAAU,EAAE,UAAU;CACzB;;AAED,AAAA,mBAAmB,CAAC;EAChB,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,KAAK;EACZ,MAAM,EAAE,iBAAiB;EACzB,UAAU,EAAE,IAAI;EAChB,yBAAyB,EAAE,IAAI;EAC/B,0BAA0B,EAAE,IAAI;EAChC,OAAO,EAAE,IAAI;EACb,cAAc,EAAE,MAAM;EACtB,WAAW,EAAE,MAAM;EACnB,eAAe,EAAE,MAAM;EACvB,SAAS,EAAE,IAAI;CAClB;;AAED,AAAA,mBAAmB,CAAC;EAChB,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,KAAK;EACZ,MAAM,EAAE,cAAc;EACtB,UAAU,EAAE,IAAI;EAChB,yBAAyB,EAAE,IAAI;EAC/B,0BAA0B,EAAE,IAAI;CACnC;;AAED,AAAA,aAAa,CAAC;EACV,OAAO,EAAE,IAAI;EACb,eAAe,EAAE,aAAa;EAC9B,QAAQ,EAAE,QAAQ;EAClB,MAAM,EAAE,CAAC;EACT,IAAI,EAAE,CAAC;EACP,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,MAAM;CAClB;;AAED,AAAA,kBAAkB,CAAC;EACf,QAAQ,EAAE,QAAQ;EAClB,KAAK,EAAE,OAAO;CACjB;;AAED,AAAA,wBAAwB,CAAC;EACrB,MAAM,EAAE,OAAO;CAClB;;AAED,AAAA,sBAAsB,CAAC;EACnB,KAAK,EAAE,IAAI;CACd;;AAED,AAAA,sBAAsB,CAAC;EACnB,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,CAAC;EACN,IAAI,EAAE,IAAI;EACV,OAAO,EAAE,IAAI;CAChB;;AAED,AAAA,wBAAwB,CAAC;EACrB,QAAQ,EAAE,KAAK;EACf,KAAK,EAAE,KAAK;EACZ,MAAM,EAAE,KAAK;EACb,GAAG,EAAE,CAAC;EACN,IAAI,EAAE,CAAC;EACP,OAAO,EAAE,IAAI;EACb,eAAe,EAAE,MAAM;EACvB,WAAW,EAAE,MAAM;EACnB,gBAAgB,EAAE,OAAO;EACzB,OAAO,EAAE,GAAG;EACZ,OAAO,EAAE,CAAC;CACb;;AAED,AAAA,4BAA4B,CAAC;EACzB,KAAK,EAAE,KAAK;EACZ,MAAM,EAAE,KAAK;EACb,aAAa,EAAE,KAAK;EACpB,OAAO,EAAE,IAAI;EACb,eAAe,EAAE,MAAM;EACvB,WAAW,EAAE,MAAM;EACnB,gBAAgB,EAAE,KAAK;EACvB,MAAM,EAAE,iBAAiB;EACzB,cAAc,EAAE,SAAS;CAC5B;;AAED,AAAA,4BAA4B,GAAG,IAAI,CAAC;EAChC,MAAM,EAAE,iBAAiB;EACzB,OAAO,EAAE,GAAG;EACZ,SAAS,EAAE,IAAI;EACf,WAAW,EAAE,IAAI;EACjB,cAAc,EAAE,KAAK;EACrB,MAAM,EAAE,OAAO;CAClB;;AAED,AAAA,qBAAqB,CAAC;EAClB,OAAO,EAAE,KAAK;CACjB;;AAED,AAAA,sBAAsB,CAAC;EACnB,OAAO,EAAE,IAAI;CAChB", + "sources": [ + "games_style.scss" + ], + "names": [], + "file": "games_style.css" +} \ No newline at end of file diff --git a/dnt/static/css/games_style.scss b/dnt/static/css/games_style.scss new file mode 100644 index 0000000..64664a2 --- /dev/null +++ b/dnt/static/css/games_style.scss @@ -0,0 +1,142 @@ +#site_content { + padding: 0 10px; + width: 877px; +} + +.lobby_content { + display: flex; + flex-direction: column; + justify-content: space-between; + width: 100%; + height: calc(100vh - 302px); + position: relative; +} + +.lobby_mode { + position: absolute; + left: 5px; + top: 5px; + display: flex; + align-items: center; + z-index: 1; +} + +.lobby_mode > span { + margin-right: 5px; +} + +.lobby_mode > select { + margin-right: 10px; + border: 1px solid #F79F00; + background-color: white; +} + +.lobby_invitation_rejected { + position: absolute; + top: 5px; + right: 5px; +} + +.lobby_players_block { + display: flex; + justify-content: space-around; + height: 100%; + padding-bottom: 50px; + box-sizing: border-box; +} + +.lobby_player_block { + height: 100%; + width: 150px; + border: 1px solid #F79F00; + border-top: none; + border-bottom-left-radius: 20px; + border-bottom-right-radius: 20px; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + font-size: 18px; +} + +.lobby_player_blank { + height: 100%; + width: 150px; + border: 1px solid gray; + border-top: none; + border-bottom-left-radius: 20px; + border-bottom-right-radius: 20px; +} + +.lobby_bottom { + display: flex; + justify-content: space-between; + position: absolute; + bottom: 0; + left: 0; + width: 100%; + padding: 10px 0; +} + +.lobby_start_block { + position: relative; + color: #F79F00; +} + +.lobby_start_game_button { + cursor: pointer; +} + +.lobby_start_game_span { + color: gray; +} + +.lobby_countdown_block { + position: absolute; + top: 0; + left: 110%; + display: none; +} + +.lobby_accept_request_bg { + position: fixed; + width: 100vw; + height: 100vh; + top: 0; + left: 0; + display: flex; + justify-content: center; + align-items: center; + background-color: #A6A6A6; + opacity: 0.8; + z-index: 2; +} + +.lobby_accept_request_button { + width: 300px; + height: 300px; + border-radius: 150px; + display: flex; + justify-content: center; + align-items: center; + background-color: white; + border: 5px solid #F79F00; + text-transform: uppercase; +} + +.lobby_accept_request_button > span { + border: 2px solid #F79F00; + padding: 5px; + font-size: 24px; + font-weight: bold; + letter-spacing: 0.2em; + cursor: pointer; +} + +.header_friend_invite { + display: block; +} + +.header_friend_invited { + display: none; +} \ No newline at end of file diff --git a/dnt/static/css/style.css b/dnt/static/css/style.css index dd7e76a..51009f0 100644 --- a/dnt/static/css/style.css +++ b/dnt/static/css/style.css @@ -56,16 +56,8 @@ h6 { a, a:hover { outline: none; - text-decoration: underline; - color: #F05A00;} -} - -a:hover { text-decoration: none; -} - -a:visited { - color: #9C27B0; + color: #F05A00; } .left { @@ -179,7 +171,15 @@ ol li { color: #FFF; text-transform: uppercase; letter-spacing: 0.1em; + display: flex; + justify-content: space-around; + position: relative; +} + +#delimiter > a { + color: #FFF; } + ul#menu, ul#menu li { float: left; margin: 0; @@ -276,11 +276,6 @@ ul#menu li.selected a:hover { line-height: 1.5em; } -#index-content a, a:hover { - text-decoration: underline; - color: #A4AA04; -} - #index-content a:hover { text-decoration: none; } @@ -414,4 +409,64 @@ table tr td { .lobby_invitation_block { display: none; + position: absolute; + bottom: 100%; + right: 0; + width: 100%; + box-sizing: border-box; + justify-content: space-around; + padding: 5px 0; + background-color: white; + color: black; +} + +.lobby_invitation_accept, .lobby_invitation_reject { + cursor: pointer; +} + +.header_friends_button { + position: relative; + cursor: pointer; +} + +.header_friends_block { + display: none; + flex-direction: column; + width: 150px; + position: absolute; + top: 100%; + left: -50px; + color: white; + background-color: #F79F00; + text-transform: none; + cursor: default; + z-index: 2; +} + +.header_friends_add { + padding: 5px; + color: white; +} + +.header_friend { + display: flex; + align-items: center; + justify-content: space-between; + padding: 5px; + border-top: 1px solid gray; +} + +.header_friend_icons { + display: flex; + align-items: center; +} + +.header_friend_icon { + width: 15px; + margin-left: 5px; + cursor: pointer; +} + +.header_friend_invite { + display: none; } \ No newline at end of file diff --git a/dnt/static/img/chat_open_icon.png b/dnt/static/img/chat_open_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..939273c643de9b174062ceb756d7d9c4d4094b2c GIT binary patch literal 4026 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 K8r15!#r+oy_8N=; literal 0 HcmV?d00001 diff --git a/dnt/static/img/invite_icon.webp b/dnt/static/img/invite_icon.webp new file mode 100644 index 0000000000000000000000000000000000000000..75552ab6486f9f4f9eca9d25a21ed4cdfa1d87f4 GIT binary patch literal 2486 zcmV;n2}$-+Nk&Gl2><|BMM6+kP&iDY2><{u|G|F{1__dEi)zyQ-?kAF_*XseW7WA4 zQqcdm8tTu%aDqV)42A`Z#bmJ5o;YCO%6~=G|X^9Dabq6igpE9HL-8a+tRwkC7O+KYA2Aj~rSQyp9}d6#O}I&?tBxIg}{)963l7 zEF*!tADIQ~iDSPPVJ8l8FS1R9|6dHB$o7A+od~-Z*-sqny@)(?6l`E8>jg$44>l zNQT>=TNHR7IrLHBA33@x2tIPSMnQPwxI{s8`xB4k{83CYlJ@qeiGt&iqmF{~$nhl# zPDhR^3bKzJ$|%T>97PoN$dN}udHYk1B)k1NMZuRNM;Zn7k>eNz&0&U67G3JnmR?4g zbzrq+FQ?`1E^qm*pu!ck;+5<=w$eJTkjtX}#c4;<$ttg6S6S8ivg*}n+d8kyu4}8S ze%EactsiS#_nO+8cRlJ^FMoEu*JmwjZHw*NTKrdH?Mp6vYuwwYkvRMrA(Tazx=W*% zQDz-jZQ09dxx33-ek*8&E2?-UyX#nKohobPRjjhAU0+tc8g1*m>$2<5NPn<4qnveV z6qdkIsd0AIRln=DhSrZYu6s>w&AT4;td~E#-s`iLwYJ4}ZEf+k#M+nKh5x`UTFxag zC0Y|k!j$?b>DNM)=&dlVc0K1Zs7_`QX4b^J1irxzgKOfv8^y^7hL_aQ-w9RPV1RMy z+aNLwhSA*@i(W(t zb4`k00da-NwhMm_F~DpSyq}^NVY+eF&mexld|PQhqK64L{e%W)T>X7g7;=*LU0i$0 zic!CZj=`MkzQ+WU&i@VtjJk#L9NV6?DxULzVaI9D$Y9)^pP=D+BN&glz`#2{#3B=i zqmQ`3$SWRTlbQ2*Ko3LD`whdMI{k0dF!ea)3j~W@g(^zq!nN22QRS%EZs2EYxU9H3OgR|LGE zm<*N@yr#&WDqIX+m5*o2!UnI)!4joI!7DSo;$#zp7pJ&}Nlyc>FTsQ4%?EGEG^YrY zA>du5c!F$76udEAN2bTei2~l7V@i(Qzz0{zGlhmUJ5j+^a`g7NSoIPrxKz5*Cnh9j z(n^@%iaA=#zc6ywzQp2fZEdk#Yg^0utoQn}>*ZOGns-fY-D_Mw*3i1GepgplXN}TP zz@mUFXUUDWe+&M&>^kpiTa9{sS=Fwxij`N^I#pW7N_JPgq6$~g@>||=cbC($m(|vR zSw`ulQFqa$ECT+B9V8l~H~wDa+Lu`TS6hqiTH9LIXT8^-T`$ji)VynI>t5sfv4+-d z^}D*dwl2HQt8J@MuP>`wWfi;f%BmYl3;y1zEUr-ED6M0=yW$nK!WER?@|L^1oR+<; zwhqiPN-u4xi!NmmaNUk0Y5wB=M9&;`6r@LvFHvwha#T@}-TvewDQ|y@DD06VkAm{Z zkwroEk;5qpz8pEyD5#Gd$0%ry97z|6MiSkMTt^b#{sd9bedORrL4V}% zqTu$CgBu0I?az;qI3LA~Be8Eq?ne$Q3Z{=74pA^4Im}y;$4HFZA3X}5M-D9tUPlf! z3jQ29XcWBT=Q9%J_J>5lG7`A^ky)^wIQDxHcH$8CBHKjx|Hbf$Z2uSAiLiT-{lu}} zi^vnlk_CA8Lq_t60_Di@jskk*_!9-{k>eEw+L7ZK1^SWW5e3HWk2#Y0R^)Kxn4-Y? z$l)FZ_K{<}6>&!Lh4MBvll6Bgvw`8c7@l`bfMe)IJe23)X=a$%1(x3&^7DK*li02U3TDH;^a{ zsC^z<80s~S4@jfSIIeLJjw6Z#Y9EF`<52fuj3AHFVI+Z|+D9SKK-4gb4kS`A3MUe^ z4&nteDIY`<3KSp1iiD!-F{B`sRD1{v5{s&a5QAJ&tRt8~G9?p`>}b?9fEHxafw(*i zB^;Gs9mxgpbiX(i$R{1UG!sZD&wgQ6T0|>T*@25Tq0_UX&BaDQdnX1xPCD zaX~7ORn&Yr3XoRRcrBz9 z%QC+gp+rD_9kDm^!vRDXRTFRG$pbN_I}>l { }); }); - $(document).on('click', '.lobby_invite_friend', (event) => { - let friend_id = event.target.id.replace('friend_', ''); + $(document).on('click', '.header_friend_invite', (event) => { + let friend_id = event.target.id.replace('invite_friend_', ''); let friend_name = event.target.innerHTML; // запуск сокета @@ -28,7 +28,7 @@ window.addEventListener('load', () => { console.log('open') console.log(e) friendSocket.send( - JSON.stringify({'message': {'action': 'invitation', 'sender': {'pk': user_id, 'nickname': $('.lobby_users>p:first-child').html()}}}) + JSON.stringify({'message': {'action': 'invitation', 'sender': {'pk': user_id, 'nickname': $('.lobby_the_player>span:first-child').html()}}}) ) } @@ -61,42 +61,6 @@ window.addEventListener('load', () => { } }); - $(document).on('click', '.lobby_invitation_accept', () => { - $.ajax({ - method: "get", - url: "/games/join_lobby/", - data: {sender_id: sender['pk']}, - success: (data) => { - if(data != 'full') { - let head = data.slice(data.match(//m).index) - let body = data.slice(data.match(//m).index) - $('head').html(head); - $('body').html(body); - } else { - sender = undefined; - $('.lobby_invitation_nickname').html(''); - $('.lobby_invitation_accept').css('display', 'none'); - $('.lobby_invitation_reject').css('display', 'none'); - }; - userSocket.send( - JSON.stringify({'message': {'action': 'accept'}}) - ); - }, - error: (data) => { - } - }); - }); - - $(document).on('click', '.lobby_invitation_reject', () => { - sender = undefined; - $('.lobby_invitation_nickname').html(''); - $('.lobby_invitation_accept').css('display', 'none'); - $('.lobby_invitation_reject').css('display', 'none'); - userSocket.send( - JSON.stringify({'message': {'action': 'reject'}}) - ); - }); - // обработчик события нажатия на кнопку поиска игры $(document).on('click', '.lobby_start_game_button', (event) => { // необходимые изменения интерфейса diff --git a/dnt/static/js/queue_functions.js b/dnt/static/js/queue_functions.js index 632f2de..f418085 100644 --- a/dnt/static/js/queue_functions.js +++ b/dnt/static/js/queue_functions.js @@ -1,15 +1,24 @@ function start_count() { - $('#min').html(min); - $('#sec').html(sec); + $('.lobby_countdown_block').css('display', 'block'); + $('#min').html('0' + min); + $('#sec').html('0' + sec); interval = window.setInterval(() => { if(sec == 59) { sec = 0; min++; - $('#min').html(min); + if(min < 10) { + $('#min').html('0' + min); + } else { + $('#min').html(min); + } } else { sec++; } - $('#sec').html(sec); + if(sec < 10) { + $('#sec').html('0' + sec); + } else { + $('#sec').html(sec); + } }, 1000); } @@ -34,9 +43,9 @@ function create_queue_socket(queue_id) { // запрос на подтверждение - создание кнопки и установление таймайта на её исчезновение if(action == 'accept_request') { - $('body').append('Подтвердить'); + $('body').append('
Подтвердить
'); window.setTimeout(() => { - $('.lobby_accept_request_button').remove(); + $('.lobby_accept_request_bg').remove(); accept_count = 0; themes = []; if(accepted == false) { @@ -111,6 +120,7 @@ function cancel_queue(is_canceler) { window.clearInterval(interval); sec = 0; min = 0; + $('.lobby_countdown_block').css('display', ''); $('#sec').html(''); $('#min').html(''); diff --git a/dnt/static/js/user_websocket.js b/dnt/static/js/user_websocket.js index 62f1c4a..8424825 100644 --- a/dnt/static/js/user_websocket.js +++ b/dnt/static/js/user_websocket.js @@ -19,8 +19,7 @@ window.addEventListener('load', () => { if(action == 'invitation') { sender = data['sender']; $('.lobby_invitation_nickname').html(`Принять приглашение от ${sender['nickname']}`); - $('.lobby_invitation_accept').css('display', 'inline'); - $('.lobby_invitation_reject').css('display', 'inline'); + $('.lobby_invitation_block').css('display', 'flex'); } else if(action == 'queue') { // необходимые изменения интерфейса $('.lobby_start_game_span').html('Отменить поиск'); @@ -32,9 +31,17 @@ window.addEventListener('load', () => { } else if(action == 'cancel_queue') { cancel_queue(false); } else if(action == 'player_quit') { + current_players -= 1; $(`#user_${data['quitter_pk']}`).remove(); - $('.lobby_invite_block').css('display', ''); - $('.lobby_invite_block').append(`${data['quitter_nickname']}`); + $(`#invite_friend_${data['quitter_pk']}`).addClass('header_friend_invite'); + $(`#invite_friend_${data['quitter_pk']}`).removeClass('header_friend_invited'); + $('.header_friend_invite').css('display', ''); + let blank_string = '
'; + if(current_players % 2 == 1) { + $('.lobby_the_player').before(blank_string); + } else { + $('.lobby_the_player').after(blank_string); + } if(data['lobby_leader'] && data['new_leader_pk'] == user_id) { $('.lobby_start_game_span').addClass('lobby_start_game_button'); $('.lobby_start_game_span').removeClass('lobby_start_game_span'); @@ -45,19 +52,28 @@ window.addEventListener('load', () => { $('#mode_ranked').css('display', ''); }; } else if(action == 'player_join') { - $(`#friend_${data['joiner_pk']}`).remove(); - $('.lobby_users').append(`

${data['joiner_nickname']}

`); + current_players += 1; + $(`#invite_friend_${data['quitter_pk']}`).removeClass('header_friend_invite'); + $(`#invite_friend_${data['quitter_pk']}`).addClass('header_friend_invited'); + let player_string = `
${data['joiner_nickname']}
`; + if(current_players % 2 == 1) { + $('.lobby_players_block>div:first-child').remove(); + $('.lobby_the_player').before(player_string); + } else { + $('.lobby_players_block>div:last-child').remove(); + $('.lobby_the_player').after(player_string); + } $('#mode_ranked').css('display', 'none'); if(data['last_place']) { - $('.lobby_invite_block').css('display', 'none'); + $('.header_friend_invite').css('display', 'none'); }; } else if(action == 'add_theme') { - let html_string = ''; for (let theme of data['themes']) { html_string += `` }; html_string += ''; - $('body').append(html_string); + $('.lobby_mode').append(html_string); } else if(action == 'delete_theme') { $('.lobby_theme').remove(); } @@ -74,4 +90,43 @@ window.addEventListener('load', () => { console.log('error') console.log(e) } + + $(document).on('click', '.header_friends_button', (event) => { + if ($('.header_friends_block').css('display') == 'none') { + $('.header_friends_block').css('display', 'flex'); + } else if (event.target.classList[0] == 'header_friends_button') { + $('.header_friends_block').css('display', ''); + } + }) + + $(document).on('click', '.lobby_invitation_accept', () => { + $.ajax({ + method: "get", + url: "/games/join_lobby_ajax/", + data: {sender_id: sender['pk']}, + success: (data) => { + userSocket.send( + JSON.stringify({'message': {'action': 'accept'}}) + ); + if(data != 'full') { + window.location.href = data['url']; + } else { + sender = undefined; + $('.lobby_invitation_nickname').html(''); + $('.lobby_invitation_block').css('display', 'none'); + }; + }, + error: (data) => { + } + }); + }); + + $(document).on('click', '.lobby_invitation_reject', () => { + sender = undefined; + $('.lobby_invitation_nickname').html(''); + $('.lobby_invitation_block').css('display', ''); + userSocket.send( + JSON.stringify({'message': {'action': 'reject'}}) + ); + }); }); \ No newline at end of file From 3e8acbbdb87d3924b9fbebfe31234772d4266ca5 Mon Sep 17 00:00:00 2001 From: Barrakuda8 Date: Sun, 16 Apr 2023 17:37:46 +0300 Subject: [PATCH 05/22] Fix friend list --- dnt/main/templates/main/includes/header.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnt/main/templates/main/includes/header.html b/dnt/main/templates/main/includes/header.html index 9ec2b3c..5519ccf 100644 --- a/dnt/main/templates/main/includes/header.html +++ b/dnt/main/templates/main/includes/header.html @@ -28,7 +28,7 @@

Викторины. Игры. Соревнования.

Друзья
- Добавить друга + Добавить друга {% for friend in request.user.get_friends %}
{{ friend.nickname }}
chat From 201ae2a2629802f4e962444c2439f5a296fce023 Mon Sep 17 00:00:00 2001 From: Roman Date: Sun, 16 Apr 2023 23:00:29 +0300 Subject: [PATCH 06/22] finished profile* --- dnt/media/users/ava.jpg | Bin 0 -> 158966 bytes .../templates/user_profile/friends.html | 30 +++++++++++++++--- .../templates/user_profile/games_list.html | 19 +++++++++-- .../templates/user_profile/profile.html | 6 ++-- 4 files changed, 44 insertions(+), 11 deletions(-) create mode 100644 dnt/media/users/ava.jpg diff --git a/dnt/media/users/ava.jpg b/dnt/media/users/ava.jpg new file mode 100644 index 0000000000000000000000000000000000000000..93fe28aea3b1dee7f2d653be5faf14b764435d99 GIT binary patch literal 158966 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 z zs*urjLT4te)KlC^P8dq`Mdj<%k<08*lN9!a9_bExZaPBPsfOy}S?r-b@=54co=Qs! zr{q>3DMo?)1Xg^GpPCs%>zlgRA8WRD2CYv?1~gke~#6bTVS zO#xfk)P{2}@OwoF(V)putjdv90#Wvof*kCGHz!q$XCs2HmrcvNV*RC5YCe@+%R!_t z^UqRx$B?@Y9=*#!?`QXllN0xNVsFW_I*=SymI$eSzu^NEW6{0nRF*KgQc`@n704ND z%c2uOk^LJ}cU?uL*TORkFPeKFmJI>-0tAEm)t0cEnMP{oxrMt-LQk24|dx$r260{ADeGA43P2_Ji7NEC(1$>%*cOBN^ zsq?6i_hYnHANlE#Gj z!mB`mpFt_;kCJK7$WE+?wW`7|N+~)ENeMWyBJ@_ATd26Gq~uLHi#2+1fxGe3c6Gd@ZAPdO6D5Tlvz|^uhG&^b4y@(y4Bea zv>ruhT(id{3cgbQ4ye#_Y|E=7uzki2*-a@+=zJEh!(r57sxC7;3(}M!C`jF1b{`0w zkC8LQQrdh$m!8a*6zfu5tP34SE&H^9Y@fsmcM(F_FJ*?Eub18 z>Wr4z-7Ec;=(ZWW%^H>wG1+Bfc*x1rg>%7Mr3u3`h9jz%O$oRbNx6ynf_#?R+HB(~ zl(n+NmQDQ}LaXYay~~0;#!16diDkM=Lj2t9sSsJYAVp-_7i22h@u>{a7ncNiyxg3~ z)yvrpRBLgV8tfQkqi0|6vOO8!vwDeLS~AA&5sBGyR?u3C5F2d5v(zrbpp_=4kp75# zsYl3xsB{(+6Mu%SEqP@Cx1!dpeDp{#nt6p5tLH)PA7!BW$NP;F1S zPUF85O8XHQlp!Ll+@|VmDFQF>xDP;;ry^PYd<=y2RJK}*yz_S`Vk)8hFbtHtxxI>APrGO8temZ>P`E zjtk^Z?%h)K7HAZUbwVwe7%WP36!}#+WwwG%Q@HJOqBI`76FDlq6v~~(nm{^gMp1`B zJDYt9?GIVlcEJJ3XKJ?f%wdDcP3;C({UL3E#ks*ScP%()emN$4e#cs`yW_p@gW!X z{q%kfR287acG-VOs7O1)sF~_1lK8SE&c96)Jv6Iw>3Txa0R3GBLRA9!*vxX zNSb-r-V+^FN$$$glH>&`(vQYJB)c(DMSZf?k4b?F#R8MLIc z)Vh|{_{hB}Xf(4oo}w9q=-GkYjiDF%i<_aHeh5c+eapwG{l&jj3ASjIF>EQrO1AW# zMtPOK#YIs|??!5sO}fB|bd(J-+03Y|v|}5Yg>+BM4RnDjw#s8zBQ60tMN?e5)&?4> zDH>N2pux z!1!QGxh*-f`u1dsDF{*SEiib8$?jOl&9mDBE)Tl>h@-{qXW|8_eTx2slnDfw+-uge zu$($V;W4&NGjl*fBjPJ7 zhECK3a+O+^=FU?<)eELovNcg!ppjqXH$*X`RKyRZqM+Xb3+J!z^Ny61~^7l&_8wm~=&}k(*X%)kDi9t*@)M z85WepElf(O)^&mG^-ZEe`7%q~tJb2l7= z3hdH2Bc+ram93x9n!K%ajb;RhQ`r zpMU7CbR9NYlI4~!fgd9#qw$3Mevek1lzt7ag|g3(Ej_G`wJYI8pEoRotKe0NX2gcG zm+Ux9I*GU{m{<~SW&CALR_Np8%a74>RO4ywmNtH}S`Fy~MavwNP0UJHyf^7Q(oj_;4{&Vu;oY04!F9!kz{yJoy5nnV6^HMoX4=0>NoFE zR9zXF@`7SjmEa}NG=-!}Nl~dtb-R!f^siwmAs(R=0?3I!(o%LG91P&EO(a!5@4t#q=(3M(Wtn^XVrEC3Zy3Gihw&FuIUjg6KYYQ&N~z_!7*_OVp2P4aA~8fY;qf zF%dw-)s(;4yRgt-5UKAFbJUKRB=u%`VEf6+L_72NJ6g>%q}JpWeG%A*#Hv7h3>5ng z?Sgf3)+C+Z52CV`T#8&^GPa?W$NKlly)b2l&#f;Bh2$l1{;=>Z{kV700mPnbJ_by&n z2HDWtjXsP~ZBJ6ZlcHcuZAZ6JMuk+C9vKEhOscb|u^@;c!FeSi*gOC9LP$jiS3hKT zJ%|Yk*SP^unfLzy1gu@uWa+mD_X?uaPfchfEhffxQ_8Y@mD?){t-XhvE2NWoDKk_- z^W1*3S*=BHeS4}?DvoZF@_!8AO9bm-JyB3=qDbmy2&WZY#iL~$n8?u1hi9{=D65oIt4Zt zjOD`QUZGiu<&#tt*BuK#CnBEW!M&_hBLa4W=}s;&#kQphxV;fW-4%zTQi7DZ7lg)2 zb5}z{byRy3`mH3(39rV9henR1O+9q4Aj+l7hf zJ65jVa4i~YD=LnhBR@N$e6g3nNhi?K_Cr{|B}Fx)3XNIlL@j-D7%Pxkid^+0JMRnN zg%@wq$^>@99)cPXNzQ|6to+FqU5(cV`3*ttK{WCC+-)>@_3$-V&D8jxu;ng1!;gWr z_E2^H5A=F`U*Odm*}Q#wi(MGA;U(-Xe$a~>^Vt@B4N0r}sExikV%IF>SZd49ztE>E z`M}bnvY|;WIr*^x3QUaP#==w^Xt*M}PtcvhLEiwPF(0BUS7L=u1XYB`_tX>Nj?hVR!Ra_ zQ${MbX}cG(LQ7POdsu{4;ipKK%FEtLpHb(N@a$GD)gg%Xi5C0q_^B#a^+ogJ5L5t zqS-g1YK6=*WmZoV)Jt(B)S~F?Zea_l6Bk`p67(Aev9enB9}8rOrDZ)tG*m*~6&vnT z$>FMZL%DE|>{DbkV5S=_ewN@;TgjwwRhrJQDougpQ4M-_O;!f@jzT@m9$S-_AK7%n96}^Z?jN<)L6ko&6;#Hk#g3VuIqJe*^N6h;b-R>pt)M^pA(r^paT(6@KT~dJQl1`Zg>VsH7!){s^<$UtdC%gXXRyRi*{CjeK+NASvwn zWfWUY+%Pq)Wa>Vh#k@T?WZn?>!CByZO;t-@@QUEnp5s@J`@i0Vsj{&(dz;Q7(9KaI zNe)&8L)Vd1SVwl^lo#kXDor{Q!6c=Xb?#7b8l`I0Y|NfXuIW-C^{66 zdm45lzRhI~jT)y|qLPV+Rcm!x^b*A-IIF5c-tlFMG$OYrqrgxqc0#uvO0G#K8lFi2 zAr7CTx+Nhwu=a6$^&$Z@t|h<`E?AsETy%t$zf>j2^-2RMQh2-O@z>EhLKG@OL4vHf1LjW>v;Fnh~;y)=MZM!fu|z;-#{fu1Uk!EktADqvowJ z>)Vt)ZYH^sl3fxalO7Y8F95q&3u$7qBh+`?q)=7*Kxnv*h3{u>1(%1=wO{4>vD8OL zmi9C3@_x{=-7YvRBTv zsk^>Lyi{e)BmE!oinJ5wXd_6?^1gie3K=O1fxr2e&X3{qSoM|ahzQ_ zyNnW{uI!X@LlwOsg!8HCx)2l?XC)j~y$8*?T0|mtUPzodM`M+Wl&dm{bq3+3btFw! zXO>H|-SA2i;evScxgB#-kI#>BFPit@rBIrpBGFvmAe(W;He+nMMMNjg~5)wI*LglyWzNotO>sH(h-YgNAhx2@6iPV^J- z3oESbo%)ZoOGa=sh}3C4=ryFibQS)*kys{69x0ARr@3diu8d#cj1h;Q6dGS9ag`q= z=5eLJeUaS0W8BY!qLe&6v)lM3)?LJ??C{waY8dOpe44l&zjL_hPlNDrMcqH7R$7ni zpzALi6upgO%?5tK{(cSQ_WBcp1Y&;Qr#iN^E}ZaDRzJVZAb$@W_ZLA~c!h-iE-!V} zBs7`5BDX?IxlFCJA7i$b@9cLdL(mFZfQaaF`4vt+#=4;lQ|$W{CZ=ij(iK8?J|7=a zcBS1-dspF$SnxWFPajBH;HH`9@Y;_y6i0Cfg%iW67|W{o1-?3Pid~5=(z#$J3JutL z0^m6<+Ny3%J*km!&PiV0;x{xRoz~n~tSQYM$D_kB%vK(#xOTku|$^Zrm`(nKP8Tp^sC1va6;8ID)?1Z zMx=BVKX_`ljEJ`3n(8_}2xzVbD}af1H6Ax)MYr}XFw6Hs0)2vb~apGaH#ge?xA zwv|E9T>24jZENrFLuaN}l7}}z5Was0DVHI?(PDkR1vFi}$IN>Pe?v-pdrwg}RvW(w zWVclQ8J|9cb3Q&s@#oRhY2=us+K=eDlHIyY3b_cQVz%#I$b~S+Piy)qR>RNJ`3`0@U7H(J~2{nK2UBP zN6trhjef;+%}c=u>XNd^>9!nbGgK(DBg+tseZ*E?tkKG-I}^EnH`cGFh^ul?scF@r zJ*cZe-SRUMW!BZDi;yLn3)tl zU5X{4d?%@lK!|D$%LZm`brZUld9ahq*nQ}(P6*MBM1yf%=+za{hDnD}sjsswVvbej znd(B}$s=qe^3f|r!tpLdX}PAg6y3K(ro`q7%7l{djs;X*o3zwfg-on%;Z8@hj%Rvs zOr<;q71iIi29I{N<4Y4Yohyl}rtFo);M%NewCL`;l9< zO44t+es)X=BP)9|R5dyl){|71O~#_|qv<*lT9(}`EmSbBI8c=i@`ps6&hz*)b{8d) z802?SgGvfTp20fJHGGcQ*7tl1)$PlpWvx(Ne@4Q69V+Wwz^9`gZbcrtaCYoQxX)fv%@CVM z`9UQ`nM$y<eJ?oWW^0iu#gwvD}icW z3{CqXdxc^+syhrcSk^m<)hY#_(1lpe6%o*F?{@{Kc0Mw(MM`6G>`T1|#mw0|==o*4_Ns43 z!B-?s{{V(eL_fX_!>gfEA)QC7;_`yk;j2_Bw(e2VgGVOW31?kW9-7HNdhMe^G$m6) zvn)mNS6jHLU^}oXPm5BjwzrlNFVEF8oZ|fsrs^h))813zW zK59hb;w>8r&t)8rN<_*c^lJjtChm=Bs@&93PgSOu(ng{|*=1t972+a}6TKivn{i}s zZ+1H74P!cD2H8~-tCd)vOo_h&#)4;wp0C*!3kcNAww#N+`#uA?MZ+(ZmX>uEDBUsT zkN2ioCsz38g=$e_8f*x3+lEx1_&h}nDG;vXLF)BZukJ#ZF3nYn%?iiVNXl-r!_Zq= zYUgpH(Crhfl9U9b3(_qet;PQULOIkc)q4u%zdI9_zTcxX5<3@f3lrRN7i;_&eWmdv zCvwuEG`7!nHD7`S`(;@=O!aIk=XJotK#>5ktpvJU`N~$ZnAgT>TM? z9&9Bn1og*nKE$Wf^gsIk7Ke7Z^}`j%+x->68o^>w?k$4gCIq1vs8M_d{Zq|s%DQAp zNW_#zwJ^Mrbk`Se@L01$BvCuYC^mhvgF{6`Ir5a&A#=e#$qDWoTGe(JQYP&&tGQ8Y zqbzzR%A-|ED0pN3wJBBdCn}__P2SleH(c7ZtbqOhMx+U5olzZfV2Yf}i!%tCw4tx-fsjtY{RurU=%Z!AQ%DnfF0lHET(M15n9Vg1F&E`klvdX0MpNlH5+ZiGHt6B8 zs=}2iu8OR5N`zu}k)=<;d4@^y&_PMI8_RhUGAmdui`(Ien_G`TlnUl-cGUY2XQ42Y z70Vewl~ogkBGzv67wn6tv$x~yJ*T?7WqggM-4xGcK0cpe*#WbceNwG)2y-)6o?w(I z%S`?s;eR7?80s~*CH{Psrz3`=*gKElZ$1v>TiyOxyV&rB2~WX4OiZ3@R_rT?;ETQW z?uMXc$qLsu{3lTr@nbFg`y2>_`FQ&x2`JlJzL^a^UR+}2Dz$~G$DpoB2DtcNXn}Tc z`e?YRYWThiK?0Ps4{iMiNS&7wnJ7@|suocikXmw9OH)?|ZG=^xc^l+o7*t4?h_dsN zV0)=m7wBF-xqGp-a@jBPK8Bq`RO72lkdi1_OlrF&K8q@?#E4fZ)i|W-QjJ7fbc9{F z8(w%Twt(pxmEjb}*0_sR8WDH|A#X8?y@s9_t8WE=Z4!^EDz^0f8#Q|pq<3OIhK4=KK%KaYlXqjT(g2T(S1e(Gv`6mn~mAMWg|{x{Bp4Q!kCntSn5BEeq?3?2{jr z4CM!xiwjq;=lFEzA3Kq-R@5C=CwIuy!MZ<~JiL)%7InMxPqEFYEaSMc)Lw_2cP0sN zO#3HJ$VJ4-Z^e=3-|HHdt^AR%G1P9c3*q$shctB`W;BI_^%x}9{{TZd>b%WJln*?y zX2Mo(EnUx%Yeyo#N)x9v_7;>5d{^F`nK;_|+vPuUSSJCbky?U^sp0T%S2pQ_o<5<9 z#gxddm*?7V+(~@D!qI4=zoNB`3gvNa2WZP6ODfPyvfM^d4PfVKxQXuFT}IYYZq1=K zLQtPYvl&S;t8CD4L$U=2M7g=P4uqwi<0U^}OLC=2R!Y=fV37G9>$=LgNJN@Vxph|W zZE`%xqp3YCnm6)PV{MAmoRWn-3i>k1Zj;4FDZK8gr65mSOCxh%f)0JWUgl~8y6z|J zoEk1@>OFwiuf~u(T~Sh_4s~g0I@V_{v|8IyGiW5S>`GI10*hqnPjUv04NWIidy#`G z@jM~&r?`TjeBn#~0HRx1L~HU>N)}r9!CH@EIa#r#)JVSLLz$-o`2^Kc)3J=j(M^`Z znx0v!NR5n#frcmB(eC<-68M*(RY7vsAQ_8(i z$caC9)RCPlzN}ZtDzdUT6dMGgI+~3IyqBHsYuBok(7(?h zzu1!Q>EPaXxVBFZS-f@~N3c59NcHnlaU*851gTkFlB*@|9E#<@@oq${VPl9Ao`0i+ z^X{XHo24FDi(uIKkFlkNNqt^yDw6s7{{RUz(Kj8#)%A6E_ZxGOcjSAD$dxa@=-Mbz zG5(3ci@y==e?wR2=%b3)AQqdM$qW2Xt z`6pHA*X)rnTDp+-Cw7_lLvwJNlxYQ*HmcVeq{tDK9R)hE`Fv*;9r_<|ijL z7fm&!T9DkAVpnAbh;dWWgyNh=GF$3L8Jed8+XVXTC*Off(xcOi!|GK3015d@h}C_0 zDb!gk7OQzH!M~H0xn*XBs4P{d-xE@)!j`gSR^m3)zQJ7@NwpJ%Lc5wM+INJ<*)%9$ zYhaatiN##wlsgitzv!VHZ9w&6`nWGUlxdtJls%B7NWye{7|}y9=PWo|4KWP0x;5-m zyKb#gbR~r5ovUdltaODv%AhiclIz?mBp zyY4?PdB4eQ-hQ)Baw@bXY4`KsYZN^czPkGfD32dM0<`(@9^`4DspKXkWcH-e^qJ0s zNg>IVZkcx2Q5}o;=rx@@pzv<*!rwr?Kc%=&*P&qCD?4t~uC?HQv%9{tSKNj}&nvm) zN8!|cC!G9?NJE%bi{+o-sa6oDP?{2vx+MMXm9rNUe3vX$kf+NIXqgb?%7pynUorM0 z>T6m^9tJp%tZK>RDPfJPImXKXr%n|64 zvlQ3Gqf%2cLW3luFtxb>+k$3YNkWY9C`>5bdz}JH>HQw4f|e3tim^bsMChXfH9>SU zVzmz~Dk}J6X_`&5^ry9c!{aeSzjGG%68;o*P4JV0BvRt4QR)zfvt-YeP6wJ!Gb)weQvI5&xYu~9(!W8i#BQsC zlr884qOAV_180ubHPm{yTKG3gQ^HlI&KFqVyZZE1DXy z3A#Vh+e%Z2(J{`1NfJ?aL<&btyfN7Dw?R}Ve&gUIQ_G1eAvEUCksQ6P)}LegsWNU( zb{4Ntze(~1+%W$DtLS^F=aw8%LESq3{0%BTQ<`W-jgH9H-rr@-j=pysZeZg1qxYg6 z5du>QPJ0#7nq#y_u_$*m%jrKwCA}9UV-03L;CxNrU1Q*CM~^ubHzbDn*3Cu}Aj#QR z`2CDK?WF6aY;i=Tal{gZVCJ+RMtq@~s&A9y;9u$eL^h5c{GgUSx}hx1;(Y9N9?|aj z6l@iew8v*;PbJ)C{{U=EfQPuSDQ~fHd#}r*6YKb0lW6-FVD}VU3kc>Qgg~pc%(gg{ zacikzU6r^eb)$#&JfA?JO{W7}p{OQPn6?U8r6CWfS!ivFE(y-__{YqUZn1c5_c_fL+_;Wda|MV5>MucYwRdDMRN*0^)yugr=3)) z_bDjpI2)z737d&L3GJEwKM9mkPNffA69!@@+O`zHHF*9LV}NB9R1(p!rn5%7556Qi zQ@;d1EKa4w;j*Y4r&Vi041s+SjAy_Ks(KjhqOCQv2vHWQ)qmFnW_fPvud<&ADfGf_@<`HAdE7}wWXo=&+N{IcnRKYm5_xCTT{Jo7S;GFIJVb`q zm>1gDPrO%7NxDzc8tz`TFLQ9BMGZO9H6Q9(=uAbuP~d+^MO_q9)wv~vvl__$!4CyG zZn~*;*m{MiVS{SP7UUy3o=NOx#6hw&y@6kYre4T-Xm;_zX5XXWO~==tq`yBxTYC!b zDm%jS@M?)vNAixn(EWy-U{;^X3Zi*5Bk=wSD4w6{`Xd`InYtuF7HAdL$ii8 z;|wec_8IG~uqaFz@`CQ})aHLhmIBPeQHpoAkZ zz>gt@B9O380)?om3(br4Q>!OpYejJ@S1_1;Y(>CVx6TRA@N%NuS=Ra!zhtVU)~gaF z1~!nP@zgBjC_JIZ2ve1*PjOvFh`U|NVj`2$-r}S(b*9Qk3|eroI!2`d$Exo;_u4JvP(=2Q%3A<86kd(SL!>^C9t(Hv;7{lr)Iyn{{X=X%1O^RN{T}gQ^V`D#( zY27rTQUtPLMz4+x0dePYqX5R3a87s{?BIwh zqHOxJLS<&Em35k}glg!OY`@s5n3Z2_VjT%x5|av$d(g1qCWi2ok1JVQi6Lf-2;cY= z?GmXTBx>%FIWgOJLN4IG)LM;k>8w$5PSUYk;ak{-g=(a1xF2M*O4=&O z#N4mGg6%Q>k2>sa_9AApQof4I_!la9_$~cXu$^6nRoAeIHrB5F7{5Zd+V~OApQVFr zl`Te}*!d?I-^KDNpPwh_q4kE(vvbW5qPG>g+V$-uS*>6C<$Lr(!L_<4 z1|QdzG;}@AW8>?%yo$|h#LdQS5i-=*vrCe6?sVafsN_~5Rqa6}i%Y#L!b5$J&y57G ztodJYH4#W$>YM3dq|eNQzApdt=Wso~c>uz0CX!jj_Bh z!6sXQBH$3P)KrKc0I9JXMqOZCVv2#c*8;7ZT?wlJTgV|ikt3Cqai>Lk3*P9`EY3G8 z&|YeALkXzunLY%)A4>N#Lt3dsk9me#TrXOX%$K8A za%;(PRmaSCpsH8YbXFBmg^7=Ho0XAo7~CqCLvy?j;RqO9#ou*KmyyEJCBnIcuvPMI zp~*JuRzhFsjhEIaB(hGzJQ5<%W~kR9c3DwvIWDBJEUg;NOJ$w9yJb{23+Tb3WT9J? zJPGQko~TiDW@AYg%yMsJPQvT9ZwwXE;Y7UE)Qh3CXj(&ATu852djaB!P^@+g-$YqF zEl~7}k8}xAQm%>xo;x#&W%?bVzordPs>OfUzEBHCHa!;p9)tr)+nu${hx;9nL9VC@mr}9_y zq*d?ImEGkcuA!Hs~{vj*KwPv|o2>_%gCKU_x#O^ve2~^xQC)~yQ`TQYZNA=}< zA1!~!z?RlLZPHhul3Jmn+z#fN%wY`kQ>`@hRjtuqbk-8n zR>l;=mvzgfMSOoipW$|qlU9l=`;RVgZBiJKH7=x!Dk4NKSca|VcA}XkS>e&GgZsOs4lA_`h|)mY!iW^t<-6DX0YqqCNs+zkz;)j{kC zKqeZGFQK)8P_03}`BvG`_LT=YL&lmKD5Bg)O$+Wiw4F$oHD<6niD^&4o(kR&>l(Bh zA58L1a1W$jqc#Zl)2On!fQ^Q?BX_>t%e{cFKM+f1gUX7)=Urw~rUk}nU5k4B+tmkoS^RFo#Mt6Q0=(=zL@ z+EI}Cfn`QYOf!BO(0B5AC3}@wCp;-_5vJ2>sRK<;nyod4^kXL><;bwMv-=kg0xYTQ zV(eZFcGQ}=!dAJ-!pn+|8-=8xsTVtY584KmBBflhB76{$HMJj5Rw3`%!wtIeTjZMO z0ukubqn(HZEFRnB)S!y2I~s{9(zIjxEBgwkP@h+n6*jSMwZnRlolnXNqru&M4LD{y z{;|=PzHmAJ01vkw#;+d#079RUzdm#le2T3nTYZgDD4#r_)?)2rN9=Tp&wXFPG>Ddu z$t6mqG~cJ`tm)_Al`hFR1#RQuklcB@5+xSr_vmh{Ui448_bE-wXWLFto0T5NcN!Gk zi$khj&*!+4!{$@>Hom_;2&qJmH|#P>2uh!xwG?uGl0E`G0y4y$axFB0R4zIty1<%` z_ha8SwIy6h*EK<%Rv?(pCmcqxGg8L6rcss1=3?e3{f6x$WYpFQY}bJ@>5)$BnTtTB zUJR98wqpbtoTM0;N4T`J2SK_`Rw`0I9X*-3lM!mi7BtSLZDB)nZ&h?8@26GX8`xvi zI;FE}5t*f7H%OktS?2;)i)dO%-sNJcf#S>^in^A3v{>Dbhm%G}pr650R)Kr0R6*6r z^L~turMi59>1_|_I7~aSs_7MZH5(Kf8^T{wE~>WX#$6+})S)#knWbrxrT!Qe(=`oF znXosT@3Lh%b6>gsY!l5X6);A~Ct^J273pq)Jog;EcdQYG&-+cKP*R-K4Tv9ocymB7-~ z25n)=w&;QBG`C>e>Q7*3R?CbP{?zJo(nq$2{_H~*zl{p-Z}&@g7Sl(WkzKq+ap%eL zr;Ym|zNdbjK8GkMwch^#LWKgmX1VU5g-2!ls`e9H746Gw^zct!DAntYV9YbSpG=vo(551gr8C{&sZ(w)@` ztqoQ*ixBPjK^;!5>hRv^f;}1%b8S7mVotu@Ma+W1YV3$o;R;qcUzaAwbitOb4DQs_ zBP80GfhcUV(HVyHn~TKMnxd>SldzFnlrG&w(@b4bmtrGx;Q}}Zh4e9O9ORp|>M^YY zXpV-n2A_u3jMg+_oEpM2O`8fz8VyFR9`SNIM3m6uTbBJpdjzH-W}{Z0L`%;71*l59 zYXYR&OKCFEw5xJYme$O2P)e$vMRvP^L-~G6D~(;F`f)mWxk)93r&Bj2N0<0D5gLY= zN(FG1m;5HJ&o5kwqQSy^UroPZOxtAq{S%?!hr|?i;FW^Ps5j3-H&q3MdK#g{G1{24 zLRyc2h0vr&$rY%0wnbmfG-&9>JTUF#j&$cG*AytaC5_6vV?C;97;Fz+A?lGDSwc%} zK1*O-g2M(*xQ^^;@J*^<__gvhKAtqQ>N$Rp&;-YBqEfP_#f>KFI>M+xw zeH$J3b9xT0TyfyY@8~@v$5MSYQ6JVz=&cqXc_J9KS8Y>)t63K)SkTwQr$PH`5L#QS zHK7_Sgw6e45;jJtsv?CrV!cYEY@U%)LtCUtE865n(bS^R(Q{rUa&50GN{@vlrSDSa zvoz58YJUkxy{Nssxs2vN!m~shl*MDIiKQ;leb=z+*cDs%e#0rSN{(xze#lp9oB8xY zPUrBYv013+A0n3hzC*uH-K-|d56{vnp3D7zAEfteCOa|sNuqzAF|b9hU-m^FzHma1 zq9P@_dT}@4ckG>M%1*nXB{0cT8RufMRD_{zY&5%mjZWp|h}w$M*IHL4AYk_?>kPY+ zJyp6LCK#R8R`!|`e33Qy>>#^{oR@^!h|NVyk|a(xpws9s^GOaCT56Fu7sNw`G*;$8!s+X*WrP$yBvS+*^g9 zni!gb!cJ*TU~OJ$GjpM&-S!!&>M9s%s#i9pDyK|~FSHJXm2K^TVUH$F*|!fbLevWp zMjB1dQC};b$w|OMi?2`F$lR~!<B&0{s*RZdBue$JH-X~DUnzDu_$z~mb zNu_kk)+MVTcP^29?6YN}SWM4cvT0IYnv8X=@|Rm86UC+{0_WT+{?+;)Uq_KXb zmt9XUHZ$(u{h*a+4g$LD&yJi+6-}(O_N+bD?!9B05!lSyd8tx6ypcCWGP0H7Y@EQ< zlgA#Y^@_#?&Po((w*ulUqlJiMIyREVS*v=qWvG*rWpS%pT9)>#p+0D-DC-3=QivBR zI8?_2nI}r9y4^p~lU&fbU%{y*tu$RqCfGZ!k8ygPYxk{0wge>eD$V9erToHtHFcoU z#BxwMg*@dGm5q^V6GaK)VNA7Iu!$yJOzBtjcTSHRj zsWHBzYQ>3Rwu$51e{`Tq!(DmqakF3RXoaEfZ~CWNk{vJz&@L~kn7*liinFYsM-K|D*+ z7N&I}Dd(vggzsnWD7^5fQNpOIt~GR#=22MQx9VD8ZLsT`wB1|cpF*il zJfR!OrZ2pxp+5@mpLSCB7xoaWww1RL57-LK_Zn z5{Bkmnxfg`jY>y?b#93#dlbT#3&hTeP6l2PW{+L&GgE$KR>kn7PqiC?$0bQ~$w^n- zV@OpsPhxQm5tNl`r0W-V$W@q==%{ z*(2#yPMez~%NVb^GEXjUnI=_X_m8-WF})PKF83MRMQzr9N9{&;=Rq$rKO?V5D!2Or zIx|WJ!|-Hj?yHhIRrohkYwHk6{zSBob~7NGp2CSkMGM?q%RotkGA98n1lx$v(iCti z2#suw9{|-OaBV`w=lPDJCA&fDkaM*zK&lHPl>=u2=aT8%c|h=P6}&1{O6yTcK;PYL z7>M*M=nG*Dg_0FQO9oB|Q)Yi|S=H$p@Vbihnog9ahkIPAbkgCedx{cVR%KF_77=QF*`gggxYSa8N=wr7_|!=QETb%G)mpBbj@A>67pnFbUQQ6a zY%R)a*~ZYuG^agQjIO5U?Q7knw`rP4+I{Bt9KC|AZ0E4Dy-%zvH7d9AI?e+ckca|Q z{vP)t2^NW&Vy8w4w=q5c00_f!YkqB!czFH|!HfG;Py?Tyn zESiPG!+uNo|4*2MGC6QTap&Lj8kkCHVX0Fa+O#=!kI0c(6gAb$OU{ck!89*2PE}dd?@5i)+Fms z35xSYi&q0Rs~65Z8(Z9=0##nhFVvjUk!##T)Lk00nCKz~VzX9otooJI8I>L1It%ub zSq`q^it0!KlyWtHVM`@KZDp&aklg}R5!G00Ktg>-k*BD-m?He-?JJNOQXo~}cBvMb zR`i}$N>S2tw0#hr3YE9f;zw=#eUDi2?v8WH{t$hcE~WKfVOl-k>09T56Iga)N};Dw z{zN3*3*3L8iip_OM%g^3whHbF3z>?v9aAeqhfxFFeOAeN0V>Rg1XrrFkY3TJ9+KnS^mJ9n;C8K_5RVVQGjo7Hs z1uWioEScw!O?2L%uMd;y|9Arswv67)!QoiphECNib zH+cIAAyu~fHta0%y6m-aQpAh3Wj0PL$rAobzG6{UMI^eUGG%jXk+V~3iKA7t_8(%} z<9icynyN6jXiq`a@D}Ne&h!#e=$=z1hQX6bW!u4ub}fr4dy`%woX=hCW|A0mz`iu9 z?r&IojNMWprV`M4zLd!~Ib}SfTe^#3lCFw0T9l3|)Jb&~jNHOkDMNhPQB#G{zV<1# zX(|*n*wZI=r17;L+cfaSq~xn@MvC+X4ILyzzi5sRp*f?qhbAlVR7h?5)hQR3w;KFe zF&$OU( zgc8I^d96`76Hq$|D$_Dj;TfoLdhE%&Nnnjsl_zpPR}V%fJ*2F0_9-GUX|pPKB2Shc z2-T%=B&oT*g$>SLAa1ULHj*_+TF}}&xj70QiRXUox`_NuSnu~v7-$mV}dkE^=I6b6zJ~+KxDsnpf0Tonrub#wX zPJab`#c9W(L<#juiF}JDt9Y)?P^gt^KjAk-sjR|9=GAnyuPZcBP@1UD5`(#W%BF=b z=+4C%&YUsO%mQeMRC;wD{#gTVh6oinlH7~y(Y#^6xOgh3bDXhiL>P)!1JL|SKKUcl z47$&-#TUDN4z?}kB&A%LB<)zF4Q&A5aO%5=wZsIp6Po03JkG%ws;e`BQthVcIYO3Wuty9;Wh?!+x#EXfktYnn-W z1{96ZvGh}_mR(iFZC12wd>VH58?3k;rk#hf@{y8NsIrIAnvPm37a#H`c=YE+41v5# zKFHcs*p%7aIq}%B61HM?Fa7C~9a;0IVzf_(&myS-O6rsL2{WZMTtU(g3Mr_=Du*Ri zRoIhiRfHuewkeKeII$ZIFeChbN8{jpymmjr^YD{w@&5Y4(WrKQN`At+T*s29u*-AJ z-h}A=e9EB>Hu`qJjNhl%qE3N4K&njzcfP`=RC>6je`kSc>0NPWn@)6s_|Vp+hSkdP zBjI|Cll_a7uu+0`85UVd4W^X69}nnl2 z-GoepG)qZ4bbqP|(IO9vLLFms-5k);S@8-9CTJU^U#P6WTZhdN5~5ij6V2f54nB7! zpc$ap8jZR1ZhaDAPH0pUxS>lQM7ZVE`NK}`jSpqe?fblAzb8`MuPE@L6t3#RpQ z$vX$D`l(G&uQsNG@RH9kQx6!WI*g55xrv=rUKSP;h?IWbksxx|c0yFZEJ8OQW05A7 zC+MPmU1mkHdU;_hCqgz=R-CNW=7PH1qGr}!y-_;eml9T#==l-Kg~m85OaVJB5c9?4 zkD(YSV#5n57QOFgUp_m^_8wh4Vw?`U@%$BV{t@C+N0+x|K6)CfIwf0Zh)nq1#Tcsd z*k1b!DG7RscV)GpqGO1`SeMvCTH=V-XNI9{QsqKvH5edOG-*{ax44GBs$=NdQeR4z zi3u%+AVAcfQnWqA%ToLKQngnl7fE6k)?Antx5}QsgKd9C3PmSPqKL5yVrq3LoHNvY z5(539cNR%8yZ zFDfl6YvU89uD`)J)A8JI@CK1XYP|>*NWxL1u2*7R2+mU7QBPL?045rne+7Aw*X(}` zF}{Yw=Bl&(8Y_*yFvsMPEJQ&bguVvd5nnEK9BL^L3BFdIf-_*<)43rq>oOp#8VWI1 zC5BF*VG9JRcQT=5UEMoLD$x?-UYaB?mp=7mZ5Dh;huZ$TmX!O89_~cnArai2Q>kSm zBGU>q>ga0$8O)tFF)pf3ANVFt1c{8-6-(HK9)lv(q(XfOYoQ1Zqwv1C!VY{HdAfJ# zKDXA@uajCY<;7sO_N+ydl28GVSsf6L-Fk8y4Vq>E8Jj zI$crer2GnPd5?WW{{T}o>+m}qUw;?DHH)%W5IQ=;-(d<4DI>cpmCGYa79#RXg|Moz zc9DguF4?2{qQc5#l}m)|t4fbPlrxSB?p&gYaD?iD;PjXXdnW?cAPFo6BP44}ZxtE*k#56z3QStoyp5p+q`lyuVNE<^yX5yPMF-#C zk~K*eR3i5RpEABlw9&!TIxi?rkDs&U5pcdBIo0OFTiE@c{Q6;ZS@a5t2^-09GFu#{rU5Z4Ll7VVKI~CVPzQqSB&mfO7OsuYC>Ganlp-5`2>mpVt4_NTI z&8UTgLI!}9BLoi#g99r)Mx+@vJO2QsD&r^C1?wEq(72$SrlWSTG-anl#9rhL#Y*(j zu$BlC6`tVMY!g&^H7y8OhDe!LX5S5tK1EQi)|05v-l?e@Z7$;YT$!b+ZfHX(6mMpR zp=9sKu+X>gYQuMR<;9oEpCqRPI?wnmBir++`|PXoC1(s5U}~{?{PkVLb2cZRkt+nP zhjKM*ckfuO>?#;F@&yT3SBOi#h@;@L?=wx^!1>5;fmnMD%a>lYx}m%a`ZXx8&v9!b zQcqIWGDfq4zMTcPt=V6#D$b;Y;pDHAWAAm#;B2>BQ`SeWELS-Qc)-@xG1SWzg>gKM zuMbk0QJ&HHL-clit@TiRjnQ@PEmFfza7> z31-FkY{{Vz-n>505Nu#ez5gm~eXWkdNz1P)53KRSTdA&SnMKWm*!9yMF zCY@uZg}$fd1}@7FayxxUkzQV+#-OV4jho~p?M1W{vf04UH*n_pI1V(P4k=LW8`Ug7CE)y`w;$k*%>}Qo@;?)nF-RfAaw>yq1+qu#{%j|W*D|Z>RM^I!K(*FSA zYtWS~D0Zt;&crHv{{RI`VRSfQ2)*d?nvU&q{#Qa%Px0a*MaIk}QmNtlI|&kKd4mZ7 zEV(oOdl4Cf>N(=V*cT<^Q29UfeMAhIjoA}6E~sRy)WKULy~jv@Q0{3Ye&N5W2wpfU z^&R}`Dl|15)*gZX0B5Kyr&L~tZ;?Kd{T`A?3zKYSknmejc-+&iJpQ$wN$A+lc!Pg*E9*@Y|vzv2NZW9 zI|6@|$o1a>NvNV>sGapJ8m!b^0yf(6KX9<6`0Lk3LH__ptP@?ArWsOI{}=I(6=F_t30AVm=Cez$_z?qdoj;arnwtck}MC!XkB8j=ywK1Ad<)}k_6@Mz6jx4zKHjwk`pj)yD&@KetnL>8hnYg)p_Rr{(>9E z!fJ!_1Zs!3!YvQMy*^GyBTCQD>MOx9K6%Kd!RG=dQl_DmYl;e&;2#CgIP5A;jfK32 zObzDe23Q=-Plit1AunS|=Hu!L(Sj9FMLs#xpn0k3Z z{eYv|t_Xx>dnx+HMr@%v5d}j8ZKL8UGAmnz^kL=-^Wf}KC#am%Cn$ulQ-7g)4M#Oy z5AHWYMT53(FS;25+8BmhU(ym#H2JH^z6$yX1?yE@T&hTH-=JI36suXF{C_^qYU(n_ zciSUXjUUwDkV@bNVar>@6S`u$UkvGN(&D3h0WAj1Li>k{? zs}w#N`9$?OueVW!#hGuhUg0>4?By+@BVU}AYdF8L1VL=DrLuX z#*U7%&?LP|;an(SVF4X)yLXeBGP2EJ65>t{lIw0OZTn0KFK zS>Mj$SMB{REm%L zR+`H@r3txMpoC-9=&c%dZfYVoNw)SD=@$`c6|OQ%iwwl95si5!dx=d0=6eSG2hzb8 zMBrsU!CWq{KzoNtg&7IZ#I5c)XTSPixgk8o*-ULXojVXjW!WS+kaK7n$>3U0B@-i| zBQJmOYU{UbP@xqw*O7NSk-1t2v_!ntPPZSyw(xW(lG8s1gkH~rtLMZLn@N3tZdaN- zf}NLAn-|L)VKW)vF;c<(#96T!*kti2!E6Xkl^+Fj$Wxra(3YJis=4VWY7XZ;P{aIj0Tc;74VIthiA0#GTk^C=RpxSUrj ziO~zu>9lN(7ud;fv*9weT=*9)g$58%vTvWkImLI5j7qU!UGOs4LWl&PTm2NZe0>gk ziwuEOG#5;sak$b@KpiGB4d#d+*&FIDs~!G@{#MmGuXN0>l_yG>n7xVNTO&#~MB%QF zByzb})L(Ph$7vo@et68_x@=T^c~UEg&$ zY><+eH}Z(pJ5y*^-10A0BVMK~Gt_Eju_+*`wN|-94a$3%srL;U0-7$MlW9r`s=64} z;F!)V3K5a8T@&8Ono9=uMi`{(NWQG-%dR9~xr*q-zX+^*Y-on8RY%~=98BR*t+5I$ zDTRn*SowVsE#AL1JgO~GIv-ST6m91|D-N+Ge#7Y0k0l<*aJ~xX9|pP>qGa;4&r$G! z7K%c4@o~Jx+T@EEB{o?UST$|bPfBsEd_<|wmnil+&O60PlETuzH7_YyuShGL6vDj) z+#0>dvQ@@?%H*|aw68Q93XTrc`x5)fOxLt~h!?`4QQlf@PL(3jUR5;S>~<2h>Be5W zNjsYljl1e5R%wUqDr|j)J+KPUs3KgB*n8KwnJNVk3dxnIiLm-gOYjaT9ah4kZYrlx z$*nAVqUT_`xoiH&g!{=FXw-kmd4VlnJ%uE653ZxXlq=8aHd%Eje*yRLz_TbPXj_Ej zd#Wk;EAXvA6a%|_cBe-nPi zd0Dlq(NeRNEhndA7w6F*57PGY?1gvpK^|=Kv=Km)pARZ?%ZqN5h`Mb;Q8ix9!b3IB zURJBTGI(K?_@NTkZ_1B!C3~n_k4m9C;6NxlNpkIboOl;l=>gD{izDMeqK?AkfWAcC zQ%wXvsOEug1ATH50@HCjSX`^=iSi3skW_fck%U?875Nec--Pe%FKJP9{)rMt2FbT^ zCu`rRl~{ZdB%Er`f+SQIIy|fDGGwHA@!XF*iD;OsiRZypyozK`B0UeD!%1TE58(Vo z%^~ypDLbP@krwfeR;sA^e2+_{=%Z`84e-!JXfdUr>YgZKOdUDDjHI*wO#(5h%DkG13ul3HFi`xb~&)GYiJidQ(1 z@u3u1sh_``jw-vt`#0j^OpahrB5VzT66k9tX8HXeEqwxXP4IM{)+a>3TgJ6Be43SV zA=hp2I<*dsL^Ma-6xAi&2Wt>*C1#ZfNDWq9t3pzHldFAD{%?3ZH`Sud$ycJ*tQK@q zlDtPdvjXNTr|7Lb?ki1NYvx5=MW#Lp{XB3+O3upc{WPt(7je6a@+PLltIMrB5w);o zl-XZ#ZPXEF^_>J-c#f1*@KdjRc1v9zqA(-v+&LD-seP})X1GsRBYPoLs+xC( z)f{Xq?Av3s?@{}g>hq)$GH0-!H|$*=UT!0aDD|g&3DJoD8uYmcmNyN#39Y7@Q7;SX zM%1|mnOa24N;J0NM(5mxi$R-Y5;Bg8g7m1CqqI+FqCNe^_BNz7n;L1 z8&pBF%^bfN+W98kl8igxtR+I6W52;3<}R*U_7vq+Rn~Q}5=2cZ>lQ^`3ip{vm*VWF&#lGa&Wa8mg^K zV50!xiCFFf+dGS zG}36=nQso(Cuq#`2U@oUdWhSb zsMc~WpHaxFRJvGgEVNm4 zi1!#MD(x+Db>1XfO5LwEDRh-$QnnkIRGY2ljeC!ZdLq3FY^`9TITy*Og1Mg()QSgWYFiJ0EE+p(3zGb_$XwxF)DCW}><6N5Mx|aW17@#`^`2(w}f}mhn)tHB_~5 zC+LNTH-~bxXtZXcjZH@Ma~ti@Yeft3j8u7SDL*`cQ^klvzhQ@5iBZ`-Khg9~#V=pz zm55SO)w1d!-Jubhyhq61s*;tI-ZmGil}^p>*5&=}Qq(RoKnV>ni$1K*Hu`lba$Q~t z_M)Sxp0GwAlpAq0XoTmmL(0Z6=-SUdM1dkH)G%#GXY1q`lfdo zG5Ut?_gE`M4`GyDmU`HUN;i*TDhiaSojHM44bp7$*lCnKz{X4LEMA3a9KfW7mh2PY zt~QFx@dB&dW#lazbgfYtt18Aw?AnlU#4Ra=y4{P{RF8e5Pn;Zm@>k(fFE*h1x_wCB zWICY=WjAKFM2zcFteVaAEUk9df?r<;hsZB!i;HqINQM3%jRk8eaH!;s?Gy_qS=*3W=ET3!;zp;44HVA;4BZPPy5S$ixIE}RuNU(vnEr)Sr zuquYQ9f3W%n(WlsLXvhXVp3i?8Nr44MnM}MMc^Jd6}e^fE;gaO5;O`n75f^d zrwCiR4&BsJl@*c`!NqR^b*4`9fnlN7pr4zb3Hb#^chAV0DXPw*a15q_6z*@GS3x;7 zLzevLLVl1Y<_4%EEtC8#HTDJ)cZX8wM~r$4EtZ!n-LWAtG@-XG>K%uE(zSXu6?uVr9^9$guy5jWm*lDNFS>O$<#I6Ep3Ej2Q3YOoMkKA=#uD0h z#Xbdal@@FD1TXSF+Y%e>Je^64>Ok#ZVG4Pk&aSyjsG4MCB=akoYg9;TT0?s0s3Oq3+Zi} z`C?yo2u?`}r<|R!t!`>D6umH3%Mxqu)TdZ>A|*^hd++5YRXNv!HAZzW;xyZTe~Osb!!FtaLXPq6rj;Ef?c8P_l% zAX@{Z!BEZYH(wlyV{o6*?q( zsHrTn{W}f3n zmqO;t8m{&RELLJ$Tzd~jRMRYKBZ(Qt#D*eKvnsIG^ilCC7IM+6rG?Zjm+&e~FR64X6H5H;n;}fubtP6yq$$$P42&F zDBVp8ah1n|YI~{+GPK`bH0*BZ?pF$7DBgs95JbLou{f(YB{7U5ToFBhbL5S3c7`VQ z2K%1IAk>@(&W|d`Z8JmPhR{6OrzyeF^c@#Ec2gC!YE*54TGPEaGk2JYtgGLFtCWsq zG~re#PoAKxvh=w-B_VQs0rK+FZ2iQuY@7pRfe}Yq+Sf^<`+6yccLgS$FKE@5r z7Z#*$-olZ#q-5um?@{ckm&XQi2h#Iex-p|SE+K4fsIg4Qm?L!y#2UeOh--P2>i%i$ zF1yyc&3;SDKf$Y?xlCASb_=q&ieVI!d^>j@S`b-BMkK4l?O&oFxGk6Ui;m^4*oo3; zEpE&WTd`zSTf`|yuB!VoVvx&SE~1|#s~U~n_ikh8r94oD4LC4$6# z(kv-C1ot&1%RxUSM^H#8wZc|LTY~flkkoP4_TynO@Ag27pxt6^%E*Ym0yd{FPbexD zf614vn8_~ue^L1;oTzFz{z$OR3^&m z%ceOg1VqA&%G6r4N-b8t`7+ius;w+G>QGO@5oGIq$|hceF?nbDGS`jK3tg6xnqAar zG72O$KH((V=VnI1{7n`*!EYB4s*`UwM?k6Jj<`y`U&yXb?Z%sR8}sQqO^9zdFg0C4OGi-GwTY3E*v4LqQQT<}DH8ez zPACIvJph~_N*X=}x4T2CU`E}&8#K_Mm7&|tgRkSx4>$Tz(4!W4pz$Zeq5cB=6d0!O zqhEb%9XbopKcOsOnWEy~ym9^i%^%iT07w3%!%)bYSrWYw{*>KWdN&f%@ZktWCL(a>>NUvP5 zPpEE`3Obo`E25GqylahMOR83C?pWZKUPBqT;3MtKNwBk8x)UzezCly zGaZid!{-;(-V~PiH3$sR-mkQ42dccm0-CNYK;tVT8SFzNP9|W z?xS{X$J~O&0xJy`-U3%^act_ZK_?O_!6wg8+D8`APCJNUe_;-&g+XnAg7Is(qXw&C zjY=A}E&zN$gTIrx_Pp#WZx#Bf_fm)WpqpK%=uK31{t35p`b5dEgvw7qLf3T@{2IS5 zPEw~8zhV)C#fXg5%N%DzbS-C7jaCIUR9EB|L|0bd5;mrGbdSNwD!ap{*r?y9n(LuD zmD46Za24Za`#5N+dK1tbk#97 zrC(N4SZ3i~u7j_ovsY}>Zg4}X8pbsFC*UWYCdGV#^p%;5oP^u-jNe1CU&a#L@AO{S zaA!THQB>xR8?jVfiN8D;-)*$6lBk|!kzGs-!pNs>s1r;yF45y*EL2xlxXGHSa7TC~ znaoGiela*lVZ>$)aMK7SXlIc#1#PKY(w2#8PLCO}#+vi&eU3!7k^ca}8%T;lI!S3@ zs!pJ#zQtz9Ojz?{Y&#p}{S>CAhLfOd+L_pXx3JcEMY1}Yo>?o3Y&^)Upu9;RH#KTL zXp2uYBOqpV2#G}%WM|sLC^)A^ic@0&NXvMFh*45Yq^>e84(E4ucOB0)i$09iv;sIcyJku_K$F;Hxkaz2U?jZelxfuI~pS?H%kptg@h zee8Drjc&lBs?f#)u@KOF5UbEA_$#3U*sc=Qf^dS1Bz3YlQ%_QgOzdbgX)@S;fXo+h zVK@~6OUJSkOPL*_G~<0$i)+1k2*s)Vx{*m7M2 zOyVq0CY1t{K@sao6jwatqSQA!;|7YV5}O_9TUK>W7K7BMMvDYS+Bx~S$tRavYZq_0 z(hAOkIS@M!E=#7Wr%eR4hc8SK1ZAr1{{To$_VCZh+YYW@WaBGZ14fT^1T4r^c@P5L ziZH$guDu^r)K&M<<11sP@%yHXbvg<3bQ(#W^sS;bP~C0DnN|DQ~v;dkEjLLa-kPK zBpBC)$c|b4H4#GHW2uda9P^;!RT8qxI^;HXWm~%L@>gi0VON~ohaEx`77elrR_9G zhxujPTDK?fen2k{SdjTOHFT4c*iat?^>a=R95C{{n=KgBYc*0>#k7( zv&xKGw#n7O1@G3h@rZRG!ZJ&#mgG$n85XvJ78c}Ym~Ol}a7&6USrp`1v2mF}TM-V4 z6ND#vYh4W1f%7m2Wnn9IF2Z5LPWS0YWxv8EqKexHKhRJDrw8K{;F6q$)r|EK&{kUf z6L}{l5V~?n4{1*@R=9!gl^xn2SMm#B2%>l}bQY88T8}P6$f=R0KY=*waH0q{__wV+ zj*}Sj3Bv|(L#{$y&D!fhRJz$X7ZotJLt3aSt+f_xdjnlQ4!5}aHvqIaN^;X9Yxb=1 zH>)PG53uR3HVvwWkX_g(D6ofequ^;;P&lUM2~D4dVz_g*YBl3wMOMsEjPIL{(A;(F zWUXDH4uRj9w3O1y#`YZ8usV&GBH>i78Q@nJ)f)=8t215`|~3oknfE zLtY%y=D$N>;)3t$$C+&VA@QhIsae2LYa^@kyB?Af(}@dPUm$Liw4Tq4QrVLaC^_8@ z$K?BypsKXX=Ct@X(?TD~{VzsBB=j*YUryuUCX>(SK~R!6M6nv`Mr@+AwUWdQ&M_CR zYAZb&X*#(mh&TaS}H^LDeiBdco){l zHz*Ltn~}8(%>?Sw+ApSRHlWJ8ONHS^q^7|g_bJ;kw9 z-n(F$oz)^`uzF1kmxsoB6;`Udkew$|=spXDl#xos9%`Ui^_Jz0nI$A99u}3iL_jodiLYB^`J?%ki(IowgRi0>U5w&7Jygx4jcjZ?f!;c#}@_xl@5!LOU2NBBHfv-@}-1w(fm=@@(u4hd}{WY&yy zleE*hK#F8qWira5q;17xxbYXmAMZcWa+lyO_I;G}B2@K4-^!Dq38V`stC%IUXH##v zvfFhpmb2@Qh^DK{f%4V(%Ir?aQ28PM{o3!wQl2kd@*s#T>a0u(T$|&ms_u4_hTFnF4XolKxjnK7X5_gf_47@37!)} zA-cB6l$s=bw4Jg#M*7uR{uP0>SR15|yfxM#bWJKzFcbD0LP8aa<0c}EjdC~Bf)vE< zxs{$P{tJrunmy$@if=x)0&2yZReV z>>LTyR+03jMyL{51!*8uDbI1sHWoytpsObZk+liCxA2!FB|$qbQHgkz>^CXq?DO2LbU#Y$Rdy-7*KrM$V~AGhRc}3|lcwdmj+*Sp*q)N=Ngl!ApQx&f zgy7DG=twV+k~A_dL_s17IMLFbwf+uPlkI?r08%l+A?$`Ptanm`M zTa`;|QI*xR`W%(mEvlV2{TDcoYe!;c|>T@0qk zRUWy8UX)+(cNI#Ax(Ma`(0O!nEU>1xBJQT2qT+7M2~7yqU`&^mpXoFDY*m{C=^aLu z9-2;MCP|@Uz#1%!gupl_FY%C?QF-<$uuqRa2D(zCTf?}Sn!Y;y4x7_QNz>U6X|SK{ zkMRUU%xcMWTue6~1lh7lIv;9A&A4riN_&aFViaE?(iPGi2(Mvc2?Vs6DWb}#@;dcE zs94pSVYwyB6{L$aL>irW8jacSl67^v9c3Tq`~Z z^|m*9*886!h0&+W(zrCjYp*vbyKX&VzZ!|wYATYLQSfRdtH9!bt)`}gyWLaXtaQe} zM9UeWNa1Toxd{sBO=_CpgoTEmQ(0h^k&}Imp2`RL7`3lbV40v=Wc-tEGEg5S^-#d< zw?TamvD&g^R-!_bHB;PKr&3V*4>h0gbf=J?OA<^<<(Bv>rn&u((a=|RX}+YXCNV{> zk1+_Vp;hN8m8MFMPrb}qUH9rC1dk3$TXYA=Dg`naLDh!ssd`mI|qy4LupqjXhemhtUs4+VAJ_ zv20y+SLWzqR6mBkX%!yL3VHi=LU@QbRqQeAl}*RGR9blc2g?G1ny?3HLZVdX6!OC8 zpb*JS>h%o3s{!vHz~lNg9^*0iE=#@3;YgWIg^44z8&Op+ViIFV_B!cnF}|UTmZJL} zR|JKpxdnw1Z@BOS9!BVPBeMrEO0Mj7q25XV0HHa28o9)?KC&yYi?PA8eUF(8^yp-picJLG^| z>NF#=TWU08gLbedMxbIdyZR>{0-~))y4&44b^0HrfzFbqwqCp|F6xP>kw@en$ReeQ7XtakkMdCc}HIW3-b0zc*m-;=jg+omS$k#)CnABZSJ0j{v zS3>P=0+qNs4~KJ+4^E;qQHFwS)LpmINuqEz(s`9l*3^Z&7z$QGhe(#eaMvCUV`M5G%ZJ+gp)AQVq>H5mPza!*RYtm&T2WD z2Q=6qZvf+0Q}ba}aVSC$l}oP`^^K8SlxKH;eq7r|04 zRNcCj%|>qBswTYDdX!5%4)AoExJ%e=d6%6wkzHq4c;Rk6bZcbidfZwzcaPE?Wo^2k z)*u!ZvjtJ2YqbTHVHT`Fxfy7eB%>~6Eue2Ds{8ySH#Dr*YCgz`)H6(lc1sLvfkclI z4M>NPOYTOu3x7&_L(7tkBz?iRxOY2^VA?VQY?cl1T@st1s@B?D0(ogXD{kn0!u=Dq z>9?63WRP`37+D88jaC=y~;%BDDDH)X|Q;YK(HOS z2JSHy@VYQ4(fq2J<;DIvZsPKz6+m55GLm@1soqT)`hf(Bt5%W@- zgDh7+B0EmBS#{MgqE6I)n+SP&67WhNPg}RWuR& z3p{+3hmAles7sO|iGWN+nmd<<#x8{@snmTM&O>0ac*mWT&3X$ddb_T9WBz{7S3s7Q zI?BBijF73SH@-!&HNLrrYgB)Sxml@U=Y-MF>Lk4zUXy4!6X4{Yl@)7s>@cxiCHBet zwdcs`ocXN=P}Iw+x=@5qx?bcSO7oeaSgQSy$Fl44R-y>PQnD=`W=c!~_JOBbZ0u$B z3dHD7kAlC@e3PL%?`!)N1s7#!;P1L8XTr?- zQDlWwT!&mGd1Q$b3EGMSslPTFQt@=AHPD9z19+mMNlM`8^Iiu= z_|S_ILQyA=BiyHjJl~+miHXSlI0*<=9*siJmbsXJqL!pJ* zq&H6eNG78Ldds6Iur+K67U(TLK=VD4-9aU!A#9o5QEN=hTglMc7L1Gd7afqao`wDi z2Q^f7Vx^`M*Ab55zT|})Og?edZ>bUMe(le|vtbi*6!UMP70i8g(L2)z#LtC9B~fIq zx>oK7%r&|>s;IWC{{Ug4P<0k@iQfdYj>~c+r!JjD_TEi(3Dz#m`Sv-ZS{3I{_D&~! z7fsP!{tl(7t^MvgpNq(mlu%u=Hnkj(l+?ip2{{MIkV^^VF8&JN=p~(22Z>xyu0wH& zr2?a?NTEPE04}*0AX?>MS_W{DqR{qark;={QkUUG9V7 z{k<~N23Z=5O^}TSnED+4=aM(iK7}@|*;XbZ$b3wVKO7Cc6`4Cj@6#tN%`{Af#Z%3P zykYgU6Q|%3%?DNILF_vmJ>MgssH|@05WP`%$4KlsZ55zV_z`BJuT)pi>o{8b36F57 znw>{%)oj#+yj=46U!+TP`;OFO^e1$Y>Il@AGA9>U<`);W2BBX#rgDl?wv|dBK-tFlW@c}D-&NvbsHG}0AJAvAIL`=mFDG1@#GtV)6da$ze+ldUEoh0@%sJ= zQg{R~_J3J>*!~DokanLCsEn-wiCnsiiCZPM>vC~9RS>mYgk`_MjOst(1gMCtQCFz5 z0Y!EMtmTOaSSl_l^AjpxU!h4%G$t|l#arK>5gS@?&YKC;@=%fw8jW6PG*2#8-D#}F zdZ-#l%N(xIN_K4qC6bQ07F;1;6yItjEm9@x?6bJ3oUh|1B3|F6#&oGK4#b$NxsQZN zY_KK9qj(YVV<}%_OQ{QHg00NI!X!Q3aq>-L3(z%K60`x<0)JUtY6m20$nZ)pP6Vk9 z6Mlkr_9LS6QSo^D6QC=QlKxzcM*$8fufN$+^cH>-b!;!T^b|YF>1%J?iHWko-F7Rb z#C9T+TYvCtr_ufphK0BEs&er^MW$7wQa2fSBRNehMOtZx$&k*3r;+aXA?{On#xs>emR?)=>NwN>-d&kjBAgXd^!&NGqKZ54AQ`kjtRisp+=;60}P4*tp z8YfHs6Suq{P$Du~pULAy>JHG?okh*!g64P$(d;L~Uu7;dpKvaZ1A)2$Aok>&?0HCT zJCLM$o%bfOy;YugHKk76iAlY8xUpoVqiUaf_7j$ZBgh-hMil1S4`%zVzQruBeoDJ0 z>lT6Dl^)89j@6Nk6#O3xa=1+m`+JM;+m-m)x8u;zhO`ciiptTi1N+)N+K+LwX>9Pl z*q2K?jnrB`!{LC0ONCb6Ey-=!Y4~LNdAmTZsKQZLpJ4ISJp*s1gLG{R%&sBXxdEYm zk8=G?tbo^H(+Jzbq6PEBX6zG`dE8J|{vKGB9H>m1BFnI`62fT#T|0<^cr7*5ddOC! z;Pj|=WAZaZYKm3}$M6=7@_aIY6LPsD^ZgYsLdf~lo?gSJ(~?{Ghu;Zr8;heU1ze}6 zETo1(tov{TDZ5E3prKnH)ug<)T2$CQYtO6 z!q*$UnG|b<7J)iYDK%_P!8#1U^!J9jZIS$sC;CpkF8rwf0EJc2?kLfa{9+!`Q9bJe z`omN5Iub_94boFBMoMXZ!i^yYiKkVFpyyAKiBr49^Vt1!{S%o|W2jcRk`k|`Ta#H; zWYsvV@lv`6l)GUKy~JIP67v*#u>^8i^Mews(t!P?Xf|4kQ}!fOlH4mPI$m8!@Rb!w z6r#ld8<47$wX*&S0|vX^%jlS?)B33+c8NYkk#QfOq1b7!v)sPMmKcp|<2~#`_BnY6 zZ*rz5`pJ7`R<2jtvNe{BoX27uKoXEc&onIy{SuVqi1A-csamh-lKD@eb{JrE;XD(g zX)<6`3DRu9(~{c4nffD7QEU|=zKZHMg3hPJ1ZtSAGxklEYs;N{(64-qT(<@i*k;Ce zB{cs4f@&@$MNL|5xVkf@JHMe@qWX1;_7!Os*!p^lhAPQl5LVT$3ik-A^*=_4u-TxW77z2W#K$vjh6swUJsFH!R}7D=41kv`CyEJlzgYmnUU{tcER+3-S0$tn#; zW3T6-Hw;y)k*2O^;^$L!>O6{==u`EUxhT{}#qOxVt+B$Ow-zZEbKC*wJWrA4Q5(KlC=YgE}5xumn{jI45B9Ss~`!nh*--yB{KO=;n7i~hz6hF^`%`r`%^qkWYwT^z76S%J+ zHA0A>+BQp^)(glAidNTgbo*0x4g8(0Tzm@TCeTL+1u9d3tYy$l@?NBn;g@n2^W3z^ z;Eat>^m8&TQ2b-ukKxFbN{1}J(Dsp%)~l9iMR_;0oH3^jO8XrmaZK!F6PBR~xnU~J zvD8ncS177PBjv3xK^DS6#`V8ZAs2hFK%U*2{uFcS<7_TRuUQ??;+V(ell^o1kse1? z{uf?#A59Ub$u(6x=b)*qXq1U+SAp?RQ0mSI_SzHesVQm31y@SYIV)Cu3D~C)U+8no*4D8tnfoRkKLSNDa_Z}1gW&F{JRqCm1E!F?PKh3T|(XEpq43MEyOxv z%1LeHv3{^%iRG4my@kTf6@fm4-9IF5s^qiha0Sk|WZgn)uyDjm z+Us&3hO7P#XSet^XBvw_Jlux^O~x;o-;(d}JgaLaiQU=+xO82Y8G@QMEQ&i1)Hg;d zXsLJ4mJ+$`TvLJOHdI@@#{$r(ua9xlRZYb`M^mst$)J{{zJXRSb*Rsn3ozv*eI)oD z6i(*nu+b!mB~^PcMTNyfc@`VPuLTGd zPc$BJCat7sH%nxuRi@A-mXf1yT}2W{PJT;I8e3Z#RU#K_%M?wF@-&)-p1*>Ev(KCl zH5aCZXoID0j^?l{4OK$>ri@IMnA6OcMHsZW%OaU&y~NI2CQMfdNL{pq6|16VfPp&b zbsAkJEs)6bkE!6*EKbOL6k?P^-`urgmy6<}MrLCRtL!IjvoeX#$>mCpH)6}>98XkI zeA zUSjQ&M=r>ZR;ZQ@Ji|y8s$wLdiQdq!pYm zk6}&}P?#6&d2n0UfA*C`H<6CUNi8g*7ahmOg73y%u0pA|tvis)oV+pY)@6`H7bHGb zknTx@xhvdW{m~n<qf%;g;>4u48ulAQi=j1J+M-Gm2_;iV`7KI%9q+*jTAD)bWQo{` zY)c}|b}*4-aA2;YGAf@H5iX9(tVRoMt5t3;P$YoFp#BK0K+AF{Nz;P*!pl{ty=hhLe_{0r-SWGZ z*mOfMn{^*(FCODnL{&7uA&jY;ZYsx7aP}veD;vGX`*BAUC^*2Y9Eup38QFo+>f6kY zhMPVxW(TK?Nn?U-eR5fCRi0=jNs2rwYPJ@i>3wYn%RO$h-Ba;$lXV}T(E&-d7w#;?@y|k!&~4SU`FoE*M9bf*&}$MD#OU7>=DrQe=3RfURB3$%R!f z%5)R7vKZl#PwbiN9apZK3aYtw{K6FXHdU)y{TC2DDWkeGGg)iUOWzJ5KXPhB&ZJK2 zq}P+pYurl6Dz`e<*j?a=yz)6xvBd6QJS=LrO@By{W1`=2FS_H%?W3^^O~_ZiN$h)# zWWu;xD~o-JrrArS<;S~JL^=rK2McE7tw%wMrf0so*qB+B_)57}f)?zukKoXhA?~Zt zd~-ckzb9J;D^j4WYdy!zN#4ttuMA}(R;y{^c_K^|j*i_2T-IaGX83n4NT*PmboU>F zp^({Z)}oEuhk2AHuu(EP16|4(jbc)@TFQKmB`Wk(w?tB{lX7&_m64j4gG97LMMvC~r^J>Y@yB%6?U*(DtjalU^BEO9c zxx!#vX}NYorpziiu($rhen(adwS2nm3knKp zn-ijJuY#baTqb(={{Vd!LK>$A#Wh|o%)IXo@;#Bv>NlTo>l3s7x(%K8B2p?vT&AAG z-_T6@WPHoh=6~SfLqBSlMn#x(u$g#JK$vPGA^3tuyI(#d} z!;96tja9@1E=zGNd8lbrPdPQx{%D zzMBhwB`!YhL7HT>Dn7fn6ne&@1*Su*OvfazX2o{~zi_!(^dC7YVM*H}(kh)+dkdD* zDwd@6CfU+Lhb%h#6!W8uy??@P9jK(P&0~S>R+doEmfRS-VjS%iR|As^CUm(mcq*My zqbBulR@KF>4c=N3R7<+SLayCL=4>IsG?Q|xwhO1^Hi~Io1&u1BQ!3AfBNX$mVIQKR zP5chjA-jo3u|pTCFwG!bbl9lEnsNG&__1!nF-M16vJ6GD~2JK!4C8s|))IqXjmu!75Y{wokaK z#O_QqhU>;1$z&L!Rj;A$fl;!xl_YA=k}>QcCu2RZY240g$i=wZj)R$!{YjBiLb=4T z{s=UBe@sVhX+*^_)i#kDnyR!O7~UnpDT`_?HKSNIjjn!4t+Xw5=qvE9qd}(TU}Id0 zi%3}0OEs?}s8od&dLpc_O_gSclyseY3!RpWCiO;}#S(2(o7$!S04^%SeFebGAq$aH8dL|u7FHn6|6AG)SEsC;h@gAc~DX@ zAeCCh^`cYmDdFclZYhJBqEgPu%Oy=#p|ytiAI2ywxX^Jrl8b2K9Yo_vX`G!_OVpeA z&QztsmYQ)QzkHH5l~f&O2Ahjrijdv!xPo<<~BBrZXp4o&YBBs=)kp2hCy)h-R z3SQAs32G4=x(#(0sgk$kaotRmt4N};$rl}#ij?+BMHiLaB~)Cdm||?U6w0R@j{S(u zXc#x1y}gx2fa zZcX%E?o%#l@9tI_NvVptUnL5|9zh==t!9|ILiNn5{Vj*9lB``G2GY9qlYK*fm9R~~ zBXZ`-CkC-Jvfh0+rN}1g$~yyUbS6S=qXT*{StW?o8|_%`-6&V9AvO(7ZB3%ghf-4+ z`5ig5dBFNA^%mu=!LJt?(urla$y%UpCS^u{L^AMDZ{6ISOx7OsBE{ZSr_IUC)Oi~x zxa4q@wFPNLtv7c!o(7{XI;2Bna)!;&z@pJsgd(Pf=G}!QS*@&MMx`~BkRfDACAi~A zvw^h|YO(W3xL*B-QP^K4Wi7~sv`$pqNjP;eLe(7#mS(I?{{Vi4!%2^lHnl=%Sh`W# zEo)o`rgRc%fj?v^EJCunwEDP<}LB~YPi zw2x>-Yhzt4;j8-yx0ngxxP(IP8~0tCiO^+TRKTE!Urgt^=MIj@+sNE zr9|fYk9MuG<_gvB>5XVCD5Uz4T^y5d>0jYek?yZ?OLE4#ALl~*)g0(bj?~oMZ22bj z*T}l5BE`tOQ=sId)~Z^l?P6ktF7onC-iaxNRF-85G@qcVxp*T`D!)Yho49 zk#2lnziWzGzRT_rIr*{O8t!=tJO@;R407!)4#aqzx@dqEDFJ^G_v2&*2+~* zokh!&_!k3S&ABb=q00JVqd`hr&~r$ly7UsyMUgvUI106@6;TydFhav+{{Uv49qvc3 zU6$BPQ%iXgJ!x96P0IZ>_x>4b#>3*Mv)HfzNOa5gAHq&EY$vt|hWHY9>O~UVH)`Ni zSX}BZZn6%#>kwwD%D0`ziAah;L|9T%MwKdQnhDfX_hL=jiQNvK9xD=6Z%8bYAqAGK zn9z=i(3-q5u(#kr8kLq#9mmqLQqeK6`KtMMW7KU_ICQYtt6V&fO14_iZ0`NTAv000 zBh_pOt5tdWCOK(t=`AapOt`9DjVk6*W#imb_!4O`7B6mXyJ{`2iE>eaEp0l;_P8I+ z5v`5e>L}ajx)|K8_IZ*9`oh$|K7On}DP~Pg&%0vn3L0D7v8^dintYE*Xml04yne&z zYOCAyddN60)+%E_gUY*^98tlxgLjhpmeKY@PeW>w5~F2f!y?eEgqqO<;93GcqL`KF z>5xSE4i=bkLAy#@#KxqItbE9&Au^SXA^JzsS%a7-$%zX!bj?_n6n48U8jR)9{KfVeltiN(&TcG_sW#^N zdlQcuFF6)1gGh+1@M-u;jYhN+VNld}Qh&meg!a8uxInu7coR=RDP~6MGD~zqi?CPv z7F8uj_$ux-?1{HRkDfF(6-|DVEW3xdOIpZ} zo-EU7Ei{5n(}W9k(t5isQk!H{Fl{wOcZ*<8O*dQ280``pmDrTh)e|159f|({3RVjB zwkQ7E7l**oz*>|iR=v!?Ci0#k+>VyW%j#{x&3ua$}Gk`%Dj3c_s|zYQJ+DeLwZ#c6vf`4-MA zNvQIcBU|b5z{g2N?j7gO#3q`Wzu==zr`kOcJt;`aYzR)F`MDdlkVk-J8#w2*7~U#ZQBn9c;f?_p_BdRTs%h2zwNg z*{|t&n5w=10MV1-YRApd8q6z4VfoRBtdyt6;e|zamZ&p()FDRY+m+8D17M_0ONEhS zl4X(6@3|ien)pum8CeQR-(~P!!O~X6Vym%Js>qozH_@Hgm8+}e(n`_&TZ%8R3Yr!! zwxn+5SyYi!*Jb5sUmsRWuN?-g%ff})zh=}Yv7$fE0^-r7RV;}iWYZi_rRm;_q)?Kz zuD>9N+9PmBbAVdXFQg;fTjQYBpc-Ccnu-wEo?*0_R#s|HAl#~LCYT+lyzAV6Yn4%} zBEpJ;s|`}PsL86Xo`kJBmpoUKQC5FZ>4MZITwii8CnRZ5l$=$IA9YR|oI{mIO0v3s zP!mqhR7sQ7r&Oe_s#PO6s7W&9>2^x$O1q;v(1xjzRP|3n7PtZ_X3f??3A;Ghc46K5 zpvp}^IXXfOO&32y9GjwxT1AC&ky^ZcjsAmlq~6Y@v%}xfJ_g2?rj>bf>_nMVKSIw2 zz_(bSv}9eYbVaf$O350vY*Ja8I%Y{6%+iYd4olTil@Xh}5>sUc_gJ=`lJ6DwSJCwtv_mN)^zd5HB!sizePwXwz*690%s(T6#YW zSqYwtzXHzcw7$zkvrl18H8T`&yA_P>6_ohr_W^A}4~B z_je*HHJ8Q4>tL4F7DTEErbuBriJroOMBs+Sl^4jhB%+A!F6hB%nN=&bF!m$lAIQ~@ zG%5HZi`CSZrq@hV>=$Py zrC@y0F0}-;9%$sHv0P~NdFQ+ZyAGi#?ocYTLc0+;IBIQERUi1} z&ACJ-^5kH=CPAq}vQ`;$%2`WnI@Dd&E8}^*;NTCTm(`;Ig7RmGpOHGSl1ij9a@0#t>J~#BOqviV`HJY9l``x^z?%*egO zFHx`X(G3Kb$w5P+L0_QPDGsG!Y%y7;Mye8BQyoc_MNY1i9$obn7?;nnGDuu(sVV2i zi9%>zAxvEIIw`29ayuKRhm1-aMBm2u7qZ25{7!{HELKpLPqL`zCj8J_;u=OtPrM42 z8aPt+lut+vb(T6*d%a;TO;4dUK^E9X-2^(AB~POFilXa2(PrT5OAo>hXK0>mFOx3( zjbVKYm!1Nt=nXO~n1Ly&bwR!36J{Dzu@?+^2ggWlnk1df ztx^WWY8|XaI|_O7duVBNOnK}yNY9qtO%*bdS4|?hW?ga>E@+s;Yv+vP%7CQq1g57k z+=zc0dK8@lb&P%z@b(u)pQNZ^A?z57?kpH?kc6<*5w5+>ba`SlccJ$b(~ny2CAx6e zM(fyH?1isccdeJ{T&B|%KV(d2twyp^mIz8Ov80pK zQk_RZGB#`upOxC{$_kw<(+f~-(DRI;Z5L3Un}-%Kf}}a`3Qm&Gq>1()VZyB!k}FX} zE%0Tcb_Z=mu0(}3g$kM%{PXmMX9!wtRYEo$j=3%SPU;Zy7LE$tWP8ushD4^IlHUn@ z5VAE47Hw)|p&0;WQLdN%Hg}b&2VT~(4JOM@NRk* zdO+IlLXC6%7f}qJmUVhWlDHN66`Sg8cPo%0OG{Dx5{Si`m75!hn0lBxvhytQO!SbU#E=℞z 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Список друзей -
    + +

    Список друзей

    + + + + + + + + + + + + {% for friend in friends %} -
  1. Имя-{{ friend.username }} Дата рождения-({{ friend.birthdate}}) Уровень-{{friend.level}}
  2. + + + + + + + {% empty %}
  3. Вы не добавили еще ни одного друга
  4. {% endfor %} - + +
    НикнеймДата рожденияУровень игрокаEmail
    {{ friend.username }}{{ friend.birthdate }}{{ friend.level }}{{ friend.email }}
    +

    Назад

    {% endblock %} diff --git a/dnt/user_profile/templates/user_profile/games_list.html b/dnt/user_profile/templates/user_profile/games_list.html index e4e1c92..ed06239 100644 --- a/dnt/user_profile/templates/user_profile/games_list.html +++ b/dnt/user_profile/templates/user_profile/games_list.html @@ -7,14 +7,27 @@ {% block body %} {% include "main/includes/inc-info.html" %} +

    Мои игры:

    + + + + + + + + {% if games %} -
      {% for game in games %} -
    1. Тип игры: {{ game.type }}, Начало игры: {{ game.started }}
    2. +
    + + + {% endfor %} - + +
    Тип игрыНачало игры
    {{ game.type }}{{ game.started }}
    + {% else %}

    Игры не найдены.

    {% endif %} diff --git a/dnt/user_profile/templates/user_profile/profile.html b/dnt/user_profile/templates/user_profile/profile.html index 0b1b071..3b39259 100644 --- a/dnt/user_profile/templates/user_profile/profile.html +++ b/dnt/user_profile/templates/user_profile/profile.html @@ -9,7 +9,7 @@ {% include "main/includes/inc-info.html" %} -
    +

    Профиль игрока.

    {% if user.avatar %} @@ -35,6 +35,6 @@

    Уровень: {{ user.level }}

    Поиск друзей

    Мои игры

    - -

    Выйти

    +

    Редактировать профиль

    +

    Выйти

    {% endblock %} From 322e8a1d89206567cb41a408e4c6446dfa12d82e Mon Sep 17 00:00:00 2001 From: Barrakuda8 Date: Mon, 17 Apr 2023 13:04:58 +0300 Subject: [PATCH 07/22] Front user profile fix --- dnt/user_profile/templates/user_profile/games_list.html | 2 -- dnt/user_profile/templates/user_profile/leaderboard.html | 3 --- dnt/user_profile/templates/user_profile/manage_friends.html | 6 ++---- dnt/user_profile/templates/user_profile/profile.html | 3 --- 4 files changed, 2 insertions(+), 12 deletions(-) diff --git a/dnt/user_profile/templates/user_profile/games_list.html b/dnt/user_profile/templates/user_profile/games_list.html index e4e1c92..67c9edb 100644 --- a/dnt/user_profile/templates/user_profile/games_list.html +++ b/dnt/user_profile/templates/user_profile/games_list.html @@ -7,7 +7,6 @@ {% block body %} {% include "main/includes/inc-info.html" %} -

    Мои игры:

    {% if games %}
      @@ -19,6 +18,5 @@

      Мои игры:

      Игры не найдены.

      {% endif %}

      Назад

      - {% endblock %} diff --git a/dnt/user_profile/templates/user_profile/leaderboard.html b/dnt/user_profile/templates/user_profile/leaderboard.html index e00dfc5..18428ba 100644 --- a/dnt/user_profile/templates/user_profile/leaderboard.html +++ b/dnt/user_profile/templates/user_profile/leaderboard.html @@ -7,8 +7,6 @@ {% block body %} {% include "main/includes/inc-info.html" %} - - @@ -28,6 +26,5 @@

      Назад

      - {% endblock %} diff --git a/dnt/user_profile/templates/user_profile/manage_friends.html b/dnt/user_profile/templates/user_profile/manage_friends.html index 31a541d..43e0729 100644 --- a/dnt/user_profile/templates/user_profile/manage_friends.html +++ b/dnt/user_profile/templates/user_profile/manage_friends.html @@ -18,14 +18,14 @@

      Поиск друзей

      {% for friend in results %}
    1. {{ friend.username }} {% if friend in user.friends.all %} -
      + {% csrf_token %}
      {% else %} -
      + {% csrf_token %} @@ -51,8 +51,6 @@

      Поиск друзей

      {% endif %}

      Назад

      {% endblock %} - - diff --git a/dnt/user_profile/templates/user_profile/profile.html b/dnt/user_profile/templates/user_profile/profile.html index 0b1b071..764f5f9 100644 --- a/dnt/user_profile/templates/user_profile/profile.html +++ b/dnt/user_profile/templates/user_profile/profile.html @@ -34,7 +34,4 @@

      Уровень: {{ user.level }}

      Список друзей

      Поиск друзей

      Мои игры

      - - -

      Выйти

      {% endblock %} From 47c5837ef31ca1703e3a9abb66bab165f5623164 Mon Sep 17 00:00:00 2001 From: Barrakuda8 Date: Mon, 17 Apr 2023 16:06:03 +0300 Subject: [PATCH 08/22] Games game and results front --- dnt/games/templates/games/game.html | 71 ++++++++------- dnt/games/templates/games/results.html | 37 ++++---- dnt/main/templates/main/includes/header.html | 76 ++++++++-------- dnt/static/css/games_style.css | 91 +++++++++++++++++++- dnt/static/css/games_style.css.map | 2 +- dnt/static/css/games_style.scss | 67 +++++++++++++- dnt/static/js/game.js | 2 + 7 files changed, 260 insertions(+), 86 deletions(-) diff --git a/dnt/games/templates/games/game.html b/dnt/games/templates/games/game.html index 74173ee..2d3b703 100644 --- a/dnt/games/templates/games/game.html +++ b/dnt/games/templates/games/game.html @@ -1,36 +1,45 @@ +{% extends "main/base.html" %} {% load static %} - - - - - Title - +{% block title %}Игровое лобби{% endblock %} +{% block style %} + +{% endblock %} +{% block js_second %} - - -

      {{ request.user.current_game.pk }}

      -{% if themes %} -
      -{% for theme in themes %} - {{ theme.0 }} -{% endfor %} -
      -{% endif %} - - -
      -

      -
      - -
      -
      - {% for user in users %} -
      - {{ user.nickname }} - -
      +{% endblock %} +{% block body %} +
      + {% if themes %} +
      + Играются следующие темы: + {% for theme in themes %} + {{ theme.0 }} {% endfor %} +
      + {% endif %} + + +
      +

      +
      + +
      +
      +
      + +
      + + {% for user in users %} + + + + + {% endfor %} +
      {{ user.nickname }} 0
      +
      + +
      +
      - - \ No newline at end of file +{% endblock %} \ No newline at end of file diff --git a/dnt/games/templates/games/results.html b/dnt/games/templates/games/results.html index 6740f91..fc87f31 100644 --- a/dnt/games/templates/games/results.html +++ b/dnt/games/templates/games/results.html @@ -1,16 +1,21 @@ - - - - - Title - - -{% for result in results %} -
      - {{ result.1 }} - {{ result.0.nickname }} - {{ result.2 }} -
      -{% endfor %} - - \ No newline at end of file +{% extends "main/base.html" %} +{% load static %} + +{% block title %}Игровое лобби{% endblock %} +{% block style %} + +{% endblock %} +{% block body %} +
      + + {% for result in results %} + + + + + + {% endfor %} +
      {{ result.1 }} {{ result.0.nickname }} {{ result.2 }}
      + +
      +{% endblock %} \ No newline at end of file diff --git a/dnt/main/templates/main/includes/header.html b/dnt/main/templates/main/includes/header.html index 5519ccf..2489879 100644 --- a/dnt/main/templates/main/includes/header.html +++ b/dnt/main/templates/main/includes/header.html @@ -8,43 +8,47 @@

      крутыеперцы

      Викторины. Игры. Соревнования.

    -
    -
    - - Принять - Отклонить -
    - {% if not request.user.is_authenticated %} - Войти - Зарегистрироваться - {% else %} - Выйти - Просмотр профиля - {% endif %} - {% if request.user.is_authenticated and request.user.current_game %} - Продолжить игру - {% elif request.user.is_authenticated %} - Играть -
    - Друзья -
    - Добавить друга - {% for friend in request.user.get_friends %} -
    {{ friend.nickname }} -
    chat - invite
    +
    + {% if request.resolver_match.url_name != 'game' %} +
    + + Принять + Отклонить +
    + {% if not request.user.is_authenticated %} + Войти + Зарегистрироваться + {% else %} + Выйти + Просмотр профиля + {% endif %} + {% if request.user.is_authenticated and request.user.current_game %} + Продолжить игру + {% elif request.user.is_authenticated %} + Играть +
    + Друзья +
    + Добавить друга + {% for friend in request.user.get_friends %} +
    {{ friend.nickname }} +
    chat + invite
    +
    + {% endfor %} +
    - {% endfor %} -
    + {% endif %} + {% if request.user.is_moderator %} + Модерация вопросов + Добавить вопрос + {% elif request.user.is_authenticated %} + Оценка вопросов + Предложить вопрос + {% endif %} + {% else %} + Приятной игры! + {% endif %}
    - {% endif %} - {% if request.user.is_moderator %} - Модерация вопросов - Добавить вопрос - {% elif request.user.is_authenticated %} - Оценка вопросов - Предложить вопрос - {% endif %} -
    \ No newline at end of file diff --git a/dnt/static/css/games_style.css b/dnt/static/css/games_style.css index 0e43c34..db954eb 100644 --- a/dnt/static/css/games_style.css +++ b/dnt/static/css/games_style.css @@ -111,7 +111,7 @@ color: #F79F00; } -.lobby_start_game_button { +.lobby_start_game_button, .lobby_cancel_queue_button { cursor: pointer; } @@ -180,4 +180,93 @@ .header_friend_invited { display: none; } + +.game_content { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + padding: 10px; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +.game_themes > span { + margin-right: 10px; +} + +.game_questions_block { + width: 100%; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} + +.game_question { + text-align: center; +} + +.game_answers_block { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + margin: 10px; +} + +.game_answer { + width: 300px; + text-align: center; + cursor: pointer; + padding: 5px 10px; + margin-top: 5px; +} + +.game_answer_button { + background-color: #F79F00; + padding: 3px 7px; + cursor: pointer; + visibility: hidden; +} + +.game_bottom { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + margin-top: 20px; +} + +.results_score_first > td { + background-color: #ffd700; + font-size: 24px; +} + +.results_score_second > td { + background-color: #c0c0c0; + font-size: 20px; +} + +.results_score_third > td { + background-color: #b08d57; + font-size: 16px; +} /*# sourceMappingURL=games_style.css.map */ \ No newline at end of file diff --git a/dnt/static/css/games_style.css.map b/dnt/static/css/games_style.css.map index a47075b..a8669a4 100644 --- a/dnt/static/css/games_style.css.map +++ b/dnt/static/css/games_style.css.map @@ -1,6 +1,6 @@ { "version": 3, - "mappings": "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", + "mappings": "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", "sources": [ "games_style.scss" ], diff --git a/dnt/static/css/games_style.scss b/dnt/static/css/games_style.scss index 64664a2..8186c14 100644 --- a/dnt/static/css/games_style.scss +++ b/dnt/static/css/games_style.scss @@ -83,7 +83,7 @@ color: #F79F00; } -.lobby_start_game_button { +.lobby_start_game_button, .lobby_cancel_queue_button { cursor: pointer; } @@ -139,4 +139,69 @@ .header_friend_invited { display: none; +} + +.game_content { + display: flex; + flex-direction: column; + padding: 10px; + box-sizing: border-box; +} + +.game_themes > span { + margin-right: 10px; +} + +.game_questions_block { + width: 100%; + display: flex; + flex-direction: column; + align-items: center; +} + +.game_question { + text-align: center; +} + +.game_answers_block { + display: flex; + flex-direction: column; + align-items: center; + margin: 10px; +} + +.game_answer { + width: 300px; + text-align: center; + cursor: pointer; + padding: 5px 10px; + margin-top: 5px; +} + +.game_answer_button { + background-color: #F79F00; + padding: 3px 7px; + cursor: pointer; + visibility: hidden; +} + +.game_bottom { + display: flex; + justify-content: space-between; + margin-top: 20px; +} + +.results_score_first > td { + background-color: #ffd700; + font-size: 24px; +} + +.results_score_second > td { + background-color: #c0c0c0; + font-size: 20px; +} + +.results_score_third > td { + background-color: #b08d57; + font-size: 16px; } \ No newline at end of file diff --git a/dnt/static/js/game.js b/dnt/static/js/game.js index 0c920ad..f4ab84a 100644 --- a/dnt/static/js/game.js +++ b/dnt/static/js/game.js @@ -53,6 +53,7 @@ window.addEventListener('load', () => { // обводка правильного ответа и ответа пользователя, если он не правильный, зелёным и красным соответственно $('.chosen_answer').css('border', '1px solid red'); $(`#answer_${data.correct_answer.id}`).css('border', '1px solid green'); + $('.game_answer_button').css('visibility', ''); // переход на страницу с результатами } else if(action == 'show_results') { window.location.href = data['url']; @@ -88,6 +89,7 @@ window.addEventListener('load', () => { $(document).on('click', '.game_answer', (event) => { // если ответ уже отправлен, ничего не происходит if(!is_answered) { + $('.game_answer_button').css('visibility', 'visible'); $('.chosen_answer').css('border', ''); $('.chosen_answer').removeClass('chosen_answer'); event.target.style.border = '1px solid black'; From aa65b097596fe91cca0f89785066133813157f69 Mon Sep 17 00:00:00 2001 From: Barrakuda8 Date: Mon, 17 Apr 2023 18:59:29 +0300 Subject: [PATCH 09/22] Chat front --- dnt/games/templates/games/game.html | 15 ++++-- dnt/games/templates/games/lobby.html | 17 +++--- dnt/main/templates/main/base.html | 10 ++++ dnt/static/css/games_style.css | 79 ++++++++++++++++++++++++++-- dnt/static/css/games_style.css.map | 2 +- dnt/static/css/games_style.scss | 55 ++++++++++++++++++- dnt/static/css/style.css | 43 +++++++++++++++ dnt/static/js/game.js | 8 +++ dnt/static/js/queue.js | 7 +++ dnt/static/js/user_websocket.js | 10 ++++ 10 files changed, 230 insertions(+), 16 deletions(-) diff --git a/dnt/games/templates/games/game.html b/dnt/games/templates/games/game.html index 2d3b703..bb3e667 100644 --- a/dnt/games/templates/games/game.html +++ b/dnt/games/templates/games/game.html @@ -26,9 +26,6 @@

    -
    - -
    {% for user in users %} @@ -37,9 +34,17 @@

    {% endfor %}
    -
    +
    +
    +Открыть игровой чат +
    +
    + Игровой чат + Х +
    +
    -
    +
{% endblock %} \ No newline at end of file diff --git a/dnt/games/templates/games/lobby.html b/dnt/games/templates/games/lobby.html index 5631bfd..71a820a 100644 --- a/dnt/games/templates/games/lobby.html +++ b/dnt/games/templates/games/lobby.html @@ -59,18 +59,23 @@ {% endfor %}
-
- -
Начать игру
:
-
- -
+ Открыть чат лобби +
+
+ Чат лобби + Х +
+
+ +
+ +
{% endblock %} \ No newline at end of file diff --git a/dnt/main/templates/main/base.html b/dnt/main/templates/main/base.html index a1d8f9e..a87ba3c 100644 --- a/dnt/main/templates/main/base.html +++ b/dnt/main/templates/main/base.html @@ -27,5 +27,15 @@ {% include "main/includes/footer.html" %} {% endblock %} +
+
+ + Х +
+
+ +
+ +
\ No newline at end of file diff --git a/dnt/static/css/games_style.css b/dnt/static/css/games_style.css index db954eb..055ee4a 100644 --- a/dnt/static/css/games_style.css +++ b/dnt/static/css/games_style.css @@ -96,9 +96,9 @@ display: -webkit-box; display: -ms-flexbox; display: flex; - -webkit-box-pack: justify; - -ms-flex-pack: justify; - justify-content: space-between; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; position: absolute; bottom: 0; left: 0; @@ -269,4 +269,77 @@ background-color: #b08d57; font-size: 16px; } + +.game_chat_block, .lobby_chat_block { + position: fixed; + bottom: 5px; + left: 5px; + height: 200px; + width: 300px; + display: none; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + background-color: white; + border: 1px solid #F79F00; +} + +.game_chat_top, .lobby_chat_top { + padding: 3px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + width: 100%; + border-bottom: 1px solid #F79F00; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +.game_chat_messages, .lobby_chat_messages { + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: end; + -ms-flex-pack: end; + justify-content: end; + overflow-y: auto; + width: 100%; +} + +.game_chat_textarea, .lobby_chat_textarea { + width: 100%; + height: 40px; + border: none; + border-top: 1px solid #F79F00; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +.lobby_chat_open, .game_chat_open { + padding: 3px; + border: 1px solid #F79F00; + position: fixed; + left: 5px; + bottom: 5px; + background-color: white; + cursor: pointer; +} + +.lobby_chat_close, .game_chat_close { + cursor: pointer; +} /*# sourceMappingURL=games_style.css.map */ \ No newline at end of file diff --git a/dnt/static/css/games_style.css.map b/dnt/static/css/games_style.css.map index a8669a4..8b53d93 100644 --- a/dnt/static/css/games_style.css.map +++ b/dnt/static/css/games_style.css.map @@ -1,6 +1,6 @@ { "version": 3, - "mappings": "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", + "mappings": "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", "sources": [ "games_style.scss" ], diff --git a/dnt/static/css/games_style.scss b/dnt/static/css/games_style.scss index 8186c14..8d5a839 100644 --- a/dnt/static/css/games_style.scss +++ b/dnt/static/css/games_style.scss @@ -70,7 +70,7 @@ .lobby_bottom { display: flex; - justify-content: space-between; + justify-content: center; position: absolute; bottom: 0; left: 0; @@ -204,4 +204,57 @@ .results_score_third > td { background-color: #b08d57; font-size: 16px; +} + +.game_chat_block, .lobby_chat_block { + position: fixed; + bottom: 5px; + left: 5px; + height: 200px; + width: 300px; + display: none; + flex-direction: column; + background-color: white; + border: 1px solid #F79F00; +} + +.game_chat_top, .lobby_chat_top { + padding: 3px; + display: flex; + justify-content: space-between; + align-items: center; + width: 100%; + border-bottom: 1px solid #F79F00; + box-sizing: border-box; +} + +.game_chat_messages, .lobby_chat_messages { + flex-grow: 1; + display: flex; + flex-direction: column; + justify-content: end; + overflow-y: auto; + width: 100%; +} + +.game_chat_textarea, .lobby_chat_textarea { + width: 100%; + height: 40px; + border: none; + border-top: 1px solid #F79F00; + box-sizing: border-box; +} + +.lobby_chat_open, .game_chat_open { + padding: 3px; + border: 1px solid #F79F00; + position: fixed; + left: 5px; + bottom: 5px; + background-color: white; + cursor: pointer; +} + +.lobby_chat_close, .game_chat_close { + cursor: pointer; } \ No newline at end of file diff --git a/dnt/static/css/style.css b/dnt/static/css/style.css index 51009f0..5b9a808 100644 --- a/dnt/static/css/style.css +++ b/dnt/static/css/style.css @@ -469,4 +469,47 @@ table tr td { .header_friend_invite { display: none; +} + +.friend_chat_block { + position: fixed; + bottom: 5px; + right: 5px; + height: 200px; + width: 300px; + display: none; + flex-direction: column; + background-color: white; + border: 1px solid #F79F00; +} + +.friend_chat_top { + padding: 3px; + display: flex; + justify-content: space-between; + align-items: center; + width: 100%; + box-sizing: border-box; + border-bottom: 1px solid #F79F00; +} + +.friend_chat_messages { + flex-grow: 1; + display: flex; + flex-direction: column; + justify-content: end; + overflow-y: auto; + width: 100%; +} + +.friend_chat_textarea { + width: 100%; + height: 30px; + border: none; + border-top: 1px solid #F79F00; + box-sizing: border-box; +} + +.friend_chat_close { + cursor: pointer; } \ No newline at end of file diff --git a/dnt/static/js/game.js b/dnt/static/js/game.js index f4ab84a..d629fe5 100644 --- a/dnt/static/js/game.js +++ b/dnt/static/js/game.js @@ -113,4 +113,12 @@ window.addEventListener('load', () => { notificationSocket.close(); }); + $('.game_chat_close').on('click', () => { + $('.game_chat_block').css('display', ''); + }); + + $('.game_chat_open').on('click', () => { + $('.game_chat_block').css('display', 'flex'); + }); + }); \ No newline at end of file diff --git a/dnt/static/js/queue.js b/dnt/static/js/queue.js index e484c3e..ba416da 100644 --- a/dnt/static/js/queue.js +++ b/dnt/static/js/queue.js @@ -117,4 +117,11 @@ window.addEventListener('load', () => { quit_lobby(); }); + $('.lobby_chat_close').on('click', () => { + $('.lobby_chat_block').css('display', ''); + }); + + $('.lobby_chat_open').on('click', () => { + $('.lobby_chat_block').css('display', 'flex'); + }); }); \ No newline at end of file diff --git a/dnt/static/js/user_websocket.js b/dnt/static/js/user_websocket.js index 8424825..385e223 100644 --- a/dnt/static/js/user_websocket.js +++ b/dnt/static/js/user_websocket.js @@ -129,4 +129,14 @@ window.addEventListener('load', () => { JSON.stringify({'message': {'action': 'reject'}}) ); }); + + $('.friend_chat_close').on('click', () => { + $('.friend_chat_block').css('display', ''); + }); + + $('.header_friend_chat').on('click', () => { + $('.friend_chat_block').css('display', 'flex'); + + // $('.friend_chat_name').html(); + }); }); \ No newline at end of file From 571d38729f4cd93529f9033c830efa9490441434 Mon Sep 17 00:00:00 2001 From: warload22 Date: Mon, 17 Apr 2023 19:14:58 +0300 Subject: [PATCH 10/22] FriendChat commit --- dnt/chat/__init__.py | 0 dnt/chat/admin.py | 3 ++ dnt/chat/apps.py | 6 +++ dnt/chat/migrations/0001_initial.py | 48 +++++++++++++++++++ dnt/chat/migrations/__init__.py | 0 dnt/chat/models.py | 25 ++++++++++ dnt/chat/tests.py | 3 ++ dnt/chat/urls.py | 9 ++++ dnt/chat/views.py | 38 +++++++++++++++ ..._options_alter_subtype_options_and_more.py | 25 ++++++++++ 10 files changed, 157 insertions(+) create mode 100644 dnt/chat/__init__.py create mode 100644 dnt/chat/admin.py create mode 100644 dnt/chat/apps.py create mode 100644 dnt/chat/migrations/0001_initial.py create mode 100644 dnt/chat/migrations/__init__.py create mode 100644 dnt/chat/models.py create mode 100644 dnt/chat/tests.py create mode 100644 dnt/chat/urls.py create mode 100644 dnt/chat/views.py create mode 100644 dnt/questions/migrations/0005_alter_category_options_alter_subtype_options_and_more.py diff --git a/dnt/chat/__init__.py b/dnt/chat/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dnt/chat/admin.py b/dnt/chat/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/dnt/chat/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/dnt/chat/apps.py b/dnt/chat/apps.py new file mode 100644 index 0000000..2fe899a --- /dev/null +++ b/dnt/chat/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class ChatConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'chat' diff --git a/dnt/chat/migrations/0001_initial.py b/dnt/chat/migrations/0001_initial.py new file mode 100644 index 0000000..854855e --- /dev/null +++ b/dnt/chat/migrations/0001_initial.py @@ -0,0 +1,48 @@ +# Generated by Django 4.1.7 on 2023-04-10 17:41 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('games', '0006_alter_game_type_alter_lobby_type_alter_queue_type'), + ] + + operations = [ + migrations.CreateModel( + name='LobbyMessage', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('text', models.CharField(max_length=128)), + ('created_at', models.DateTimeField(auto_now=True)), + ('lobby', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='games.lobby')), + ('sender', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.CreateModel( + name='GameMessage', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('text', models.CharField(max_length=128)), + ('created_at', models.DateTimeField(auto_now=True)), + ('game', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='games.game')), + ('sender', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.CreateModel( + name='FriendMessage', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('text', models.CharField(max_length=128)), + ('created_at', models.DateTimeField(auto_now=True)), + ('receiver', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='receiver', to=settings.AUTH_USER_MODEL)), + ('sender', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='sender', to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/dnt/chat/migrations/__init__.py b/dnt/chat/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dnt/chat/models.py b/dnt/chat/models.py new file mode 100644 index 0000000..37663f2 --- /dev/null +++ b/dnt/chat/models.py @@ -0,0 +1,25 @@ +from django.db import models +from authapp.models import AuthUser +from games.models import Game, Lobby + +class FriendMessage(models.Model): + + sender = models.ForeignKey(AuthUser, on_delete=models.CASCADE, related_name='sender') + receiver = models.ForeignKey(AuthUser, on_delete=models.CASCADE, related_name='receiver') + text = models.CharField(max_length=128) + created_at = models.DateTimeField(auto_now=True) + +class LobbyMessage(models.Model): + + sender = models.ForeignKey(AuthUser, on_delete=models.CASCADE) + lobby = models.ForeignKey(Lobby, on_delete=models.CASCADE) + text = models.CharField(max_length=128) + created_at = models.DateTimeField(auto_now=True) + +class GameMessage(models.Model): + + sender = models.ForeignKey(AuthUser, on_delete=models.CASCADE) + game = models.ForeignKey(Game, on_delete=models.CASCADE) + text = models.CharField(max_length=128) + created_at = models.DateTimeField(auto_now=True) + diff --git a/dnt/chat/tests.py b/dnt/chat/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/dnt/chat/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/dnt/chat/urls.py b/dnt/chat/urls.py new file mode 100644 index 0000000..cc62a8e --- /dev/null +++ b/dnt/chat/urls.py @@ -0,0 +1,9 @@ +from django.urls import path +import chat.views as chat + +app_name = 'chat' + +urlpatterns = [ + path('load_messages/', chat.load_messages, name='load_messages'), + path('create_messages/', chat.create_messages, name='create_messages'), +] diff --git a/dnt/chat/views.py b/dnt/chat/views.py new file mode 100644 index 0000000..c2b9458 --- /dev/null +++ b/dnt/chat/views.py @@ -0,0 +1,38 @@ +from django.shortcuts import render +from django.core import serializers +from django.http import JsonResponse +from chat.models import GameMessage, FriendMessage, LobbyMessage +from django.db.models import Q +from authapp.models import AuthUser +from channels.layers import get_channel_layer +from asgiref.sync import async_to_sync +import json + + +def load_messages(request): + type_ = request.GET.get('type') + if type_ == 'friend': + friend_pk = int(request.GET.get('friend_pk')) + friend = AuthUser.objects.get(pk=friend_pk) + messages = FriendMessage.objects.filter(Q(sender__in=[request.user, friend]) + & Q(receiver__in=[request.user, friend])) + print(messages) + return JsonResponse(serializers.serialize('json', messages.order_by('created_at')), safe=False) + elif type_ == 'lobby': + pass + elif type_ == 'game': + pass + +def create_messages(request): + button_message = request.GET.get('message') + receiver_pk = int(request.GET.get('receiver')) + sender_pk = int(request.GET.get('sender')) + msg = FriendMessage.objects.create(text=button_message, receiver_id=receiver_pk, sender_id=sender_pk) + # FriendMessage.objects.create(receiver=receiver_pk) + data = {'action': 'chat_message', 'message': serializers.serialize('json', [msg])} + layer = get_channel_layer() + for pk in [sender_pk, receiver_pk]: + async_to_sync(layer.group_send)(f'user_{pk}', {'type': 'send_message', 'message': data}) + + print(msg) + return JsonResponse({'ok': 'ok'}) \ No newline at end of file diff --git a/dnt/questions/migrations/0005_alter_category_options_alter_subtype_options_and_more.py b/dnt/questions/migrations/0005_alter_category_options_alter_subtype_options_and_more.py new file mode 100644 index 0000000..6e82d50 --- /dev/null +++ b/dnt/questions/migrations/0005_alter_category_options_alter_subtype_options_and_more.py @@ -0,0 +1,25 @@ +# Generated by Django 4.1.7 on 2023-04-10 17:41 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('questions', '0004_alter_question_options'), + ] + + operations = [ + migrations.AlterModelOptions( + name='category', + options={'ordering': ('name',)}, + ), + migrations.AlterModelOptions( + name='subtype', + options={'ordering': ('name',)}, + ), + migrations.AlterModelOptions( + name='type', + options={'ordering': ('name',)}, + ), + ] From 93ee5bd26503034dffd759020d5f0bc7a564ff22 Mon Sep 17 00:00:00 2001 From: Roman Date: Mon, 17 Apr 2023 20:13:56 +0300 Subject: [PATCH 11/22] finished profile* --- ...alter_category_options_alter_subtype_options_and_more.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dnt/questions/migrations/0005_alter_category_options_alter_subtype_options_and_more.py b/dnt/questions/migrations/0005_alter_category_options_alter_subtype_options_and_more.py index 86f1b8e..38398aa 100644 --- a/dnt/questions/migrations/0005_alter_category_options_alter_subtype_options_and_more.py +++ b/dnt/questions/migrations/0005_alter_category_options_alter_subtype_options_and_more.py @@ -1,8 +1,8 @@ -<<<<<<< HEAD +# <<<<<<< HEAD # Generated by Django 4.1.7 on 2023-04-10 17:41 -======= +# ======= # Generated by Django 4.1.7 on 2023-04-10 21:38 ->>>>>>> origin/main +# >>>>>>> origin/main from django.db import migrations From 2ba0375b4714c0cb8a63b7b60c3a4958645e9c69 Mon Sep 17 00:00:00 2001 From: warload22 Date: Mon, 17 Apr 2023 20:21:25 +0300 Subject: [PATCH 12/22] FriendChat commit2 --- dnt/chat/views.py | 4 +- dnt/dnt/asgi.py | 4 +- dnt/dnt/settings.py | 1 + dnt/dnt/urls.py | 1 + dnt/games/routing.py | 3 +- dnt/games/templates/games/lobby.html | 2 +- dnt/requirements.txt | 1 - dnt/static/js/user_websocket.js | 58 ++++++++++++++++++++++++++-- 8 files changed, 64 insertions(+), 10 deletions(-) diff --git a/dnt/chat/views.py b/dnt/chat/views.py index c2b9458..4067dc0 100644 --- a/dnt/chat/views.py +++ b/dnt/chat/views.py @@ -15,9 +15,9 @@ def load_messages(request): friend_pk = int(request.GET.get('friend_pk')) friend = AuthUser.objects.get(pk=friend_pk) messages = FriendMessage.objects.filter(Q(sender__in=[request.user, friend]) - & Q(receiver__in=[request.user, friend])) + & Q(receiver__in=[request.user, friend])).order_by('created_at') print(messages) - return JsonResponse(serializers.serialize('json', messages.order_by('created_at')), safe=False) + return JsonResponse({'messages': list(messages.values()), 'friend_name': friend.nickname}, safe=False) elif type_ == 'lobby': pass elif type_ == 'game': diff --git a/dnt/dnt/asgi.py b/dnt/dnt/asgi.py index 0bc79d6..7f64f91 100644 --- a/dnt/dnt/asgi.py +++ b/dnt/dnt/asgi.py @@ -8,13 +8,13 @@ django_asgi_app = get_asgi_application() from channels.auth import AuthMiddlewareStack -import games.routing +import games.routing#, chat.routing application = ProtocolTypeRouter({ 'http': django_asgi_app, 'websocket': AuthMiddlewareStack( URLRouter( - games.routing.websocket_urlpatterns + games.routing.websocket_urlpatterns #+ chat.routing.websocket_urlpatterns ) ) }) diff --git a/dnt/dnt/settings.py b/dnt/dnt/settings.py index 25cb1d1..d73d271 100644 --- a/dnt/dnt/settings.py +++ b/dnt/dnt/settings.py @@ -41,6 +41,7 @@ 'channels', + 'chat', 'custom_admin', 'authapp', 'games', diff --git a/dnt/dnt/urls.py b/dnt/dnt/urls.py index d36b3df..85155ce 100644 --- a/dnt/dnt/urls.py +++ b/dnt/dnt/urls.py @@ -10,6 +10,7 @@ path('', main.index, name='home'), # todo # path('index/', main.index, name="home"), path('authapp/', include('authapp.urls', namespace='auth')), + path('chat/', include('chat.urls', namespace='chat')), path('custom_admin/', include('custom_admin.urls', namespace='custom_admin')), path('games/', include('games.urls', namespace='games')), path('quest/', include('questions.urls', namespace='quest')), diff --git a/dnt/games/routing.py b/dnt/games/routing.py index 6a4bda1..d9033da 100644 --- a/dnt/games/routing.py +++ b/dnt/games/routing.py @@ -4,5 +4,6 @@ websocket_urlpatterns = [ path('ws/user/', consumers.GamesConsumer.as_asgi()), path('ws/queue/', consumers.GamesConsumer.as_asgi()), - path('ws/game/', consumers.GamesConsumer.as_asgi()) + path('ws/game/', consumers.GamesConsumer.as_asgi()), + #path('ws/chat/', consumers.ChatConsumers.as_asgi() ] diff --git a/dnt/games/templates/games/lobby.html b/dnt/games/templates/games/lobby.html index 71a820a..c094fc3 100644 --- a/dnt/games/templates/games/lobby.html +++ b/dnt/games/templates/games/lobby.html @@ -74,7 +74,7 @@ Х
- +
diff --git a/dnt/requirements.txt b/dnt/requirements.txt index 3f41acd..68a5c0a 100644 --- a/dnt/requirements.txt +++ b/dnt/requirements.txt @@ -6,7 +6,6 @@ autobahn==23.1.2 Automat==22.10.0 certifi==2022.12.7 cffi==1.15.1 -channels==3.0.1 channels-redis==2.4.2 charset-normalizer==3.1.0 constantly==15.1.0 diff --git a/dnt/static/js/user_websocket.js b/dnt/static/js/user_websocket.js index 385e223..250c34d 100644 --- a/dnt/static/js/user_websocket.js +++ b/dnt/static/js/user_websocket.js @@ -76,6 +76,12 @@ window.addEventListener('load', () => { $('.lobby_mode').append(html_string); } else if(action == 'delete_theme') { $('.lobby_theme').remove(); + } else if(action == 'chat_message') { + if (data['message'] == parseInt(user_id)) { + $('.friend_chat_messages').append(`${JSON.parse(data['message'])[0].fields.text}`); + }else{ + $('.friend_chat_messages').append(`${JSON.parse(data['message'])[0].fields.text}`); + } } }; @@ -96,7 +102,7 @@ window.addEventListener('load', () => { $('.header_friends_block').css('display', 'flex'); } else if (event.target.classList[0] == 'header_friends_button') { $('.header_friends_block').css('display', ''); - } + } }) $(document).on('click', '.lobby_invitation_accept', () => { @@ -134,9 +140,55 @@ window.addEventListener('load', () => { $('.friend_chat_block').css('display', ''); }); - $('.header_friend_chat').on('click', () => { + $('.header_friend_chat').on('click', (event) => { $('.friend_chat_block').css('display', 'flex'); - // $('.friend_chat_name').html(); + $('.friend_chat_name').html(); + let friend_pk = parseInt(event.target.id.replace('chat_friend_', '')); + $.ajax({ + method: "get", + url: "/chat/load_messages/", + data: {friend_pk: friend_pk, type: 'friend'}, + success: (data) => { + let messages = data['messages']; + console.log(messages) + let html_string = ''; + for (let message of messages) { + if (message.sender_id == parseInt(user_id)) { + html_string += `${message.text}`; + }else{ + html_string += `${message.text}`; + } + } + $('.friend_chat_messages').html(html_string); + $('.friend_chat_name').html(data['friend_name']); + $('.friend_chat_textarea').attr('id', `textarea_${friend_pk}`); + }, + error: (data) => { + } + }) }); + + + $('.friend_chat_textarea').on('keydown', (event) => { + + if (event.keyCode == 13) { + + let reciever_pk = parseInt(event.target.id.replace('textarea_', '')); + let chat_message = event.target.value; + $.ajax({ + method: "get", + url: "/chat/create_messages/", + data: {sender: user_id, receiver: reciever_pk, message: chat_message}, + success: (data) => { + + }, + error: (data) => { + } + }) + } + }) + + + }); \ No newline at end of file From 3cd849fb779200042e54f4af99d66456bf9f45cd Mon Sep 17 00:00:00 2001 From: Roman Date: Mon, 17 Apr 2023 22:40:30 +0300 Subject: [PATCH 13/22] 22:40/17.04.23 --- dnt/chat/views.py | 3 ++- dnt/user_profile/templates/user_profile/leaderboard.html | 5 ++--- dnt/user_profile/views.py | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/dnt/chat/views.py b/dnt/chat/views.py index c2b9458..07bc775 100644 --- a/dnt/chat/views.py +++ b/dnt/chat/views.py @@ -23,6 +23,7 @@ def load_messages(request): elif type_ == 'game': pass + def create_messages(request): button_message = request.GET.get('message') receiver_pk = int(request.GET.get('receiver')) @@ -35,4 +36,4 @@ def create_messages(request): async_to_sync(layer.group_send)(f'user_{pk}', {'type': 'send_message', 'message': data}) print(msg) - return JsonResponse({'ok': 'ok'}) \ No newline at end of file + return JsonResponse({'ok': 'ok'}) diff --git a/dnt/user_profile/templates/user_profile/leaderboard.html b/dnt/user_profile/templates/user_profile/leaderboard.html index 18428ba..a31ce80 100644 --- a/dnt/user_profile/templates/user_profile/leaderboard.html +++ b/dnt/user_profile/templates/user_profile/leaderboard.html @@ -11,20 +11,19 @@ Никнейм - Опыт игрока Уровень игрока + Опыт игрока {% for player in players %} {{ player.username }} - {{ player.current_experience }} {{ player.level }} + {{ player.current_experience }} {% endfor %}

Назад

{% endblock %} - diff --git a/dnt/user_profile/views.py b/dnt/user_profile/views.py index db16857..f3594ae 100644 --- a/dnt/user_profile/views.py +++ b/dnt/user_profile/views.py @@ -48,7 +48,7 @@ def manage_friends(request): friend_username = request.POST.get('friend_username') if query: - results = AuthUser.objects.filter(username__icontains=query) + results = AuthUser.objects.filter(username__icontains=query).exclude(username=user) else: results = None @@ -82,7 +82,7 @@ def manage_friends(request): def leaderboard(request): - players = AuthUser.objects.order_by('-current_experience')[:5] + players = AuthUser.objects.order_by('-level', '-current_experience')[:5] return render(request, 'user_profile/leaderboard.html', {'players': players}) From a7103503bb8207213c89efb081cd4b4aadf87b2b Mon Sep 17 00:00:00 2001 From: Roman Date: Tue, 18 Apr 2023 18:46:49 +0300 Subject: [PATCH 14/22] 18:46/18.04.23 --- dnt/games/models.py | 7 ++++++- dnt/user_profile/templates/user_profile/games_list.html | 7 +++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/dnt/games/models.py b/dnt/games/models.py index ea36748..971e280 100644 --- a/dnt/games/models.py +++ b/dnt/games/models.py @@ -75,4 +75,9 @@ class Game(models.Model): @property def players(self): - return list(self.results.keys()) \ No newline at end of file + return list(self.results.keys()) + + @property + def display_type(self): + return eval(self.type)[1] + diff --git a/dnt/user_profile/templates/user_profile/games_list.html b/dnt/user_profile/templates/user_profile/games_list.html index 269cddd..762b6b2 100644 --- a/dnt/user_profile/templates/user_profile/games_list.html +++ b/dnt/user_profile/templates/user_profile/games_list.html @@ -17,15 +17,14 @@

Мои игры:

{% if games %} - {% for game in games %} + {% for game in games %} - {{ game.type }} - {{ game.started }} + {{ game.display_type }} + {{ game.started }} {% endfor %} - {% else %}

Игры не найдены.

{% endif %} From ade5e205c294457c015346489805bfcbeedd2b35 Mon Sep 17 00:00:00 2001 From: Roman Date: Tue, 18 Apr 2023 22:24:23 +0300 Subject: [PATCH 15/22] 22:24/18.04.23 --- dnt/games/models.py | 6 +++++- dnt/user_profile/templates/user_profile/games_list.html | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/dnt/games/models.py b/dnt/games/models.py index 971e280..0c4e743 100644 --- a/dnt/games/models.py +++ b/dnt/games/models.py @@ -1,6 +1,6 @@ from django.db import models from questions.models import Question, Category - +import datetime TYPES = ( ('normal', 'Обычная'), ('ranked', 'Ранговая'), @@ -81,3 +81,7 @@ def players(self): def display_type(self): return eval(self.type)[1] + @property + def get_time(self): + return self.started.strftime("%Y-%m-%d/%H:%M") + diff --git a/dnt/user_profile/templates/user_profile/games_list.html b/dnt/user_profile/templates/user_profile/games_list.html index 762b6b2..cf8351d 100644 --- a/dnt/user_profile/templates/user_profile/games_list.html +++ b/dnt/user_profile/templates/user_profile/games_list.html @@ -20,7 +20,7 @@

Мои игры:

{% for game in games %} {{ game.display_type }} - {{ game.started }} + {{ game.get_time }} {% endfor %} From 419c6c3ca89c291c46055c8da21d76467fa59c0b Mon Sep 17 00:00:00 2001 From: Kayko Date: Wed, 19 Apr 2023 14:02:26 +0300 Subject: [PATCH 16/22] edited front profile change --- dnt/authapp/templates/authapp/edit.html | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/dnt/authapp/templates/authapp/edit.html b/dnt/authapp/templates/authapp/edit.html index bee1c97..f85951c 100644 --- a/dnt/authapp/templates/authapp/edit.html +++ b/dnt/authapp/templates/authapp/edit.html @@ -7,11 +7,11 @@ {% block body %} {% csrf_token %} -

Edit

+

Редактировать профиль

{% for field in edit_form %}
{% if field.label != "Password" %} - {{ field.label_tag }}{{ field }}{{ field.errors }} +

{{ field.label_tag }}{{ field }}

{{ field.errors }} {% endif %}
{% endfor %} @@ -20,7 +20,9 @@

Edit

{{ field.label_tag }}{{ field }}{{ field.errors }}
{% endfor %} - +
+ +
{% endblock %} From a0f441ca505d3823b54bb39e6f24f8efcbd8495f Mon Sep 17 00:00:00 2001 From: Kayko Date: Wed, 19 Apr 2023 14:10:26 +0300 Subject: [PATCH 17/22] edited front profile change --- dnt/authapp/templates/authapp/edit.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnt/authapp/templates/authapp/edit.html b/dnt/authapp/templates/authapp/edit.html index f85951c..a7dab4a 100644 --- a/dnt/authapp/templates/authapp/edit.html +++ b/dnt/authapp/templates/authapp/edit.html @@ -1,7 +1,7 @@ {% extends 'main/base.html' %} {% block title %} - {{ title|title }} + Редактировать профиль {% endblock %} {% block body %} From 22889d34a212eaa89f8d3bf121305e0ed580fb6c Mon Sep 17 00:00:00 2001 From: warload22 Date: Thu, 20 Apr 2023 20:17:55 +0300 Subject: [PATCH 18/22] Chat commit --- dnt/chat/views.py | 52 +++++++++++++++++++++++++-------- dnt/static/js/game.js | 44 ++++++++++++++++++++++++++++ dnt/static/js/queue.js | 39 +++++++++++++++++++++++++ dnt/static/js/user_websocket.js | 20 ++++++++----- 4 files changed, 136 insertions(+), 19 deletions(-) diff --git a/dnt/chat/views.py b/dnt/chat/views.py index 4067dc0..f77f033 100644 --- a/dnt/chat/views.py +++ b/dnt/chat/views.py @@ -7,6 +7,7 @@ from channels.layers import get_channel_layer from asgiref.sync import async_to_sync import json +from games.models import Lobby, Game def load_messages(request): @@ -19,20 +20,47 @@ def load_messages(request): print(messages) return JsonResponse({'messages': list(messages.values()), 'friend_name': friend.nickname}, safe=False) elif type_ == 'lobby': - pass + print(request.user) + print(request.user.current_lobby) + lobby = request.user.current_lobby + messages = LobbyMessage.objects.filter(lobby=lobby).order_by('created_at') + players = lobby.players.all() + return JsonResponse({'messages': list(messages.values()), 'players': {player.pk: player.nickname for player in players}}, safe=False) elif type_ == 'game': - pass + game = request.user.current_game + messages = GameMessage.objects.filter(game=game).order_by('created_at') + players = AuthUser.objects.filter(pk__in=game.players) + return JsonResponse( + {'messages': list(messages.values()), 'players': {player.pk: player.nickname for player in players}}, + safe=False) def create_messages(request): - button_message = request.GET.get('message') - receiver_pk = int(request.GET.get('receiver')) - sender_pk = int(request.GET.get('sender')) - msg = FriendMessage.objects.create(text=button_message, receiver_id=receiver_pk, sender_id=sender_pk) - # FriendMessage.objects.create(receiver=receiver_pk) - data = {'action': 'chat_message', 'message': serializers.serialize('json', [msg])} - layer = get_channel_layer() - for pk in [sender_pk, receiver_pk]: - async_to_sync(layer.group_send)(f'user_{pk}', {'type': 'send_message', 'message': data}) + type_ = request.GET.get('type') + if type_ == 'friend': + button_message = request.GET.get('message') + receiver_pk = int(request.GET.get('receiver')) + sender_pk = int(request.GET.get('sender')) + msg = FriendMessage.objects.create(text=button_message, receiver_id=receiver_pk, sender_id=sender_pk) + # FriendMessage.objects.create(receiver=receiver_pk) + data = {'action': 'chat_message', 'message': serializers.serialize('json', [msg]), 'type': 'friend'} + layer = get_channel_layer() + for pk in [sender_pk, receiver_pk]: + async_to_sync(layer.group_send)(f'user_{pk}', {'type': 'send_message', 'message': data}) + print(msg) + elif type_ == 'lobby': + button_message = request.GET.get('message') + lobby = request.user.current_lobby + msg = LobbyMessage.objects.create(text=button_message, lobby_id=lobby.pk, sender_id=request.user.pk) + data = {'action': 'chat_message', 'message': serializers.serialize('json', [msg]), 'type': 'lobby'} + layer = get_channel_layer() + for player in lobby.players.all(): + async_to_sync(layer.group_send)(f'user_{player.pk}', {'type': 'send_message', 'message': data}) + elif type_ == 'game': + button_message = request.GET.get('message') + game = request.user.current_game.pk + msg = GameMessage.objects.create(text=button_message, game_id=game, sender_id=request.user.pk) + data = {'action': 'chat_message', 'message': serializers.serialize('json', [msg])} + layer = get_channel_layer() + async_to_sync(layer.group_send)(f'game_{request.user.current_game.pk}', {'type': 'send_message', 'message': data}) - print(msg) return JsonResponse({'ok': 'ok'}) \ No newline at end of file diff --git a/dnt/static/js/game.js b/dnt/static/js/game.js index d629fe5..9ed1c2a 100644 --- a/dnt/static/js/game.js +++ b/dnt/static/js/game.js @@ -57,6 +57,12 @@ window.addEventListener('load', () => { // переход на страницу с результатами } else if(action == 'show_results') { window.location.href = data['url']; + } else if (action == 'chat_message') { + if (data['message'] == parseInt(user_id)) { + $('.game_chat_messages').append(`${JSON.parse(data['message'])[0].fields.text}`); + } else { + $('.game_chat_messages').append(`${JSON.parse(data['message'])[0].fields.text}`); + } } }; @@ -119,6 +125,44 @@ window.addEventListener('load', () => { $('.game_chat_open').on('click', () => { $('.game_chat_block').css('display', 'flex'); + $.ajax({ + method: "get", + url: "/chat/load_messages/", + data: {type: 'game'}, + success: (data) => { + let messages = data['messages']; + console.log(messages) + let html_string = ''; + for (let message of messages) { + if (message.sender_id == parseInt(user_id)) { + html_string += `${message.text}`; + }else{ + html_string += `${message.text}`; + } + } + $('.game_chat_messages').html(html_string); + }, + error: (data) => { + } + }) }); + $('.game_chat_textarea').on('keydown', (event) => { + + if (event.keyCode == 13) { + + let chat_message = event.target.value; + $.ajax({ + method: "get", + url: "/chat/create_messages/", + data: {message: chat_message, type: 'game'}, + success: (data) => { + + }, + error: (data) => { + } + }) + } + }) + }); \ No newline at end of file diff --git a/dnt/static/js/queue.js b/dnt/static/js/queue.js index ba416da..573bc3c 100644 --- a/dnt/static/js/queue.js +++ b/dnt/static/js/queue.js @@ -123,5 +123,44 @@ window.addEventListener('load', () => { $('.lobby_chat_open').on('click', () => { $('.lobby_chat_block').css('display', 'flex'); + $.ajax({ + method: "get", + url: "/chat/load_messages/", + data: {type: 'lobby'}, + success: (data) => { + let messages = data['messages']; + console.log(messages) + let html_string = ''; + for (let message of messages) { + if (message.sender_id == parseInt(user_id)) { + html_string += `${message.text}`; + }else{ + html_string += `${message.text}`; + } + } + $('.lobby_chat_messages').html(html_string); + }, + error: (data) => { + } + }) }); + + $('.lobby_chat_textarea').on('keydown', (event) => { + + if (event.keyCode == 13) { + + let chat_message = event.target.value; + $.ajax({ + method: "get", + url: "/chat/create_messages/", + data: {message: chat_message, type: 'lobby'}, + success: (data) => { + + }, + error: (data) => { + } + }) + } + }) + }); \ No newline at end of file diff --git a/dnt/static/js/user_websocket.js b/dnt/static/js/user_websocket.js index 250c34d..6303342 100644 --- a/dnt/static/js/user_websocket.js +++ b/dnt/static/js/user_websocket.js @@ -77,10 +77,18 @@ window.addEventListener('load', () => { } else if(action == 'delete_theme') { $('.lobby_theme').remove(); } else if(action == 'chat_message') { - if (data['message'] == parseInt(user_id)) { - $('.friend_chat_messages').append(`${JSON.parse(data['message'])[0].fields.text}`); - }else{ - $('.friend_chat_messages').append(`${JSON.parse(data['message'])[0].fields.text}`); + if (data['type'] == 'friend') { + if (data['message'] == parseInt(user_id)) { + $('.friend_chat_messages').append(`${JSON.parse(data['message'])[0].fields.text}`); + } else { + $('.friend_chat_messages').append(`${JSON.parse(data['message'])[0].fields.text}`); + } + } else if (data['type'] == 'lobby'){ + if (data['message'] == parseInt(user_id)) { + $('.lobby_chat_messages').append(`${JSON.parse(data['message'])[0].fields.text}`); + } else { + $('.lobby_chat_messages').append(`${JSON.parse(data['message'])[0].fields.text}`); + } } } }; @@ -142,8 +150,6 @@ window.addEventListener('load', () => { $('.header_friend_chat').on('click', (event) => { $('.friend_chat_block').css('display', 'flex'); - - $('.friend_chat_name').html(); let friend_pk = parseInt(event.target.id.replace('chat_friend_', '')); $.ajax({ method: "get", @@ -179,7 +185,7 @@ window.addEventListener('load', () => { $.ajax({ method: "get", url: "/chat/create_messages/", - data: {sender: user_id, receiver: reciever_pk, message: chat_message}, + data: {sender: user_id, receiver: reciever_pk, message: chat_message, type: 'friend'}, success: (data) => { }, From af6d39c0a4f348a7db2fd92edf8be8daa0306ea8 Mon Sep 17 00:00:00 2001 From: Barrakuda8 Date: Sun, 23 Apr 2023 16:09:02 +0300 Subject: [PATCH 19/22] Chat front and answer is validated commit --- dnt/chat/views.py | 19 ++---- dnt/games/views.py | 8 +-- dnt/json/answers.json | 51 ++++++++++----- .../migrations/0006_answer_is_validated.py | 18 +++++ dnt/questions/models.py | 1 + dnt/static/css/games_style.css | 23 +++---- dnt/static/css/games_style.css.map | 2 +- dnt/static/css/games_style.scss | 9 ++- dnt/static/css/style.css | 53 +++++++++++++-- dnt/static/js/game.js | 55 +++++++++++----- dnt/static/js/queue.js | 35 ++++++---- dnt/static/js/user_websocket.js | 65 ++++++++++++++----- 12 files changed, 238 insertions(+), 101 deletions(-) create mode 100644 dnt/questions/migrations/0006_answer_is_validated.py diff --git a/dnt/chat/views.py b/dnt/chat/views.py index 7474e25..3fc5a4c 100644 --- a/dnt/chat/views.py +++ b/dnt/chat/views.py @@ -16,19 +16,16 @@ def load_messages(request): friend_pk = int(request.GET.get('friend_pk')) friend = AuthUser.objects.get(pk=friend_pk) messages = FriendMessage.objects.filter(Q(sender__in=[request.user, friend]) - & Q(receiver__in=[request.user, friend])).order_by('created_at') - print(messages) - return JsonResponse({'messages': list(messages.values()), 'friend_name': friend.nickname}, safe=False) + & Q(receiver__in=[request.user, friend])).order_by('-created_at') + return JsonResponse({'messages': list(messages.values()), 'friend_nickname': friend.nickname, 'user_nickname': request.user.nickname}, safe=False) elif type_ == 'lobby': - print(request.user) - print(request.user.current_lobby) lobby = request.user.current_lobby - messages = LobbyMessage.objects.filter(lobby=lobby).order_by('created_at') + messages = LobbyMessage.objects.filter(lobby=lobby).order_by('-created_at') players = lobby.players.all() return JsonResponse({'messages': list(messages.values()), 'players': {player.pk: player.nickname for player in players}}, safe=False) elif type_ == 'game': game = request.user.current_game - messages = GameMessage.objects.filter(game=game).order_by('created_at') + messages = GameMessage.objects.filter(game=game).order_by('-created_at') players = AuthUser.objects.filter(pk__in=game.players) return JsonResponse( {'messages': list(messages.values()), 'players': {player.pk: player.nickname for player in players}}, @@ -42,17 +39,15 @@ def create_messages(request): receiver_pk = int(request.GET.get('receiver')) sender_pk = int(request.GET.get('sender')) msg = FriendMessage.objects.create(text=button_message, receiver_id=receiver_pk, sender_id=sender_pk) - # FriendMessage.objects.create(receiver=receiver_pk) - data = {'action': 'chat_message', 'message': serializers.serialize('json', [msg]), 'type': 'friend'} + data = {'action': 'chat_message', 'message': serializers.serialize('json', [msg]), 'sender': request.user.nickname, 'type': 'friend'} layer = get_channel_layer() for pk in [sender_pk, receiver_pk]: async_to_sync(layer.group_send)(f'user_{pk}', {'type': 'send_message', 'message': data}) - print(msg) elif type_ == 'lobby': button_message = request.GET.get('message') lobby = request.user.current_lobby msg = LobbyMessage.objects.create(text=button_message, lobby_id=lobby.pk, sender_id=request.user.pk) - data = {'action': 'chat_message', 'message': serializers.serialize('json', [msg]), 'type': 'lobby'} + data = {'action': 'chat_message', 'message': serializers.serialize('json', [msg]), 'sender': request.user.nickname, 'type': 'lobby'} layer = get_channel_layer() for player in lobby.players.all(): async_to_sync(layer.group_send)(f'user_{player.pk}', {'type': 'send_message', 'message': data}) @@ -60,7 +55,7 @@ def create_messages(request): button_message = request.GET.get('message') game = request.user.current_game.pk msg = GameMessage.objects.create(text=button_message, game_id=game, sender_id=request.user.pk) - data = {'action': 'chat_message', 'message': serializers.serialize('json', [msg])} + data = {'action': 'chat_message', 'message': serializers.serialize('json', [msg]), 'sender': request.user.nickname} layer = get_channel_layer() async_to_sync(layer.group_send)(f'game_{request.user.current_game.pk}', {'type': 'send_message', 'message': data}) diff --git a/dnt/games/views.py b/dnt/games/views.py index 0fade31..df77944 100644 --- a/dnt/games/views.py +++ b/dnt/games/views.py @@ -262,7 +262,7 @@ def start_game(request): for _ in range(questions_count): # получение случайного вопроса, которого не было в игре, и добавление его в объект игры в current_question - questions = Question.objects.exclude(pk__in=current_game.asked_questions.values_list('pk')) + questions = Question.objects.exclude(pk__in=current_game.asked_questions.values_list('pk')).filter(is_validated=True) current_game = Game.objects.get(pk=request.user.current_game.pk) if eval(current_game.type)[0] in ['theme', 'friend']: questions = questions.filter(category__pk__in=current_game.categories.values_list('pk')) @@ -275,7 +275,7 @@ def start_game(request): # попытка получить нужное количество неправильных ответов того же подтипа, что и верный first_answers = Answer.objects.filter( - Q(subtype=question.answer.subtype) & ~Q(pk=question.answer.pk) + Q(subtype=question.answer.subtype) & ~Q(pk=question.answer.pk) & Q(is_validated=True) ).order_by('?')[:GAME_SUBTYPE_ANSWERS_COUNT] # компенсация возможного недостатка неправильных ответов того же подтипа неправильными ответами того же типа @@ -283,10 +283,10 @@ def start_game(request): type_answers_count += GAME_SUBTYPE_ANSWERS_COUNT - len(first_answers) # получение необходимого количества неправильных ответов того же типа - type_answers = Answer.objects.exclude(subtype=question.answer.subtype).order_by('?')[:type_answers_count] + type_answers = Answer.objects.filter(is_validated=True).exclude(subtype=question.answer.subtype).order_by('?')[:type_answers_count] # преобразование всех нужных ответов в список словарей и перемешивание их - answers = first_answers | Answer.objects.filter(pk=question.answer.pk) | type_answers + answers = first_answers | Answer.objects.filter(pk=question.answer.pk, is_validated=True) | type_answers answers = list(answers.values()) random.shuffle(answers) diff --git a/dnt/json/answers.json b/dnt/json/answers.json index 54ebcfd..fa581ba 100644 --- a/dnt/json/answers.json +++ b/dnt/json/answers.json @@ -1,70 +1,87 @@ [ { "answer": "Губка Боб Квадратные Штаны", - "subtype": "Персонаж мультфильма" + "subtype": "Персонаж мультфильма", + "is_validated": true }, { "answer": "Анна Франк", - "subtype": "Историческая личность" + "subtype": "Историческая личность", + "is_validated": true }, { "answer": "Джон Мильтон", - "subtype": "Поэт" + "subtype": "Поэт", + "is_validated": true }, { "answer": "Император Хирохито", - "subtype": "Политический деятель" + "subtype": "Политический деятель", + "is_validated": true }, { "answer": "Харрисон Форд", - "subtype": "Актёр" + "subtype": "Актёр", + "is_validated": true }, { "answer": "Хэлли Берри", - "subtype": "Актриса" + "subtype": "Актриса", + "is_validated": true }, { "answer": "Мухаммед Али", - "subtype": "Боксёр" + "subtype": "Боксёр", + "is_validated": true }, { "answer": "Харпер Ли", - "subtype": "Писательница" + "subtype": "Писательница", + "is_validated": true }, { "answer": "Галилео Галилей", - "subtype": "Учёный" + "subtype": "Учёный", + "is_validated": true }, { "answer": "Мари Кюри", - "subtype": "Учёная" + "subtype": "Учёная", + "is_validated": true }, { "answer": "Нил Армстронг", - "subtype": "Космонавт" + "subtype": "Космонавт", + "is_validated": true }, { "answer": "Рианна", - "subtype": "Певица" + "subtype": "Певица", + "is_validated": true }, { "answer": "Куинси Джонс", - "subtype": "Продюсер" + "subtype": "Продюсер", + "is_validated": true }, { "answer": "Джордж Р. Р. Мартин", - "subtype": "Писатель" + "subtype": "Писатель", + "is_validated": true }, { "answer": "Гена", - "subtype": "Персонаж мультфильма" + "subtype": "Персонаж мультфильма", + "is_validated": true }, { "answer": "Кот Матроскин", - "subtype": "Персонаж мультфильма" + "subtype": "Персонаж мультфильма", + "is_validated": true }, { "answer": "Джон Сноу", - "subtype": "Персонаж телесериала" + "subtype": "Персонаж телесериала", + "is_validated": true } ] \ No newline at end of file diff --git a/dnt/questions/migrations/0006_answer_is_validated.py b/dnt/questions/migrations/0006_answer_is_validated.py new file mode 100644 index 0000000..d9c858f --- /dev/null +++ b/dnt/questions/migrations/0006_answer_is_validated.py @@ -0,0 +1,18 @@ +# Generated by Django 4.1.7 on 2023-04-23 13:04 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('questions', '0005_alter_category_options_alter_subtype_options_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='answer', + name='is_validated', + field=models.BooleanField(default=False), + ), + ] diff --git a/dnt/questions/models.py b/dnt/questions/models.py index 6482cf8..cb2b390 100644 --- a/dnt/questions/models.py +++ b/dnt/questions/models.py @@ -34,6 +34,7 @@ def __str__(self): class Answer(models.Model): answer = models.CharField(max_length=64, verbose_name='Ответ') subtype = models.ForeignKey(SubType, on_delete=models.CASCADE, verbose_name='Подтип') + is_validated = models.BooleanField(default=False) def __str__(self): return f'#{self.answer}' diff --git a/dnt/static/css/games_style.css b/dnt/static/css/games_style.css index 055ee4a..9adde69 100644 --- a/dnt/static/css/games_style.css +++ b/dnt/static/css/games_style.css @@ -249,9 +249,9 @@ display: -webkit-box; display: -ms-flexbox; display: flex; - -webkit-box-pack: justify; - -ms-flex-pack: justify; - justify-content: space-between; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; margin-top: 20px; } @@ -274,7 +274,6 @@ position: fixed; bottom: 5px; left: 5px; - height: 200px; width: 300px; display: none; -webkit-box-orient: vertical; @@ -303,19 +302,17 @@ } .game_chat_messages, .lobby_chat_messages { - -webkit-box-flex: 1; - -ms-flex-positive: 1; - flex-grow: 1; + height: 170px; display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; - -webkit-box-pack: end; - -ms-flex-pack: end; - justify-content: end; + -webkit-box-direction: reverse; + -ms-flex-direction: column-reverse; + flex-direction: column-reverse; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; overflow-y: auto; width: 100%; } diff --git a/dnt/static/css/games_style.css.map b/dnt/static/css/games_style.css.map index 8b53d93..27cce9d 100644 --- a/dnt/static/css/games_style.css.map +++ b/dnt/static/css/games_style.css.map @@ -1,6 +1,6 @@ { "version": 3, - "mappings": "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", + "mappings": "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", "sources": [ "games_style.scss" ], diff --git a/dnt/static/css/games_style.scss b/dnt/static/css/games_style.scss index 8d5a839..7b0b10a 100644 --- a/dnt/static/css/games_style.scss +++ b/dnt/static/css/games_style.scss @@ -187,7 +187,7 @@ .game_bottom { display: flex; - justify-content: space-between; + justify-content: center; margin-top: 20px; } @@ -210,7 +210,6 @@ position: fixed; bottom: 5px; left: 5px; - height: 200px; width: 300px; display: none; flex-direction: column; @@ -229,10 +228,10 @@ } .game_chat_messages, .lobby_chat_messages { - flex-grow: 1; + height: 170px; display: flex; - flex-direction: column; - justify-content: end; + flex-direction: column-reverse; + align-items: center; overflow-y: auto; width: 100%; } diff --git a/dnt/static/css/style.css b/dnt/static/css/style.css index 5b9a808..3550843 100644 --- a/dnt/static/css/style.css +++ b/dnt/static/css/style.css @@ -475,7 +475,6 @@ table tr td { position: fixed; bottom: 5px; right: 5px; - height: 200px; width: 300px; display: none; flex-direction: column; @@ -494,10 +493,10 @@ table tr td { } .friend_chat_messages { - flex-grow: 1; + height: 170px; display: flex; - flex-direction: column; - justify-content: end; + flex-direction: column-reverse; + align-items: center; overflow-y: auto; width: 100%; } @@ -512,4 +511,50 @@ table tr td { .friend_chat_close { cursor: pointer; +} + +.chat_date { + margin: 5px 0; +} + +.chat_sent, .chat_received { + display: flex; + flex-direction: column; + width: 100%; + box-sizing: border-box; + padding: 0 5px 5px; +} + +.chat_sent { + align-items: flex-end; +} + +.chat_received { + align-items: flex-start; +} + +.chat_message_sender { + margin: 5px 0 3px; +} + +.chat_message_text { + border: 1px solid #F79F00; + border-radius: 5px; + padding: 2px 5px; + max-width: 60%; + position: relative; +} + +.chat_message_time { + position: absolute; + bottom: 0; + font-size: 12px; +} + +.chat_sent > .chat_message_text > .chat_message_time { + right: calc(100% + 5px); +} + +.chat_received > .chat_message_text > .chat_message_time { + left: calc(100% + 5px); } \ No newline at end of file diff --git a/dnt/static/js/game.js b/dnt/static/js/game.js index 9ed1c2a..06bd2ae 100644 --- a/dnt/static/js/game.js +++ b/dnt/static/js/game.js @@ -58,11 +58,21 @@ window.addEventListener('load', () => { } else if(action == 'show_results') { window.location.href = data['url']; } else if (action == 'chat_message') { - if (data['message'] == parseInt(user_id)) { - $('.game_chat_messages').append(`${JSON.parse(data['message'])[0].fields.text}`); - } else { - $('.game_chat_messages').append(`${JSON.parse(data['message'])[0].fields.text}`); - } + let message = JSON.parse(data['message'])[0]; + let message_sender = data['sender']; + let text = message.fields.text; + let date = message.fields.created_at.slice(0, 10); + let time = message.fields.created_at.slice(11, 16); + if($('.game_chat_messages > .chat_date').length == 0 || $('.game_chat_messages > .chat_date')[0].outerText != date) { + $('.game_chat_messages').prepend(`${date}`) + } + if (message.fields.sender == parseInt(user_id)) { + $('.game_chat_messages').prepend(`
${message_sender} + ${text}${time}
`); + } else { + $('.game_chat_messages').prepend(`
${message_sender} + ${text}${time}
`); + } } }; @@ -131,16 +141,28 @@ window.addEventListener('load', () => { data: {type: 'game'}, success: (data) => { let messages = data['messages']; - console.log(messages) - let html_string = ''; - for (let message of messages) { - if (message.sender_id == parseInt(user_id)) { - html_string += `${message.text}`; - }else{ - html_string += `${message.text}`; - } - } - $('.game_chat_messages').html(html_string); + if (messages.length > 0) { + let date = messages[0].created_at.slice(0, 10); + let html_string = ''; + for (let message of messages) { + let message_date = message.created_at.slice(0, 10); + if(date != message_date) { + html_string += `${date}`; + date = message_date; + } + let time = message.created_at.slice(11, 16); + let message_sender = data['players'][message.sender_id]; + if (message.sender_id == parseInt(user_id)) { + html_string += `
${message_sender} + ${message.text}${time}
`; + }else{ + html_string += `
${message_sender} + ${message.text}${time}
`; + } + }; + html_string += `${date}`; + $('.game_chat_messages').html(html_string); + }; }, error: (data) => { } @@ -150,8 +172,9 @@ window.addEventListener('load', () => { $('.game_chat_textarea').on('keydown', (event) => { if (event.keyCode == 13) { - + event.preventDefault(); let chat_message = event.target.value; + event.target.value = ''; $.ajax({ method: "get", url: "/chat/create_messages/", diff --git a/dnt/static/js/queue.js b/dnt/static/js/queue.js index 573bc3c..fe40048 100644 --- a/dnt/static/js/queue.js +++ b/dnt/static/js/queue.js @@ -129,16 +129,28 @@ window.addEventListener('load', () => { data: {type: 'lobby'}, success: (data) => { let messages = data['messages']; - console.log(messages) - let html_string = ''; - for (let message of messages) { - if (message.sender_id == parseInt(user_id)) { - html_string += `${message.text}`; - }else{ - html_string += `${message.text}`; - } - } - $('.lobby_chat_messages').html(html_string); + if (messages.length > 0) { + let date = messages[0].created_at.slice(0, 10); + let html_string = ''; + for (let message of messages) { + let message_date = message.created_at.slice(0, 10); + if(date != message_date) { + html_string += `${date}`; + date = message_date; + } + let time = message.created_at.slice(11, 16); + let message_sender = data['players'][message.sender_id]; + if (message.sender_id == parseInt(user_id)) { + html_string += `
${message_sender} + ${message.text}${time}
`; + }else{ + html_string += `
${message_sender} + ${message.text}${time}
`; + } + }; + html_string += `${date}`; + $('.lobby_chat_messages').html(html_string); + }; }, error: (data) => { } @@ -148,8 +160,9 @@ window.addEventListener('load', () => { $('.lobby_chat_textarea').on('keydown', (event) => { if (event.keyCode == 13) { - + event.preventDefault(); let chat_message = event.target.value; + event.target.value = ''; $.ajax({ method: "get", url: "/chat/create_messages/", diff --git a/dnt/static/js/user_websocket.js b/dnt/static/js/user_websocket.js index 6303342..4e23176 100644 --- a/dnt/static/js/user_websocket.js +++ b/dnt/static/js/user_websocket.js @@ -77,17 +77,32 @@ window.addEventListener('load', () => { } else if(action == 'delete_theme') { $('.lobby_theme').remove(); } else if(action == 'chat_message') { + let message = JSON.parse(data['message'])[0]; + let message_sender = data['sender']; + let text = message.fields.text; + let date = message.fields.created_at.slice(0, 10); + let time = message.fields.created_at.slice(11, 16); if (data['type'] == 'friend') { - if (data['message'] == parseInt(user_id)) { - $('.friend_chat_messages').append(`${JSON.parse(data['message'])[0].fields.text}`); + if($('.friend_chat_messages > .chat_date').length == 0 || $('.friend_chat_messages > .chat_date')[0].outerText != date) { + $('.friend_chat_messages').prepend(`${date}`) + } + if (message.fields.sender == parseInt(user_id)) { + $('.friend_chat_messages').prepend(`
${message_sender} + ${text}${time}
`); } else { - $('.friend_chat_messages').append(`${JSON.parse(data['message'])[0].fields.text}`); + $('.friend_chat_messages').prepend(`
${message_sender} + ${text}${time}
`); } } else if (data['type'] == 'lobby'){ - if (data['message'] == parseInt(user_id)) { - $('.lobby_chat_messages').append(`${JSON.parse(data['message'])[0].fields.text}`); + if($('.lobby_chat_messages > .chat_date').length == 0 || $('.lobby_chat_messages > .chat_date')[0].outerText != date) { + $('.lobby_chat_messages').prepend(`${date}`) + } + if (message.fields.sender == parseInt(user_id)) { + $('.lobby_chat_messages').prepend(`
${message_sender} + ${text}${time}
`); } else { - $('.lobby_chat_messages').append(`${JSON.parse(data['message'])[0].fields.text}`); + $('.lobby_chat_messages').prepend(`
${message_sender} + ${text}${time}
`); } } } @@ -157,17 +172,30 @@ window.addEventListener('load', () => { data: {friend_pk: friend_pk, type: 'friend'}, success: (data) => { let messages = data['messages']; - console.log(messages) - let html_string = ''; - for (let message of messages) { - if (message.sender_id == parseInt(user_id)) { - html_string += `${message.text}`; - }else{ - html_string += `${message.text}`; - } - } - $('.friend_chat_messages').html(html_string); - $('.friend_chat_name').html(data['friend_name']); + if (messages.length > 0) { + let date = messages[0].created_at.slice(0, 10); + let html_string = ''; + for (let message of messages) { + let message_date = message.created_at.slice(0, 10); + if(date != message_date) { + html_string += `${date}`; + date = message_date; + } + let time = message.created_at.slice(11, 16); + if (message.sender_id == parseInt(user_id)) { + let message_sender = data['user_nickname']; + html_string += `
${message_sender} + ${message.text}${time}
`; + }else{ + let message_sender = data['friend_nickname']; + html_string += `
${message_sender} + ${message.text}${time}
`; + } + }; + html_string += `${date}`; + $('.friend_chat_messages').html(html_string); + }; + $('.friend_chat_name').html(data['friend_nickname']); $('.friend_chat_textarea').attr('id', `textarea_${friend_pk}`); }, error: (data) => { @@ -179,9 +207,10 @@ window.addEventListener('load', () => { $('.friend_chat_textarea').on('keydown', (event) => { if (event.keyCode == 13) { - + event.preventDefault(); let reciever_pk = parseInt(event.target.id.replace('textarea_', '')); let chat_message = event.target.value; + event.target.value = ''; $.ajax({ method: "get", url: "/chat/create_messages/", From 485880aa88de914b4ed32c2b855f47f3ae157e01 Mon Sep 17 00:00:00 2001 From: Istrione Date: Sun, 23 Apr 2023 17:58:32 +0300 Subject: [PATCH 20/22] update grade and message --- .../templates/questions/includes/messages.html | 10 ---------- dnt/questions/templates/questions/offer_quest.html | 3 +++ dnt/questions/views.py | 11 ++++++++++- dnt/variables.py | 3 +++ 4 files changed, 16 insertions(+), 11 deletions(-) diff --git a/dnt/questions/templates/questions/includes/messages.html b/dnt/questions/templates/questions/includes/messages.html index ab38d9a..ab0108c 100644 --- a/dnt/questions/templates/questions/includes/messages.html +++ b/dnt/questions/templates/questions/includes/messages.html @@ -10,16 +10,6 @@ {% endif %} " role="alert" aria-live="assertive" aria-atomic="true" style="right: 0;"> -
- - - {{ message.tags|capfirst }} message - just now - -
{{ message }}
diff --git a/dnt/questions/templates/questions/offer_quest.html b/dnt/questions/templates/questions/offer_quest.html index 4b90c5d..0c7155c 100644 --- a/dnt/questions/templates/questions/offer_quest.html +++ b/dnt/questions/templates/questions/offer_quest.html @@ -16,6 +16,7 @@

Предложить вопрос

required="" id="id_question" placeholder="Вопрос">

+ Категория:

+ Тип:

+ Подтип: {% endif %} {% for field in login_form %} -

{{ field.label_tag }}{{ field }}

{{ field.errors }} +

{{ field.label_tag }}{{ field }}

{% endfor %}
Регистрация diff --git a/dnt/authapp/views.py b/dnt/authapp/views.py index b17e675..74747b0 100644 --- a/dnt/authapp/views.py +++ b/dnt/authapp/views.py @@ -1,7 +1,8 @@ -from django.shortcuts import render, get_object_or_404 +from django.shortcuts import render from django.contrib import auth from django.http import HttpResponseRedirect from django.urls import reverse +from django.contrib.auth.decorators import login_required from authapp.forms import AuthUserRegisterForm, AuthUserLoginForm, AuthUserEditForm @@ -52,6 +53,7 @@ def register(request): return render(request, 'authapp/register.html', context) +@login_required def edit(request): if request.method == 'POST': edit_form = AuthUserEditForm(request.POST, request.FILES, instance=request.user) diff --git a/dnt/games/models.py b/dnt/games/models.py index 0c4e743..fdb8a7f 100644 --- a/dnt/games/models.py +++ b/dnt/games/models.py @@ -1,11 +1,9 @@ from django.db import models from questions.models import Question, Category -import datetime + TYPES = ( ('normal', 'Обычная'), - ('ranked', 'Ранговая'), - ('theme', 'Тематическая'), - ('friend', 'Дружеская') + ('theme', 'Тематическая') ) diff --git a/dnt/games/views.py b/dnt/games/views.py index df77944..0e7dffe 100644 --- a/dnt/games/views.py +++ b/dnt/games/views.py @@ -16,9 +16,11 @@ from channels.layers import get_channel_layer from asgiref.sync import async_to_sync from variables import * +from django.contrib.auth.decorators import login_required # view страницы игрового лобби и очереди и создания игрового лобби +@login_required def create_lobby(request): # создание лобби и добавление его в объект пользователя в качестве current_lobby @@ -66,6 +68,7 @@ def join_lobby_ajax(request): return JsonResponse({'status': 'full'}) +@login_required def join_lobby(request): current_user = request.user @@ -91,6 +94,7 @@ def join_lobby(request): return render(request, 'games/lobby.html', context=context) + def change_game_mode(request): new_type = request.GET.get('mode') @@ -234,6 +238,7 @@ def cancel_queue(request): # view страницы игры +@login_required def game(request): context = { @@ -414,6 +419,7 @@ def check_answer(request): # view страницы результатов игры +@login_required def results(request, game_id): # получение объекта нужной игры и всех её игроков diff --git a/dnt/main/management/commands/fill.py b/dnt/main/management/commands/fill.py index fa456fd..84941a1 100644 --- a/dnt/main/management/commands/fill.py +++ b/dnt/main/management/commands/fill.py @@ -43,18 +43,12 @@ def handle(self, *args, **options): question['answer'] = Answer.objects.get(answer=question['answer']) Question.objects.create(**question) - try: - AuthUser.objects.get(username='pepper').delete() - except: - pass + AuthUser.objects.all().delete() + AuthUser.objects.create_superuser(username='pepper', password='pepper123', nickname='pepper', birthdate='2019-01-01', is_moderator=True) for i in range(2, 10): - try: - AuthUser.objects.get(username=f'pepper{i}').delete() - except: - pass AuthUser.objects.create_superuser(username=f'pepper{i}', password='pepper123', nickname=f'pepper{i}', birthdate='2019-01-01') diff --git a/dnt/questions/models.py b/dnt/questions/models.py index cb2b390..71298c0 100644 --- a/dnt/questions/models.py +++ b/dnt/questions/models.py @@ -8,7 +8,7 @@ class Meta: ordering = ('name',) def __str__(self): - return f'#{self.name}' + return f'{self.name}' class Type(models.Model): @@ -16,8 +16,9 @@ class Type(models.Model): class Meta: ordering = ('name',) + def __str__(self): - return f'#{self.name}' + return f'{self.name}' class SubType(models.Model): @@ -28,7 +29,7 @@ class Meta: ordering = ('name',) def __str__(self): - return f'#{self.name}' + return f'{self.name}' class Answer(models.Model): @@ -37,7 +38,7 @@ class Answer(models.Model): is_validated = models.BooleanField(default=False) def __str__(self): - return f'#{self.answer}' + return f'{self.answer}' class Question(models.Model): @@ -52,7 +53,7 @@ class Meta: ordering = ('-created_at',) def __str__(self): - return f'#{self.question}' + return f'{self.question}' class QuestionComplaint(models.Model): @@ -60,4 +61,4 @@ class QuestionComplaint(models.Model): text = models.CharField(max_length=128, verbose_name='Жалоба') def __str__(self): - return f'#{self.text}' \ No newline at end of file + return f'{self.text}' diff --git a/dnt/questions/templates/questions/grade_quest.html b/dnt/questions/templates/questions/grade_quest.html index 4e08c00..043df8f 100644 --- a/dnt/questions/templates/questions/grade_quest.html +++ b/dnt/questions/templates/questions/grade_quest.html @@ -11,7 +11,13 @@

Оценить вопрос

{% csrf_token %}

- {{ question_list.question }} + Вопрос: {{ question_list.question }} +

+

+ Категория вопроса: {{ question_list.category }} +

+

+ Ответ: {{ question_list.answer }} ({{ question_list.answer.subtype.type }}, {{ question_list.answer.subtype }})

Модерация вопросов {% for item in object_list %} {% if item.is_validated == False %}

-

{{ item.category.name }}

+

Категория вопроса: {{ item.category.name }}

{{ item.created_at }}

-

{{ item.question }}

-

{{ item.answer }}

+

Вопрос: {{ item.question }}

+

Ответ: {{ item.answer }}

+

Тип: {{ item.answer.subtype.type }}

+

Подтип: {{ item.answer.subtype }}

Одобрить Не одобрять
diff --git a/dnt/questions/views.py b/dnt/questions/views.py index 350a67d..3874fc2 100644 --- a/dnt/questions/views.py +++ b/dnt/questions/views.py @@ -11,6 +11,7 @@ from variables import * + class QuestionView(TemplateView): template_name = 'questions/qes_list.html' @@ -107,6 +108,7 @@ def post(self, request, *args, **kwargs): ) return HttpResponseRedirect(reverse('quest:add_quest')) + class GradeQuestionView(TemplateView): template_name = 'questions/grade_quest.html' diff --git a/dnt/static/js/user_websocket.js b/dnt/static/js/user_websocket.js index 4e23176..f694a9d 100644 --- a/dnt/static/js/user_websocket.js +++ b/dnt/static/js/user_websocket.js @@ -90,8 +90,12 @@ window.addEventListener('load', () => { $('.friend_chat_messages').prepend(`
${message_sender} ${text}${time}
`); } else { - $('.friend_chat_messages').prepend(`
${message_sender} - ${text}${time}
`); + if($('.friend_chat_block').css('display') == 'none' || $('.friend_chat_name').html != data['sender']) { + $(`#chat_friend_${message.fields.sender}`).click(); + } else { + $('.friend_chat_messages').prepend(`
${message_sender} + ${text}${time}
`); + } } } else if (data['type'] == 'lobby'){ if($('.lobby_chat_messages > .chat_date').length == 0 || $('.lobby_chat_messages > .chat_date')[0].outerText != date) { diff --git a/dnt/variables.py b/dnt/variables.py index c841213..bf91834 100644 --- a/dnt/variables.py +++ b/dnt/variables.py @@ -26,4 +26,4 @@ NULLABLE = {"blank": True, "null": True} # questions: grade -VOTES = 1 +VOTES = 2