diff --git a/app/corpora/routes.py b/app/corpora/routes.py index 25c5228f35fcb617b55c725673ad7f445c3251cb..47fadaf6d2e89b44ccd9fc48f633d2f706338d85 100644 --- a/app/corpora/routes.py +++ b/app/corpora/routes.py @@ -54,7 +54,6 @@ def corpus(corpus_id): # TODO: Better solution for filtering admin users = User.query.filter(User.is_public == True, User.id != current_user.id, User.id != corpus.user.id, User.role_id < 4).all() cfa = CorpusFollowerAssociation.query.filter_by(corpus_id=corpus_id, follower_id=current_user.id).first() - cfas = CorpusFollowerAssociation.query.filter_by(corpus_id=corpus_id).all() if cfa is None: if corpus.user == current_user or current_user.is_administrator(): cfr = CorpusFollowerRole.query.filter_by(name='Administrator').first() @@ -72,7 +71,7 @@ def corpus(corpus_id): users = users ) if (current_user.is_following_corpus(corpus) or corpus.is_public): - cfas = CorpusFollowerAssociation.query.filter_by(corpus_id=corpus_id).all() + cfas = CorpusFollowerAssociation.query.filter(Corpus.id == corpus_id, CorpusFollowerAssociation.follower_id != current_user.id, CorpusFollowerAssociation. follower_id != corpus.user.id).all() return render_template( 'corpora/public_corpus.html.j2', title=corpus.title, @@ -80,7 +79,6 @@ def corpus(corpus_id): cfrs=cfrs, cfr=cfr, cfas=cfas, - cfa=cfa, users = users ) abort(403) diff --git a/app/static/js/ResourceLists/CorpusFileList.js b/app/static/js/ResourceLists/CorpusFileList.js index ac87e8e57137c071918f0c5afc02fb78fa75a2a7..06f2f6f9ab29851a74514c61e8f1c8b6ff8a12ef 100644 --- a/app/static/js/ResourceLists/CorpusFileList.js +++ b/app/static/js/ResourceLists/CorpusFileList.js @@ -152,7 +152,14 @@ class CorpusFileList extends ResourceList { ); let confirmElement = modalElement.querySelector('.action-button[data-action="confirm"]'); confirmElement.addEventListener('click', (event) => { - Requests.corpora.entity.files.ent.delete(this.corpusId, itemId); + if (currentUserId != this.userId) { + Requests.corpora.entity.files.ent.delete(this.corpusId, itemId) + .then(() => { + window.location.reload(); + }); + } else { + Requests.corpora.entity.followers.entity.delete(this.corpusId, followerId); + } }); modal.open(); break; diff --git a/app/static/js/ResourceLists/CorpusFollowerList.js b/app/static/js/ResourceLists/CorpusFollowerList.js index 585c3633aaf865b06813cf91ac61854ce17dce07..975e69c16604d75a0f3abea2065cb7b10924a680 100644 --- a/app/static/js/ResourceLists/CorpusFollowerList.js +++ b/app/static/js/ResourceLists/CorpusFollowerList.js @@ -142,7 +142,14 @@ class CorpusFollowerList extends ResourceList { switch (listAction) { case 'unfollow-request': { let followerId = listItemElement.dataset.followerId; - Requests.corpora.entity.followers.entity.delete(this.corpusId, followerId); + if (currentUserId != this.userId) { + Requests.corpora.entity.followers.entity.delete(this.corpusId, followerId) + .then(() => { + window.location.reload(); + }); + } else { + Requests.corpora.entity.followers.entity.delete(this.corpusId, followerId); + } break; } case 'view': { diff --git a/app/templates/corpora/_corpus/action_buttons.html.j2 b/app/templates/corpora/_corpus/action_buttons.html.j2 deleted file mode 100644 index c2c53e3c1032475388a33a83624798a90b725ee9..0000000000000000000000000000000000000000 --- a/app/templates/corpora/_corpus/action_buttons.html.j2 +++ /dev/null @@ -1,30 +0,0 @@ -{% set owner_admin %} - <div class="col s12 l6" style="padding: 0 2.5px;"> - <a class="action-button btn disabled waves-effect waves-light" data-action="build-request" style="width: 100%;"><i class="nopaque-icons left">K</i>Build</a> - </div> - <div class="col s12 l6" style="padding: 0 2.5px;"> - <a class="action-button btn disabled waves-effect waves-light" data-action="analyze" href="{{ url_for('corpora.analysis', corpus_id=corpus.id) }}" style="width: 100%;"><i class="material-icons left">search</i>Analyze</a> - </div> - <div class="col s12 l6" style="padding: 5px 2.5px 0 2.5px;"> - <a class="btn waves-effect waves-light modal-trigger" href="#publishing-modal" style="width: 100%;"><i class="material-icons left">publish</i>Publishing</a> - </div> - <div class="col s12 l6" style="padding: 5px 2.5px 0 2.5px;"> - <a class="btn red waves-effect waves-light modal-trigger" href="#delete-modal" style="width: 100%;"><i class="material-icons left">delete</i>Delete</a> - </div> -{% endset %} - -{% set follower %} - {% if cfr.has_permission('MANAGE_FILES') %} - <div class="col s12 l6" style="padding: 0 2.5px;"> - <a class="action-button btn disabled waves-effect waves-light" data-action="build-request" style="width: 100%;"><i class="nopaque-icons left">K</i>Build</a> - </div> - <div class="col s12 l6" style="padding: 0 2.5px;"> - <a class="action-button btn disabled waves-effect waves-light" data-action="analyze" href="{{ url_for('corpora.analysis', corpus_id=corpus.id) }}" style="width: 100%;"><i class="material-icons left">search</i>Analyze</a> - </div> - {% endif %} - {% if current_user.is_following_corpus(corpus) %} - <div class="col s12 l6" style="padding: 5px 2.5px 0 2.5px;"> - <a class="action-button btn red waves-effect waves-light" data-action="unfollow-request" style="width: 100%;"><i class="material-icons left outlined">close</i>Unfollow Corpus</a> - </div> - {% endif %} -{% endset %} diff --git a/app/templates/corpora/corpus.html.j2 b/app/templates/corpora/corpus.html.j2 index 470274b5a72685fee94eea12b8d745d236e474e0..2e38b88d3948975e1ab018f6537671db708f4d9e 100644 --- a/app/templates/corpora/corpus.html.j2 +++ b/app/templates/corpora/corpus.html.j2 @@ -1,6 +1,5 @@ {% extends "base.html.j2" %} {% import "materialize/wtf.html.j2" as wtf %} -{% import "corpora/_corpus/action_buttons.html.j2" as action_buttons with context %} {% block main_attribs %} class="service-scheme" data-service="corpus-analysis"{% endblock main_attribs %} @@ -60,11 +59,18 @@ <div class="card-content"> <span class="card-title">Actions</span> <div class="row"> - {% if current_user == corpus.user or current_user.is_administrator() %} - {{ action_buttons.owner_admin }} - {% else %} - {{ action_buttons.follower }} - {% endif %} + <div class="col s12 l6" style="padding: 0 2.5px;"> + <a class="action-button btn disabled waves-effect waves-light" data-action="build-request" style="width: 100%;"><i class="nopaque-icons left">K</i>Build</a> + </div> + <div class="col s12 l6" style="padding: 0 2.5px;"> + <a class="action-button btn disabled waves-effect waves-light" data-action="analyze" href="{{ url_for('corpora.analysis', corpus_id=corpus.id) }}" style="width: 100%;"><i class="material-icons left">search</i>Analyze</a> + </div> + <div class="col s12 l6" style="padding: 5px 2.5px 0 2.5px;"> + <a class="btn waves-effect waves-light modal-trigger" href="#publishing-modal" style="width: 100%;"><i class="material-icons left">publish</i>Publishing</a> + </div> + <div class="col s12 l6" style="padding: 5px 2.5px 0 2.5px;"> + <a class="btn red waves-effect waves-light modal-trigger" href="#delete-modal" style="width: 100%;"><i class="material-icons left">delete</i>Delete</a> + </div> </div> {% if cfr.has_permission('MANAGE_FOLLOWERS') %} <span class="card-title">Social</span> @@ -82,45 +88,6 @@ </div> {% endif %} - {% if current_user != corpus.user %} - <div class="col s12"> - <div class="card"> - <div class="card-content"> - <span class="card-title" id="files">Corpus Owner</span> - <div class="row"> - <div class="col s12"> - <table> - <tr> - <td style="width:10%; margin-top:25px;"> - <img src="{{ url_for('users.user_avatar', user_id=corpus.user.id) }}" alt="user-image" class="circle responsive-img"> - </td> - <td></td> - <td> - <ul> - <li><b>{{ corpus.user.username }}</b></li> - {% if corpus.user.full_name %} - <li>{{ corpus.user.full_name }}</li> - {% endif %} - {% if corpus.user.show_email %} - <li></li><a href="mailto:{{ corpus.user.email }}">{{ corpus.user.email }}</a></li> - {% endif %} - </ul> - </td> - </tr> - </table> - <br> - <p></p> - {% if not current_user.is_following_corpus(corpus) and corpus.user.has_profile_privacy_setting('SHOW_EMAIL') %} - <a class="waves-effect waves-light btn-small" href="mailto:{{ corpus.user.email }}">Request Corpus</a> - {% endif %} - <a class="waves-effect waves-light btn-small" href="{{ url_for('users.user', user_id=corpus.user.id) }}">View profile</a> - </div> - </div> - </div> - </div> - </div> - {% endif %} - <div class="col s12"> <div class="card"> <div class="card-content"> diff --git a/app/templates/corpora/public_corpus.html.j2 b/app/templates/corpora/public_corpus.html.j2 index fb13c252844954d9ca478a4a53652fb66c64e6fb..6ace0f7a26d4b855d991e558eccc6a8dfd855350 100644 --- a/app/templates/corpora/public_corpus.html.j2 +++ b/app/templates/corpora/public_corpus.html.j2 @@ -12,7 +12,10 @@ <div class="col s12 l7"> <div class="card service-color-border border-darken" data-service="corpus-analysis" style="border-top: 10px solid"> <div class="card-content"> - <span class="chip corpus-status-text corpus-status-color white-text" data-status="{{ corpus.status.name }}"></span></p> + {% if corpus.status.name in ['SUBMITTED', 'QUEUED', 'BUILDING'] %} + <a class="btn-floating btn-small waves-effect waves-light" id="refresh-button"><i class="material-icons">refresh</i></a> + {% endif %} + <span class="chip corpus-status-text corpus-status-color white-text" data-status="{{ corpus.status.name }}"></span> <div class="row"> <div class="col s12"> @@ -48,7 +51,11 @@ <div class="row"> {% if cfr.has_permission('MANAGE_FILES') %} <div class="col s12 l6" style="padding: 0 2.5px;"> - <a class="action-button btn disabled waves-effect waves-light" data-action="build-request" style="width: 100%;"><i class="nopaque-icons left">K</i>Build</a> + {% if corpus.status.name in ['UNPREPARED', 'FAILED'] %} + <a class="btn waves-effect waves-light" id="follower-build-request" style="width: 100%;"><i class="nopaque-icons left">K</i>Build</a> + {% else %} + <a class="btn disabled waves-effect waves-light" id="follower-build-request" style="width: 100%;"><i class="nopaque-icons left">K</i>Build</a> + {% endif %} </div> <div class="col s12 l6" style="padding: 0 2.5px;"> {% if corpus.status.name in ['BUILT', 'STARTING_ANALYSIS_SESSION', 'RUNNING_ANALYSIS_SESSION', 'CANCELING_ANALYSIS_SESSION'] and current_user.is_following_corpus(corpus) %} @@ -136,7 +143,7 @@ <div class="card"> <div class="card-content"> <span class="card-title" id="corpus-followers">Corpus followers</span> - <div class="corpus-follower-list no-autoinit"></div> + <div class="corpus-follower-list no-autoinit" data-user-id="{{ corpus.user }}" data-corpus-id="{{ corpus.hashid }}"></div> </div> </div> </div> @@ -244,6 +251,13 @@ publicCorpusFileList.add( ] ); +{% if corpus.status.name in ['SUBMITTED', 'QUEUED', 'BUILDING'] %} +let refreshButton = document.querySelector('#refresh-button'); +refreshButton.addEventListener('click', () => { + window.location.reload(); +}); +{% endif %} + {% if cfr.has_permission('MANAGE_FOLLOWERS') %} let publicCorpusFollowerList = new CorpusFollowerList(document.querySelector('.corpus-follower-list')); publicCorpusFollowerList.add( @@ -255,6 +269,18 @@ publicCorpusFollowerList.add( ); {% endif %} +// #region Build Corpus Request +{% if cfr.has_permission('MANAGE_CORPUS') %} +let followerBuildRequest = document.querySelector('#follower-build-request'); +followerBuildRequest.addEventListener('click', () => { + Requests.corpora.entity.build({{ corpus.hashid|tojson }}) + .then((response) => { + window.location.reload(); + }); +}); +{% endif %} +// #endregion Build Corpus + // #region Corpus Unfollow Request {% if current_user.is_following_corpus(corpus) %} let unfollowRequestElement = document.querySelector('.action-button[data-action="unfollow-request"]'); @@ -309,7 +335,10 @@ M.Modal.init( inviteUserModalInviteButtonElement.addEventListener('click', (event) => { let usernames = inviteUserModalSearch.chipsData.map((chipData) => chipData.tag); - Requests.corpora.entity.followers.add({{ corpus.hashid|tojson }}, usernames); + Requests.corpora.entity.followers.add({{ corpus.hashid|tojson }}, usernames) + .then((response) => { + window.location.reload(); + }); }); // #endregion Invite user