From 95a84f971ee4e9f23c44bb9a7f0a9698af6b989e Mon Sep 17 00:00:00 2001 From: Jorran de Wit <jorrandewit@outlook.com> Date: Sat, 21 Oct 2017 14:33:21 +0200 Subject: [PATCH] New pool structure --- .../scipost/assets/css/_list_group.scss | 22 --- scipost/static/scipost/assets/css/_pool.scss | 53 ++----- scipost/static/scipost/assets/js/scripts.js | 15 +- submissions/forms.py | 6 + submissions/managers.py | 8 +- submissions/models.py | 11 ++ .../submissions/pool/submission_details.html | 150 +++++++++--------- .../submissions/pool/submission_li.html | 76 +++++---- .../submissions/pool/submissions_list.html | 22 +++ .../templates/submissions/pool/pool.html | 37 ++--- submissions/views.py | 4 +- 11 files changed, 211 insertions(+), 193 deletions(-) create mode 100644 submissions/templates/partials/submissions/pool/submissions_list.html diff --git a/scipost/static/scipost/assets/css/_list_group.scss b/scipost/static/scipost/assets/css/_list_group.scss index 84f3c2448..4755ec289 100644 --- a/scipost/static/scipost/assets/css/_list_group.scss +++ b/scipost/static/scipost/assets/css/_list_group.scss @@ -23,25 +23,3 @@ ul.events-list { } } } - -ul[data-target="active-list"] { - li.active { - // background-color: $gray-100; - } -} - -.pool-list { - > .submission { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin-bottom: -1px; - - &.active { - border: 1px solid #000; - margin-bottom: 0; - } - } - // > .submission:first-child { - // border-top: 0; - // } -} diff --git a/scipost/static/scipost/assets/css/_pool.scss b/scipost/static/scipost/assets/css/_pool.scss index 89631f3af..74a013d68 100644 --- a/scipost/static/scipost/assets/css/_pool.scss +++ b/scipost/static/scipost/assets/css/_pool.scss @@ -1,46 +1,27 @@ -$pool-icons-width: 40px; -$pool-flex-width: calc(100% - 40px); +.pool-list { + > .submission { + border: 1px solid #ddd; + margin-bottom: 2px; + padding-left: 3rem; + padding-right: 3rem; + position: relative; - -.editorial-admin, -.pool { - .pool-item { .icons { - padding-left: 10px; - padding-right: 10px; - position: relative; - min-height: 1px; - flex: 0 0 $pool-icons-width; - max-width: $pool-icons-width; - } - - .item { - flex: 0 0 $pool-flex-width; - width: $pool-flex-width; - max-width: none; + max-width: 3rem; + width: 3rem; + position: absolute; + left: 0; + top: 0; + padding: 0.75rem 0.5rem; + text-align: center; } - } - .card.submission-detail { - position: -webkit-sticky; - position: -moz-sticky; - position: -ms-sticky; - position: -o-sticky; - position: sticky; - top: 15px; - // top: 0; - // padding-top: 15px; - // padding-bottom: 15px; - // overflow: scroll; - // max-height: 100vh; - - > .scroll { - top: 0; - position: relative; + &.active { + border-color: $scipost-darkblue; } } - #details .loading { + .loading { position: sticky; top: 15px; padding: 5rem 0 3rem 0; diff --git a/scipost/static/scipost/assets/js/scripts.js b/scipost/static/scipost/assets/js/scripts.js index 35883ec42..d3478c721 100644 --- a/scipost/static/scipost/assets/js/scripts.js +++ b/scipost/static/scipost/assets/js/scripts.js @@ -28,7 +28,6 @@ var getUrlParameter = function getUrlParameter(sParam) { }; function init_page() { - console.log('init!') // Show right tab if url contains `tab` GET request var tab = getUrlParameter('tab') if (tab) { @@ -45,6 +44,14 @@ function init_page() { $($(this).attr('data-target')).toggle(); }); + // Make links that could possibly hide html blocks + $('[data-toggle="hide"]').on('click', function() { + $($(this).attr('data-target')) + .hide() + .parents('.active') + .removeClass('active'); + }); + activate_tooltip(); } @@ -66,12 +73,12 @@ $(function(){ var self = this, url = $(this).attr('href'), target = $(this).attr('data-target'); - // console.log('click', url, target); - $(target).html('<div class="loading"><i class="fa fa-circle-o-notch fa-spin fa-3x fa-fw"></i></div>'); + $(target) + .show() + .html('<div class="loading"><i class="fa fa-circle-o-notch fa-spin fa-3x fa-fw"></i></div>'); $.get(url + '?json=1').done(function(data) { - // console.log('done', data); $(target).html(data).promise().done(function() { init_page(); }); diff --git a/submissions/forms.py b/submissions/forms.py index 3563a8307..57002b091 100644 --- a/submissions/forms.py +++ b/submissions/forms.py @@ -63,6 +63,12 @@ class SubmissionPoolFilterForm(forms.Form): return queryset.order_by('-submission_date') + def status_verbose(self): + try: + return dict(SUBMISSION_STATUS)[self.cleaned_data['status']] + except KeyError: + return '' + ############################### # Submission and resubmission # diff --git a/submissions/managers.py b/submissions/managers.py index 73d324515..de379255b 100644 --- a/submissions/managers.py +++ b/submissions/managers.py @@ -14,7 +14,7 @@ from .constants import SUBMISSION_STATUS_OUT_OF_POOL, SUBMISSION_STATUS_PUBLICLY EVENT_FOR_EIC, EVENT_GENERAL, EVENT_FOR_AUTHOR,\ STATUS_UNASSIGNED, STATUS_ASSIGNMENT_FAILED, STATUS_WITHDRAWN,\ STATUS_PUT_TO_EC_VOTING, STATUS_VOTING_IN_PREPARATION,\ - SUBMISSION_STATUS_VOTING_DEPRECATED + SUBMISSION_STATUS_VOTING_DEPRECATED, STATUS_REVISION_REQUESTED class SubmissionQuerySet(models.QuerySet): @@ -122,7 +122,8 @@ class SubmissionQuerySet(models.QuerySet): """ return (self.exclude(is_current=False) .exclude(status__in=SUBMISSION_STATUS_OUT_OF_POOL) - .exclude(status__in=[STATUS_UNASSIGNED, STATUS_ACCEPTED])) + .exclude(status__in=[STATUS_UNASSIGNED, STATUS_ACCEPTED, + STATUS_REVISION_REQUESTED])) def public(self): """ @@ -169,6 +170,9 @@ class SubmissionQuerySet(models.QuerySet): def accepted(self): return self.filter(status=STATUS_ACCEPTED) + def revision_requested(self): + return self.filter(status=STATUS_REVISION_REQUESTED) + def published(self): return self.filter(status=STATUS_PUBLISHED) diff --git a/submissions/models.py b/submissions/models.py index a81fdd788..88d79529f 100644 --- a/submissions/models.py +++ b/submissions/models.py @@ -172,14 +172,25 @@ class Submission(models.Model): def reporting_deadline_has_passed(self): return timezone.now() > self.reporting_deadline + @property + def original_submission_date(self): + return Submission.objects.filter( + arxiv_identifier_wo_vn_nr=self.arxiv_identifier_wo_vn_nr).first().submission_date + @cached_property def other_versions(self): + """ + Return all other versions of the Submission that are publicly accessible. + """ return Submission.objects.public().filter( arxiv_identifier_wo_vn_nr=self.arxiv_identifier_wo_vn_nr ).exclude(pk=self.id).order_by('-arxiv_vn_nr') @cached_property def other_versions_pool(self): + """ + Return all other versions of the Submission. + """ return Submission.objects.filter( arxiv_identifier_wo_vn_nr=self.arxiv_identifier_wo_vn_nr ).exclude(pk=self.id).order_by('-arxiv_vn_nr') diff --git a/submissions/templates/partials/submissions/pool/submission_details.html b/submissions/templates/partials/submissions/pool/submission_details.html index 8d0905391..28140d192 100644 --- a/submissions/templates/partials/submissions/pool/submission_details.html +++ b/submissions/templates/partials/submissions/pool/submission_details.html @@ -8,86 +8,92 @@ <hr> <div class="bg-white submission-detail mt-1"> - {# <div class="scroll">#} - {% include 'submissions/_submission_card_fellow_content.html' with submission=submission hide_title=1 cardblock_class='px-0 pt-0' %} + <div class="text-center mb-1"> + <a href="javascript:;" class="d-inline-block px-3" data-toggle="hide" data-target="#container_{{ submission.id }}">Hide details <i class="fa fa-angle-up text-blue" aria-hidden="true"></i></a> + </div> - <div> - <h3>Remarks on this submission:</h3> - {% if remark_form %} - {% include 'submissions/_remark_add_form.html' with submission=submission form=remark_form auto_show=1 %} - {% endif %} - <p class="mb-1">Current remarks:</p> - <ul> - {% for rem in submission.remarks.all %} - {% include 'scipost/_remark_li.html' with remark=rem %} - {% empty %} - <li>No Remarks found.</li> - {% endfor %} - </ul> + {% include 'submissions/_submission_card_fellow_content.html' with submission=submission hide_title=1 cardblock_class='px-0 pt-0' %} + + <div> + <h3>Remarks on this submission:</h3> + {% if remark_form %} + {% include 'submissions/_remark_add_form.html' with submission=submission form=remark_form auto_show=1 %} + {% endif %} + <p class="mb-1">Current remarks:</p> + <ul> + {% for rem in submission.remarks.all %} + {% include 'scipost/_remark_li.html' with remark=rem %} + {% empty %} + <li>No Remarks found.</li> + {% endfor %} + </ul> - {% if is_editor_in_charge or is_editorial_admin %} - <br> - {% include 'submissions/_required_actions_block.html' with submission=submission %} - <h4> - <a href="{% url 'submissions:editorial_page' submission.arxiv_identifier_w_vn_nr %}">Go to this Submission's Editorial Page</a> - </h4> - {% endif %} + {% if is_editor_in_charge or is_editorial_admin %} + <br> + {% include 'submissions/_required_actions_block.html' with submission=submission %} + <h4> + <a href="{% url 'submissions:editorial_page' submission.arxiv_identifier_w_vn_nr %}">Go to this Submission's Editorial Page</a> + </h4> + {% endif %} - {% if is_editorial_admin %} - <h3>Editorial Administration</h3> - <ul class="pl-4 mb-3"> - {# EIC Assignments #} - {% if perms.scipost.can_assign_submissions %} - <li>EIC Assignment requests:</li> - <ul class="pl-3"> - {% for assignment in submission.editorial_assignments.all %} - {% include 'submissions/_assignment_info.html' with assignment=assignment %} - {% empty %} - <li>No assignment requests have been sent</li> - {% endfor %} + {% if is_editorial_admin %} + <h3>Editorial Administration</h3> + <ul class="pl-4 mb-3"> + {# EIC Assignments #} + {% if perms.scipost.can_assign_submissions %} + <li>EIC Assignment requests:</li> + <ul class="pl-3"> + {% for assignment in submission.editorial_assignments.all %} + {% include 'submissions/_assignment_info.html' with assignment=assignment %} + {% empty %} + <li>No assignment requests have been sent</li> + {% endfor %} - {% if not submission.editor_in_charge %} - <li><a href="{% url 'submissions:assign_submission' submission.arxiv_identifier_w_vn_nr %}">Send a new assignment request</a></li> - <li><a href="{% url 'submissions:assignment_failed' submission.arxiv_identifier_w_vn_nr %}">Close pre-screening: failure to find EIC</a></li> - {% endif %} - </ul> - {% endif %} + {% if not submission.editor_in_charge %} + <li><a href="{% url 'submissions:assign_submission' submission.arxiv_identifier_w_vn_nr %}">Send a new assignment request</a></li> + <li><a href="{% url 'submissions:assignment_failed' submission.arxiv_identifier_w_vn_nr %}">Close pre-screening: failure to find EIC</a></li> + {% endif %} + </ul> + {% endif %} - {# Plagiarism #} - <li><a href="{% url 'submissions:plagiarism' submission.arxiv_identifier_w_vn_nr %}">Manage plagiarism report</a></li> + {# Plagiarism #} + <li><a href="{% url 'submissions:plagiarism' submission.arxiv_identifier_w_vn_nr %}">Manage plagiarism report</a></li> - {# Compile pdfs #} - {% if submission.reports.accepted.exists %} - <li><a href="{% url 'submissions:reports_accepted_list' %}?submission={{submission.arxiv_identifier_w_vn_nr}}">Compile accepted reports</a></li> - {% endif %} + {# Compile pdfs #} + {% if submission.reports.accepted.exists %} + <li><a href="{% url 'submissions:reports_accepted_list' %}?submission={{submission.arxiv_identifier_w_vn_nr}}">Compile accepted reports</a></li> + {% endif %} - {# Communication #} - {% if submission.editor_in_charge %} - <li><a href="{% url 'submissions:communication' arxiv_identifier_w_vn_nr=submission.arxiv_identifier_w_vn_nr comtype='StoE' %}">Send a communication to the Editor-in-charge</a></li> - {% endif %} + {# Communication #} + {% if submission.editor_in_charge %} + <li><a href="{% url 'submissions:communication' arxiv_identifier_w_vn_nr=submission.arxiv_identifier_w_vn_nr comtype='StoE' %}">Send a communication to the Editor-in-charge</a></li> + {% endif %} - {# EIC Recommendations #} - {% if submission.eicrecommendations.exists %} - <li>See Editorial Recommendations:</li> - <ul class="pl-3"> - {% for rec in submission.eicrecommendations.all %} - <li><a href="{% url 'submissions:eic_recommendation_detail' arxiv_identifier_w_vn_nr=submission.arxiv_identifier_w_vn_nr rec_id=rec.id %}">{{rec.get_recommendation_display}}</a></li> - {% endfor %} - </ul> - {% endif %} + {# EIC Recommendations #} + {% if submission.eicrecommendations.exists %} + <li>See Editorial Recommendations:</li> + <ul class="pl-3"> + {% for rec in submission.eicrecommendations.all %} + <li><a href="{% url 'submissions:eic_recommendation_detail' arxiv_identifier_w_vn_nr=submission.arxiv_identifier_w_vn_nr rec_id=rec.id %}">{{rec.get_recommendation_display}}</a></li> + {% endfor %} + </ul> + {% endif %} + + {# Accepted submission actions #} + {% if submission.status == 'accepted' %} + <li><a href="{% url 'submissions:treated_submission_pdf_compile' submission.arxiv_identifier_w_vn_nr %}">Update the Refereeing Package pdf</a></li> + <li>After proofs have been accepted, you can <a href="{% url 'journals:initiate_publication' %}">initiate the publication process</a> (leads to the validation page)</li> + {% endif %} + </ul> - {# Accepted submission actions #} - {% if submission.status == 'accepted' %} - <li><a href="{% url 'submissions:treated_submission_pdf_compile' submission.arxiv_identifier_w_vn_nr %}">Update the Refereeing Package pdf</a></li> - <li>After proofs have been accepted, you can <a href="{% url 'journals:initiate_publication' %}">initiate the publication process</a> (leads to the validation page)</li> - {% endif %} - </ul> + <h3>Events</h3> + <div id="eventslist"> + {% include 'submissions/submission_event_list.html' with events=submission.events.for_eic %} + </div> + {% endif %} + </div> - <h3>Events</h3> - <div id="eventslist"> - {% include 'submissions/submission_event_list.html' with events=submission.events.for_eic %} - </div> - {% endif %} - </div> - {# </div>#} + <div class="text-center mb-1"> + <a href="javascript:;" class="d-inline-block px-3" data-toggle="hide" data-target="#container_{{ submission.id }}">Hide details <i class="fa fa-angle-up text-blue" aria-hidden="true"></i></a> + </div> </div> diff --git a/submissions/templates/partials/submissions/pool/submission_li.html b/submissions/templates/partials/submissions/pool/submission_li.html index 46b7c5ad2..fdd985470 100644 --- a/submissions/templates/partials/submissions/pool/submission_li.html +++ b/submissions/templates/partials/submissions/pool/submission_li.html @@ -1,44 +1,52 @@ -<div class="row pool-item mb-0 px-3"> - <div class="icons{% if is_current %} text-info{% endif %}"> - {% include 'partials/submissions/pool/submission_tooltip.html' with submission=submission %} +<div class="icons"> + {% include 'partials/submissions/pool/submission_tooltip.html' with submission=submission %} - {% if submission.status == 'unassigned' %} - <i class="fa fa-exclamation mt-1 px-1 text-danger" data-toggle="tooltip" data-html="true" title="You can volunteer to become Editor-in-charge"></i> - {% endif %} - </div> - <div class="item col-auto"> - <p class="mb-1"> - <a href="{% url 'submissions:pool' submission.arxiv_identifier_w_vn_nr %}">{{ submission.title }}</a><br> - <em>by {{ submission.author_list }}</em> - </p> + {% if submission.status == 'unassigned' %} + <i class="fa fa-exclamation mt-1 px-1 text-danger" data-toggle="tooltip" data-html="true" title="You can volunteer to become Editor-in-charge"></i> + {% endif %} +</div> +<div class="pool-item"> + <p class="mb-1"> + <a href="{% url 'submissions:pool' submission.arxiv_identifier_w_vn_nr %}">{{ submission.title }}</a><br> + <em>by {{ submission.author_list }}</em> + </p> - <div class="row mb-0"> - <div class="col-5"> - {% if submission.status == 'unassigned' %} - <span class="card-text text-danger">You can volunteer to become Editor-in-charge by <a href="{% url 'submissions:volunteer_as_EIC' submission.arxiv_identifier_w_vn_nr %}">clicking here</a>.</span> - {% elif submission.editor_in_charge == request.user.contributor %} - <strong>You are Editor-in-charge</strong> - {% else %} - <span class="text-muted">Editor-in-charge:</span> {{ submission.editor_in_charge }} - {% endif %} - </div> - <div class="col-7"> - <span class="label label-sm label-secondary">{{ submission.get_status_display }}</span> - </div> + <div class="row mb-0"> + <div class="col-3"> + <small class="text-muted">Editor-in-charge</small> + <br> + {% if submission.status == 'unassigned' %} + <span class="card-text text-danger">You can volunteer to become Editor-in-charge by <a href="{% url 'submissions:volunteer_as_EIC' submission.arxiv_identifier_w_vn_nr %}">clicking here</a>.</span> + {% elif submission.editor_in_charge == request.user.contributor %} + <strong>You are Editor-in-charge</strong> + {% else %} + {{ submission.editor_in_charge }} + {% endif %} </div> - - <div class="card-text"> + <div class="col-2"> + <small class="text-muted">Actions</small> + <br> <a href="{% url 'submissions:pool' submission.arxiv_identifier_w_vn_nr %}" data-toggle="dynamic" data-target="#container_{{ submission.id }}">See details</a> {% if submission.editor_in_charge == request.user.contributor %} - · <a href="{% url 'submissions:editorial_page' submission.arxiv_identifier_w_vn_nr %}">Go directly to editorial page</a> + · <a href="{% url 'submissions:editorial_page' submission.arxiv_identifier_w_vn_nr %}">Editorial page</a> {% endif %} </div> + <div class="col-2"> + <small class="text-muted">Original Submission date</small> + <br> + {{ submission.original_submission_date }} + </div> + <div class="col-5"> + <small class="text-muted">Status</small> + <br> + <span class="label label-sm label-secondary">{{ submission.get_status_display }}</span> + </div> + </div> - {% if submission.cycle.has_required_actions and submission.cycle.get_required_actions %} - <div class="card-text bg-danger text-white mt-1 py-1 px-2"> - This Submission contains required actions, <a href="{% url 'submissions:pool' submission.arxiv_identifier_w_vn_nr %}" class="text-white" data-toggle="dynamic" data-target="#container_{{ submission.id }}">click to see details.</a> {% include 'partials/submissions/pool/required_actions_tooltip.html' with submission=submission classes='text-white' %} - </div> - {% endif %} + {% if submission.cycle.has_required_actions and submission.cycle.get_required_actions %} + <div class="card-text bg-danger text-white mt-1 py-1 px-2"> + This Submission contains required actions, <a href="{% url 'submissions:pool' submission.arxiv_identifier_w_vn_nr %}" class="text-white" data-toggle="dynamic" data-target="#container_{{ submission.id }}">click to see details.</a> {% include 'partials/submissions/pool/required_actions_tooltip.html' with submission=submission classes='text-white' %} + </div> + {% endif %} - </div> </div> diff --git a/submissions/templates/partials/submissions/pool/submissions_list.html b/submissions/templates/partials/submissions/pool/submissions_list.html new file mode 100644 index 000000000..9ea81ede0 --- /dev/null +++ b/submissions/templates/partials/submissions/pool/submissions_list.html @@ -0,0 +1,22 @@ +<ul class="list-unstyled pool-list mt-2" data-target="active-list"> + <!-- Submissions list --> + {% for sub in submissions %} + <li class="submission py-2{% if sub == submission %} active{% endif %}" id="submission_{{ submission.id }}"> + {% if sub == submission %} + {% include 'partials/submissions/pool/submission_li.html' with submission=sub is_current=1 %} + {% else %} + {% include 'partials/submissions/pool/submission_li.html' with submission=sub is_current=0 %} + {% endif %} + + <div class="loading-container" id="container_{{ sub.id }}"> + {% if submission and submission == sub %} + {% include 'partials/submissions/pool/submission_details.html' with submission=submission remark_form=remark_form is_ECAdmin=is_ECAdmin user=request.user %} + {% endif %} + </div> + </li> + {% empty %} + <li> + <h3 class="text-center"><i class="fa fa-question fa-2x"></i><br>No Submissions found.</h3> + </li> + {% endfor %} +</ul> diff --git a/submissions/templates/submissions/pool/pool.html b/submissions/templates/submissions/pool/pool.html index 47d824adf..d7e0c9b4a 100644 --- a/submissions/templates/submissions/pool/pool.html +++ b/submissions/templates/submissions/pool/pool.html @@ -89,28 +89,23 @@ </form> {% endif %} - <ul class="list-unstyled pool-list" data-target="active-list"> - <!-- Submissions list --> - {% for sub in submissions %} - <li class="submission py-2 px-3{% if sub == submission %} active{% endif %}" id="submission_{{ submission.id }}"> - {% if sub == submission %} - {% include 'partials/submissions/pool/submission_li.html' with submission=sub is_current=1 %} - {% else %} - {% include 'partials/submissions/pool/submission_li.html' with submission=sub is_current=0 %} - {% endif %} + {% if search_form.status.value %} + <h3>All Submissions with status: <span class="text-primary">{{ search_form.status_verbose }}</span></h3> + {% include 'partials/submissions/pool/submissions_list.html' with submissions=submissions %} + {% else %} + <h3>Submissions currently in pre-screening</h3> + {% include 'partials/submissions/pool/submissions_list.html' with submissions=submissions.prescreening %} + + <h3>Submissions currently in active refereeing phase</h3> + {% include 'partials/submissions/pool/submissions_list.html' with submissions=submissions.actively_refereeing %} + + <h3>Submissions awaiting resubmission</h3> + {% include 'partials/submissions/pool/submissions_list.html' with submissions=submissions.revision_requested %} + + <h3>Submissions accepted</h3> + {% include 'partials/submissions/pool/submissions_list.html' with submissions=submissions.accepted %} + {% endif %} - <div class="loading-container px-3" id="container_{{ sub.id }}"> - {% if submission and submission == sub %} - {% include 'partials/submissions/pool/submission_details.html' with submission=submission remark_form=remark_form is_ECAdmin=is_ECAdmin user=request.user %} - {% endif %} - </div> - </li> - {% empty %} - <li> - <h3 class="text-center"><i class="fa fa-question fa-2x"></i><br>No Submissions found.</h3> - </li> - {% endfor %} - </ul> </div><!-- End page content --> </div> {% endblock %} diff --git a/submissions/views.py b/submissions/views.py index 4ccb27938..f0492ddd8 100644 --- a/submissions/views.py +++ b/submissions/views.py @@ -361,7 +361,7 @@ def pool(request, arxiv_identifier_w_vn_nr=None): remark_form = RemarkForm() context = { - 'submissions': submissions, + 'submissions': submissions.order_by('status', '-submission_date'), 'search_form': search_form, 'submission_status': SUBMISSION_STATUS, 'recommendations': recommendations, @@ -379,7 +379,7 @@ def pool(request, arxiv_identifier_w_vn_nr=None): context['submission'] = None if arxiv_identifier_w_vn_nr: try: - context['submission'] = context['submissions'].get( + context['submission'] = Submission.objects.pool_full(request.user).get( arxiv_identifier_w_vn_nr=arxiv_identifier_w_vn_nr) except Submission.DoesNotExist: pass -- GitLab