diff --git a/app/main/routes.py b/app/main/routes.py index a4b2ff2e97269a2589fb186bc1cbdcb9fec84b8c..65a237e93b3310915409bf4e8d678f9b680fd7c6 100644 --- a/app/main/routes.py +++ b/app/main/routes.py @@ -35,13 +35,13 @@ def dashboard(): @bp.route('/user_manual') -@register_breadcrumb(bp, '.user_manual', 'User manual') +@register_breadcrumb(bp, '.user_manual', '<i class="material-icons left">help</i>User manual') def user_manual(): return render_template('main/user_manual.html.j2', title='User manual') @bp.route('/news') -@register_breadcrumb(bp, '.news', 'News') +@register_breadcrumb(bp, '.news', '<i class="material-icons left">email</i>News') def news(): return render_template('main/news.html.j2', title='News') @@ -59,7 +59,7 @@ def terms_of_use(): @bp.route('/social-area') -@register_breadcrumb(bp, '.social_area', 'Social Area') +@register_breadcrumb(bp, '.social_area', '<i class="material-icons left">group</i>Social Area') def social_area(): users = [ u.to_json_serializeable(relationships=True, filter_by_privacy_settings=True,) for u diff --git a/app/templates/users/edit_profile.html.j2 b/app/templates/users/edit_profile.html.j2 index 5861a9696f50b7e36b7a15f0da955757845c7d4c..88eb8fb5a1e3cec735f92183627ee11e16ad31ca 100644 --- a/app/templates/users/edit_profile.html.j2 +++ b/app/templates/users/edit_profile.html.j2 @@ -14,6 +14,7 @@ <div id="user-settings" class="card section scrollspy"> <form method="POST" enctype="multipart/form-data"> <div class="card-content"> + <span class="card-title">User Settings</span> <div class="row"> <div class="col s6"> {{ edit_profile_settings_form.hidden_tag() }} @@ -69,11 +70,7 @@ <div class="row"> <div class="col s2"></div> <div class="col s8"> - {% if user.avatar %} <img src="{{ url_for('.profile_avatar', user_id=user.id) }}" alt="user-image" class="circle responsive-img" id="avatar"> - {% else %} - <img src="{{ url_for('static', filename='images/user_avatar.png') }}" alt="user-image" class="circle responsive-img" id="avatar"> - {% endif %} </div> <div class="col s2"></div> </div> @@ -190,3 +187,50 @@ </div> </div> {% endblock modals %} + +{% block scripts %} +{{ super() }} +<script> +let publicProfile = document.querySelector('#public-profile'); +let disableButtons = document.querySelectorAll('[data-action="disable"]'); +let deleteButton = document.querySelector('#delete-avatar'); +let avatar = document.querySelector('#avatar'); +let avatarUpload = document.querySelector('#avatar-upload'); + +for (let disableButton of disableButtons) { + disableButton.disabled = !publicProfile.checked; +} + +publicProfile.addEventListener('change', () => { + if (publicProfile.checked) { + for (let disableButton of disableButtons) { + disableButton.disabled = false; + } + } else { + for (let disableButton of disableButtons) { + disableButton.checked = false; + disableButton.disabled = true; + } + } +}); + +avatarUpload.addEventListener('change', function() { + let file = this.files[0]; + avatar.src = URL.createObjectURL(file); +}); + +deleteButton.addEventListener('click', () => { + Requests.users.entity.deleteAvatar(currentUserId) + .then( + (response) => { + avatar.src = "{{ url_for('static', filename='images/user_avatar.png') }}"; + } + ); +}); + +document.querySelector('#delete-user-button').addEventListener('click', (event) => { + Requests.users.entity.delete(currentUserId) + .then((response) => {window.location.href = '/';}); +}); +</script> +{% endblock scripts %} diff --git a/app/templates/users/edit_profile.js.j2 b/app/templates/users/edit_profile.js.j2 deleted file mode 100644 index a56effae9df24f8321d70c5e1209868a4d121ebf..0000000000000000000000000000000000000000 --- a/app/templates/users/edit_profile.js.j2 +++ /dev/null @@ -1,41 +0,0 @@ -let publicProfile = document.querySelector('#public-profile'); -let disableButtons = document.querySelectorAll('[data-action="disable"]'); -let deleteButton = document.querySelector('#delete-avatar'); -let avatar = document.querySelector('#avatar'); -let avatarUpload = document.querySelector('#avatar-upload'); - -for (let disableButton of disableButtons) { - disableButton.disabled = !publicProfile.checked; -} - -publicProfile.addEventListener('change', () => { - if (publicProfile.checked) { - for (let disableButton of disableButtons) { - disableButton.disabled = false; - } - } else { - for (let disableButton of disableButtons) { - disableButton.checked = false; - disableButton.disabled = true; - } - } -}); - -avatarUpload.addEventListener('change', function() { - let file = this.files[0]; - avatar.src = URL.createObjectURL(file); -}); - -deleteButton.addEventListener('click', () => { - Requests.users.entity.deleteAvatar({{ user.hashid|tojson }}) - .then( - (response) => { - avatar.src = "{{ url_for('static', filename='images/user_avatar.png') }}"; - } - ); -}); - -document.querySelector('#delete-user-button').addEventListener('click', (event) => { - Requests.users.entity.delete(currentUserId) - .then((response) => {window.location.href = '/';}); -}); diff --git a/app/templates/users/profile.html.j2 b/app/templates/users/profile.html.j2 index e73a3b7a0f8967ae37ecc1df9722644a3424a125..31c12359cc476569ab3cdef04baa4550841c0534 100644 --- a/app/templates/users/profile.html.j2 +++ b/app/templates/users/profile.html.j2 @@ -12,17 +12,17 @@ <div class="col s3"> <br> <br> - {% if user.avatar %} <img src="{{ url_for('.profile_avatar', user_id=user_id) }}" alt="user-image" class="circle responsive-img"> - {% else %} - <img src="{{ url_for('static', filename='images/user_avatar.png') }}" alt="user-image" class="circle responsive-img"> - {% endif %} </div> <div class="col s1"></div> <div class="col s7"> <div class="row"> <div class="col s12"> - <h3 style="float:left">{{ user.username }}<span class="new badge green" id="public-information-badge" data-badge-caption="" style="margin-top:20px;"></span></h3> + {% if user.is_public %} + <h3 style="float:left">{{ user.username }}<span class="new badge green" id="public-information-badge" data-badge-caption="Your profile is public" style="margin-top:20px;"></span></h3> + {% else %} + <h3 style="float:left">{{ user.username }}<span class="new badge red" id="public-information-badge" data-badge-caption="Your profile is private" style="margin-top:20px;"></span></h3> + {% endif %} </div> <div class="col 12"> {% if user.show_last_seen %} @@ -111,3 +111,12 @@ </div> {% endblock page_content %} +{% block scripts %} +{{ super() }} +<script> +let followedCorpusList = new FollowedCorpusList(document.querySelector('.followed-corpus-list')); +followedCorpusList.add({{ followed_corpora|tojson }}); +let publicCorpusList = new PublicCorpusList(document.querySelector('.public-corpus-list')); +publicCorpusList.add({{ own_public_corpora|tojson }}); +</script> +{% endblock scripts %} diff --git a/app/templates/users/profile.js.j2 b/app/templates/users/profile.js.j2 deleted file mode 100644 index 5f729f18be3be2ef3611b9b24f1731e77ca07d55..0000000000000000000000000000000000000000 --- a/app/templates/users/profile.js.j2 +++ /dev/null @@ -1,19 +0,0 @@ -let publicInformationBadge = document.querySelector('#public-information-badge'); -if ("{{ user.id }}" == "{{ current_user.hashid }}") { - if ("{{ user.is_public }}" == "True") { - publicInformationBadge.dataset.badgeCaption = 'Your profile is public'; - publicInformationBadge.classList.add('green'); - publicInformationBadge.classList.remove('red'); - } else { - publicInformationBadge.dataset.badgeCaption = 'Your profile is private'; - publicInformationBadge.classList.add('red'); - publicInformationBadge.classList.remove('green'); - } -} else { - publicInformationBadge.remove(); -} - -let followedCorpusList = new FollowedCorpusList(document.querySelector('.followed-corpus-list')); -followedCorpusList.add({{ followed_corpora|tojson }}); -let publicCorpusList = new PublicCorpusList(document.querySelector('.public-corpus-list')); -publicCorpusList.add({{ own_public_corpora|tojson }}); diff --git a/app/users/routes.py b/app/users/routes.py index a69fa503f0d1b1623f637509d5c29903904158ff..21e2ff029424e45ceab3d49c51b8c282877d9ceb 100644 --- a/app/users/routes.py +++ b/app/users/routes.py @@ -26,7 +26,7 @@ from .utils import ( @bp.route('') -@register_breadcrumb(bp, '.', '<i class="material-icons left">group</i>Users') +@register_breadcrumb(bp, '.', '<i class="material-icons left">group</i>Social Area') @login_required def users(): return redirect(url_for('main.social_area', _anchor='users')) @@ -65,7 +65,7 @@ def user(user_id): def profile_avatar(user_id): user = User.query.get_or_404(user_id) if user.avatar is None: - return redirect(url_for('static', filename='images/default_avatar.png')) + return redirect(url_for('static', filename='images/user_avatar.png')) if not user.is_public and not (user == current_user or current_user.is_administrator()): abort(403) return send_from_directory( @@ -78,7 +78,7 @@ def profile_avatar(user_id): @bp.route('/<hashid:user_id>/edit', methods=['GET', 'POST']) -@register_breadcrumb(bp, '.entity.edit', 'Edit', endpoint_arguments_constructor=user_eac) +@register_breadcrumb(bp, '.entity.edit', '<i class="material-icons left">settings</i>Edit', endpoint_arguments_constructor=user_eac) @login_required def edit_profile(user_id): user = User.query.get_or_404(user_id) diff --git a/app/users/utils.py b/app/users/utils.py index 1c4ab7a8e80ded8ebbf7fe19f744c8cc7669ed8b..5c1ca83ea704b0124618182f48b5d0b8bb721df1 100644 --- a/app/users/utils.py +++ b/app/users/utils.py @@ -11,7 +11,7 @@ def user_dynamic_list_constructor(): user = User.query.get_or_404(user_id) return [ { - 'text': f'<i class="material-icons left">account_circle</i>{user.username}', + 'text': f'<i class="material-icons left">person</i>{user.username}', 'url': url_for('.user', user_id=user_id) } ]