From 1239819eca334b110c069071f7225a32ce511a55 Mon Sep 17 00:00:00 2001 From: Andrei Date: Sun, 29 Jan 2023 23:44:12 +0500 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD=D0=B0=20?= =?UTF-8?q?=D1=81=D1=82=D1=80=D0=B0=D0=BD=D0=B8=D1=86=D0=B0=20=D1=80=D0=B5?= =?UTF-8?q?=D0=B4=D0=B0=D0=BA=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=B8=D0=BD=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D0=B8=20=D0=B8=20=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=B0,=20?= =?UTF-8?q?=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=BB=20=D1=82=D0=B0=D0=B1=D0=BB?= =?UTF-8?q?=D0=B8=D1=86=D1=83=20=D1=81=20"=D0=B7=D0=B0=D0=B4=D0=B0=D1=87?= =?UTF-8?q?=D0=B0=D0=BC=D0=B8"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/quests.py | 1 + forms/conf_delete_project.py | 8 ++ forms/{new_project.py => project.py} | 4 +- main.py | 105 +++++++++++++++---- static/css/base.css | 8 +- static/css/delete_project.css | 60 +++++++++++ static/css/edit_project.css | 149 +++++++++++++++++++++++++++ static/css/project.css | 27 +++++ static/images/pen_b.png | Bin 0 -> 29961 bytes static/images/pen_w.png | Bin 0 -> 28690 bytes static/js/project.js | 2 + templates/delete_project.html | 26 +++++ templates/edit_project.html | 68 ++++++++++++ templates/project.html | 5 +- 14 files changed, 436 insertions(+), 27 deletions(-) create mode 100644 forms/conf_delete_project.py rename forms/{new_project.py => project.py} (71%) create mode 100644 static/css/delete_project.css create mode 100644 static/css/edit_project.css create mode 100644 static/images/pen_b.png create mode 100644 static/images/pen_w.png create mode 100644 static/js/project.js create mode 100644 templates/delete_project.html create mode 100644 templates/edit_project.html diff --git a/data/quests.py b/data/quests.py index 4d33818..812c8e1 100644 --- a/data/quests.py +++ b/data/quests.py @@ -1,5 +1,6 @@ import sqlalchemy from flask_login import UserMixin +from datetime import date from .db_session import SqlAlchemyBase diff --git a/forms/conf_delete_project.py b/forms/conf_delete_project.py new file mode 100644 index 0000000..b66946f --- /dev/null +++ b/forms/conf_delete_project.py @@ -0,0 +1,8 @@ +from flask_wtf import FlaskForm +from wtforms import StringField, SubmitField +from wtforms.validators import DataRequired + + +class DeleteProjectForm(FlaskForm): + conf = StringField('', validators=[DataRequired()]) + submit = SubmitField('Подтвердить') diff --git a/forms/new_project.py b/forms/project.py similarity index 71% rename from forms/new_project.py rename to forms/project.py index c5d9e08..5350afd 100644 --- a/forms/new_project.py +++ b/forms/project.py @@ -3,8 +3,10 @@ from wtforms import StringField, SubmitField, TextAreaField, FileField from wtforms.validators import DataRequired -class NewProjectForm(FlaskForm): +class ProjectForm(FlaskForm): name = StringField('Название', validators=[DataRequired()]) description = TextAreaField('Описание') logo = FileField('Логотип') submit = SubmitField('Создать') + del_photo = SubmitField('Удалить фотографию') + save = SubmitField('Сохранить') diff --git a/main.py b/main.py index 6b47e98..f44b53f 100644 --- a/main.py +++ b/main.py @@ -15,8 +15,9 @@ from forms.edit_profile import EditProfileForm from forms.login import LoginForm from forms.find_project import FindProjectForm from forms.register import RegisterForm -from forms.new_project import NewProjectForm +from forms.project import ProjectForm from forms.recovery import RecoveryForm, NewPasswordForm +from forms.conf_delete_project import DeleteProjectForm from data.users import User from data.quests import Quests @@ -43,6 +44,63 @@ def base(): return redirect('/projects') +@app.route('/project//edit', methods=['GET', 'POST']) +def edit_project(id_project): + if current_user.is_authenticated: + data_session = db_session.create_session() + current_project = data_session.query(Projects).filter(Projects.id == id_project).first() + if current_project: + staff = data_session.query(StaffProjects).filter(StaffProjects.project == current_project.id).all() + if current_user.id == current_project.creator or current_user.id in list(map(lambda x: x.user, staff)): + list_users = list( + map(lambda x: get_user_data(x), data_session.query(User).filter(User.id != current_user.id).all())) + staff = list(map(lambda x: get_user_data(x), data_session.query(User).filter( + User.id.in_(list(map(lambda x: x.user, staff)))).all())) if staff else [] + form = ProjectForm() + if form.save.data: + new_staff = [] + for i in list_users: + if request.form.getlist(f"choose_{i['login']}") and i['id'] != current_user.id: + new_staff.append(i) + if i not in staff: + new_staffer = StaffProjects( + user=i['id'], + project=current_project.id, + role='user', + permission=3 + ) + data_session.add(new_staffer) + data_session.commit() + if sorted(new_staff, key=lambda x: x['id']) != sorted(staff, key=lambda x: x['id']): + for i in staff: + if i not in new_staff: + data_session.delete(data_session.query(StaffProjects).filter( + StaffProjects.user == i['id'], StaffProjects.project == current_project.id).first()) + data_session.commit() + if form.logo.data: + current_project.photo = save_project_logo(form.logo.data) + data_session.commit() + current_project.name = form.name.data + current_project.description = form.description.data + data_session.commit() + return redirect(f'/project/{current_project.id}/edit') + if form.del_photo.data: + os.remove(current_project.photo) + current_project.photo = 'static/images/none_project.png' + data_session.commit() + return redirect(f'/project/{current_project.id}/edit') + form.name.data = current_project.name + form.description.data = current_project.description + return render_template('edit_project.html', title='Изменение проекта', form=form, list_users=list_users, + staff=staff, project=current_project) + else: + abort(403) + else: + abort(404) + else: + return redirect('/login') + + @app.route('/project/') def project(id_project): if current_user.is_authenticated: @@ -51,6 +109,7 @@ def project(id_project): if current_project: staff = data_session.query(StaffProjects).filter(StaffProjects.project == current_project.id).all() if current_user.id == current_project.creator or current_user.id in list(map(lambda x: x.user, staff)): + return render_template('project.html', project=current_project, title=current_project.name) else: abort(403) @@ -103,22 +162,29 @@ def recovery(): return redirect('/') -@app.route('/projects/delete/', methods=['GET', 'POST']) +@app.route('/project//delete', methods=['GET', 'POST']) def delete_project(id_project): if current_user.is_authenticated: data_session = db_session.create_session() project_del = data_session.query(Projects).filter(Projects.id == id_project).first() if project_del: if project_del.creator == current_user.id: - staff = data_session.query(StaffProjects).filter(StaffProjects.project == id_project).all() - for i in staff: - data_session.delete(i) - if 'none_project' not in project_del.photo: - os.remove(project_del.photo) - data_session.delete(project_del) - data_session.commit() - data_session.close() - return redirect('/projects') + form = DeleteProjectForm() + if form.validate_on_submit(): + if form.conf.data != f'delete/{project_del.name}': + return render_template('delete_project.html', title='Удаление проекта', form=form, + project=project_del, + message='Вы не правильно ввели фразу') + staff = data_session.query(StaffProjects).filter(StaffProjects.project == id_project).all() + for i in staff: + data_session.delete(i) + if 'none_project' not in project_del.photo: + os.remove(project_del.photo) + data_session.delete(project_del) + data_session.commit() + return redirect('/projects') + return render_template('delete_project.html', title='Удаление проекта', form=form, project=project_del, + message='') else: abort(403) else: @@ -149,7 +215,7 @@ def user_view(_login): @app.route('/projects/new', methods=['GET', 'POST']) def new_project(): if current_user.is_authenticated: - form = NewProjectForm() + form = ProjectForm() data_session = db_session.create_session() list_users = list( map(lambda x: get_user_data(x), data_session.query(User).filter(User.id != current_user.id).all())) @@ -175,9 +241,7 @@ def new_project(): ) data_session.add(new_staffer) data_session.commit() - data_session.close() return redirect('/projects') - data_session.close() return render_template('new_project.html', title='Новый проект', form=form, list_users=list_users) else: return redirect('/login') @@ -231,7 +295,6 @@ def profile(): os.remove(current_user.photo) user.photo = 'static/images/none_logo.png' data_session.commit() - data_session.close() if form.validate_on_submit(): data_session = db_session.create_session() user = data_session.query(User).filter(User.id == current_user.id).first() @@ -249,7 +312,6 @@ def profile(): user.about = form.about.data user.birthday = form.birthday.data data_session.commit() - data_session.close() return redirect('/profile') return render_template('profile.html', title='Профиль', form=form, message='') else: @@ -273,7 +335,6 @@ def login(): user = data_session.query(User).filter(User.email == form.login.data).first() if not user: user = data_session.query(User).filter(User.login == form.login.data).first() - data_session.close() if user and user.check_password(form.password.data): if user.activated: login_user(user, remember=form.remember_me.data) @@ -326,7 +387,6 @@ def register(): user.set_password(form.password.data) data_session.add(user) data_session.commit() - data_session.close() token = s.dumps(form.email.data) link_conf = url_for('confirmation', token=token, _external=True) mail(f'Для завершения регистрации пройдите по ссылке: {link_conf}', form.email.data, @@ -346,7 +406,6 @@ def confirmation(token): if user: user.activated = True data_session.commit() - data_session.close() return redirect('/login?message=Почта успешно подтверждена') else: return redirect('/login?message=Пользователь не найден&danger=True') @@ -357,17 +416,21 @@ def confirmation(token): if users: list(map(lambda x: data_session.delete(x), users)) data_session.commit() - data_session.close() return redirect('/login?message=Срок действия ссылки истек, данные удалены&danger=True') +@app.errorhandler(500) +def internal_server_error(error): + return render_template('page_error.html', title='Ошибка сервера', error='500', message='Технические шоколадки') + + @app.errorhandler(404) def page_not_found(error): return render_template('page_error.html', title='Страница не найдена', error='404', message='Страница не найдена') @app.errorhandler(403) -def page_not_found(error): +def access_error(error): return render_template('page_error.html', title='Ошибка доступа', error='403', message='Доступ сюда запрещен') diff --git a/static/css/base.css b/static/css/base.css index 0ca6565..bbce475 100644 --- a/static/css/base.css +++ b/static/css/base.css @@ -62,7 +62,7 @@ body { align-items: center; } .nav_user_name { - margin-left: 10px; + margin-left: 1vw; align-self: center; } .nav_chapter_text { @@ -90,10 +90,10 @@ body { height: 100%; } body::-webkit-scrollbar { - width: 12px; /* ширина scrollbar */ + width: 0.8vw; /* ширина scrollbar */ } body::-webkit-scrollbar-thumb { background-color: #d49d51; /* цвет плашки */ - border-radius: 20px; /* закругления плашки */ - border: 3px solid #ffffff; + border-radius: 5vw; /* закругления плашки */ + border: 0.25vw solid #ffffff; } \ No newline at end of file diff --git a/static/css/delete_project.css b/static/css/delete_project.css new file mode 100644 index 0000000..f073bb8 --- /dev/null +++ b/static/css/delete_project.css @@ -0,0 +1,60 @@ +.delete_project_page { + height: 60vw; + background-color: #dcb495; +} +.form_block { + width: 100%; + height: 60vw; + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; +} +.form_data { + display: flex; + flex-direction: column; + margin-left: 2%; +} +.input_data { + color: #000000; + border: 0.1vw solid #595008; + height: 4.5vw; + min-height: 4.5vw; + width: 35vw; + background-color: #dbc3af; + border-radius: 4.5vw; + font-size: 1.3vw; + display: inline-flex; + align-items: center; +} +.form_label { + margin-top: 10px; + font-size: 1.3vw; + color: #ffffff; + font-weight: bold; +} +.delete_project_button { + margin-left: 15px; + width: 25vw; + height: 5vw; + background-color: #000000; + color: #ffffff; + border-radius: 5vw; + vertical-align: middle; + font-size: 1.5vw; +} +form { + display: flex; + align-items: flex-end; + justify-content: center; +} +.conf_text { + color: #ff0000; +} +.header_title { + text-align: center; + color: #000000; + font-size: 3.5vw; + width: 100%; + margin-bottom: 15px; +} \ No newline at end of file diff --git a/static/css/edit_project.css b/static/css/edit_project.css new file mode 100644 index 0000000..8d93b48 --- /dev/null +++ b/static/css/edit_project.css @@ -0,0 +1,149 @@ +.edit_project_page { + height: 120vw; + background-color: #dcb495; +} +.form_data, .form_data_button { + display: flex; + flex-direction: column; + margin-left: 2%; +} +.form_data_button { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} +.input_data { + color: #000000; + border: 0.1vw solid #595008; + height: 4.5vw; + min-height: 4.5vw; + width: 35vw; + background-color: #dbc3af; + border-radius: 4.5vw; + font-size: 1.3vw; + display: inline-flex; + align-items: center; +} +.input_button { + width: 35vw; + height: 5vw; + border-radius: 5vw; + vertical-align: middle; +} +.form_label { + margin-top: 10px; + font-size: 1.3vw; + color: #ffffff; + font-weight: bold; +} +.description { + border-radius: 2vw !important; + width: 50vw; +} +.padding_data { + padding-top: 1vw; + padding-left: 1vw; +} +.label_data { + padding-left: 0.8vw; + width: 50vw; +} +.project_button, .delete_button, .delete_project_link { + margin-top: 15px; + width: 35vw; + height: 5vw; + background-color: #000000; + color: #ffffff; + border-radius: 5vw; + vertical-align: middle; + font-size: 1.5vw; +} +.collaborator_block { + width: 30%; + height: 20vw; + background-color: #EDCBB0; + border-radius: 2vw; + overflow-y: auto; +} +.user { + width: 30vw; + height: 3.5vw; + background-color: #ffffff; + border: 2px solid #9E795A; + border-radius: 3vw; + margin-top: 5px; + display: inline-flex; + justify-content: space-between; +} +.user_logo { + margin-left: 3px; + width: 3vw; + height: 3vw; + border-radius: 5vw; + background-color: #000000; +} +.user_names { + margin-left: 9px; + margin-top: 10px; + overflow-x: auto; +} +.name_form_block { + width: 100%; + display: flex; + flex-direction: column; + align-items: center; +} +.data_form_block { + width: 100%; + display: flex; + align-items: center; + justify-content: center; + flex-direction: row; +} +.buttons_form_block { + width: 45%; + display: flex; + flex-direction: column; + align-items: center; +} +.staff_form_block, .collaborator_block { + margin-top: 10px; + width: 60%; + height: 20vw; + display: flex; + align-items: center; + justify-content: center; +} +.staff_block { + margin: 5%; + width: 90%; + height: 20vw; +} +.choose_user { + align-self: flex-end; + margin-bottom: 1.1vw; + width: 10%; +} +.user_data { + display: inline-flex; + align-items: center; + justify-content: flex-start; + flex-direction: row; +} +.delete_project_link { + background-color: #ff3f3f; +} +.delete_project_link:hover { + background-color: #ff3f3f; + text-decoration: none; + color: #ffffff; +} +.delete_project_link_text { + width: 35vw; + height: 5vw; + display: flex; + align-items: center; + justify-content: center; + margin-top: 10px; +} \ No newline at end of file diff --git a/static/css/project.css b/static/css/project.css index 1c32441..f97fa2a 100644 --- a/static/css/project.css +++ b/static/css/project.css @@ -22,7 +22,34 @@ flex-direction: column; align-items: center; justify-content: space-between; + color: #dcb495 + #a8886f + #f5d3b8 + #a65b1e + #d49d51 + #face7d + #ffe8d6 + #a8876b + #fff2e8 + #c79b77 + #d69d5c; } .name_project { font-size: 3vw; +} +.edit_block { + display: flex; + align-items: center; + justify-content: center; +} +.edit_button { + width: 4.5vw; + height: 4.5vw; + display: flex; + align-items: center; + justify-content: center; +} +.edit_button_image { + height: 3vw; + width: 3vw; } \ No newline at end of file diff --git a/static/images/pen_b.png b/static/images/pen_b.png new file mode 100644 index 0000000000000000000000000000000000000000..ac9e99ee6faebd876b5071ad203d763864334c83 GIT binary patch literal 29961 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

-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¨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Ðf#Ts@on(V5T%*N0D6yc*Js8=d+9H)$2OqXYO$ioGb}-JFHPx_HV@DJP=~QE zf(!Vu7H&_np|J70yWd0LM?HofOGW~;fP=Bp>(&MD_cQB-Y6ayj+bkcY?Gxg6{Y#+q zM0yF9K_V0lL>Hkh^5<%r(b(CS?m!8Ia5i>goFVo-ZcJ36KwsgaHAc;?$Aqu{A{X$! zRMm$eMsDgHCOnS=~aA`Ygf}l#n08Llk5Z*7rdrNp@2|4qg&Z=I5)7 zCU}$d{{FR|$Vn|=&@A73Ed&Y=#6qZ)Te>W+4^>b5W%||kGf-3_L*><4vaWHvi9;MP zkAa+zX>PP`v@JPBkH?}beT6_SKy&x#4&aL7PfpH;HSKu8ovK~r15$az${=c!O<2J> z90#;G-7KXtQ%(Dp8j^&}AdE|~+k&$@Y3xq@2{GM$b$jC8S1%Yb|j>G6_YGm8Jv=uW3138?zaaEE3Fa`y<~hw0wrbc_D6i)}~G@nM(f>HU3M1_%bZ*o`ZwPM_8V!)|z zXsm6b;83^LTo%|*N*g?ekXz%Nl`|mieL6rOkSP6;`->*wJyK{GZ2x#>Td8%?BqOnS zFNP+{*>a(zatAqm;3LTBpNo>f;6yz?--t?f{WS z>?*9CbMGVlzUR80D!FNE6Z))6pk9RvI~~#Lw1~n%0NDf)hjA}~rH!7bw;dyZbqk@i z*|{&oxGODRn^}|)ykAELX3vgkLiCe5@R~SvHq&LDXc|o2K?H5hzM~TMhWc)71(q%z=9t-|DL+05# z%U%GPw{&AzbV&@Kru3W>@jX$4m_e?}l?0D=3pr+Gm_)8hW=GS= zPN21R9%La}TUUAbd6;(iGM-+qHeJk}okm(J=I&Mw>vvQ|W5fmhu_Mu@%pDI&`?MC! zOnu-S$k0EU=4cH`yNF|2Mufklgn_pVEYB8=cWOKUWha2tT0N56SG@$cj2!5WbKL}o z?A1v%I6*`zo0WO4pIK1)4q0@ST!P39IH|Dg_LrB^j7wuzt{|<#KnTDr72OVeG@Zct zr0K0M)nk^I%4OU)8eacx^A$}}tS5}paSwsdcC2C+d97|=1m7iiM&s5eRrziq&$Yxb z59J(*%|MK%q`XwESW7U*kcav<$GVz068z$W(153(bRmDt?x>|XL|o8ezKF;j1Y>YO zF9yp}zIYAE$6{I{*fAZR#?cUR3y=U-cLdQg*SdtdG`?8KFJbNaX;;(Q_WD?5Avj^Q1=~lrF)P8 zsuxU}^jhcqO|uzIG~cKXX|;K zoV*7^#p}>>sBGxUW~4@ZUWDH@xTLSgLkKnZTm%TJN5m4C^r7x=iMhE%luS=@GTz%r zSDJBL`_H(=KRLRn@B8^Zm~izz7Q@yZj`?H#2$dNbFDj4lZ={d5;soVQOa|m?-_O~7 zRng4vz1i!{K{Ot?la^zoEQ0p>Sd~cf21=e1*K%91C!KmM38l5*Av&6Rnw|?y2XWuT z3U1I)F-8o?3-YE@*J?k)F_lUQ#fEtt<9ic!T z?r#B=>GKRV;bR--5ATcOuONB&?K+1Q9ge6mTo~vi4*;m0Ll@^p=K$R6vb_vc_uydc zzE@GhkJBA$K({BE^*21kt9T{>_mPMbRG^TgJ1=Nlg4+;BSxghw{^1}%apnW?&SOjy zc@PwFgFLIS66jqJ4Ij~Cb_~46*u<4DO8bn2{u+3(HyxNi$-!ZmT3|t^?xqV#c~}8> zqnTXbsf_!itI#BWeA--vrh`rX zh+gLZn5T~CM8jRqtZKvO{E@E-7yz(z{FF)2vIr|CyE^pO*{H|jwYuLS>(X*~&`V$# zeq>i2-&iZ_hao&e%vP>AbS$`I&izT|aA48L@&ICfLrJNPTC&jr9?yu!q z_Xw*;hM;c!pe-%Oh$SJZF}lo|(MbyAC4q4FWpns366XZs<|OHYHDX(=>;MwVg>dIu zPFQ?Kj3xQaD!@lK5^aMOd4f2de~l@TeB}aPS*UWH#JS^-M1ja7+&`Y)oe}sy4asVr zKk&S)oo)}2$*?47QfHL_CVefu)?1K0RHmfOTSeZq8jJ^hC50QS5c=cv(MSA1_fM@| z7i0cV2!_dQ`MqDyjn8Q`6InIh0&>z~utjxFHyy&#BHqd8#GZgI+#^8 zb5Sd9K$lbYfSa3>Y*B_K75#B0a6NTC(Byz)m%x5I`=waW*{_Lr2f&mBng{c?%_NOz z2!vY;a65f6qyXbj%&UF8wiqLB!);LT3uyR=mp*C4Pkjdj9cVRrms|)2yVF4dSJ~)k zl8)j8iB!bT&lv4|DVa3sG2n~(58Hhw6JcO(7b-N+9qd4TwJMeL{0Ud_aCZS}6GM!`8{&Zdx;${o3mi=C^jAI=?5{Ih^RXU~|Bn|4SBw{hT&><51l7a~ zGO5wW-TO%edjm<5lYA^VE{bohz`X?#5DjwuVBtWXUwxko@ym=qhKsOqjT{KTBu@pU zs(L)>KQ>^PlT)%jjE@bB$yMe5r$dA~@EtYJJA{p=*3ORN-<>pavset{o_x+UTe4YUxd*Tn~{hJs6;PCL%tDSP!`}rtTcl#Hjx*I z5az(km!QeU776H(Oz9-dx*^7q0O=VzD9xpxz!Zm3FgXEb)!PA9)XeSqrcMPs7fYOS zTJGQ399_)_f;+Fi3)VLyTINhwq0uCafIb%jt2~~JxmEyx{t}LF*F3h@4;HU6T=e6cI~@6_=&VgaT-8 z6o)v&T5z;~ABxL_j4r_}Q-IjIwex3TI!uOY5Gj}4$DwNfY5-~I-eHm3t+7!(NzaLP6-Ksoa^EU?pG zOseri0Mrmwzp3i0%#|fcB4@-uK{6)=NT8S;({fDZ29pea*T@})6_zakH-FwmlO$rH zgp>2v+<9&SLC7N#$m>`*>x%xL*HIs893kl12d zPbIFIRsz@HKdc2N&P6b*RH32((#=Uv|Az;mks zlQ0sF3e{!dG@9`99|N`wRc@y>-uQnqq5N}EFw59;&zJu>bDtgi%P_46E%=;C^uiMS z17`9+Xvz|N(GzW9F^mWZ4XA1mKV6IchfMw+q4FAN`BCgi{Feuf#KTo`JT z-X1~#4@O_5+j&w>->z_UODtL7IN>u0I4c{`c!#kWV7rRA#Dzfz-36MxcnC?&i7u=T zYiuJi5MYmYG9F<5ClM;peg2XIvd`$pW^LXjVrlR;zVyUu-@HA4FdXL^hxNA}^A4MT zleG6RWl7XyK!D_L1YcqsfiEawTfrywz}3lTE28eCLRG}T<*g$*uFd-+U66|o^CA0>zae+@5Ns0rYX9Lc zG*{22HHIL1sldSiTj)OLAx;3Uh-%i4wS#bO_5b0j3n=J1;n|5$qY;sp@Anb;KO{j> zv)SvxKk_?~4ncmVm9P86nvEz;rRp|`un3!3#62&@i;Mp>f+kk<-i!7_e-JoJ`oEh3 zg~Xrdgk`xUiu~va^VVH@9nPMQohC&CTiPCAj4rrY#-K@pB^3p?kjQ3Y*)&-8LRjeq zhI!7;Pnh34y&nRrIrITq8BI>vFc|^XdUO1<3!kga)V|UzZzFmsB!9r!p$8oJhyFfy~RLo z*bsMMz0;6}qC5bGKYE-|Lw>SG@-ZNAhKJWOcWw%}zfMiG0Y!i6!-U2thNfcb+k`#bJIUbqKeLG9Cs z_`Sv{dD$3?Ru;MNwjMM2$zLt8s4QKV2mNXPCK48{K))DMs>L=KpVxmC`x!|?a?hda z533DEr8sZoAevls?_aE;M!okm>fWNZLO1p*TX7rcdl#6a7pQs>Rul_dr!GbdxD?d= zB+B`cB?DgRTL?!tCIh@9EnQ{68C0&X3#;NB9y45}$6G~Ze%KyGFpRjsf<1&i$w?uQ zX*Ukvvy3=IbNEn{yE`PkEoc@?up%FRX2a#oiG;0h8biHh6btUc*xlHMWn#nMaOS-e;u3t`{n@E&I^weym3Zsxh$yT_Kfl4P1868?hRKD$=^m2g!)8h$n5# zgWJ$>50+vhSPC|uK6)Ac$Vt+J1Q)c(f@iUUnl9(?#ZTC%0M4@pNbls`LLh@9oaVo- z;WHvWzQ~Zk%z?Wm6%@RanSPvyK0G6GTHXlwfagNFA*$M`_vzxnJ* zIK3SD0Py6de3g&JW?clyZjoG=G`4%M6C6RQ4jutt>ID^RO)wpiUF0Oj_I(cFq?dhm z?%;kt!4isFRt##AD{gz74k^lHAZ%wL%HdeVc<76^kd)kj#E@n}4brSF2kS~fxCalY zQAwEyJ(kRt-SCB8*T12k3jN~S0+3nqS&qs(rZ#lz+qZi|T}R2JTol4>rYqsO#{G{4 za|j<#aia;Za9DSbkN$I^vd^#Q6;x~~pPn`&Nqw19=A|%Q#p!Apgcqkg+iEHq#ljM8 z`n?}*>Au%kqfn47O;Q4*)kdpWf=^?Ie}4|qSso31T8dT|M(gJ7?j`#6CdL#-qkV`k zsbn`@1>X3YJEG&m8aC6c8bAKL2_aSy2qCp<=FLY(`50H@A@lIMPBjR3RuJJ%v83ek zjpK%+1IxG?|I6;fRR&AL2wVyBKR7C-{1yzUi-80C4S)_P2Q)$&`o6oMD$(Q`y$sX1 z)ru3M1OK`!aI+po)1>BnBJRv%XKq8jO2pWh!X&6AOh%QRJ=8i~7;q8R@~NWt zG`2lY!~)+=1Y9%+yM8D*YnDhwA2-xnMxLu{@>*-on{TJ@8m#`e4ut8xl!rSDP-RH9 zRey*%=;HuR%bh{lob?p#yVFBp%ienDxg-l$G$Wl?>me!mUejaarP<`Ox~Cw}USiy&cWBH zN`1*gSYv#r-TA+7bWD~+iLVZo!~UerH;e)S##Fu_7OjsgSXhzRZa#0sf z(*qT-_<|_(h;X^v`I7=8ws`W5X8C0=^o~eBOxp!YX>M~ z+I%?(&q@G}gVavD!;MvoO!Q$9s0Pm0(F>MBIk}xL?`J5QOP?vKT`Ax~H@HASPh=!Ix>Ivi(Cw^p-Oqd1t*i^6q5msO~8Qe+zpt z$z_2$U!I_cU^d{X#A;|fNa=W#4jFLD+uqNB@fTCkkV*9>)YkbeWF$j7RDq$=OHy}% zy>3XT@!dV;XVZ^K18_$PlK=a5phJP*%8H;`3Gyx_SlZ!Q#L=aZwaU*}JNWeV3ikTn z%Jz|p^H2#&@27v`=QkdXDgLh)K>xfxd6qF)_g8b_xSi{Dnak0wVg$Tu zCrC6Ph{{}BbqiTWeF2s*9m#!)(vEfMFfS<(xPXx0@F;{)fl-LsW5^o7D)$K*HFtdA z=vFQIzSQtP=5NSQfm)3%8JWZ(qu_HRX7%AerO5n>oBLimHJrXN1e8zu;p;_I9tTQC z?F16^{|APO1w56zho+EMsDqGpn=4Idtf%SG{e>70<|A)MGU|A*}RHHR+`G$X-W zNZl^rthf|mrKiVhWwUf?a!rPXXvoYV+;By1z+|aP2O=M(sAUn*20P`ZJCr0&5;TTF ztd(P$gbtCWS5|l^8@`?I`fR&dXk?KrNxlGiN5TU*Lz87~z6uL^s)hI|QdW1Aa-Klg zu8?P}k#e2Qzf9tWrZ><%&_Yw1vD&PTw2&(rkIfwudB!fn`9FFr6+-2*U z-I<>kos;!|OiSEHa%0dYv<9gs6Ay18_Yn{S{+}=ujxG;?1<{8GwHAs4A&>OTLy$WO ziXr||1WtUbt|FCug&q!e-0k#PR{!DjQRrkMY&)P2(AIW$MkJdM`a<%n{$RnL#&kI{Sx?8OA6sB5t_DXbpLP29->Xink@$E;}G>clSmL$@}s z8(@ZPD8MKB9MiWuSyY~72~B7KP*09S!l!NY6iM>p6avX=0IQt<6ZD~+6?MJ~U%tg| z_v0Rx0nl~=0K;2^2vgab`2N525G>Xj{WHJ2S3vNQ1^esfj zig`EP>5`%PcYTuSGn(Q9k!8&ovF9nG{Mrm3hPW`=h*q&x5UB4Xl6m^0Rf=V~g9$IH zhy#yQ^s`i7do11tUnBY0qjMCxM7ZH16JM$@P+E@(0Y%;oSbm&Fo{0N`!{J|~TVAS> zCSn@!il1mo@MS{{fyV>IYajPxqeQ4eB-3o6(dX+z55d#F^muh_7AyVNOX!|xIY`{7 z@afxQ&-1Qb(7)A>`w$NsAT&5Xd-%+O#P|a!!N6B`;Kl=FZc9Z!Mof=W zwRw=s3WWemfCB?BI>t8XSx*@{w1DQ|jrP@FA$SkIy&iNfFkx&Bd6zZ=I09fZ02Qqa z$mxuMc?&QC+XBw~TfT}2s%wKZYEsg&NoleKrSrj>eK}Dp|#6h zpi78r8B3765bWerbZY@bL}!SQEQpgs7cMP1K-8j$3u5mQk1Bt4T3O<7aPW_q1%&Nc z*7Lmy{sMrmGsJE0P^SX$?!sn`PuG1J3`06 zU@f-SA3JNZjI@ndNtF`xCh0!vkzbfbC~m-m)l7&Ms)!2Xk7&`l0wb5X=vGKCvvZ1| zcuYonW&=wNxo)fVKzVagQ)UDAAPXoT;b>7;uO=>6u)aZLesT!Sy$M#7_4Bmxh=9l_ zp$9_B*Ag-D4KdyyZgtT)z{;@47Ilw9)i1n)&N3n(kFbKT9nJ(p9C*@!w5FRfv-U#* zC0?OS_fWp}${OE=5TNz~CiGkYsyO)VM8w;qM;klwA&5T)sG@Wql6r@qkVusIS(2u4 z*IW$g1}amEEJ{{+F%F_MKSnP;XAob#XmS;^N=!0{&*{ZaK?t)R#QBw$zt0tL9MPk& z@g=xV0{anbkWrk3!>W$|hsS1B#w{`?av4BGLm-QmR`8pq9e_EpP64yO@y1W4(G(S(q${tW%b=0o~pX~j`7 z5P_|6-bDxFIG!VTF-`31uPDT3J^SM8ujOJ$J~m)FeSLd`b|_4bz%hA2koPczZ>o+} zOh0mT8T60BP$M>f5#$r8s5;|D*(~H}WFyuIVVEi81(q2?6=xG+{=k?fK{LV-JBNa9 zg>Sap`loqT15xjwA9Z~(|H_mmRi`6c;Ik>ntAxU+Y9IZrT9YLJ7sy$Ue14jrqxLqFFq+lHL|Ez`{ zt9)Kt89&mav)jjUvN2?rBUD#ZbT5|Q7t-%L0d#X`Ok)Y=5@{!JP{JcRq5xylE+5B~ zj!h&Cn1Mr-@yI9jLb7M{L*w>6(7rNRC7LSYj2wbm&(`Cv>h1C+(5p?ThBicTKIQix zKig{T5dBG{^%sk1XOQ~zgh-O)AQhO;*%>6jIqk)TlB0`Y2N(218f%(tU3`x@46}0z zzB2AW%g&3*2&?TnsGpsnej!_zHhK!$X!by*vt$vKiQ0_Lvzzg&TmfR31)x$dRnqbC z4)~J&ukDjH#Ug+~lIu1*P<5xLq?WZ2)~csIsLEn}O|t`2hODxzg7~Gp7iXwH7`MDi zmQL<0%Xx}c+w1qf{HvdAEF}I~iPK{ZkIA~$r>v(C^L@BNG!_0OJ6VG>05MiXgV_#IuGwkXQz>A1b&` zl8!eCApG5%0!L;~wto6^Sf56HCy`=CW+f6TbTdvT8$2Jn5DBKRp8DRIMY)63p9!)a z0?$MYQ0y=JN$|{YV(y|lM9k>JC4cZ3fZWhBOlZUoLU+x<^4zPdGB)WFp)y)~17>^bgB-@`$1czNhO6PjRp?q{)f1=rXqDp>X zQ9qjTf>e$J*-xPtu*rHt?AMTdtUP{f(ao_*ZJz?{xBks7?5=y!d1M2pd$MS+O2QPs z@psbh9=prqCqDxsA`53CSq9&b`P5e*+T9mc@8i}QsYj+?q#?fRmx%l(BA+H+8U5a8 zJ5z=KPvENi9L1Bb!3ImN6^_8)a5VbeLU6B6tIux;8akjPc?0<<#wW(aJaZWjL7mpy zInbRDK+O5Z=7SbAcS1N4@u^^wJK31H7c_g#a&XI#kc~2qXOC2#P>49<2Rd_LOJ5fj zu~%0FF*qzc`(+oVRogg^idvCfV4!BEgZS`b!nuOOSpvWCf~b=fxal77#^l;bh;8A7 zOWcS%VMrizFkmM@C6u9-N8T2QfS6U)6e5O(H5NmP4z@B-hPBxDh{6!D@ht+|za{D< z+iq`wG}i}?BB@mYdMv?elfB84-s=|p6;H&=QS48Xgf^tM!3shZh293Y^bQ9;rhp}G z!7P&ve`P|4Ig#{pHl$PUAL=D_LTa`S5Ac$o{aLX0ptl;tyy*X*2dj}$T^5mYoTznT zDiD=hqO3wN7TE9^3CILz1zi&|{guIFpufiX;QuxCg6@B4lKyzji* zInREc^PJ~70|zfJgvmxg!i?Vo5RxSiAzI@lTxqNUcFvyM3Z^&zQIJ_^Nz0|aP+$=rPslsMY5zni>Ult0ep9B|UqNf+i9 z!Uo1bhz#%mB=%0E8{4w|{Lw1Y1Ow#6X`a6Z+CaLt70j?iY?TT=$NVHrEvSlBxRD+Y z5>2`fSD}ezHOzW)QptXud)hOp_Q9V&^HXcbz>+)M&}J>?CFb~lvp)99OUyE`dyPrI z9}P9>l!NgkXc#WuTmE5e@~_$+FzN>}G4d!Ody6*Y!h_}Ni=L6NVagDq{1M9u-iPNlV*3I z_jxbqm0v0}k8c}>sC4gA1!Znjd*h76m#b8p4;(<7uquw zEPd0{dQB2YUTm(VW~UX+-@B30F49P!9oxYj>MHUT*89D|z6(ZE!LAN3Z{0?f3$i1C%cHZney>m&#;rSKBoinb`E7TKX9#DjUa1H#3I$QU}5*R_wC#u z#6?fes&2BrPhR(7sZDU9l26i^6Y4@NAcIgs^xbZl#$_*tII$%Q=drS84EU{?^BUX! zj=QvRXrj%bs*}eXl=xOfKkZ**Sn8tuAwJ`|LaX?UA+Rlu4e%|p(7+b&*x9|Gl#$2i zf7x#WQUx{9Fld4sP@%~fp73RR0~`A;+8@cqrh3A(zCNgPng5TJ;wmWXxP<3e0Ri{Y z;w9%c;v_eDX6yV({ft|{g><~X=axaXf#U-3yMcgW!R_Z>Y+ta*{o9r1$2cLVAl;%Z zf^tkLlIy9vksH9?a|AT3bW5_VeL)7qo&fgdfUU?2(5_e&XR&UbuS_RLPMFuuGQyDD zbju2og8S|t)%T%a2GivIr;xF)_v(^UB0j5`2gyyyz~dgznReo+k+4*hqoWLJe?Wed z>_B4lb$e>h+1(%(MX!<>Q$p?oE=J%nA%1r+r7M8Pnq>clP;f*I)PQ~xj?70eJj*czU^6=(A z)O54s=*B`3a@xhfm243(% zB<~L$Iic^Oi>$o*rOLfQsKzx91A-ogcf#Dl#{()s-PDit05%#}gvJXz-rO+;(L4{7 zv9wW+NgqGl`w|oZZA<13{5#9?D?h%|8GDXl-i-qRWmkt1=?iC|b=z6?tReVfG{_|X z9=rtvuz=TbQ=8BlFw0N?{C$FgjIX2F#Q_cKslvkBF-375o)~Wf=pJq>UL6lGIpp*2 z9xx_~fV@^fwhK0M#r8wzL4q8}bpPV&h797@-d~LqE%coKK68$iT0i&eHY08si)3`c zFZj#IoGEX+gEZn&t%KT+NBDRg`{m`89+30ucj6Ji`azgm`-DO7ZOk5xiNLJ|NjmB% zZn3k{uZ6=N4X>j=9n^LBjW@su6#kkDy~LkmxvdJRffeZ*b~BuE0e&257Lq3L)ix#& zbMDVG5|Bmu&1(FwV7@Pn35}$#ucI(J22h~HufLvh7H9b{-E(WHIpl+^B51%ogHz@s z%X|{u3F2!&)gwMsu4YAoZOK-fWG*-~**X|a@k8A+6c+%<=Fc>mxZP*;siKY!w8R-u zzBw=)iwm!m1}2zZ1l2FdL$@o+8jIj_V7_=mS;I&S2X2lNgJ~Op3&&!Mdsk#cbf>O# zE_Ro#fn6-WF6IyZ;3mjI^8bNUDLT*&v%qn;b_;Y#_qjKkJrCiBb7cq0}9t|Ncx4^rGTlQaGP4$&C|S-WfgMnh*XA&d9}~;*vweBJJ4} zu=%M5$4wm#Jj&l^_Jw6m)~^)N2lH5VKCxb@MSGE#n}+oB-Q=Fb%SjG?(^@icGsY9e z6^Pu*IJR}UDQ-5OuHdJ>KA(CYjZuq|!iO^!y)q9^=Up%E^8B!YYb$EZ*PebcPgwek z<-bn#y|d@bm>a66vMtT8woxH1=_nNWtdLckiyYruq5?N2L=t24^cO+H4bB@|8pu0k?Hjo|VIX-%HX})E13< z|FH}$iBWs2or~3sXGZP5ozuQJp@Gs&apFU&0j6_;MPLWmmJYqG6B?$vK4|5k`we+{ zq6@ng>D(p!O~K*9!EuM_);Mm$sMb`?L{aLBrh;Emo@Twn4FpUORB6T4<4IXgE9@O~ zcUz1oQmB@x(B`a2#YKvuz}dd@q5a}MmBI+1@lR7$-H9BD;b#`${xSIoA#R3o$LG~w z_kgjHSL9DlFnV zp5|#bETopo=^eV8QQg2MjeuI}W|?@Mf&J0usHUT25e%YrGKMCLOk&R7`Zw>R?^5E( z+S%&R8J5(7W9dTR(v4)k^l_T+PQOQnK2`?=QV-@pGZ2+zvEHL25wzxJsS?>D{=h4h zdS4TSqX@L-*CAX$gM$;8fHv?9F@=0@=JRpVpiyjs-F z@)rie@AYDg$QRxQ`J@l_-;8gIhYL|ryJxHd34Iq^xDl3NNpVkFkskMr!U7U0Hr=hO>o_(JvUU%;caFaC-A@y z-<}!_=~o!aoi{t*DQgfUI;fmA$nS=8y@7Dfy^&QzVfPj4=!gdNF(zzlXSBBC!4g3& z!dI+hP9=k4kYi;mU@}vGoRDy4hFj^Gu9!G6V-xpR2aq<$+;hd;W&=Bk5G#2t@5FYXm6_Fb65&3+jQo))=d zLpPnp;M+j0IS4wUH*jDhrb-QG=Eo-{|841J_7FwHa&TzJfo(t6==dG4#BZU(G

-JhlJK#v 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 literal 0 HcmV?d00001 diff --git a/static/js/project.js b/static/js/project.js new file mode 100644 index 0000000..b75b539 --- /dev/null +++ b/static/js/project.js @@ -0,0 +1,2 @@ +var edit_button = document.getElementById("edit_button"); +edit_button.href = String(window.location.href) + '/edit'; \ No newline at end of file diff --git a/templates/delete_project.html b/templates/delete_project.html new file mode 100644 index 0000000..535aee9 --- /dev/null +++ b/templates/delete_project.html @@ -0,0 +1,26 @@ + +{% extends "base.html" %} {% block content %} +{% set name = 'delete/' + project.name %} +

+
+

Удаление проекта

+
+ {{ form.hidden_tag() }} +
+ + {{ form.conf(class="input_data", type="conf", placeholder=name) }} + {% for error in form.conf.errors %} + + {% endfor %} +
+ {{ form.submit(type="submit", class="delete_project_button") }} +
+ {% if message != '' %} + + {% endif %} +
+
+{% endblock %} \ No newline at end of file diff --git a/templates/edit_project.html b/templates/edit_project.html new file mode 100644 index 0000000..3469af9 --- /dev/null +++ b/templates/edit_project.html @@ -0,0 +1,68 @@ + +{% extends "base.html" %} {% block content %} +
+{% endblock %} \ No newline at end of file diff --git a/templates/project.html b/templates/project.html index 6b893a9..bbc086b 100644 --- a/templates/project.html +++ b/templates/project.html @@ -3,7 +3,9 @@
- + + +
@@ -25,4 +27,5 @@
+ {% endblock %} \ No newline at end of file