{% extends "base.html" %} {% import "entity_macros.html" as entity_macros %} {% macro entity_edit_header(auth_to, editgroup, edit, entity_type, entity_name) -%} <div style="float: right; font-weight: bold;"> <a href="/editgroup/{{ editgroup.editgroup_id }}/{{ entity_type }}/{{ edit.ident }}">[view]</a> <a href="/editgroup/{{ editgroup.editgroup_id }}/diff#{{ entity_type }}_{{ edit.ident }}">[diff]</a> {% if auth_to.edit and not editgroup.changelog_index and not editgroup.submitted %} {% if edit.revision or edit.redirect_ident %} {# show re-edit, unless this is a "deleted" edit #} <br><a href="/editgroup/{{ editgroup.editgroup_id }}/{{ entity_type }}/{{ edit.ident }}/edit" style="color: green;">[re-edit]</a> {% endif %} <br> <form id="submit_edit_delete" method="POST" action="/editgroup/{{ editgroup.editgroup_id }}/{{ entity_type }}/edit/{{ edit.edit_id }}/delete" style="display:inline;"> <input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/> <input type="submit" value="[delete]" style="background:none; color: red; border: none; font-weight:bold; cursor:pointer; padding: 0;"></input> </form> {% endif %} </div> <div class="header"> <a href="/{{ entity_type }}/{{ edit.ident }}">{{ entity_type }}_{{ edit.ident }}</a> {% if edit.redirect_ident %} => redirect to <a href="/{{ entity_type }}/{{ edit.redirect_ident }}">{{ entity_type }}/{{ edit.redirect_ident }}</a> {% elif not edit.revision %} deleted {% elif not edit.prev_revision %} created {% else %} updated {% endif %} </div> {% if edit.revision %} Revision: <small><code><a href="/{{ entity_type }}/rev/{{ edit.revision }}">{{ edit.revision }}</a></code></small> {% endif %} {%- endmacro %} {% macro edit_list(auth_to, editgroup, edits, entity_type, entity_name) -%} <div class="{% if edits %}active{% endif %} title"> <h3><i class="dropdown icon"></i>{{ entity_name }} Edits ({{ edits|count }})</h3> </div><div class="{% if edits %}active{% endif %} content" style="padding-bottom: 0.5em;"> <div class="ui divided list"> {% for edit in edits %} <div class="item" id="{{ entity_type }}_{{ edit.ident }}"> <div class="content" style="padding-bottom: 0.5em;"> {{ entity_edit_header(auth_to, editgroup, edit, entity_type, entity_name) }} {% if edit.extra %} {{ entity_macros.extra_metadata(edit.extra) }} {% endif %} </div> </div> {% endfor %} </div> </div> {%- endmacro %} {% block title %}Editgroup{% endblock %} {% block body %} {# extended by changelog_entry #} {% block editgroupheader %} <h1 class="ui header">{% block pagetitle %}Editgroup{% endblock %} <span class="sub header"><code>editgroup_{{ editgroup.editgroup_id }}</code></span></h1> {% if not auth_to.submit %} <div class="ui info small message"> <div class="header"> What is an editgroup? </div> <p>An editgroup is a set of entity edits, bundled together into a coherent, reviewable bundle. </div> {% endif %} <div class="ui three top attached ordered steps"> {% if editgroup.changelog_index %} {% set editing_status = "completed" %} {% set submit_status = "completed" %} {% set accept_status = "completed" %} {% elif editgroup.submitted %} {% set editing_status = "completed" %} {% set submit_status = "completed" %} {% set accept_status = "active" %} {% else %} {% set editing_status = "completed" %} {% set submit_status = "active" %} {% set accept_status = "" %} {% endif %} <div class="{{ editing_status }} step"> <div class="content"> <div class="title"> {% if not editgroup.changelog_index and auth_to.submit and editgroup.submitted %} <form id="submit_editgroup_form" method="POST" action="/editgroup/{{ editgroup.editgroup_id }}/unsubmit"> <input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/> <button class="ui primary compact small button" type="submit">Edit</button> </form> {% else %} Edit {% endif %} </div> <div class="description">Make changes to entities</div> </div> </div> <div class="{{ submit_status }} step"> <div class="content"> <div class="title"> {% if not editgroup.changelog_index and auth_to.submit and not editgroup.submitted %} <form id="submit_editgroup_form" method="POST" action="/editgroup/{{ editgroup.editgroup_id }}/submit"> <input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/> <button class="ui primary compact small button" type="submit">Submit</button> </form> {% else %} Submitted {% endif %} </div> <div class="description">For review and feedback from others</div> </div> </div> <div class="{{ accept_status }} step"> <div class="content"> <div class="title"> {% if not editgroup.changelog_index and auth_to.accept %} <form id="submit_editgroup_form" method="POST" action="/editgroup/{{ editgroup.editgroup_id }}/accept"> <input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/> <button class="ui primary compact small button" type="submit">Accept</button> </form> {% else %} Accepted {% endif %} </div> <div class="description">Changes added to catalog</div> </div> </div> </div> {% endblock %} <table class="ui fixed compact small definition table"> <tbody> <tr> <td class="three wide right aligned">Status</td> <td class="seven wide"> {% if editgroup.changelog_index %} Merged (<a href="/changelog/{{ editgroup.changelog_index }}">Changelog #{{ editgroup.changelog_index }}</a>) {% elif editgroup.submitted %} Submitted ({{ editgroup.submitted.strftime("%Y-%m-%d %H:%M:%S") }}) {% else %} Not Submitted {% endif %} </td> </tr> <tr> <td class="right aligned">Editor</td> <td> <a href="/editor/{{editgroup.editor_id}}">{{ editgroup.editor.username }}</a> </td> </tr> <tr> <td class="right aligned">Description</td> <td> {% if editgroup.description %} {{ editgroup.description }} {% else %} <i>none</i> {% endif %} </td> </tr> </tbody></table> {% if editgroup.extra %} <h4>Extra Metadata (raw JSON)</h4> {{ entity_macros.extra_metadata(editgroup.extra) }} {% endif %} {% block editgroupedits %} <h3 class="ui header">All Entity Changes</h3> <div class="ui styled fluid accordion"> {{ edit_list(auth_to, editgroup, editgroup.edits.releases, "release", "Release") }} {{ edit_list(auth_to, editgroup, editgroup.edits.works, "work", "Work") }} {{ edit_list(auth_to, editgroup, editgroup.edits.containers, "container", "Container") }} {{ edit_list(auth_to, editgroup, editgroup.edits.creators, "creator", "Creator") }} {{ edit_list(auth_to, editgroup, editgroup.edits.files, "file", "File") }} {{ edit_list(auth_to, editgroup, editgroup.edits.filesets, "fileset", "File Set") }} {{ edit_list(auth_to, editgroup, editgroup.edits.webcaptures, "webcapture", "Web Capture") }} </div> <div style="float: right; font-size: smaller;"> <a href="{{ config.FATCAT_PUBLIC_API_HOST }}/editgroup/{{ editgroup.editgroup_id }}">As JSON via API</a> </div> {% endblock %} <br> {% block editgroupannotations %} <h3 class="ui header">Comments and Annotations</h3> {% for annotation in editgroup.annotations|reverse %} <div class="ui segments"> <div class="ui top attached secondary segment"> {% if annotation.editor.is_bot %} <i class="icon server"></i> {% else %} <i class="icon user"></i> {% endif %} <b><a href="/editor/{{ annotation.editor_id }}">{{ annotation.editor.username}}</a></b> {% if annotation.editor.is_admin %} <span class="ui tiny olive label">Admin</span> {% endif %} at {{ annotation.created.strftime("%Y-%m-%d %H:%M:%S") }} {# TODO: get individual editgroup annotation not supported yet (<a href="{% if config.FATCAT_DOMAIN == 'dev.fatcat.wiki' %}http://localhost:9411{% else %}https://api.{{ config.FATCAT_DOMAIN }}{% endif %}/v0/editgroup/{{ annotation.editgroup_id }}/annotation/{{ annotation.annotation_id }}">as JSON</a>) #} {% if annotation.extra and annotation.extra.disposition %} {% set disp = annotation.extra.disposition %} <span class="ui small {% if disp == "accept" %}green{% elif disp == "reject" %}red{% else %}orange{%endif %} label" style="float: right;">{{ annotation.extra.disposition|capitalize }}</span> {% endif %} </div> {% if annotation.extra %} <div class="ui attached tertiary segment accordion" style="padding-top: 0.2em; padding-bottom: 0.2em;"> <div class="title"> <i class="dropdown icon"></i>Review Metadata (raw JSON) </div> <div class="content" style="padding-bottom: 0.5em;"> {{ entity_macros.extra_metadata(annotation.extra) }} </div> </div> {% endif %} <div class="ui bottom attached segment"> {{ annotation.comment_markdown|markdown(escape=True) }} </div> </div> {% else %} <i>None!</i> {% endfor %} {% if not editgroup.changelog_index and auth_to.annotate %} <div class="ui segment"> <h3 class="ui header">Add Comment</h3> <form class="ui form" id="submit_editgroup_annotation_form" method="POST" action="/editgroup/{{ editgroup.editgroup_id }}/annotation"> <input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/> <div class="field"> <textarea rows="2" name="comment_markdown" required type="text" value=""></textarea> </div> <i>Markdown is allowed</i> <button class="ui right floated primary button"> <i class="icon edit"></i> Post </button> <br> </form><br> </div> {% endif %} {% endblock %} {% endblock %} {% block postscript %} <script> $('.ui.accordion') .accordion({ exclusive: false }); </script> {% endblock %}