From c6b18fae8118f6c4c36bab11ebab95ab3e15a3c8 Mon Sep 17 00:00:00 2001 From: Kostiantyn Stoliarskyi Date: Thu, 15 Jun 2023 15:28:54 +0300 Subject: [PATCH 1/5] small fixes --- app/templates/book/stat.html | 2 +- app/templates/notification.html | 2 +- app/templates/user/profile.html | 4 ---- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/app/templates/book/stat.html b/app/templates/book/stat.html index 855aa95..f1c8f6d 100644 --- a/app/templates/book/stat.html +++ b/app/templates/book/stat.html @@ -7,7 +7,7 @@ {% include 'book/modals/fork_book_modal.html' %} -
+

{{book.label}}

diff --git a/app/templates/notification.html b/app/templates/notification.html index 4541aec..e3ed9d3 100644 --- a/app/templates/notification.html +++ b/app/templates/notification.html @@ -3,7 +3,7 @@
- You haven't notifications! + You don't have notifications!
diff --git a/app/templates/user/profile.html b/app/templates/user/profile.html index d0512f8..fd837bb 100644 --- a/app/templates/user/profile.html +++ b/app/templates/user/profile.html @@ -81,7 +81,6 @@
- {% if interpretation.user_id != current_user.id %}
- {% endif %}
- {% endif %}
From 86dda54525b7ffc0d60154ddbaf157e1426e661e Mon Sep 17 00:00:00 2001 From: Kostiantyn Stoliarskyi Date: Thu, 15 Jun 2023 15:58:57 +0300 Subject: [PATCH 2/5] not found for home --- app/templates/home/explore_books.html | 7 ++++++- app/templates/home/index.html | 6 ++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/app/templates/home/explore_books.html b/app/templates/home/explore_books.html index 26256ad..a9bae5a 100644 --- a/app/templates/home/explore_books.html +++ b/app/templates/home/explore_books.html @@ -43,7 +43,12 @@ id="explore-books" role="tabpanel" aria-labelledby="explore-books-tab"> - {% for book in books if not book.is_deleted %} + {% if not books.total %} + + {% endif %} {% for book in books if not book.is_deleted %}
{{book.label}}
diff --git a/app/templates/home/index.html b/app/templates/home/index.html index e3b8198..1e8bd5a 100644 --- a/app/templates/home/index.html +++ b/app/templates/home/index.html @@ -35,6 +35,12 @@
diff --git a/app/templates/book/modals/add_contributor_modal.html b/app/templates/book/modals/add_contributor_modal.html index 0789dcf..807df19 100644 --- a/app/templates/book/modals/add_contributor_modal.html +++ b/app/templates/book/modals/add_contributor_modal.html @@ -47,7 +47,7 @@
- +
diff --git a/app/templates/book/modals/add_version_modal.html b/app/templates/book/modals/add_version_modal.html index 1554f86..3f6dc78 100644 --- a/app/templates/book/modals/add_version_modal.html +++ b/app/templates/book/modals/add_version_modal.html @@ -17,7 +17,7 @@
- +
diff --git a/app/templates/book/modals/delete_book_modal.html b/app/templates/book/modals/delete_book_modal.html index d32e5c4..2304415 100644 --- a/app/templates/book/modals/delete_book_modal.html +++ b/app/templates/book/modals/delete_book_modal.html @@ -13,7 +13,7 @@
- +
diff --git a/app/templates/book/modals/delete_contributor_modal.html b/app/templates/book/modals/delete_contributor_modal.html index 40f8557..0e5e468 100644 --- a/app/templates/book/modals/delete_contributor_modal.html +++ b/app/templates/book/modals/delete_contributor_modal.html @@ -15,7 +15,7 @@
- +
diff --git a/app/templates/book/modals/delete_version_modal.html b/app/templates/book/modals/delete_version_modal.html index 05d4a8f..b4330c1 100644 --- a/app/templates/book/modals/delete_version_modal.html +++ b/app/templates/book/modals/delete_version_modal.html @@ -15,7 +15,7 @@
- +
diff --git a/app/templates/book/settings.html b/app/templates/book/settings.html index d7fd854..711ea3a 100644 --- a/app/templates/book/settings.html +++ b/app/templates/book/settings.html @@ -88,7 +88,7 @@
- + {% if book.user_id == current_user.id %} {% endif %} @@ -145,7 +145,7 @@ {% endfor %} - + diff --git a/src/unsavedChangedAlert.ts b/src/unsavedChangedAlert.ts index 56d2586..b20f3c2 100644 --- a/src/unsavedChangedAlert.ts +++ b/src/unsavedChangedAlert.ts @@ -1,13 +1,15 @@ +const alertEvent = (e: any) => { + var confirmationMessage = + 'It looks like you have been editing something. ' + + 'If you leave before saving, your changes will be lost.'; + + (e || window.event).returnValue = confirmationMessage; //Gecko + IE + return confirmationMessage; //Gecko + Webkit, Safari, Chrome etc. +}; + const initAlertOnClick = (element: HTMLElement) => { element.addEventListener('click', () => { - window.addEventListener('beforeunload', function (e) { - var confirmationMessage = - 'It looks like you have been editing something. ' + - 'If you leave before saving, your changes will be lost.'; - - (e || window.event).returnValue = confirmationMessage; //Gecko + IE - return confirmationMessage; //Gecko + Webkit, Safari, Chrome etc. - }); + window.addEventListener('beforeunload', alertEvent); }); }; @@ -18,8 +20,9 @@ export const initUnsavedChangedAlerts = () => { '.book-tags-input', '.multiple-input-word', '.contributor-role-select', - '.edit-permissions-btn', + // '.edit-permissions-btn', '.add-contributor-btn', + 'input[type=checkbox]', ]; elementsSelectors.forEach(selector => { @@ -29,4 +32,14 @@ export const initUnsavedChangedAlerts = () => { initAlertOnClick(element); }); }); + + const elementsOnClickPrevent = document.querySelectorAll( + '.prevent-unsaved-changes-event', + ); + elementsOnClickPrevent.forEach(element => { + element.addEventListener('click', () => { + document.removeEventListener('beforeunload', alertEvent); + window.removeEventListener('beforeunload', alertEvent); + }); + }); }; From c7e6d8016ae57e18d1f4fdb718a35446d7059193 Mon Sep 17 00:00:00 2001 From: Kostiantyn Stoliarskyi Date: Thu, 15 Jun 2023 17:15:22 +0300 Subject: [PATCH 5/5] move creating flash about errors to controller --- app/controllers/error_flashes.py | 8 ++++++++ app/views/book/book.py | 11 +++-------- app/views/book/collection.py | 11 +++-------- app/views/book/fork.py | 6 ++---- app/views/book/interpretation.py | 11 +++-------- app/views/book/section.py | 11 +++-------- app/views/book/settings.py | 16 ++++------------ app/views/book/version.py | 16 ++++------------ app/views/user.py | 6 ++---- 9 files changed, 32 insertions(+), 64 deletions(-) create mode 100644 app/controllers/error_flashes.py diff --git a/app/controllers/error_flashes.py b/app/controllers/error_flashes.py new file mode 100644 index 0000000..032cf37 --- /dev/null +++ b/app/controllers/error_flashes.py @@ -0,0 +1,8 @@ +from flask import flash + + +def create_error_flash(form): + for field, errors in form.errors.items(): + field_label = form._fields[field].label.text + for error in errors: + flash(error.replace("Field", field_label), "danger") diff --git a/app/views/book/book.py b/app/views/book/book.py index 35f5f90..8dae337 100644 --- a/app/views/book/book.py +++ b/app/views/book/book.py @@ -17,6 +17,7 @@ from app.controllers.create_access_groups import ( ) from app.controllers.require_permission import require_permission from app.controllers.sorting import sort_by +from app.controllers.error_flashes import create_error_flash from app import models as m, db, forms as f from app.logger import log from .bp import bp @@ -130,10 +131,7 @@ def create(): return redirect(url_for("book.my_library")) else: log(log.ERROR, "Book create errors: [%s]", form.errors) - for field, errors in form.errors.items(): - field_label = form._fields[field].label.text - for error in errors: - flash(error.replace("Field", field_label), "danger") + create_error_flash(form) return redirect(url_for("book.my_library")) @@ -162,10 +160,7 @@ def edit(book_id: int): return redirect(url_for("book.collection_view", book_id=book_id)) else: log(log.ERROR, "Book create errors: [%s]", form.errors) - for field, errors in form.errors.items(): - field_label = form._fields[field].label.text - for error in errors: - flash(error.replace("Field", field_label), "danger") + create_error_flash(form) return redirect(url_for("book.settings", book_id=book_id)) diff --git a/app/views/book/collection.py b/app/views/book/collection.py index 064d3f5..f24fd10 100644 --- a/app/views/book/collection.py +++ b/app/views/book/collection.py @@ -9,6 +9,7 @@ from app.controllers.notification_producer import collection_notification from app.controllers.delete_nested_book_entities import ( delete_nested_collection_entities, ) +from app.controllers.error_flashes import create_error_flash from app import models as m, db, forms as f from app.controllers.require_permission import require_permission from app.logger import log @@ -127,10 +128,7 @@ def collection_create(book_id: int, collection_id: int | None = None): return redirect(redirect_url) else: log(log.ERROR, "Collection/Subcollection create errors: [%s]", form.errors) - for field, errors in form.errors.items(): - field_label = form._fields[field].label.text - for error in errors: - flash(error.replace("Field", field_label), "danger") + create_error_flash(form) return redirect(redirect_url) @@ -194,10 +192,7 @@ def collection_edit(book_id: int, collection_id: int): return redirect(redirect_url) else: log(log.ERROR, "Collection edit errors: [%s]", form.errors) - for field, errors in form.errors.items(): - field_label = form._fields[field].label.text - for error in errors: - flash(error.replace("Field", field_label), "danger") + create_error_flash(form) return redirect(redirect_url) diff --git a/app/views/book/fork.py b/app/views/book/fork.py index a931523..2de9ba4 100644 --- a/app/views/book/fork.py +++ b/app/views/book/fork.py @@ -3,6 +3,7 @@ from flask_login import login_required from app import models as m, db, forms as f from app.controllers.fork import fork_book +from app.controllers.error_flashes import create_error_flash from app.logger import log from .bp import bp @@ -20,8 +21,5 @@ def fork(book_id): return redirect(redirect_url) else: log(log.ERROR, "Fork book errors: [%s]", form.errors) - for field, errors in form.errors.items(): - field_label = form._fields[field].label.text - for error in errors: - flash(error.replace("Field", field_label), "danger") + create_error_flash(form) return redirect(redirect_url) diff --git a/app/views/book/interpretation.py b/app/views/book/interpretation.py index 2261202..cfe2788 100644 --- a/app/views/book/interpretation.py +++ b/app/views/book/interpretation.py @@ -16,6 +16,7 @@ from app.controllers.notification_producer import interpretation_notification from app.controllers.delete_nested_book_entities import ( delete_nested_interpretation_entities, ) +from app.controllers.error_flashes import create_error_flash from app import models as m, db, forms as f from app.controllers.require_permission import require_permission from app.controllers.tags import set_interpretation_tags @@ -122,10 +123,7 @@ def interpretation_create( return redirect(redirect_url) else: log(log.ERROR, "Interpretation create errors: [%s]", form.errors) - for field, errors in form.errors.items(): - field_label = form._fields[field].label.text - for error in errors: - flash(error.replace("Field", field_label), "danger") + create_error_flash(form) return redirect(redirect_url) @@ -182,10 +180,7 @@ def interpretation_edit( return redirect(redirect_url) else: log(log.ERROR, "Interpretation edit errors: [%s]", form.errors) - for field, errors in form.errors.items(): - field_label = form._fields[field].label.text - for error in errors: - flash(error.replace("Field", field_label), "danger") + create_error_flash(form) return redirect(redirect_url) diff --git a/app/views/book/section.py b/app/views/book/section.py index 236e77b..a0d2001 100644 --- a/app/views/book/section.py +++ b/app/views/book/section.py @@ -4,6 +4,7 @@ from flask_login import login_required, current_user from app.controllers import register_book_verify_route from app.controllers.notification_producer import section_notification from app.controllers.delete_nested_book_entities import delete_nested_section_entities +from app.controllers.error_flashes import create_error_flash from app import models as m, db, forms as f from app.controllers.require_permission import require_permission from app.logger import log @@ -58,10 +59,7 @@ def section_create(book_id: int, collection_id: int): return redirect(redirect_url) else: log(log.ERROR, "Section create errors: [%s]", form.errors) - for field, errors in form.errors.items(): - field_label = form._fields[field].label.text - for error in errors: - flash(error.replace("Field", field_label), "danger") + create_error_flash(form) return redirect(redirect_url) @@ -97,10 +95,7 @@ def section_edit(book_id: int, section_id: int): return redirect(redirect_url) else: log(log.ERROR, "Section edit errors: [%s]", form.errors) - for field, errors in form.errors.items(): - field_label = form._fields[field].label.text - for error in errors: - flash(error.replace("Field", field_label), "danger") + create_error_flash(form) return redirect(redirect_url) diff --git a/app/views/book/settings.py b/app/views/book/settings.py index 488814e..866ef9f 100644 --- a/app/views/book/settings.py +++ b/app/views/book/settings.py @@ -15,6 +15,7 @@ from app.controllers.contributor import ( add_contributor_to_book, delete_contributor_from_book, ) +from app.controllers.error_flashes import create_error_flash from app.logger import log from .bp import bp @@ -59,10 +60,7 @@ def add_contributor(book_id: int): return response else: log(log.ERROR, "Book create errors: [%s]", form.errors) - for field, errors in form.errors.items(): - field_label = form._fields[field].label.text - for error in errors: - flash(error.replace("Field", field_label), "danger") + create_error_flash(form) return redirect( url_for("book.settings", selected_tab=selected_tab, book_id=book_id) ) @@ -89,10 +87,7 @@ def delete_contributor(book_id: int): return response else: log(log.ERROR, "Delete contributor errors: [%s]", form.errors) - for field, errors in form.errors.items(): - field_label = form._fields[field].label.text - for error in errors: - flash(error.replace("Field", field_label), "danger") + create_error_flash(form) return redirect( url_for("book.settings", selected_tab=selected_tab, book_id=book_id) ) @@ -161,10 +156,7 @@ def edit_contributor_role(book_id: int): ) else: log(log.ERROR, "Edit contributor errors: [%s]", form.errors) - for field, errors in form.errors.items(): - field_label = form._fields[field].label.text - for error in errors: - flash(error.replace("Field", field_label), "danger") + create_error_flash(form) return redirect( url_for("book.settings", selected_tab=selected_tab, book_id=book_id) ) diff --git a/app/views/book/version.py b/app/views/book/version.py index 86c30bb..09b78a4 100644 --- a/app/views/book/version.py +++ b/app/views/book/version.py @@ -8,6 +8,7 @@ from app.controllers import ( from app import models as m, db, forms as f from app.controllers.version import create_new_version from app.controllers.delete_nested_book_entities import delete_nested_version_entities +from app.controllers.error_flashes import create_error_flash from app.logger import log from .bp import bp @@ -28,10 +29,7 @@ def create_version(book_id): return redirect(redirect_url) else: log(log.ERROR, "Create version errors: [%s]", form.errors) - for field, errors in form.errors.items(): - field_label = form._fields[field].label.text - for error in errors: - flash(error.replace("Field", field_label), "danger") + create_error_flash(form) return redirect(redirect_url) @@ -64,10 +62,7 @@ def edit_version(book_id: int): return redirect(redirect_url) else: log(log.ERROR, "Edit version errors: [%s]", form.errors) - for field, errors in form.errors.items(): - field_label = form._fields[field].label.text - for error in errors: - flash(error.replace("Field", field_label), "danger") + create_error_flash(form) return redirect(redirect_url) @@ -102,8 +97,5 @@ def delete_version(book_id: int): return redirect(redirect_url) else: log(log.ERROR, "Delete version errors: [%s]", form.errors) - for field, errors in form.errors.items(): - field_label = form._fields[field].label.text - for error in errors: - flash(error.replace("Field", field_label), "danger") + create_error_flash(form) return redirect(redirect_url) diff --git a/app/views/user.py b/app/views/user.py index de86c87..60b0af8 100644 --- a/app/views/user.py +++ b/app/views/user.py @@ -1,6 +1,7 @@ from flask import Blueprint, render_template, request, flash, redirect, url_for, jsonify from flask_login import login_required, current_user, logout_user from app.controllers import create_pagination +from app.controllers.error_flashes import create_error_flash from sqlalchemy import func, not_, or_ from app import models as m, db @@ -46,10 +47,7 @@ def edit_profile(): return redirect(url_for("main.index")) elif form.is_submitted(): log(log.ERROR, "Update user errors: [%s]", form.errors) - for field, errors in form.errors.items(): - field_label = form._fields[field].label.text - for error in errors: - flash(error.replace("Field", field_label), "danger") + create_error_flash(form) if current_user.is_activated: form.username.data = current_user.username