diff --git a/scipost/static/scipost/update-conflict.js b/scipost/static/scipost/update-conflict.js new file mode 100644 index 0000000000000000000000000000000000000000..4e1b5671e3087e916796978b94b02cf354ebc900 --- /dev/null +++ b/scipost/static/scipost/update-conflict.js @@ -0,0 +1,51 @@ + function csrfSafeMethod(method) { + // these HTTP methods do not require CSRF protection + return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method)); + } + function getCookie(name) { + var cookieValue = null; + if (document.cookie && document.cookie !== '') { + var cookies = document.cookie.split(';'); + for (var i = 0; i < cookies.length; i++) { + var cookie = jQuery.trim(cookies[i]); + // Does this cookie string begin with the name we want? + if (cookie.substring(0, name.length + 1) === (name + '=')) { + cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); + break; + } + } + } + return cookieValue; + } + var csrftoken = getCookie('csrftoken'); + + function update_conflict(conflict_id, status, url) { + $.ajax({ + "method": "POST", + "url": url, + "data": { + 'status': status, + 'csrftoken': getCookie('csrftoken'), + }, + "beforeSend": function(xhr, settings) { + if (!csrfSafeMethod(settings.type) && !this.crossDomain) { + xhr.setRequestHeader("X-CSRFToken", csrftoken); + } + }, + }).done(function( data ) { + if ( data['status'] == 'verified' ) { + $("#conflict-" + data['id'] + " .status").html('<i class="fa-li fa fa-check-circle text-success" aria-hidden="true"></i> Verified by Admin'); + } else if ( data['status'] == 'deprecated' ) { + $("#conflict-" + data['id'] ).fadeTo("fast", 0.3).find('.status').html('<i class="fa-li fa fa-times-circle text-danger" aria-hidden="true"></i> <em>Deleted</em>'); + } + }); + } + + $(document).ready(function () { + $('.update-conflict-button').on('click', function() { + id = $(this).data('conflict-id'); + status = $(this).data('status'); + url = $(this).data('urllink'); + update_conflict(id, status, url); + }); + }); diff --git a/submissions/templates/partials/submissions/admin/conflicts.html b/submissions/templates/partials/submissions/admin/conflicts.html index 638cf8c92935bc196d25f5bf49202ee05746e9bd..51281f03783739f57f2c6462c1691b3d604d04d0 100644 --- a/submissions/templates/partials/submissions/admin/conflicts.html +++ b/submissions/templates/partials/submissions/admin/conflicts.html @@ -1,3 +1,5 @@ +{% load static %} + {% if conflicts %} {{ conflicts|length }} (potential) conflict{{ conflicts|length|pluralize }} found: <ul class="fa-ul mt-2"> @@ -7,10 +9,9 @@ {% if conflict.status == 'unverified' %} <i class="fa-li fa fa-question-circle text-warning" aria-hidden="true"></i> Please - <button type="button" class="btn btn-link p-0" onclick="update_conflict({{ conflict.id }}, 'verified')">verify</button> + <button type="button" class="btn btn-link p-0 update-conflict-button" data-conflict-id="{{ conflict.id }}" data-status="verified" data-urllink="{% url 'api:conflictofinterest-verify_conflict' conflict.id %}">confirm</button> or - <button type="button" class="btn btn-link p-0 text-danger" onclick="update_conflict({{ conflict.id }}, 'delete')">delete</button> - + <button type="button" class="btn btn-link p-0 text-danger update-conflict-button" data-conflict-id="{{ conflict.id }}" data-status="delete" data-urllink="{% url 'api:conflictofinterest-verify_conflict' conflict.id %}">delete</button> this conflict. {% elif conflict.status == 'verified' %} <i class="fa-li fa fa-check-circle text-success" aria-hidden="true"></i> @@ -40,49 +41,5 @@ {% block footer_script %} - <script type="text/javascript" nonce="{{ request.csp_nonce }}"> - function csrfSafeMethod(method) { - // these HTTP methods do not require CSRF protection - return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method)); - } - function getCookie(name) { - var cookieValue = null; - if (document.cookie && document.cookie !== '') { - var cookies = document.cookie.split(';'); - for (var i = 0; i < cookies.length; i++) { - var cookie = jQuery.trim(cookies[i]); - // Does this cookie string begin with the name we want? - if (cookie.substring(0, name.length + 1) === (name + '=')) { - cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); - break; - } - } - } - return cookieValue; - } - var csrftoken = getCookie('csrftoken'); - - function update_conflict(conflict_id, status) { - $.ajax({ - "method": "POST", - "url": "{% url 'api:conflictofinterest-verify_conflict' 0 %}".replace("0", conflict_id), - "data": { - 'status': status, - 'csrftoken': getCookie('csrftoken'), - }, - "beforeSend": function(xhr, settings) { - if (!csrfSafeMethod(settings.type) && !this.crossDomain) { - xhr.setRequestHeader("X-CSRFToken", csrftoken); - } - }, - }).done(function( data ) { - if ( data['status'] == 'verified' ) { - $("#conflict-" + data['id'] + " .status").html('<i class="fa-li fa fa-check-circle text-success" aria-hidden="true"></i> Verified by Admin'); - } else if ( data['status'] == 'deprecated' ) { - $("#conflict-" + data['id'] ).fadeTo("fast", 0.3).find('.status').html('<i class="fa-li fa fa-times-circle text-danger" aria-hidden="true"></i> <em>Deleted</em>'); - } - }); - } - - </script> + <script src="{% static 'scipost/update-conflict.js' %}"></script> {% endblock %}