aboutsummaryrefslogtreecommitdiffstats
path: root/python/fatcat_web/templates
diff options
context:
space:
mode:
authorbnewbold <bnewbold@archive.org>2021-02-26 22:33:52 +0000
committerbnewbold <bnewbold@archive.org>2021-02-26 22:33:52 +0000
commitdf79a3dd9ffae5fcb8f32ea331c49ae4e9d998ed (patch)
tree1b4c4b589a43a36c0a11b578d6f4f96c3129213a /python/fatcat_web/templates
parent67ee012ccc63ffcd98964ab58b2bcc49c5b6693a (diff)
parenta5e9309c148019539127f41d7fefd722d0ae3bf2 (diff)
downloadfatcat-df79a3dd9ffae5fcb8f32ea331c49ae4e9d998ed.tar.gz
fatcat-df79a3dd9ffae5fcb8f32ea331c49ae4e9d998ed.zip
Merge branch 'bnewbold-202102-tweaks' into 'master'
Feb 2021 web UI/UX tweaks See merge request webgroup/fatcat!96
Diffstat (limited to 'python/fatcat_web/templates')
-rw-r--r--python/fatcat_web/templates/auth_account.html30
-rw-r--r--python/fatcat_web/templates/base.html17
-rw-r--r--python/fatcat_web/templates/changelog.html14
-rw-r--r--python/fatcat_web/templates/container_edit.html9
-rw-r--r--python/fatcat_web/templates/container_search.html4
-rw-r--r--python/fatcat_web/templates/container_view.html35
-rw-r--r--python/fatcat_web/templates/edit_macros.html15
-rw-r--r--python/fatcat_web/templates/editgroup_reviewable.html2
-rw-r--r--python/fatcat_web/templates/editgroup_view.html189
-rw-r--r--python/fatcat_web/templates/editor_annotations.html12
-rw-r--r--python/fatcat_web/templates/editor_editgroups.html12
-rw-r--r--python/fatcat_web/templates/editor_view.html15
-rw-r--r--python/fatcat_web/templates/entity_delete.html3
-rw-r--r--python/fatcat_web/templates/entity_edit_toml.html7
-rw-r--r--python/fatcat_web/templates/entity_history.html10
-rw-r--r--python/fatcat_web/templates/entity_macros.html73
-rw-r--r--python/fatcat_web/templates/entity_view_metadata.html9
-rw-r--r--python/fatcat_web/templates/file_edit.html9
-rw-r--r--python/fatcat_web/templates/file_view.html35
-rw-r--r--python/fatcat_web/templates/fileset_view.html18
-rw-r--r--python/fatcat_web/templates/home.html69
-rw-r--r--python/fatcat_web/templates/release_edit.html2
-rw-r--r--python/fatcat_web/templates/release_save.html31
-rw-r--r--python/fatcat_web/templates/release_search.html12
-rw-r--r--python/fatcat_web/templates/release_view.html190
-rw-r--r--python/fatcat_web/templates/search_macros.html4
-rw-r--r--python/fatcat_web/templates/webcapture_view.html15
27 files changed, 516 insertions, 325 deletions
diff --git a/python/fatcat_web/templates/auth_account.html b/python/fatcat_web/templates/auth_account.html
index 4a51241a..86b60b25 100644
--- a/python/fatcat_web/templates/auth_account.html
+++ b/python/fatcat_web/templates/auth_account.html
@@ -8,17 +8,23 @@
<i class="settings icon"></i>
Account Settings
</h1>
+<h1 class="ui header">
+ <span class="sub header"><code>editor_{{ current_user.editor_id }}</code></span></h1>
+</h1>
-<p><b>Username:</b> <code>{{ current_user.username }}</code>
-<p><b>Editor Id:</b> <code><a href="/editor/{{ current_user.editor_id }}">{{ current_user.editor_id }}</a></code>
+<a href="/editor/{{ current_user.editor_id }}/editgroups">Edit History</a> -
+<a href="/editor/{{ current_user.editor_id }}/annotations">Comments and Annotation History</a>
<br>
+
+<div class="ui raised segments" style="max-width: 30em; margin-top: 2em; margin-bottom: 2em;">
+
<div class="ui segment">
-<h3 class="ui header">Change Username</h3>
+<h4 class="ui header">Change Username</h4>
<form class="" role="change_username" action="/auth/change_username" method="post">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/>
<div class="ui form">
- <div class="ui action input medium">
+ <div class="ui action input">
<input type="text" name="username" value="{{ current_user.username }}" aria-label="account username">
<button class="ui red button">Update</button>
</div>
@@ -27,7 +33,7 @@
</div>
<div class="ui segment">
-<h3 class="ui header">Create API Token</h3>
+<h4 class="ui header">Create API Token</h4>
<form class="" role="change_username" action="/auth/create_token" method="post">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/>
<div class="ui form">
@@ -40,10 +46,14 @@
</form>
</div>
-<br>
-<p>In the future, you will be able to...
-<ul>
- <li>Create and manage bot accounts
-</ul>
+</div>
+<div class="ui info small message">
+ <div class="header">
+ In the future, you will be able to...
+ </div>
+ <ul>
+ <li>Create and manage bot accounts
+ </ul>
+</div>
{% endblock %}
diff --git a/python/fatcat_web/templates/base.html b/python/fatcat_web/templates/base.html
index 8cdc3fbf..73f33d0d 100644
--- a/python/fatcat_web/templates/base.html
+++ b/python/fatcat_web/templates/base.html
@@ -101,14 +101,17 @@
<main class="ui main container" style="margin-top: 6em; margin-bottom: 2em;" {% block main_extra_attr %}{% endblock %}>
{% with messages = get_flashed_messages() %}
{% if messages %}
- <div class="ui message">
+ <div class="ui info message" style="margin: 1em auto; max-width: 45em;">
{# Needs more javascript: <i class="close icon"></i> #}
- <div class="header">Flash Message!</div>
- <ul class="list">
- {% for message in messages %}
- <li>{{ message|safe }}
- {% endfor %}
- </ul>
+ {% if messages|length == 1 %}
+ <div class="header">{{ messages[0]|safe }}</div>
+ {% else %}
+ <ul class="list">
+ {% for message in messages %}
+ <li>{{ message|safe }}
+ {% endfor %}
+ </ul>
+ {% endif %}
</div>
{% endif %}
{% endwith %}
diff --git a/python/fatcat_web/templates/changelog.html b/python/fatcat_web/templates/changelog.html
index 8b899d38..322f3e3b 100644
--- a/python/fatcat_web/templates/changelog.html
+++ b/python/fatcat_web/templates/changelog.html
@@ -7,9 +7,11 @@
<h1 class="ui header">Recent Changes
<div class="sub header"><code>changelog</code></div></h1>
-Limited to the most recent entries.
+<p>This is a feed of all the changes to the catalog, in the order that they are
+accepted. Only the most recent entries are shown, but the API can be used to
+inspect every change all the way back to the start.
-<table class="ui table">
+<table class="ui small table">
<thead><tr><th>Changelog<br>Index
<th>Editgroup
<th>Description
@@ -19,7 +21,7 @@ Limited to the most recent entries.
<br>{{ entry.timestamp.strftime("%Y-%m-%d %H:%M:%S") }}
<td>
{% if entry.editgroup.editor.is_bot %}
- <i class="icon bug"></i>
+ <i class="icon server"></i>
{% else %}
<i class="icon user"></i>
{% endif %}
@@ -28,10 +30,14 @@ Limited to the most recent entries.
</a></code>
<br>
<small><code><a href="/editgroup/{{ entry.editgroup.editgroup_id }}">
- {{ entry.editgroup.editgroup_id }}
+ editgroup_{{ entry.editgroup.editgroup_id }}
</a></code></small>
<td>{% if entry.editgroup.description != None %}{{ entry.editgroup.description }}{% endif %}
{% endfor %}
</table>
+<div style="float: right; font-size: smaller;">
+ <a href="{{ config.FATCAT_API_HOST }}/changelog">As JSON via API</a>
+</div>
+
{% endblock %}
diff --git a/python/fatcat_web/templates/container_edit.html b/python/fatcat_web/templates/container_edit.html
index 99f77d53..1885197c 100644
--- a/python/fatcat_web/templates/container_edit.html
+++ b/python/fatcat_web/templates/container_edit.html
@@ -2,19 +2,14 @@
{% extends "base.html" %}
{% block body %}
+
{% block edit_form_prefix %}
+{{ edit_macros.edit_link_bar('container', existing_ident, 'form') }}
<div class="ui segment">
<h1 class="ui header">Edit Container Entity</h1>
<form class="ui form" id="edit_container_form" method="POST" action="{% if editgroup %}/editgroup/{{ editgroup.editgroup_id }}{% endif %}/container/{{ existing_ident }}/edit">
- <p>Experienced users can also use the <a href="{% if editgroup
- %}/editgroup/{{ editgroup.editgroup_id }}{% endif %}/container/{{
- existing_ident }}/edit/toml">TOML editing form</a> to access all metadata
- fields in a raw format.
- {% if not editgroup %}
- You can also <a href="/container/{{ existing_ident }}/delete">delete this entity</a>.
- {% endif %}
{% endblock %}
<p>See <a href="https://guide.fatcat.wiki/entity_container.html">the catalog
diff --git a/python/fatcat_web/templates/container_search.html b/python/fatcat_web/templates/container_search.html
index bd92dc2b..ec25fa8d 100644
--- a/python/fatcat_web/templates/container_search.html
+++ b/python/fatcat_web/templates/container_search.html
@@ -1,3 +1,4 @@
+{% import "entity_macros.html" as entity_macros %}
{% import "search_macros.html" as search_macros %}
{% extends "base.html" %}
@@ -18,7 +19,7 @@
<form class="" role="search" action="/container/search" method="get">
<div class="ui form">
<div class="ui action input huge fluid">
- <input type="text" placeholder="Query..." name="q" value="{% if query.q %}{{ query.q }}{% endif %}" aria-label="search container metadata"> <button class="ui button">Search</button>
+ <input type="text" placeholder="Query..." name="q" value="{% if query.q %}{{ query.q }}{% endif %}" aria-label="search container metadata"> <button class="ui primary button">Search</button>
</div>
<br>Can also lookup by <b><a href="/container/lookup">identifier</a></b> or search <b><a href="/release/search?q={{ query.q or "" }}">releases</a></b>.
</div>
@@ -35,6 +36,7 @@
{{ search_macros.top_results(query, found) }}
{% for entity in found.results %}
+ {{ entity_macros.container_search_result_row(entity) }}
<div>
<h4 style="margin-top: 1em; margin-bottom: 4px; font-size: 1.1em;">
<a href="/container/{{ entity.ident }}" style="color: #2224c7;">{{ entity['name'] }}</a>
diff --git a/python/fatcat_web/templates/container_view.html b/python/fatcat_web/templates/container_view.html
index bdde6715..128741e5 100644
--- a/python/fatcat_web/templates/container_view.html
+++ b/python/fatcat_web/templates/container_view.html
@@ -46,14 +46,8 @@
</div>
<div class="column" style="flex: 0 0 24em;">
-{% if container._es and container._es.is_oa == True %}
-<div class="ui segment top attached">
- <i class="icon unlock huge orange"></i><b>Open Access Publication</b>
-</div>
-{% endif %}
-
{% if container._stats %}
-<div class="ui segment attached">
+<div class="ui segment top attached">
<div style="text-align: center;">
<div class="ui small statistic">
<div class="value">{{ "{:,}".format(container._stats.total) }}</div>
@@ -61,6 +55,13 @@
</div>
</div>
</div>
+
+{% if container._es and container._es.is_oa == True %}
+<div class="ui segment center aligned attached">
+ <i class="icon unlock large orange"></i><b>Open Access Publication</b>
+</div>
+
+{% endif %}
{% if container._stats.total >= 1 %}
<div class="ui segment attached">
<b>Preservation Status</b><br>
@@ -122,7 +123,8 @@
{% endif %}
{% if container._es.any_kbart == True %}
- <i class="icon check green"></i> In <a href="https://keepers.issn.org/?q=api/search&search[]=MUST=allissn={{ container.issnl }}&search[]=MUST_EXIST=keepers">Keepers Registery</a><br>
+ <i class="icon check green"></i> In <a href="https://keepers.issn.org/?q=api/search&search[]=MUST=allissn={{ container.issnl }}&search[]=MUST_EXIST=keepers">Keepers Registery</a>
+ <br>
{% elif container._es.any_kbart == False %}
<i class="icon times grey"></i> Not in <a href="https://keepers.issn.org/?q=api/search&search[]=MUST=allissn={{ container.issnl }}&search[]=MUST_EXIST=keepers">Keepers Registry</a><br>
{% endif %}
@@ -133,6 +135,23 @@
</div>
{% endif %}
+<div class="ui segment attached">
+<b>Preservation Holdings</b><br>
+{%- if container.extra and container.extra.kbart %}
+ {% for k, v in container.extra.kbart.items() %}
+ <p><span style="text-transform: uppercase;">{{ k }}:</span>
+ {% for span in v.year_spans %}
+ {% if span|length >= 2 %}
+ {{ span[0] }}-{{ span[1] }}
+ {% elif span|length == 1 %}
+ {{ span[0] }}
+ {% endif %}
+ {{ ", " if not loop.last }}
+ {% endfor %}
+ {% endfor %}
+{% endif %}
+</div>
+
<div class="ui segment attached accordion">
<div class="title" style="padding: 0px;"><i class="dropdown icon"></i><b>Lookup Links</b></div>
<div class="content">
diff --git a/python/fatcat_web/templates/edit_macros.html b/python/fatcat_web/templates/edit_macros.html
index d4839373..a7cf725b 100644
--- a/python/fatcat_web/templates/edit_macros.html
+++ b/python/fatcat_web/templates/edit_macros.html
@@ -1,4 +1,17 @@
+{% macro edit_link_bar(entity_type, existing_ident, view) -%}
+ {% set has_form = entity_type in ['release', 'file', 'container'] %}
+ <div class="ui {% if has_form %}four{% else %}three{% endif %} item menu">
+ <a class="item" href="/{{ entity_type }}/{{ existing_ident }}">View</a>
+ {% if has_form %}
+ <a class="item {% if view == 'form' %}active{% endif %}" href="/{{ entity_type }}/{{ existing_ident }}/edit">Edit Form</a>
+ {% endif %}
+ <a class="item {% if view == 'toml' %}active{% endif %}" href="/{{ entity_type }}/{{ existing_ident }}/edit/toml">Edit TOML</a>
+ <a class="red item {% if view == 'delete' %}active{% endif %}" href="/{{ entity_type }}/{{ existing_ident }}/delete">Delete</a>
+ </div>
+{% endmacro %}
+
+
{% macro form_field_errors(field) -%}
{% if field.errors %}
<div class="ui pointing red label">
@@ -71,7 +84,7 @@
<div class="menu">
{% for peg in potential_editgroups %}
<div class="item" data-value="{{ peg.editgroup_id }}">
- <div class="right floated">{{ peg.created }}</div>
+ <div class="right floated">{{ peg.created.strftime('%Y-%m-%d %X') }}</div>
<code><b>editgroup_{{ peg.editgroup_id }}</b></code>
{% if peg.description %}
<br>{{ peg.description[:200] }}
diff --git a/python/fatcat_web/templates/editgroup_reviewable.html b/python/fatcat_web/templates/editgroup_reviewable.html
index 4cfea697..ec1fc1f5 100644
--- a/python/fatcat_web/templates/editgroup_reviewable.html
+++ b/python/fatcat_web/templates/editgroup_reviewable.html
@@ -16,7 +16,7 @@ Limited to the most recent entries.
{% for editgroup in entries %}
<tr><td>
{% if editgroup.editor.is_bot %}
- <i class="icon bug"></i>
+ <i class="icon server"></i>
{% else %}
<i class="icon user"></i>
{% endif %}
diff --git a/python/fatcat_web/templates/editgroup_view.html b/python/fatcat_web/templates/editgroup_view.html
index a36dc3e5..6a9793f7 100644
--- a/python/fatcat_web/templates/editgroup_view.html
+++ b/python/fatcat_web/templates/editgroup_view.html
@@ -12,9 +12,20 @@
<div class="ui divided list">
{% for edit in edits %}
<div class="item">
- <div class="content">
+ <div class="content" style="padding-bottom: 0.5em;">
+ <div style="float: right; font-weight: bold;">
+ <a href="/editgroup/{{ editgroup.editgroup_id }}/{{ entity_type }}/{{ edit.ident }}">[view]</a>
+ {% if auth_to.edit and not editgroup.changelog_index and not editgroup.submitted %}
+ <br><a href="/editgroup/{{ editgroup.editgroup_id }}/{{ entity_type }}/{{ edit.ident }}/edit" style="color: green;">[re-edit]</a>
+ <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>
+ <a href="/{{ entity_type }}/{{ edit.ident }}">{{ entity_type }}_{{ edit.ident }}</a>
{% if edit.redirect_ident %}
=&gt; redirect to <a href="/{{ entity_type }}/{{ edit.redirect_ident }}">{{ entity_type }}/{{ edit.redirect_ident }}</a>
{% elif not edit.revision %}
@@ -24,14 +35,6 @@
{% else %}
updated
{% endif %}
- <a href="/editgroup/{{ editgroup.editgroup_id }}/{{ entity_type }}/{{ edit.ident }}">[view edit]</a>
- {% if auth_to.edit and not editgroup.changelog_index and not editgroup.submitted %}
- <a href="/editgroup/{{ editgroup.editgroup_id }}/{{ entity_type }}/{{ edit.ident }}/edit" style="color: green;">[re-edit]</a>
- <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-edit]" style="background:none; color: red; border: none; padding:9;font-weight:bold;cursor:pointer;"></input>
- </form>
- {% endif %}
</div>
{% if edit.revision %}
Revision: <small><code><a href="/{{ entity_type }}/rev/{{ edit.revision }}">{{ edit.revision }}</a></code></small>
@@ -48,65 +51,126 @@
{# extended by changelog_entry #}
{% block editgroupheader %}
-{% if not editgroup.changelog_index %}
- <div class="ui right floated center aligned segment">
- {% if 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 orange button">Accept Edits</button>
- </form><br>
- {% endif %}
- {% if auth_to.submit %}
- {% if 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 button">Un-Submit</button>
- </form><br>
- <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 button">Re-Submit</button>
- </form>
- {% else %}
- <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 button">Submit</button>
- </form>
- {% endif %}
- {% endif %}
+
+<h1 class="ui header">Editgroup
+<span class="sub header"><code>editgroup_{{ editgroup.editgroup_id }}</code></span></h1>
+
+{% if not auth_to.submit %}
+<br clear="all">
+<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 %}
-<h1 class="ui header">Editgroup
-<span class="sub header"><code>editgroup {{ editgroup.editgroup_id }}</code></span></h1>
-{% endblock %}
+<div class="ui three top attached ordered steps">
-<p><b>What is an editgroup?</b>
-An editgroup is a set of entity edits, bundled together into a coherent,
-reviewable bundle.
-<br>
+ {% 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 %}
-<br><b>Status:</b>
-{% 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 %}
+ <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>
-<br><b>Editor:</b> <a href="/editor/{{editgroup.editor_id}}">{{ editgroup.editor.username }}</a>
-<br><b>Description:</b>
-{% if editgroup.description %}
- {{ editgroup.description }}
-{% else %}
- <i>none</i>
-{% endif %}
{% if editgroup.extra %}
<h4>Extra Metadata (raw JSON)</h4>
{{ entity_macros.extra_metadata(editgroup.extra) }}
{% endif %}
-<br><br style="clear: both;">
+<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") }}
@@ -116,14 +180,17 @@ reviewable bundle.
{{ 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_API_HOST }}/editgroup/{{ editgroup.editgroup_id }}">As JSON via API</a>
+</div>
<br>
-<h2 class="ui header">Comments and Annotations</h2>
+<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 bug"></i>
+ <i class="icon server"></i>
{% else %}
<i class="icon user"></i>
{% endif %}
@@ -168,7 +235,7 @@ reviewable bundle.
</div>
<i>Markdown is allowed</i>
<button class="ui right floated primary button">
- <i class="icon edit"></i> Submit
+ <i class="icon edit"></i> Post
</button>
<br>
</form><br>
diff --git a/python/fatcat_web/templates/editor_annotations.html b/python/fatcat_web/templates/editor_annotations.html
index c46039f5..7a8b53cf 100644
--- a/python/fatcat_web/templates/editor_annotations.html
+++ b/python/fatcat_web/templates/editor_annotations.html
@@ -1,16 +1,16 @@
{% extends "base.html" %}
{% block body %}
-<h1 class="ui header">Comments and Annotations
+<h1 class="ui header">{{ editor.username }}: Comments and Annotations
<div class="sub header">
- <code>editor
- <a href="/editor/{{editor.editor_id}}">{{ editor.username }}</a>
- </code>
- </a>
+ <code>editor_{{ editor.editor_id }}</code>
</div>
</h1>
+<a href="/editor/{{ editor.editor_id }}/editgroups">Edit History</a> -
+<a href="/editor/{{ editor.editor_id }}/annotations">Comments and Annotation History</a>
<br>
+<br>
{% for annotation in annotations %}
<div class="ui segments">
<div class="ui top attached secondary segment">
@@ -29,7 +29,7 @@
</div>
</div>
{% else %}
- <i>None!</i>
+ <i>No comments or annotations for this editor!</i>
{% endfor %}
{% endblock %}
diff --git a/python/fatcat_web/templates/editor_editgroups.html b/python/fatcat_web/templates/editor_editgroups.html
index 3c3dd20d..756b3a02 100644
--- a/python/fatcat_web/templates/editor_editgroups.html
+++ b/python/fatcat_web/templates/editor_editgroups.html
@@ -1,15 +1,15 @@
{% extends "base.html" %}
{% block body %}
-<h1 class="ui header">Edit History
+<h1 class="ui header">{{ editor.username }}: Edit History
<div class="sub header">
- <code>editor
- <a href="/editor/{{editor.editor_id}}">{{ editor.username }}</a>
- </code>
- </a>
+ <code>editor_{{editor.editor_id}}</code>
</div>
</h1>
+<a href="/editor/{{ editor.editor_id }}/editgroups">Edit History</a> -
+<a href="/editor/{{ editor.editor_id }}/annotations">Comments and Annotation History</a>
+<br>
<table class="ui table">
<thead><tr>{# <th>Created (UTC) #}
<th>Status
@@ -28,7 +28,7 @@
Work in Progress
{% endif %}
<td><small><code><a href="/editgroup/{{ editgroup.editgroup_id }}">
- {{ editgroup.editgroup_id }}
+ editgroup_{{ editgroup.editgroup_id }}
</a></code></small>
<td>{% if editgroup.description != None %}{{ editgroup.description }}{% endif %}
{% endfor %}
diff --git a/python/fatcat_web/templates/editor_view.html b/python/fatcat_web/templates/editor_view.html
index 6ac58e3d..5906af75 100644
--- a/python/fatcat_web/templates/editor_view.html
+++ b/python/fatcat_web/templates/editor_view.html
@@ -6,11 +6,20 @@
<h1 class="ui header">{{ editor.username }}
<div class="sub header">
- <code>editor {{ editor.editor_id }}</code>
+ <code>editor_{{ editor.editor_id }}</code>
</div>
</h1>
-<p><b><a href="/editor/{{ editor.editor_id }}/editgroups">Edit History</a></b>
-<p><b><a href="/editor/{{ editor.editor_id }}/annotations">Comments and Annotation History</a></b>
+<a href="/editor/{{ editor.editor_id }}/editgroups">Edit History</a> -
+<a href="/editor/{{ editor.editor_id }}/annotations">Comments and Annotation History</a>
+
+<br>
+<br>
+<div class="ui small info message">
+ <div class="header">
+ This page is intentionally bare
+ </div>
+ <p>We don't have much to share about individual editors.
+</div>
{% endblock %}
diff --git a/python/fatcat_web/templates/entity_delete.html b/python/fatcat_web/templates/entity_delete.html
index b2e13af4..5f677992 100644
--- a/python/fatcat_web/templates/entity_delete.html
+++ b/python/fatcat_web/templates/entity_delete.html
@@ -2,6 +2,9 @@
{% extends "base.html" %}
{% block body %}
+
+{{ edit_macros.edit_link_bar(entity_type, existing_ident, 'delete') }}
+
{% block edit_form_prefix %}
<div class="ui segment">
<h1 class="ui header">Delete Entity</h1>
diff --git a/python/fatcat_web/templates/entity_edit_toml.html b/python/fatcat_web/templates/entity_edit_toml.html
index 64768d6e..1ff9010d 100644
--- a/python/fatcat_web/templates/entity_edit_toml.html
+++ b/python/fatcat_web/templates/entity_edit_toml.html
@@ -2,15 +2,14 @@
{% extends "base.html" %}
{% block body %}
+
{% block edit_form_prefix %}
+ {{ edit_macros.edit_link_bar(entity_type, existing_ident, 'toml') }}
<div class="ui segment">
- <h1 class="ui header">Edit Entity (TOML mode)</h1>
+ <h1 class="ui header">Edit Entity</h1>
<form class="ui form" id="edit_toml_form" method="POST" action="{% if editgroup and editgroup.editgroup_id %}/editgroup/{{ editgroup.editgroup_id }}{% endif %}/{{ entity_type }}/{{ existing_ident }}/edit/toml">
- {% if not editgroup %}
- <p>You can also <a href="/{{ entity_type }}/{{ existing_ident }}/delete">delete this entity</a>.
- {% endif %}
{% endblock %}
<p>See <a href="https://guide.fatcat.wiki/entity_release.html">the catalog
diff --git a/python/fatcat_web/templates/entity_history.html b/python/fatcat_web/templates/entity_history.html
index c9f45d84..0115b845 100644
--- a/python/fatcat_web/templates/entity_history.html
+++ b/python/fatcat_web/templates/entity_history.html
@@ -3,9 +3,9 @@
{% block entity_main %}
-<h3 class="ui header">Edit History</h3>
+<h3 class="ui header">Entity Edit History</h3>
-This table only shows <i>merged</i> edits, not work-in-progress.
+This table only shows <i>accepted</i> edits included in the catalog, not any work-in-progress.
<table class="ui table">
<thead><tr><th>Changelog
@@ -17,7 +17,7 @@ This table only shows <i>merged</i> edits, not work-in-progress.
<br>{{ entry.changelog_entry.timestamp.strftime("%Y-%m-%d %H:%M") }}
<td>
{% if entry.editgroup.editor.is_bot %}
- <i class="icon bug"></i>
+ <i class="icon server"></i>
{% else %}
<i class="icon user"></i>
{% endif %}
@@ -34,5 +34,9 @@ This table only shows <i>merged</i> edits, not work-in-progress.
<td>{% if entry.editgroup.description != None %}{{ entry.editgroup.description }}{% endif %}
{% endfor %}
</table>
+<div style="float: right; font-size: smaller;">
+ <a href="{{ config.FATCAT_API_HOST }}/{{ entity_type }}/{{ entity.ident }}/history">As JSON via API</a>
+</div>
+
{% endblock %}
diff --git a/python/fatcat_web/templates/entity_macros.html b/python/fatcat_web/templates/entity_macros.html
index e8a763d2..45f00362 100644
--- a/python/fatcat_web/templates/entity_macros.html
+++ b/python/fatcat_web/templates/entity_macros.html
@@ -5,15 +5,15 @@
<div class="ui segment pink inverted attached">
{% if editgroup.changelog_index %}
<b>Accepted Edit Version</b>
- <p>This is the version of the entity as of a specific merged editgroup:
+ <p>This is the version of the entity as of a specific point in time:
{% elif editgroup.submitted %}
<b>Submitted Edit Version</b>
- <p>This is a version of the entity that has been submitted for approval as part of an editgroup:
+ <p>This is a version of the entity that has been submitted for approval as part of:
{% else %}
<b>Edit In Progress</b>
- <p>This is a version of the entity that has not yet been submitted for approval, part of an editgroup:
+ <p>This is a version of the entity that has not yet been submitted for approval. Part of:
{% endif %}
- <b><a href="/editgroup/{{ editgroup.editgroup_id }}" style="color: white; font-weight: bold;">{{ editgroup.editgroup_id }}</a></b>
+ <a href="/editgroup/{{ editgroup.editgroup_id }}" style="color: white; font-weight: bold; font-size: smaller;"><code>editgroup_{{ editgroup.editgroup_id }}</code></a>
</div>
{% elif entity.state == None and entity.ident == None %}
<div class="ui segment pink inverted attached">
@@ -27,17 +27,15 @@
</div>
{% endif %}
-<div class="ui segment attached">
- <b>Fatcat Bits</b>
- <p>
- {% if entity.state %}
- State is "{{ entity.state }}".
+<div class="ui segment attached" style="white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
+ <b>Catalog Record</b>
+ {% if entity.state and entity.state != "active" %}
+ <br>State: <code>{{ entity.state }}</code>
{% endif %}
{% if entity.revision %}
- Revision:
- <br><small><code><a href="/{{ entity_type }}/rev/{{ entity.revision }}">{{ entity.revision }}</a></code></small>
+ <br>Revision: <small><code><a href="/{{ entity_type }}/rev/{{ entity.revision }}">{{ entity.revision }}</a></code></small>
{% endif %}
- <br><a href="
+ <br>API URL: <a href="
{%- if config.FATCAT_DOMAIN == 'dev.fatcat.wiki' -%}
http://localhost:9411
{%- else -%}
@@ -52,7 +50,7 @@
/{{ entity_type }}/rev/{{ entity.revision }}
{% endif %}
{% if expand %}?expand={{ expand}}{% endif %}">
- As JSON object via API
+ JSON
</a>
</div>
@@ -180,11 +178,20 @@
</h4>
- {% if paper.best_pdf_url %}
<div style="float: right; padding: 4px;">
- &nbsp;&nbsp;<a href="{{ paper.best_pdf_url }}" class="ui violet tag label"><i class="file icon"></i>fulltext</a>
+ &nbsp;&nbsp;
+ {% if paper.preservation == "bright" %}
+ {% if paper.best_pdf_url %}
+ <a href="{{ paper.best_pdf_url }}" class="ui green label" style="background-color: #2ca048;"><i class="file icon"></i>bright archive</a>
+ {% else %}
+ <span class="ui green label" style="background-color: #2ca048;">bright archive</span>
+ {% endif %}
+ {% elif paper.preservation == "dark" %}
+ <span class="ui green label" style="background-color: #6e7b71;">dark archive</span>
+ {% else %}
+ <span class="ui grey label" style="background-color: #b71818;">no archive</span>
+ {% endif %}
</div>
- {% endif %}
{# ### AUTHOR ROW #}
{% if paper.contrib_names %}
@@ -232,15 +239,23 @@
{% if paper.doi %}
<a href="https://doi.org/{{paper.doi }}" style="color: green;">doi:{{ paper.doi }}</a> &nbsp;
{% endif %}
- {% if paper.pmid %}
- <a href="https://www.ncbi.nlm.nih.gov/pubmed/{{paper.pmid }}" style="color: green;">pmid:{{ paper.pmid }}</a> &nbsp;
- {% endif %}
{% if paper.pmcid %}
<a href="https://pubmed.ncbi.nlm.nih.gov/{{paper.pmcid }}/" style="color: green;">pmcid:{{ paper.pmcid }}</a> &nbsp;
+ {% elif paper.pmid %}
+ <a href="https://www.ncbi.nlm.nih.gov/pubmed/{{paper.pmid }}" style="color: green;">pmid:{{ paper.pmid }}</a> &nbsp;
{% endif %}
{% if paper.arxiv_id %}
<a href="https://arxiv.org/abs/{{paper.arxiv_id }}" style="color: green;">arXiv:{{ paper.arxiv_id }}</a> &nbsp;
{% endif %}
+ {% if paper.jstor_id %}
+ <a href="https://jstor.org/stable/{{paper.jstor_id }}/" style="color: green;">jstor:{{ paper.jstor_id }}</a> &nbsp;
+ {% endif %}
+ {% if paper.doaj_id %}
+ <a href="https://doaj.org/article/{{paper.doaj_id }}/" style="color: green;">doaj:{{ paper.doaj_id }}</a> &nbsp;
+ {% endif %}
+ {% if paper.doaj_id %}
+ <a href="https://dblp.org/rec/{{ paper.dblp_id }}.html" style="color: green;">dblp:{{ paper.dblp_id }}</a> &nbsp;
+ {% endif %}
{# WIP: elastic release work grouping searches
<br>
@@ -250,6 +265,26 @@
</div>
{% endmacro %}
+
+{% macro container_search_result_row(entity) -%}
+ <div>
+ <h4 style="margin-top: 1em; margin-bottom: 4px; font-size: 1.1em;">
+ <a href="/container/{{ entity.ident }}" style="color: #2224c7;">{{ entity['name'] }}</a>
+ {% if entity.is_oa %}<i class="icon unlock orange small"></i>{% endif %}
+ </h4>
+ {% if entity.publisher %}
+ <h5 style="margin-top: 4px; margin-bottom: 0px; font-size: 1em;">{{ entity.publisher }}</h5>
+ {% endif %}
+ {% if entity.issnl %}
+ <a href="https://portal.issn.org/resource/ISSN/{{entity.issnl }}" style="color: green;">issn:{{ entity.issnl }}</a>
+ {% endif %}
+ {% if entity.container_type %}
+ &nbsp;{{ entity.container_type }}
+ {% endif %}
+ </div>
+{% endmacro %}
+
+
{% macro progress_color(frac) -%}
{% if frac >= 1 %}
green
diff --git a/python/fatcat_web/templates/entity_view_metadata.html b/python/fatcat_web/templates/entity_view_metadata.html
index 5ce97d10..90ce25d9 100644
--- a/python/fatcat_web/templates/entity_view_metadata.html
+++ b/python/fatcat_web/templates/entity_view_metadata.html
@@ -4,13 +4,16 @@
{% block entity_main %}
+<h3>Entity Metadata (schema)</h3>
+{{ entity_macros.extra_metadata(entity._metadata) }}
+<div style="float: right;">
+ <a href="{{ config.FATCAT_API_HOST }}/{{ entity_type }}/{{ entity.ident }}">As JSON via API</a>
+</div>
+
{% if entity.extra %}
<h3>Extra Metadata (raw JSON)</h3>
{{ entity_macros.extra_metadata(entity.extra) }}
{% endif %}
-<h3>Entity Metadata (schema)</h3>
-{{ entity_macros.extra_metadata(entity._metadata) }}
-
{% endblock %}
diff --git a/python/fatcat_web/templates/file_edit.html b/python/fatcat_web/templates/file_edit.html
index 745b0c41..b7ff1d72 100644
--- a/python/fatcat_web/templates/file_edit.html
+++ b/python/fatcat_web/templates/file_edit.html
@@ -2,19 +2,14 @@
{% extends "base.html" %}
{% block body %}
+
{% block edit_form_prefix %}
+{{ edit_macros.edit_link_bar(entity_type, existing_ident) }}
<div class="ui segment">
<h1 class="ui header">Edit File Entity</h1>
<form class="ui form" id="edit_file_form" method="POST" action="{% if editgroup %}/editgroup/{{ editgroup.editgroup_id }}{% endif %}/file/{{ existing_ident }}/edit">
- <p>Experienced users can also use the <a href="{% if editgroup
- %}/editgroup/{{ editgroup.editgroup_id }}{% endif %}/file/{{
- existing_ident }}/edit/toml">TOML editing form</a> to access all metadata
- fields in a raw format.
- {% if not editgroup %}
- You can also <a href="/file/{{ existing_ident }}/delete">delete this entity</a>.
- {% endif %}
{% endblock %}
<p>See <a href="https://guide.fatcat.wiki/entity_file.html">the catalog
diff --git a/python/fatcat_web/templates/file_view.html b/python/fatcat_web/templates/file_view.html
index 02f47a91..608a2a0a 100644
--- a/python/fatcat_web/templates/file_view.html
+++ b/python/fatcat_web/templates/file_view.html
@@ -8,23 +8,23 @@
<div class="ui stackable mobile reversed grid centered">
<div class="column" style="font-size: 16px; flex: 1;">
-<h3>Releases</h3>
+<h3>Associated Releases</h3>
{% if entity.releases != [] %}
{{ entity_macros.release_list(entity.releases) }}
{% else %}
<p>
- This file is not associated with any fatcat release.
+ This file is not associated with any release entity! This makes a is a stub entry in the catalog.
{% endif %}
-<h3>URLs</h3>
+<h3>Public Access URLs</h3>
{% if file.urls != None %}
{{ entity_macros.url_list(file.urls) }}
{% else %}
-No known public URL, mirror, or archive for this file.
+No known archives or mirrors of this file.
{% endif %}
-<h3>Checksums</h3>
+<h3>Data Integrity Checksums</h3>
<table class="ui definition single line fixed compact small unstackable table">
<tbody>
{% if file.sha1 != None %}
@@ -45,22 +45,23 @@ No known public URL, mirror, or archive for this file.
<div class="column" style="flex: 0 0 24em;">
{% if file._es and file._es.best_url %}
-<a href="{{ file._es.best_url }}" class="ui top attached fluid huge green button"><i class="file icon"></i>Download File</a>
+ {# TODO: this currently shows *any* file, though prefers archive.org #}
+ <a href="{{ file._es.best_url }}" class="ui fluid huge black button" style="text-decoration: underline;">
+ <i class="file icon"></i>View Archived File
+ </a>
{% else %}
-<span class="ui top attached fluid huge grey button"><i class="file cross icon"></i>No Download Available</span>
+ <span class="ui fluid huge grey segment"><i class="file cross icon"></i>No Public URL</span>
{% endif %}
+<br>
-{% if file.size != None %}
-<div class="ui segment attached">
- <p><b>Size</b> &nbsp;{{ file.size|filesizeformat }}
+<div class="ui top segment attached">
+ {% if file.size != None %}
+ <b>Size</b> &nbsp;{{ file.size|filesizeformat }}<br>
+ {% endif %}
+ {% if file.mimetype != None %}
+ <b>MIME Type</b> &nbsp;<code>{{ file.mimetype }}</code><br>
+ {% endif %}
</div>
-{% endif %}
-
-{% if file.mimetype != None %}
-<div class="ui segment attached">
- <p><b>File Type</b> &nbsp;<code>{{ file.mimetype }}</code>
-</div>
-{% endif %}
{{ entity_macros.fatcat_bits(entity, "file", "", editgroup) }}
diff --git a/python/fatcat_web/templates/fileset_view.html b/python/fatcat_web/templates/fileset_view.html
index 27d5b6da..4e8bfbad 100644
--- a/python/fatcat_web/templates/fileset_view.html
+++ b/python/fatcat_web/templates/fileset_view.html
@@ -8,14 +8,20 @@
<div class="ui stackable mobile reversed grid centered">
<div class="column" style="font-size: 16px; flex: 1;">
-<h3>Releases</h3>
+<h3>Associated Releases</h3>
{% if entity.releases != [] %}
{{ entity_macros.release_list(entity.releases) }}
{% else %}
<p>
This File Set is not associated with any fatcat release.
{% endif %}
-
+
+<h3>Public Access URLs</h3>
+{% if entity.urls %}
+ {{ entity_macros.url_list(entity.urls) }}
+{% else %}
+No known public URL, mirror, or archive for this File Set.
+{% endif %}
<h3>File Manifest ({{ fileset.manifest|count }})</h3>
{% if fileset.manifest %}
@@ -40,14 +46,6 @@ This File Set is empty (contains no files).
{% endif %}
-<br>
-<h3>Base URLs</h3>
-{% if entity.urls %}
- {{ entity_macros.url_list(entity.urls) }}
-{% else %}
-No known public URL, mirror, or archive for this File Set.
-{% endif %}
-
</div>
<div class="column" style="flex: 0 0 24em;">
diff --git a/python/fatcat_web/templates/home.html b/python/fatcat_web/templates/home.html
index 4288017e..a90b0fb7 100644
--- a/python/fatcat_web/templates/home.html
+++ b/python/fatcat_web/templates/home.html
@@ -32,17 +32,17 @@
<div class="row">
<div class="four wide mobile three wide center aligned column">
<a href="/stats" style="color: black;">
- <h4>110,814,532<br>Papers</h4>
+ <h4>116,741,069<br>Papers</h4>
</a>
</div>
<div class="four wide mobile three wide center aligned column">
<a href="/stats" style="color: black;">
- <h4>26,173,743<br>Fulltext</h4>
+ <h4>28,751,063<br>Accessible</h4>
</a>
</div>
<div class="four wide mobile three wide center aligned column">
<a href="/stats" style="color: black;">
- <h4>151,707<br>Journals</h4>
+ <h4>177,158<br>Journals</h4>
</a>
</div>
</div>
@@ -53,20 +53,19 @@
<div class="ui vertical stripe segment" style="padding-top: 2em; padding-bottom: 2em;">
<div class="ui text container" style="max-width: 800px!important;">
<div class="ui centered grid">
- <div class="row">
+ <div class="stackable row">
<div class="four wide column">
<!-- TODO: don't let it scale down -->
<img src="/static/paper_man_confused.gif" width="130" alt="confused paper man">
</div>
<div class="twelve wide column" style="font-size: 1.2rem;">
- <p><b>Fatcat is a versioned, user-editable catalog of research
+ <p>Fatcat is a versioned, user-editable catalog of research
publications including journal articles, conference proceedings, and
- datasets</b>
+ datasets.
<p>Features include archival file-level metadata (verified digests and
- long-term copies), an
- <b><a href="https://api.{{ config.FATCAT_DOMAIN }}">open, documented API</a></b>,
- and work/release indexing (eg, distinguishing between and linking
- pre-prints, manuscripts, and version-of-record).
+ long-term copies), a <b><a href="/coverage/search">preservation coverage visualizer</a></b>, work/edition grouping, an
+ <b><a href="https://api.{{ config.FATCAT_DOMAIN }}">open API</a></b>,
+ and public metadata dumps.
&nbsp;<a href="/about">Read more...</a>
</div>
</div>
@@ -74,18 +73,37 @@
</div>
</div>
+<div class="ui vertical stripe segment" style="padding-top: 2em; padding-bottom: 2em;">
+ <div class="ui text container" style="max-width: 1200px!important;">
+ <div class="ui middle aligned divided centered grid">
+ <div class="stackable row">
+ <div class="eight wide column" style="font-size: 1.6rem; text-align: center;">
+ <p>Our goal is to ensure long-term access to research content on the
+ "scholarly web" by tracking holes in preservation coverage across
+ digital preservation efforts
+ </div>
+ <div class="seven wide column">
+ <a href="/coverage/search?q=is_oa%3Atrue+year%3A%3E1995+year%3A%3C%3D2019+%28type%3Aarticle-journal+OR+type%3Aarticle+OR+type%3Apaper-conference%29+%21doi_prefix%3A10.5281+%21doi_prefix%3A10.6084">
+ <img alt="coverage visualization tool" src="/static/fatcat_oa_preservation_jan2021.svg" style="width: 100%;">
+ </a>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
<div class="ui vertical stripe segment" style="padding-top: 2em; padding-bottom: 2em; background-color: #F5F5F5;">
<div class="ui text container" style="max-width: 800px!important;">
<div class="ui centered grid">
- <div class="row">
+ <div class="stackable row">
<div class="twelve wide column" style="font-size: 1.2rem;">
<p>This service is hosted at the <b><a
href="https://archive.org">Internet Archive</a></b>, a US
non-profit digital library dedicated to providing Universal Access to All Knowledge.
<a href="https://archive.org/donate/">Donations welcome!</a>
- <p>Development funding comes from
- <b><a href="https://blog.archive.org/2018/03/05/andrew-w-mellon-foundation-awards-grant-to-the-internet-archive-for-long-tail-journal-preservation/">The Andrew Mellon Foundation</a></b>
- to improve preservation and access to "long-tail" open access works on
+ <p>Development for this project funding comes from
+ <b><a href="https://blog.archive.org/2018/03/05/andrew-w-mellon-foundation-awards-grant-to-the-internet-archive-for-long-tail-journal-preservation/">The Andrew Mellon Foundation</a></b>,
+ specifically to capture "long-tail" open access works on
the public web which might otherwise be lost.
</div>
<div class="four wide column">
@@ -96,6 +114,26 @@
</div>
</div>
+<div class="ui vertical stripe segment" style="padding-top: 2em; padding-bottom: 2em;">
+ <div class="ui text container" style="max-width: 800px!important;">
+ <div class="ui centered grid">
+ <div class="stackable row">
+ <div class="four wide column">
+ <a href="https://scholar-qa.archive.org">
+ <img src="/static/scholar-vaporwave-logo-small.png" width="170" alt="IA scholar logo">
+ </a>
+ </div>
+ <div class="twelve wide column" style="font-size: 1.2rem;">
+ <p><b><a href="https://scholar-qa.archive.org">Internet Archive Scholar</a></b>
+ is a sibling service, built on the Fatcat catalog, providing end-user
+ access to and full-text search over research content across the
+ Internet Archive's various holdings.
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
<div class="ui vertical stripe segment" style="background-color: #fffaf3; color: #573a08;">
<div class="ui text container">
<div class="ui centered grid">
@@ -110,6 +148,8 @@
</div>
</div>
+</div>
+
<div class="ui center aligned container">
<br>
@@ -118,7 +158,6 @@
</h2>
<br>
-
{# this div makes the table scrollable on mobile #}
<div style="max-width: 100%; overflow-x: auto;">
<table class="ui single line unstackable table centered" style="max-width: 800px; font-size: 1.1rem; margin-right: auto; margin-left: auto;">
diff --git a/python/fatcat_web/templates/release_edit.html b/python/fatcat_web/templates/release_edit.html
index c26c9850..0ac94be9 100644
--- a/python/fatcat_web/templates/release_edit.html
+++ b/python/fatcat_web/templates/release_edit.html
@@ -2,7 +2,9 @@
{% extends "base.html" %}
{% block body %}
+
{% block edit_form_prefix %}
+{{ edit_macros.edit_link_bar('release', existing_ident, 'form') }}
<div class="ui segment">
<h1 class="ui header">Edit Release Entity</h1>
diff --git a/python/fatcat_web/templates/release_save.html b/python/fatcat_web/templates/release_save.html
index 29875d3d..7dd01fc0 100644
--- a/python/fatcat_web/templates/release_save.html
+++ b/python/fatcat_web/templates/release_save.html
@@ -13,14 +13,14 @@
{% if spn_status == "not-configured" %}
-<div class="ui error message" style="margin: 2em;">
- <div class="header">Error</div>
+<div class="ui error message" style="margin-top: 2em;">
+ <div class="header">Not Available</div>
<p>Save Paper Now feature isn't configured, sorry about that.
</div>
{% elif spn_status == "kafka-error" %}
-<div class="ui error message" style="margin: 2em;">
+<div class="ui error message" style="margin-top: 2em;">
<div class="header">Error</div>
<p>Whoops, something went wrong and we couldn't enqueue your request. This
didn't have anything to do with the URL you supplied; please try again later.
@@ -28,7 +28,7 @@
{% elif spn_status == "success" %}
-<div class="ui positive message" style="margin: 2em;">
+<div class="ui positive message" style="margin-top: 2em;">
<div class="header">Success</div>
<p>URL has been submitted to the bot queue for crawling. If fulltext content
is found, it will be imported into the catalog for review. Keep an eye on the
@@ -40,15 +40,24 @@
<form class="ui form" id="save_release_form" method="POST" action="/release/{{ release.ident }}/save">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/>
- <br>
- <p>Know of a legit fulltext copy of this publication on the public web?
- Tell us the URL and we will crawl it and provide free perpetual access.
+ <p>If you know of a legitimate public web access option for this work, you
+ can help us preserve it by filling out the form below. Using the Wayback
+ Machine's <a href="https://web.archive.org/save">"Save Page Now"</a> feature,
+ we will attempt to crawl, process, and verify the content and add it to the
+ catalog.
- {{ edit_macros.form_field_basic(form.base_url) }}
+ <p style="margin-top: 1em; margin-bottom: 1em;">If you are the author of this
+ work, and the published version is not publicly available, another option is
+ to upload an version to an institutional or discipline repository. The
+ <a href="https://shareyourpaper.org/">Share Your Paper</a> tool can help with
+ this process.
- <p style="margin-top: 2em; margin-bottom: 2em;"><b>Important:</b> check the publication stage of the file you are
- submitting. We distinguish between pre-prints, manuscripts, and the
- published version of record (if applicable).
+ <p style="margin-top: 1em; margin-bottom: 1em;"><b>Important:</b>
+ double-check the publication stage of the file you are submitting. We
+ distinguish between pre-prints, manuscripts, and the published version of
+ record (if applicable).
+
+ {{ edit_macros.form_field_basic(form.base_url) }}
<div class="ui equal width fields">
{{ edit_macros.form_field_basic(form.release_stage) }}
diff --git a/python/fatcat_web/templates/release_search.html b/python/fatcat_web/templates/release_search.html
index b1021322..59a234c0 100644
--- a/python/fatcat_web/templates/release_search.html
+++ b/python/fatcat_web/templates/release_search.html
@@ -24,7 +24,7 @@
</div>
<div class="ui checkbox" style="float: right; margin: 1em;">
<input type="checkbox" name="fulltext_only" id="fulltext_only" value="true" {% if query.fulltext_only %}checked{% endif %}>
- <label for="fulltext_only">Fulltext Available Only</label>
+ <label for="fulltext_only">Only public full-text</label>
</div>
<br>Can also lookup by <b><a href="/release/lookup">identifier</a></b> or search for <b><a href="/container/search?q={{ query.q or "" }}">containers</a></b> (eg, journals).
</div>
@@ -35,6 +35,16 @@
<div class="ui container text">
<br>
+{% if container_found and container_found.results %}
+ <div class="ui tiny info floating message" style="margin: 0em auto; max-width: 40em;">
+ <div class="header">Were you looking for this journal, instead of publications?</div>
+ <div style="padding-left: 0.5em;">
+ {{ entity_macros.container_search_result_row(container_found.results[0]) }}
+ </div>
+ </div>
+ <br clear="all">
+{% endif %}
+
{% if found %}
{% if found.results %}
diff --git a/python/fatcat_web/templates/release_view.html b/python/fatcat_web/templates/release_view.html
index cc9cf5fe..9464fda2 100644
--- a/python/fatcat_web/templates/release_view.html
+++ b/python/fatcat_web/templates/release_view.html
@@ -79,23 +79,16 @@
<div class="ui stackable mobile reversed grid centered">
<div class="column" style="font-size: 16px; flex: 1;">
-{% if release.abstracts != [] %}
-<h3>Abstract</h3>
-<p><span itemprop="description">{{ release.abstracts[0].content }}</span>
-<br><small><i>In <code>{{ release.abstracts[0].mimetype }}</code> format</i></small>
-{% endif %}
-
-<div class="ui accordion">
<div class="title" itemprop="isPartOf" itemscope itemtype="http://schema.org/Periodical" itemid="#container">
{% if release.release_stage == 'published' %}
- <i class="dropdown icon"></i>Published
+ Published
{% if release.container.ident %}
in <a href="/container/{{ release.container.ident }}"><span itemprop="name">{{ release.container.name }}</span></a>
{% elif release.extra and release.extra.container_name %}
in <span itemprop="name">{{ release.extra.container_name }}</span>
{% endif %}
{% else %}
- <i class="dropdown icon"></i>Released
+ Released
{% if release.release_type %}
as a <i>{{ release.release_type }}</i>
{% endif %}
@@ -105,84 +98,41 @@
{% endif %}
{% if release.publisher %}
by <span itemprop="publisher">{{ release.publisher }}</span>
- {% endif %}
-</div><div class="content" itemscope itemtype="http://schema.org/Periodical" itemid="#container">
- <table class="ui definition single line fixed compact small collapsing unstackable table" style="width: 100%;">
- <tbody>
- {% if release.number != None %}
- <tr><td class="three wide right aligned">Number</td>
- <td class="seven wide">{{ release.number }}
- {% endif %}
- {% if release.version != None %}
- <tr><td class="three wide right aligned">Version</td>
- <td class="seven wide">{{ release.version }}
- {% endif %}
- {% if release.container != None and release.container.issnl != None %}
- <tr><td class="three wide right aligned">ISSN-L</td>
- <td class="seven wide" itemprop="issn">{{ release.container.issnl }}
- {% endif %}
- {% if release.volume != None %}
- <tr itemprop="isPartOf" itemscope itemtype="http://schema.org/PublicationVolume">
- <td class="right aligned">Volume</td>
- <td class="" itemprop="volumeNumber">{{ release.volume }}
- {% endif %}
- {% if release.issue != None %}
- <tr itemprop="isPartOf" itemscope itemtype="http://schema.org/PublicationIssue">
- <td class="right aligned">Issue</td>
- <td class="" itemprop="issueNumber">{{ release.issue }}
- {% endif %}
- {% if release.pages != None %}
- <tr itemprop="isPartOf" itemscope itemtype="http://schema.org/PublicationIssue">
- <td class="right aligned">Page(s)</td>
- <td class="" itemprop="pagination">{{ release.pages }}
- {% endif %}
- {% if release.release_date != None %}
- <tr><td class="right aligned">Release Date</td>
- <td class="">{{ release.release_date }}
- {% elif release.release_year != None %}
- <tr><td class="three wide right aligned">Release Year</td>
- <td class="seven wide">{{ release.release_year }}
- {% endif %}
- {% if release.container != None and release.container.container_type != None %}
- <tr><td class="right aligned">Container Type</td>
- <td class="">{{ release.container.container_type }}
- {% endif %}
- {% if release.publisher != None %}
- <tr><td class="three wide right aligned">Publisher</td>
- <td class="seven wide">{{ release.publisher }}
- {% endif %}
- {% if release.language != None %}
- <tr><td class="right aligned">Primary Language</td>
- <td class=""><code>{{ release.language }}</code>
- (<a href="https://www.loc.gov/standards/iso639-2/php/langcodes_name.php?iso_639_1={{ release.language }}">lookup</a>)
- {% endif %}
+ {% endif %}.
- </tbody>
- </table>
-</div>
+ <p>
+ {% if release.volume != None %}
+ Volume {{ release.volume }}
+ {%- if release.issue != None %}, {% endif %}
+ {% endif %}
+ {% if release.issue != None %}
+ Issue {{ release.issue}}
+ {% endif %}
+ {% if release.pages != None %}
+ {% if release.pages[0].isdigit() %}p{% endif -%}
+ {{ release.pages }}
+ {% endif %}
+ {% if release.release_year != None %}
+ ({{ release.release_year }})
+ {% endif %}
</div>
+{% if release.abstracts != [] %}
+ <h3>Abstract</h3>
+ <p><span itemprop="description">{{ release.abstracts[0].content }}</span>
+ <br><small><i>In <code>{{ release.abstracts[0].mimetype }}</code> format</i></small>
+{% endif %}
+
{% if entity.state == 'active' %}
-<h3>Known Files and URLs</h3>
+<h3>Archived Files and Locations</h3>
{% if entity.files != [] %}
<table class="ui compact fixed table">
-<!--
- <thead>
- <tr><th>SHA-1
- <th>Size (bytes)
- <th>File Type
- <th>Links
- </thead>
--->
<tbody>
{% for file in entity.files %}
<tr><td>{% if file.mimetype != None %}{{ file.mimetype }}&nbsp;&nbsp;{% endif %}
{% if file.size != None %}{{ file.size|filesizeformat }}{% endif %}
<br><small><code><a href="/file/{{ file.ident }}">
- {% if file.sha1 != None %}sha1:{{ file.sha1[:20] + "..." }}
- {% elif file.sha256!= None %}sha256:{{ file.md5[:20] + "..." }}
- {% elif file.md5 != None %}md5:{{ file.md5[:20] + "..." }}
- {% endif %}
+ file_{{ file.ident }}
</a></code></small>
<td class="single line">
{% for url in file.urls[:5] %}
@@ -208,7 +158,7 @@ accessible version.
<tbody>
{% for fileset in entity.filesets %}
<tr><td>{{ fileset.manifest|count }} files &nbsp;{{ fileset._total_size|filesizeformat }}
- <br><small><code><a href="/fileset/{{ fileset.ident }}">fileset:{{ fileset.ident }}</a></code></small>
+ <br><small><code><a href="/fileset/{{ fileset.ident }}">fileset_{{ fileset.ident }}</a></code></small>
<td class="single line">
{% for url in fileset.urls[:5] %}
{% if url.rel == "dweb" %}
@@ -234,7 +184,7 @@ accessible version.
{% for webcapture in entity.webcaptures %}
<tr><td><b><a href="{{ webcapture.original_url }}" style="color: black;">{{ webcapture.original_url }}</a></b>
<br>{{ webcapture.timestamp.strftime("%Y-%m-%d %H:%M:%S") }} | {{ webcapture.cdx|count }} resources
- <br><small><code><a href="/webcapture/{{ webcapture.ident }}">webcapture:{{ webcapture.ident }}</a></code></small>
+ <br><small><code><a href="/webcapture/{{ webcapture.ident }}">webcapture_{{ webcapture.ident }}</a></code></small>
<td class="single line">
{% for url in webcapture.archive_urls[:5] %}
<a href="{{ url.url }}{% if url.rel == "wayback" %}{{ webcapture._wayback_suffix }}{% endif %}">{{ url.url.split('/')[2] }}</a> ({{ url.rel }})<br>
@@ -247,41 +197,42 @@ accessible version.
</table>
{% endif %}
{% endif %}
+</div>
-</div>
<div class="column" style="flex: 0 0 24em;">
-{% if entity.state == 'active' and entity._es and entity._es.best_pdf_url %}
-<a href="{{ entity._es.best_pdf_url }}" class="ui top attached fluid huge green button"><i class="file pdf outline icon"></i>Read Full Text</a>
+{% if entity.state == 'active' and entity._es and entity._es.ia_pdf_url %}
+ <a href="{{ entity._es.ia_pdf_url }}" class="ui top attached fluid huge black button" style="text-decoration: underline;">
+ <i class="file pdf outline icon"></i>Read Archived PDF
+ </a>
{% elif entity.state == 'active' and entity.webcaptures != [] and entity.webcaptures[0].archive_urls != [] and entity.webcaptures[0].archive_urls[0].rel == "wayback" %}
-<a href="{{ entity.webcaptures[0].archive_urls[0].url }}{{ entity.webcaptures[0]._wayback_suffix }}" class="ui top attached fluid huge green button"><i class="file archive outline icon"></i>View Web Archive</a>
-{% elif entity.state == 'active' %}
-<span class="ui top attached fluid huge grey button"><i class="ban icon"></i>No Full Text Available</span>
-
-<a href="/release/{{ release.ident }}/save" class="ui attached fluid huge blue button">
- <i class="cloud download icon"></i>"Save Paper Now"
- <div style="margin-top: 0.8em; font-size: smaller; text-align: left;">
- Know of a fulltext copy of on the public web? Submit a URL and we will archive it
- </div>
-</a>
-
-{# alternative SPN
-<div class="ui segment attached">
- <center>
- <a class="ui blue huge button" href="/release/{{ release.ident }}/save" title="save paper now">Save Paper Now</a>
- </center>
- <p style="margin-top: 0.5em;">Know of a fulltext copy on the public web? Submit a URL and we'll archive it
-</div>
-#}
+ <a href="{{ entity.webcaptures[0].archive_urls[0].url }}{{ entity.webcaptures[0]._wayback_suffix }}" class="ui fluid huge black button" style="text-decoration: underline;">
+ <i class="university icon"></i>Visit Web Archive
+ </a>
+{% endif %}
-{# alternative SPN
-<div class="ui segment attached yellow inverted accordion">
- <b><a href="/release/{{ release.ident }}/save" title="save paper now" style="color: black;">Save Paper Now</a></b>
- <br>know of a fulltext copy on the public web? submit a URL and we'll archive it
-</div>
-#}
+{% if entity.state == 'active' and entity._es %}
+ {% if entity._es.preservation == 'bright' %}
+ <div class="ui top attached fluid compact green inverted center aligned segment" style="padding: 0.5em; border-color: #5550; background-color: #2ca048;">
+ <b>Archived</b>
+ </div>
+ {% elif entity._es.preservation == 'dark' %}
+ <div class="ui top attached fluid large green inverted center aligned segment" style="padding: 0.5em; border-color: #5550; background-color: ##6e7b71;">
+ <b>"Dark" Archived</b>
+ </div>
+ {% else %}
+ <div class="ui top attached fluid large red inverted center aligned segment" style="padding: 0.5em; border-color: #5550; background-color: #b71818;">
+ <b>Not Preserved</b>
+ </div>
+ <div class="ui segment attached">
+ <a href="/release/{{ release.ident }}/save">
+ <b><i class="cloud download icon"></i>Save Paper Now!</b>
+ </a>
+ <p>Know of a fulltext copy of on the public web? Submit a URL and we will archive it
+ </div>
+ {% endif %}
{% endif %}
{% if release.release_type or release.release_stage or release.release_year %}
@@ -305,6 +256,10 @@ accessible version.
{% if release.version %}
<b>Version</b> &nbsp; <code>{{ release.version }}</code><br>
{% endif %}
+ {% if release.language != None %}
+ <b>Language</b> &nbsp; <code>{{ release.language}}</code>
+ <sup><a href="https://www.loc.gov/standards/iso639-2/php/langcodes_name.php?iso_639_1={{ release.language }}">?</a></sup>
+ {% endif %}
</div>
{% endif %}
@@ -357,7 +312,19 @@ accessible version.
{% if release.container != None and release.container._es %}
<div class="ui segment attached">
-<b>Container Metadata</b><br>
+<b><a href="/container/{{ release.container.ident }}">
+{% if release.container.container_type == "journal" %}
+ Journal Metadata
+{% elif release.container.container_type == "proceedings" %}
+ Proceedings Metadata
+{% elif release.container.container_type == "book-series" %}
+ Book Series Metadata
+{% elif release.container.container_type == "blog" %}
+ Blog Metadata
+{% else %}
+ Container Metadata
+{% endif %}
+</a></b><br>
{% if release.container._es.is_oa == True %}
<i class="icon unlock orange"></i>Open Access Publication<br>
{% endif %}
@@ -370,7 +337,9 @@ accessible version.
{% if release.container._es.in_road == True %}
<i class="icon check green"></i> In <a href="http://road.issn.org/issn/{{ release.container.issnl }}">ISSN ROAD</a><br>
{% elif release.container._es.in_road == False %}
+ {# skip 'not in ROAD' display, to reduce UI clutter
<i class="icon times grey"></i> Not in <a href="https://road.issn.org">ISSN ROAD</a><br>
+ #}
{% endif %}
{% if release.container._es.any_kbart == True %}
<i class="icon check green"></i> In <a href="https://keepers.issn.org/?q=api/search&search[]=MUST=allissn={{ release.container.issnl }}&search[]=MUST_EXIST=keepers">Keepers Registery</a><br>
@@ -380,19 +349,18 @@ accessible version.
{% if release.container.issnl != None %}
<i class="icon linkify"></i>ISSN-L: &nbsp;<code>{{ release.container.issnl }}</code><br>
{% endif %}
- <a href="/container/{{ release.container.ident }}" title="container {{ release.container.ident }}"><i class="icon share"></i>Fatcat Entry</a>
</div>
{% endif %}
-<div class="ui segment attached accordion">
+<div class="ui segment attached">
<b><a href="/work/{{ release.work_id }}" title="work {{ release.work_id }}">Work Entity</a></b>
- <br>grouping other versions (eg, pre-print) and variants of this release
+ <br>access all versions, variants, and formats of this works (eg, pre-prints)
</div>
{% if release.state == "active" and release._can_citeproc %}
<div class="ui segment attached accordion">
<div class="title" style="padding: 0px;">
- <i class="dropdown icon"></i><b>Cite This Release</b>
+ <i class="dropdown icon"></i><b>Cite This</b>
</div>
<div class="content">
<a href="/release/{{ release.ident }}.bib">BibTeX</a>
diff --git a/python/fatcat_web/templates/search_macros.html b/python/fatcat_web/templates/search_macros.html
index a207bfbc..cb917c5f 100644
--- a/python/fatcat_web/templates/search_macros.html
+++ b/python/fatcat_web/templates/search_macros.html
@@ -9,7 +9,7 @@
{% endif %}
{{ found.offset + found.count_returned }}
- out of {{ found.count_found }} results
+ out of {{ '{0:,}'.format(found.count_found) }} results
</i>
{%- endmacro %}
@@ -28,7 +28,7 @@
{% endif %}
&nbsp;&nbsp;<i>Showing results {{ found.offset }} &mdash; {{ found.offset +
-found.count_returned }} out of {{ found.count_found }} results</i>&nbsp;&nbsp;
+found.count_returned }} out of {{ '{0:,}'.format(found.count_found) }} results</i>&nbsp;&nbsp;
{% if found.offset + found.limit < found.count_found and found.offset + found.limit < found.deep_page_limit %}
<a href="{{ url_for(endpoint, q=query.q, offset=found.offset + found.limit) }}">Next &#xbb;</a>
diff --git a/python/fatcat_web/templates/webcapture_view.html b/python/fatcat_web/templates/webcapture_view.html
index f2f689f3..b35ee0e2 100644
--- a/python/fatcat_web/templates/webcapture_view.html
+++ b/python/fatcat_web/templates/webcapture_view.html
@@ -8,7 +8,7 @@
<div class="ui stackable mobile reversed grid centered">
<div class="column" style="font-size: 16px; flex: 1;">
-<h3>Releases</h3>
+<h3>Associated Releases</h3>
{% if entity.releases != [] %}
{{ entity_macros.release_list(entity.releases) }}
{% else %}
@@ -16,8 +16,7 @@
This Web Capture is not associated with any fatcat release.
{% endif %}
-<br>
-<h3>Archive URLs</h3>
+<h3>Public Archive URLs</h3>
{% if webcapture.archive_urls != None %}
<table class="ui very basic compact single line fixed table">
<tbody>
@@ -42,7 +41,7 @@ No known public archive for this webcapture.
{% endif %}
-<h3>CDX Rows ({{ webcapture.cdx|count }})</h3>
+<h3>Captured Resources ({{ webcapture.cdx|count }})</h3>
{% if webcapture.cdx %}
<div class="ui celled list">
{% for row in webcapture.cdx %}
@@ -53,7 +52,7 @@ No known public archive for this webcapture.
</div>
<div style="margin-left: 1em;">
{{ row.timestamp.strftime("%Y-%m-%d %H:%M:%S") }}
- {% if row.mimetype %}| {{ row.mimetype }} {% endif %}
+ {% if row.mimetype %}| <code style="font-size: smaller;">{{ row.mimetype }}</code> {% endif %}
{% if row.size %}| {{ row.size|filesizeformat }} {% endif %}
<br>
<code><small style="color: #666;">
@@ -73,11 +72,13 @@ This web capture is empty (contains no resources).
<div class="column" style="flex: 0 0 24em;">
{% if webcapture.state == 'active' and webcapture.archive_urls != [] and webcapture.archive_urls[0].rel == "wayback" %}
-<a href="{{ webcapture.archive_urls[0].url }}{{ webcapture._wayback_suffix }}" class="ui top attached fluid huge green button"><i class="file archive outline icon"></i>View Web Archive</a>
+ <a href="{{ webcapture.archive_urls[0].url }}{{ webcapture._wayback_suffix }}" class="ui fluid huge black button" style="text-decoration: underline;">
+ <i class="university icon"></i>View Web Archive
+ </a>
{% endif %}
{% if webcapture.timestamp != None %}
-<div class="ui segment attached">
+<div class="ui segment top attached">
<p><b>Capture Time</b> &nbsp;{{ webcapture.timestamp.strftime("%Y-%m-%d %H:%M:%S") }}
</div>
{% endif %}