diff options
author | bnewbold <bnewbold@archive.org> | 2021-02-26 22:33:52 +0000 |
---|---|---|
committer | bnewbold <bnewbold@archive.org> | 2021-02-26 22:33:52 +0000 |
commit | df79a3dd9ffae5fcb8f32ea331c49ae4e9d998ed (patch) | |
tree | 1b4c4b589a43a36c0a11b578d6f4f96c3129213a /python/fatcat_web | |
parent | 67ee012ccc63ffcd98964ab58b2bcc49c5b6693a (diff) | |
parent | a5e9309c148019539127f41d7fefd722d0ae3bf2 (diff) | |
download | fatcat-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')
34 files changed, 554 insertions, 350 deletions
diff --git a/python/fatcat_web/auth.py b/python/fatcat_web/auth.py index ed9f2252..74b8e2d6 100644 --- a/python/fatcat_web/auth.py +++ b/python/fatcat_web/auth.py @@ -40,7 +40,11 @@ def handle_token_login(token): session['api_token'] = token session['editor'] = editor.to_dict() login_user(load_user(editor.editor_id)) - return redirect("/auth/account") + rp = "/auth/account" + if session.get('next'): + rp = session['next'] + session.pop('next') + return redirect(rp) # This will need to login/signup via fatcatd API, then set token in session def handle_oauth(remote, token, user_info): @@ -71,13 +75,6 @@ def handle_oauth(remote, token, user_info): editor = resp.editor api_token = resp.token - if http_status == 201: - flash("Welcome to Fatcat! An account has been created for you with a temporary username; you may wish to change it under account settings") - flash("You must use the same mechanism ({}) to login in the future".format(remote.name)) - flash("Check out 'The Guide' (linked above) for an editing quickstart tutorial") - else: - flash("Welcome back {}!".format(editor.username)) - # write token and username to session session.permanent = True session['api_token'] = api_token @@ -85,7 +82,11 @@ def handle_oauth(remote, token, user_info): # call login_user(load_user(editor_id)) login_user(load_user(editor.editor_id)) - return redirect("/auth/account") + rp = "/auth/account" + if session.get('next'): + rp = session['next'] + session.pop('next') + return redirect(rp) # XXX: what should this actually be? raise Exception("didn't receive OAuth user_info") diff --git a/python/fatcat_web/editing_routes.py b/python/fatcat_web/editing_routes.py index 8e3b03b0..61aade72 100644 --- a/python/fatcat_web/editing_routes.py +++ b/python/fatcat_web/editing_routes.py @@ -137,11 +137,7 @@ def form_editgroup_get_or_create(api, edit_form): except ApiException as ae: app.log.warning(ae) raise ae - # set this session editgroup_id - flash('Started new editgroup <a href="/editgroup/{}">{}</a>'.format( - eg.editgroup_id, - eg.editgroup_id, - )) + # set this session editgroup_id (TODO) return eg def generic_entity_edit(editgroup_id, entity_type, existing_ident, edit_template): diff --git a/python/fatcat_web/routes.py b/python/fatcat_web/routes.py index 02b5258a..7cf1f854 100644 --- a/python/fatcat_web/routes.py +++ b/python/fatcat_web/routes.py @@ -3,7 +3,7 @@ import os import json import citeproc_styles from flask import render_template, make_response, send_from_directory, \ - request, url_for, abort, redirect, jsonify, session, flash, Response + request, url_for, abort, redirect, jsonify, session, Response from flask_login import login_required from flask_wtf.csrf import CSRFError @@ -685,7 +685,7 @@ def generic_search(): if len(query.split()) != 1: # multi-term? must be a real search - return redirect(url_for('release_search', q=query)) + return redirect(url_for('release_search', q=query, generic=1)) if clean_doi(query): return redirect(url_for('release_lookup', doi=clean_doi(query))) @@ -704,7 +704,7 @@ def generic_search(): if clean_orcid(query): return redirect(url_for('creator_lookup', orcid=clean_orcid(query))) - return redirect(url_for('release_search', q=query)) + return redirect(url_for('release_search', q=query, generic=1)) @app.route('/release/search', methods=['GET', 'POST']) def release_search(): @@ -712,12 +712,21 @@ def release_search(): if 'q' not in request.args.keys(): return render_template('release_search.html', query=ReleaseQuery(), found=None) + container_found = None + if request.args.get('generic'): + container_query = GenericQuery.from_args(request.args) + container_query.limit = 1 + try: + container_found = do_container_search(container_query) + except Exception: + pass + query = ReleaseQuery.from_args(request.args) try: found = do_release_search(query) except FatcatSearchError as fse: return render_template('release_search.html', query=query, es_error=fse), fse.status_code - return render_template('release_search.html', query=query, found=found) + return render_template('release_search.html', query=query, found=found, container_found=container_found) @app.route('/container/search', methods=['GET', 'POST']) def container_search(): @@ -986,7 +995,7 @@ def health_json(): def login(): # show the user a list of login options if not priv_api: - flash("This web interface not configured with credentials to actually allow login (other than via token)") + app.log.warn("This web interface not configured with credentials to actually allow login (other than via token)") return render_template('auth_login.html') @app.route('/auth/ia/login', methods=['GET', 'POST']) @@ -1026,7 +1035,6 @@ def change_username(): # update our session session['editor'] = editor.to_dict() load_user(editor.editor_id) - flash("Username updated successfully") return redirect('/auth/account') @app.route('/auth/create_token', methods=['POST']) diff --git a/python/fatcat_web/search.py b/python/fatcat_web/search.py index 755b303a..6a419fa8 100644 --- a/python/fatcat_web/search.py +++ b/python/fatcat_web/search.py @@ -738,11 +738,12 @@ def get_elastic_container_preservation_by_volume(container_id: str) -> List[dict buckets = resp.aggregations.volume_preservation.buckets volume_nums = set([int(h['key']['volume']) for h in buckets if h['key']['volume'].isdigit()]) volume_dicts = dict() - for num in range(min(volume_nums), max(volume_nums)+1): - volume_dicts[num] = dict(volume=num, bright=0, dark=0, shadows_only=0, none=0) - for row in buckets: - if row['key']['volume'].isdigit(): - volume_dicts[int(row['key']['volume'])][row['key']['preservation']] = int(row['doc_count']) + if volume_nums: + for num in range(min(volume_nums), max(volume_nums)+1): + volume_dicts[num] = dict(volume=num, bright=0, dark=0, shadows_only=0, none=0) + for row in buckets: + if row['key']['volume'].isdigit(): + volume_dicts[int(row['key']['volume'])][row['key']['preservation']] = int(row['doc_count']) if app.config['FATCAT_MERGE_SHADOW_PRESERVATION']: for k in volume_dicts.keys(): volume_dicts[k]['none'] += volume_dicts[k]['shadows_only'] diff --git a/python/fatcat_web/static/fatcat_oa_preservation_jan2021.svg b/python/fatcat_web/static/fatcat_oa_preservation_jan2021.svg new file mode 100644 index 00000000..730a5efa --- /dev/null +++ b/python/fatcat_web/static/fatcat_oa_preservation_jan2021.svg @@ -0,0 +1,4 @@ +<?xml version='1.0' encoding='utf-8'?> +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533" class="pygal-chart" viewBox="0 0 1000 500"><!--Generated with pygal 2.4.0 (lxml) ©Kozea 2012-2016 on 2021-02-26--><!--http://pygal.org--><!--http://github.com/Kozea/pygal--><defs><style type="text/css">#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533{-webkit-user-select:none;-webkit-font-smoothing:antialiased;font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .title{font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:16px}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .legends .legend text{font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:14px}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .axis text{font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:10px}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .axis text.major{font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:10px}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .text-overlay text.value{font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:16px}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .text-overlay text.label{font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:10px}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .tooltip{font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:14px}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 text.no_data{font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:64px} +#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533{background-color:transparent}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 path,#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 line,#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 rect,#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 circle{-webkit-transition:150ms;-moz-transition:150ms;transition:150ms}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .graph > .background{fill:transparent}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .plot > .background{fill:rgba(240,240,240,0.7)}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .graph{fill:rgba(0,0,0,0.9)}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 text.no_data{fill:rgba(0,0,0,0.9)}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .title{fill:rgba(0,0,0,0.9)}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .legends .legend text{fill:rgba(0,0,0,0.9)}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .legends .legend:hover text{fill:rgba(0,0,0,0.9)}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .axis .line{stroke:rgba(0,0,0,0.9)}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .axis .guide.line{stroke:rgba(0,0,0,0.5)}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .axis .major.line{stroke:rgba(0,0,0,0.9)}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .axis text.major{fill:rgba(0,0,0,0.9)}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .axis.y .guides:hover .guide.line,#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .line-graph .axis.x .guides:hover .guide.line,#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .stackedline-graph .axis.x .guides:hover .guide.line,#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .xy-graph .axis.x .guides:hover .guide.line{stroke:rgba(0,0,0,0.9)}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .axis .guides:hover text{fill:rgba(0,0,0,0.9)}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .reactive{fill-opacity:.7;stroke-opacity:.8}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .ci{stroke:rgba(0,0,0,0.9)}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .reactive.active,#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .active .reactive{fill-opacity:.8;stroke-opacity:.9;stroke-width:4}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .ci .reactive.active{stroke-width:1.5}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .series text{fill:rgba(0,0,0,0.9)}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .tooltip rect{fill:rgba(240,240,240,0.7);stroke:rgba(0,0,0,0.9);-webkit-transition:opacity 150ms;-moz-transition:opacity 150ms;transition:opacity 150ms}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .tooltip .label{fill:rgba(0,0,0,0.9)}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .tooltip .label{fill:rgba(0,0,0,0.9)}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .tooltip .legend{font-size:.8em;fill:rgba(0,0,0,0.5)}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .tooltip .x_label{font-size:.6em;fill:rgba(0,0,0,0.9)}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .tooltip .xlink{font-size:.5em;text-decoration:underline}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .tooltip .value{font-size:1.5em}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .bound{font-size:.5em}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .max-value{font-size:.75em;fill:rgba(0,0,0,0.5)}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .map-element{fill:rgba(240,240,240,0.7);stroke:rgba(0,0,0,0.5) !important}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .map-element .reactive{fill-opacity:inherit;stroke-opacity:inherit}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .color-0,#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .color-0 a:visited{stroke:red;fill:red}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .color-1,#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .color-1 a:visited{stroke:darkolivegreen;fill:darkolivegreen}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .color-2,#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .color-2 a:visited{stroke:limegreen;fill:limegreen}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .text-overlay .color-0 text{fill:white}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .text-overlay .color-1 text{fill:white}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .text-overlay .color-2 text{fill:white} +#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 text.no_data{text-anchor:middle}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .guide.line{fill:none}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .centered{text-anchor:middle}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .title{text-anchor:middle}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .legends .legend text{fill-opacity:1}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .axis.x text{text-anchor:middle}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .axis.x:not(.web) text[transform]{text-anchor:start}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .axis.x:not(.web) text[transform].backwards{text-anchor:end}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .axis.y text{text-anchor:end}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .axis.y text[transform].backwards{text-anchor:start}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .axis.y2 text{text-anchor:start}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .axis.y2 text[transform].backwards{text-anchor:end}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .axis .guide.line{stroke-dasharray:4,4}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .axis .major.guide.line{stroke-dasharray:6,6}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .horizontal .axis.y .guide.line,#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .horizontal .axis.y2 .guide.line,#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .vertical .axis.x .guide.line{opacity:0}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .horizontal .axis.always_show .guide.line,#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .vertical .axis.always_show .guide.line{opacity:1 !important}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .axis.y .guides:hover .guide.line,#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .axis.y2 .guides:hover .guide.line,#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .axis.x .guides:hover .guide.line{opacity:1}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .axis .guides:hover text{opacity:1}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .nofill{fill:none}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .subtle-fill{fill-opacity:.2}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .dot{stroke-width:1px;fill-opacity:1}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .dot.active{stroke-width:5px}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .dot.negative{fill:transparent}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 text,#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 tspan{stroke:none !important}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .series text.active{opacity:1}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .tooltip rect{fill-opacity:.95;stroke-width:.5}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .tooltip text{fill-opacity:1}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .showable{visibility:hidden}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .showable.shown{visibility:visible}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .gauge-background{fill:rgba(229,229,229,1);stroke:none}#chart-95b0cbdb-ae89-4e10-b430-cd66abb0b533 .bg-lines{stroke:transparent;stroke-width:2px}</style><script type="text/javascript">window.pygal = window.pygal || {};window.pygal.config = window.pygal.config || {};window.pygal.config['95b0cbdb-ae89-4e10-b430-cd66abb0b533'] = {"allow_interruptions": false, "box_mode": "extremes", "classes": ["pygal-chart"], "css": ["file://style.css", "file://graph.css"], "defs": [], "disable_xml_declaration": false, "dots_size": 2.5, "dynamic_print_values": true, "explicit_size": false, "fill": false, "force_uri_protocol": "https", "formatter": null, "half_pie": false, "height": 500, "include_x_axis": false, "inner_radius": 0, "interpolate": null, "interpolation_parameters": {}, "interpolation_precision": 250, "inverse_y_axis": false, "js": ["//kozea.github.io/pygal.js/2.0.x/pygal-tooltips.min.js"], "legend_at_bottom": false, "legend_at_bottom_columns": null, "legend_box_size": 12, "logarithmic": false, "margin": 20, "margin_bottom": null, "margin_left": null, "margin_right": null, "margin_top": null, "max_scale": 16, "min_scale": 4, "missing_value_fill_truncation": "x", "no_data_text": "No data", "no_prefix": false, "order_min": null, "pretty_print": false, "print_labels": false, "print_values": false, "print_values_position": "center", "print_zeroes": true, "range": null, "rounded_bars": null, "secondary_range": null, "show_dots": true, "show_legend": true, "show_minor_x_labels": false, "show_minor_y_labels": true, "show_only_major_dots": false, "show_x_guides": false, "show_x_labels": true, "show_y_guides": true, "show_y_labels": true, "spacing": 10, "stack_from_top": false, "strict": false, "stroke": true, "stroke_style": null, "style": {"background": "transparent", "ci_colors": [], "colors": ["red", "darkolivegreen", "limegreen"], "font_family": "Consolas, \"Liberation Mono\", Menlo, Courier, monospace", "foreground": "rgba(0, 0, 0, 0.9)", "foreground_strong": "rgba(0, 0, 0, 0.9)", "foreground_subtle": "rgba(0, 0, 0, 0.5)", "guide_stroke_dasharray": "4,4", "label_font_family": "Consolas, \"Liberation Mono\", Menlo, Courier, monospace", "label_font_size": 10, "legend_font_family": "Consolas, \"Liberation Mono\", Menlo, Courier, monospace", "legend_font_size": 14, "major_guide_stroke_dasharray": "6,6", "major_label_font_family": "Consolas, \"Liberation Mono\", Menlo, Courier, monospace", "major_label_font_size": 10, "no_data_font_family": "Consolas, \"Liberation Mono\", Menlo, Courier, monospace", "no_data_font_size": 64, "opacity": ".7", "opacity_hover": ".8", "plot_background": "rgba(240, 240, 240, 0.7)", "stroke_opacity": ".8", "stroke_opacity_hover": ".9", "title_font_family": "Consolas, \"Liberation Mono\", Menlo, Courier, monospace", "title_font_size": 16, "tooltip_font_family": "Consolas, \"Liberation Mono\", Menlo, Courier, monospace", "tooltip_font_size": 14, "transition": "150ms", "value_background": "rgba(229, 229, 229, 1)", "value_colors": [], "value_font_family": "Consolas, \"Liberation Mono\", Menlo, Courier, monospace", "value_font_size": 16, "value_label_font_family": "Consolas, \"Liberation Mono\", Menlo, Courier, monospace", "value_label_font_size": 10}, "title": null, "tooltip_border_radius": 0, "tooltip_fancy_mode": true, "truncate_label": null, "truncate_legend": null, "width": 1000, "x_label_rotation": 20, "x_labels": ["1996", "1997", "1998", "1999", "2000", "2001", "2002", "2003", "2004", "2005", "2006", "2007", "2008", "2009", "2010", "2011", "2012", "2013", "2014", "2015", "2016", "2017", "2018", "2019"], "x_labels_major": null, "x_labels_major_count": 24, "x_labels_major_every": null, "x_title": "Year", "xrange": null, "y_label_rotation": 0, "y_labels": null, "y_labels_major": null, "y_labels_major_count": null, "y_labels_major_every": null, "y_title": null, "zero": 0, "legends": ["None", "Dark", "Bright"]}</script><script type="text/javascript" xlink:href="https://kozea.github.io/pygal.js/2.0.x/pygal-tooltips.min.js"/></defs><title>Pygal</title><g class="graph stackedbar-graph vertical"><rect x="0" y="0" width="1000" height="500" class="background"/><g transform="translate(144, 20)" class="plot"><rect x="0" y="0" width="833.0473771011382" height="414" class="background"/><g class="axis y always_show"><g class="guides"><path d="M0.000000 406.038462 h833.047377" class="axis major line"/><text x="-5" y="409.53846153846155" class="major">0</text><title>0</title></g><g class="guides"><path d="M0.000000 362.135283 h833.047377" class="guide line"/><text x="-5" y="365.63528319013477" class="">200000</text><title>200000</title></g><g class="guides"><path d="M0.000000 318.232105 h833.047377" class="guide line"/><text x="-5" y="321.73210484180794" class="">400000</text><title>400000</title></g><g class="guides"><path d="M0.000000 274.328926 h833.047377" class="guide line"/><text x="-5" y="277.82892649348116" class="">600000</text><title>600000</title></g><g class="guides"><path d="M0.000000 230.425748 h833.047377" class="guide line"/><text x="-5" y="233.92574814515436" class="">800000</text><title>800000</title></g><g class="guides"><path d="M0.000000 186.522570 h833.047377" class="major guide line"/><text x="-5" y="190.02256979682755" class="major">1000000</text><title>1000000</title></g><g class="guides"><path d="M0.000000 142.619391 h833.047377" class="guide line"/><text x="-5" y="146.11939144850072" class="">1200000</text><title>1200000</title></g><g class="guides"><path d="M0.000000 98.716213 h833.047377" class="guide line"/><text x="-5" y="102.21621310017395" class="">1400000</text><title>1400000</title></g><g class="guides"><path d="M0.000000 54.813035 h833.047377" class="guide line"/><text x="-5" y="58.31303475184717" class="">1600000</text><title>1600000</title></g><g class="guides"><path d="M0.000000 10.909856 h833.047377" class="guide line"/><text x="-5" y="14.409856403520337" class="">1800000</text><title>1800000</title></g></g><g class="axis x"><path d="M0.000000 0.000000 v414.000000" class="line"/><g class="guides"><path d="M32.707790 0.000000 v414.000000" class="major guide line"/><text x="32.707789645797895" y="429.0" class="major" transform="rotate(20 32.707790 429.000000)">1996</text></g><g class="guides"><path d="M66.083085 0.000000 v414.000000" class="major guide line"/><text x="66.08308520273452" y="429.0" class="major" transform="rotate(20 66.083085 429.000000)">1997</text></g><g class="guides"><path d="M99.458381 0.000000 v414.000000" class="major guide line"/><text x="99.45838075967116" y="429.0" class="major" transform="rotate(20 99.458381 429.000000)">1998</text></g><g class="guides"><path d="M132.833676 0.000000 v414.000000" class="major guide line"/><text x="132.83367631660778" y="429.0" class="major" transform="rotate(20 132.833676 429.000000)">1999</text></g><g class="guides"><path d="M166.208972 0.000000 v414.000000" class="major guide line"/><text x="166.20897187354439" y="429.0" class="major" transform="rotate(20 166.208972 429.000000)">2000</text></g><g class="guides"><path d="M199.584267 0.000000 v414.000000" class="major guide line"/><text x="199.584267430481" y="429.0" class="major" transform="rotate(20 199.584267 429.000000)">2001</text></g><g class="guides"><path d="M232.959563 0.000000 v414.000000" class="major guide line"/><text x="232.95956298741766" y="429.0" class="major" transform="rotate(20 232.959563 429.000000)">2002</text></g><g class="guides"><path d="M266.334859 0.000000 v414.000000" class="major guide line"/><text x="266.3348585443543" y="429.0" class="major" transform="rotate(20 266.334859 429.000000)">2003</text></g><g class="guides"><path d="M299.710154 0.000000 v414.000000" class="major guide line"/><text x="299.7101541012909" y="429.0" class="major" transform="rotate(20 299.710154 429.000000)">2004</text></g><g class="guides"><path d="M333.085450 0.000000 v414.000000" class="major guide line"/><text x="333.0854496582275" y="429.0" class="major" transform="rotate(20 333.085450 429.000000)">2005</text></g><g class="guides"><path d="M366.460745 0.000000 v414.000000" class="major guide line"/><text x="366.46074521516414" y="429.0" class="major" transform="rotate(20 366.460745 429.000000)">2006</text></g><g class="guides"><path d="M399.836041 0.000000 v414.000000" class="major guide line"/><text x="399.83604077210083" y="429.0" class="major" transform="rotate(20 399.836041 429.000000)">2007</text></g><g class="guides"><path d="M433.211336 0.000000 v414.000000" class="major guide line"/><text x="433.21133632903747" y="429.0" class="major" transform="rotate(20 433.211336 429.000000)">2008</text></g><g class="guides"><path d="M466.586632 0.000000 v414.000000" class="major guide line"/><text x="466.58663188597404" y="429.0" class="major" transform="rotate(20 466.586632 429.000000)">2009</text></g><g class="guides"><path d="M499.961927 0.000000 v414.000000" class="major guide line"/><text x="499.9619274429107" y="429.0" class="major" transform="rotate(20 499.961927 429.000000)">2010</text></g><g class="guides"><path d="M533.337223 0.000000 v414.000000" class="major guide line"/><text x="533.3372229998473" y="429.0" class="major" transform="rotate(20 533.337223 429.000000)">2011</text></g><g class="guides"><path d="M566.712519 0.000000 v414.000000" class="major guide line"/><text x="566.712518556784" y="429.0" class="major" transform="rotate(20 566.712519 429.000000)">2012</text></g><g class="guides"><path d="M600.087814 0.000000 v414.000000" class="major guide line"/><text x="600.0878141137205" y="429.0" class="major" transform="rotate(20 600.087814 429.000000)">2013</text></g><g class="guides"><path d="M633.463110 0.000000 v414.000000" class="major guide line"/><text x="633.4631096706572" y="429.0" class="major" transform="rotate(20 633.463110 429.000000)">2014</text></g><g class="guides"><path d="M666.838405 0.000000 v414.000000" class="major guide line"/><text x="666.8384052275937" y="429.0" class="major" transform="rotate(20 666.838405 429.000000)">2015</text></g><g class="guides"><path d="M700.213701 0.000000 v414.000000" class="major guide line"/><text x="700.2137007845304" y="429.0" class="major" transform="rotate(20 700.213701 429.000000)">2016</text></g><g class="guides"><path d="M733.588996 0.000000 v414.000000" class="major guide line"/><text x="733.5889963414671" y="429.0" class="major" transform="rotate(20 733.588996 429.000000)">2017</text></g><g class="guides"><path d="M766.964292 0.000000 v414.000000" class="major guide line"/><text x="766.9642918984036" y="429.0" class="major" transform="rotate(20 766.964292 429.000000)">2018</text></g><g class="guides"><path d="M800.339587 0.000000 v414.000000" class="major guide line"/><text x="800.3395874553403" y="429.0" class="major" transform="rotate(20 800.339587 429.000000)">2019</text></g></g><g class="series serie-0 color-0"><g class="bars"><g class="bar"><rect x="18.02265960074578" y="401.74165747351077" rx="0" ry="0" width="29.37026009010423" height="4.296804064950777" class="rect reactive tooltip-trigger"/><desc class="value">19574</desc><desc class="x centered">32.707789645797895</desc><desc class="y centered">403.8900595059862</desc><desc class="x_label">1996</desc></g><g class="bar"><rect x="51.3979551576824" y="401.3256748586604" rx="0" ry="0" width="29.37026009010423" height="4.712786679801127" class="rect reactive tooltip-trigger"/><desc class="value">21469</desc><desc class="x centered">66.08308520273451</desc><desc class="y centered">403.68206819856096</desc><desc class="x_label">1997</desc></g><g class="bar"><rect x="84.77325071461902" y="401.24006366088116" rx="0" ry="0" width="29.37026009010423" height="4.798397877580385" class="rect reactive tooltip-trigger"/><desc class="value">21859</desc><desc class="x centered">99.45838075967114</desc><desc class="y centered">403.6392625996714</desc><desc class="x_label">1998</desc></g><g class="bar"><rect x="118.14854627155565" y="400.8232029824638" rx="0" ry="0" width="29.37026009010423" height="5.215258555997764" class="rect reactive tooltip-trigger"/><desc class="value">23758</desc><desc class="x centered">132.83367631660775</desc><desc class="y centered">403.4308322604627</desc><desc class="x_label">1999</desc></g><g class="bar"><rect x="151.52384182849227" y="400.15543563978576" rx="0" ry="0" width="29.37026009010423" height="5.883025898675783" class="rect reactive tooltip-trigger"/><desc class="value">26800</desc><desc class="x centered">166.20897187354439</desc><desc class="y centered">403.09694858912366</desc><desc class="x_label">2000</desc></g><g class="bar"><rect x="184.8991373854289" y="399.78050249669104" rx="0" ry="0" width="29.37026009010423" height="6.257959041770505" class="rect reactive tooltip-trigger"/><desc class="value">28508</desc><desc class="x centered">199.58426743048102</desc><desc class="y centered">402.9094820175763</desc><desc class="x_label">2001</desc></g><g class="bar"><rect x="218.27443294236554" y="399.4659362238253" rx="0" ry="0" width="29.37026009010423" height="6.572525314636266" class="rect reactive tooltip-trigger"/><desc class="value">29941</desc><desc class="x centered">232.95956298741766</desc><desc class="y centered">402.7521988811434</desc><desc class="x_label">2002</desc></g><g class="bar"><rect x="251.64972849930217" y="398.5874336250753" rx="0" ry="0" width="29.37026009010423" height="7.45102791338627" class="rect reactive tooltip-trigger"/><desc class="value">33943</desc><desc class="x centered">266.3348585443543</desc><desc class="y centered">402.3129475817684</desc><desc class="x_label">2003</desc></g><g class="bar"><rect x="285.0250240562388" y="398.2482815723344" rx="0" ry="0" width="29.37026009010423" height="7.790179966127141" class="rect reactive tooltip-trigger"/><desc class="value">35488</desc><desc class="x centered">299.7101541012909</desc><desc class="y centered">402.14337155539795</desc><desc class="x_label">2004</desc></g><g class="bar"><rect x="318.40031961317544" y="397.38887685616595" rx="0" ry="0" width="29.37026009010423" height="8.649584682295597" class="rect reactive tooltip-trigger"/><desc class="value">39403</desc><desc class="x centered">333.08544965822756</desc><desc class="y centered">401.7136691973137</desc><desc class="x_label">2005</desc></g><g class="bar"><rect x="351.7756151701121" y="396.5415455140432" rx="0" ry="0" width="29.37026009010423" height="9.49691602441834" class="rect reactive tooltip-trigger"/><desc class="value">43263</desc><desc class="x centered">366.4607452151642</desc><desc class="y centered">401.29000352625235</desc><desc class="x_label">2006</desc></g><g class="bar"><rect x="385.15091072704865" y="395.62682279315584" rx="0" ry="0" width="29.37026009010423" height="10.411638745305709" class="rect reactive tooltip-trigger"/><desc class="value">47430</desc><desc class="x centered">399.8360407721008</desc><desc class="y centered">400.8326421658087</desc><desc class="x_label">2007</desc></g><g class="bar"><rect x="418.5262062839853" y="394.43155876262267" rx="0" ry="0" width="29.37026009010423" height="11.606902775838876" class="rect reactive tooltip-trigger"/><desc class="value">52875</desc><desc class="x centered">433.2113363290374</desc><desc class="y centered">400.2350101505421</desc><desc class="x_label">2008</desc></g><g class="bar"><rect x="451.90150184092187" y="393.97518522369177" rx="0" ry="0" width="29.37026009010423" height="12.06327631476978" class="rect reactive tooltip-trigger"/><desc class="value">54954</desc><desc class="x centered">466.586631885974</desc><desc class="y centered">400.00682338107663</desc><desc class="x_label">2009</desc></g><g class="bar"><rect x="485.27679739785856" y="391.48214324118203" rx="0" ry="0" width="29.37026009010423" height="14.556318297279518" class="rect reactive tooltip-trigger"/><desc class="value">66311</desc><desc class="x centered">499.9619274429107</desc><desc class="y centered">398.7603023898218</desc><desc class="x_label">2010</desc></g><g class="bar"><rect x="518.6520929547952" y="391.5286806102313" rx="0" ry="0" width="29.37026009010423" height="14.50978092823027" class="rect reactive tooltip-trigger"/><desc class="value">66099</desc><desc class="x centered">533.3372229998473</desc><desc class="y centered">398.7835710743464</desc><desc class="x_label">2011</desc></g><g class="bar"><rect x="552.0273885117317" y="389.1462746371593" rx="0" ry="0" width="29.37026009010423" height="16.89218690130224" class="rect reactive tooltip-trigger"/><desc class="value">76952</desc><desc class="x centered">566.7125185567838</desc><desc class="y centered">397.5923680878104</desc><desc class="x_label">2012</desc></g><g class="bar"><rect x="585.4026840686685" y="389.791431842988" rx="0" ry="0" width="29.37026009010423" height="16.247029695473543" class="rect reactive tooltip-trigger"/><desc class="value">74013</desc><desc class="x centered">600.0878141137206</desc><desc class="y centered">397.9149466907248</desc><desc class="x_label">2013</desc></g><g class="bar"><rect x="618.7779796256051" y="355.0791643659917" rx="0" ry="0" width="29.37026009010423" height="50.95929717246986" class="rect reactive tooltip-trigger"/><desc class="value">232144</desc><desc class="x centered">633.4631096706572</desc><desc class="y centered">380.5588129522266</desc><desc class="x_label">2014</desc></g><g class="bar"><rect x="652.1532751825416" y="376.8478968023343" rx="0" ry="0" width="29.37026009010423" height="29.19056473612727" class="rect reactive tooltip-trigger"/><desc class="value">132977</desc><desc class="x centered">666.8384052275937</desc><desc class="y centered">391.4431791703979</desc><desc class="x_label">2015</desc></g><g class="bar"><rect x="685.5285707394784" y="376.42115790878853" rx="0" ry="0" width="29.37026009010423" height="29.617303629673017" class="rect reactive tooltip-trigger"/><desc class="value">134921</desc><desc class="x centered">700.2137007845305</desc><desc class="y centered">391.22980972362507</desc><desc class="x_label">2016</desc></g><g class="bar"><rect x="718.9038662964149" y="371.9074721427971" rx="0" ry="0" width="29.37026009010423" height="34.13098939566447" class="rect reactive tooltip-trigger"/><desc class="value">155483</desc><desc class="x centered">733.588996341467</desc><desc class="y centered">388.9729668406293</desc><desc class="x_label">2017</desc></g><g class="bar"><rect x="752.2791618533515" y="366.5734554893671" rx="0" ry="0" width="29.37026009010423" height="39.46500604909443" class="rect reactive tooltip-trigger"/><desc class="value">179782</desc><desc class="x centered">766.9642918984036</desc><desc class="y centered">386.30595851391433</desc><desc class="x_label">2018</desc></g><g class="bar"><rect x="785.6544574102882" y="360.5971353367011" rx="0" ry="0" width="29.37026009010423" height="45.44132620176043" class="rect reactive tooltip-trigger"/><desc class="value">207007</desc><desc class="x centered">800.3395874553403</desc><desc class="y centered">383.31779843758136</desc><desc class="x_label">2019</desc></g></g></g><g class="series serie-1 color-1"><g class="bars"><g class="bar"><rect x="18.02265960074578" y="391.5495346199467" rx="0" ry="0" width="29.37026009010423" height="10.192122853564058" class="rect reactive tooltip-trigger"/><desc class="value">46430</desc><desc class="x centered">32.707789645797895</desc><desc class="y centered">396.64559604672877</desc><desc class="x_label">1996</desc></g><g class="bar"><rect x="51.3979551576824" y="391.1381618388229" rx="0" ry="0" width="29.37026009010423" height="10.187513019837525" class="rect reactive tooltip-trigger"/><desc class="value">46409</desc><desc class="x centered">66.08308520273451</desc><desc class="y centered">396.23191834874166</desc><desc class="x_label">1997</desc></g><g class="bar"><rect x="84.77325071461902" y="390.4978339826126" rx="0" ry="0" width="29.37026009010423" height="10.742229678268586" class="rect reactive tooltip-trigger"/><desc class="value">48936</desc><desc class="x centered">99.45838075967114</desc><desc class="y centered">395.86894882174687</desc><desc class="x_label">1998</desc></g><g class="bar"><rect x="118.14854627155565" y="390.44119888254323" rx="0" ry="0" width="29.37026009010423" height="10.38200409992055" class="rect reactive tooltip-trigger"/><desc class="value">47295</desc><desc class="x centered">132.83367631660775</desc><desc class="y centered">395.6322009325035</desc><desc class="x_label">1999</desc></g><g class="bar"><rect x="151.52384182849227" y="389.1203717619338" rx="0" ry="0" width="29.37026009010423" height="11.03506387785194" class="rect reactive tooltip-trigger"/><desc class="value">50270</desc><desc class="x centered">166.20897187354439</desc><desc class="y centered">394.6379037008598</desc><desc class="x_label">2000</desc></g><g class="bar"><rect x="184.8991373854289" y="389.1162009599907" rx="0" ry="0" width="29.37026009010423" height="10.66430153670035" class="rect reactive tooltip-trigger"/><desc class="value">48581</desc><desc class="x centered">199.58426743048102</desc><desc class="y centered">394.44835172834087</desc><desc class="x_label">2001</desc></g><g class="bar"><rect x="218.27443294236554" y="388.5197762821287" rx="0" ry="0" width="29.37026009010423" height="10.946159941696578" class="rect reactive tooltip-trigger"/><desc class="value">49865</desc><desc class="x centered">232.95956298741766</desc><desc class="y centered">393.992856252977</desc><desc class="x_label">2002</desc></g><g class="bar"><rect x="251.64972849930217" y="387.4037574885142" rx="0" ry="0" width="29.37026009010423" height="11.183676136561076" class="rect reactive tooltip-trigger"/><desc class="value">50947</desc><desc class="x centered">266.3348585443543</desc><desc class="y centered">392.99559555679474</desc><desc class="x_label">2003</desc></g><g class="bar"><rect x="285.0250240562388" y="386.2793970910136" rx="0" ry="0" width="29.37026009010423" height="11.9688844813208" class="rect reactive tooltip-trigger"/><desc class="value">54524</desc><desc class="x centered">299.7101541012909</desc><desc class="y centered">392.26383933167403</desc><desc class="x_label">2004</desc></g><g class="bar"><rect x="318.40031961317544" y="385.0272784445193" rx="0" ry="0" width="29.37026009010423" height="12.36159841164664" class="rect reactive tooltip-trigger"/><desc class="value">56313</desc><desc class="x centered">333.08544965822756</desc><desc class="y centered">391.2080776503426</desc><desc class="x_label">2005</desc></g><g class="bar"><rect x="351.7756151701121" y="384.18697161093235" rx="0" ry="0" width="29.37026009010423" height="12.354573903110861" class="rect reactive tooltip-trigger"/><desc class="value">56281</desc><desc class="x centered">366.4607452151642</desc><desc class="y centered">390.36425856248775</desc><desc class="x_label">2006</desc></g><g class="bar"><rect x="385.15091072704865" y="380.47298223855563" rx="0" ry="0" width="29.37026009010423" height="15.153840554600208" class="rect reactive tooltip-trigger"/><desc class="value">69033</desc><desc class="x centered">399.8360407721008</desc><desc class="y centered">388.0499025158557</desc><desc class="x_label">2007</desc></g><g class="bar"><rect x="418.5262062839853" y="379.07686116707885" rx="0" ry="0" width="29.37026009010423" height="15.354697595543826" class="rect reactive tooltip-trigger"/><desc class="value">69948</desc><desc class="x centered">433.2113363290374</desc><desc class="y centered">386.75420996485076</desc><desc class="x_label">2008</desc></g><g class="bar"><rect x="451.90150184092187" y="376.42752386964906" rx="0" ry="0" width="29.37026009010423" height="17.547661354042702" class="rect reactive tooltip-trigger"/><desc class="value">79938</desc><desc class="x centered">466.586631885974</desc><desc class="y centered">385.2013545466704</desc><desc class="x_label">2009</desc></g><g class="bar"><rect x="485.27679739785856" y="371.6510775812428" rx="0" ry="0" width="29.37026009010423" height="19.831065659939213" class="rect reactive tooltip-trigger"/><desc class="value">90340</desc><desc class="x centered">499.9619274429107</desc><desc class="y centered">381.5666104112124</desc><desc class="x_label">2010</desc></g><g class="bar"><rect x="518.6520929547952" y="372.15464703689815" rx="0" ry="0" width="29.37026009010423" height="19.374033573333122" class="rect reactive tooltip-trigger"/><desc class="value">88258</desc><desc class="x centered">533.3372229998473</desc><desc class="y centered">381.8416638235647</desc><desc class="x_label">2011</desc></g><g class="bar"><rect x="552.0273885117317" y="367.9711131720861" rx="0" ry="0" width="29.37026009010423" height="21.175161465073188" class="rect reactive tooltip-trigger"/><desc class="value">96463</desc><desc class="x centered">566.7125185567838</desc><desc class="y centered">378.5586939046227</desc><desc class="x_label">2012</desc></g><g class="bar"><rect x="585.4026840686685" y="363.1160801944364" rx="0" ry="0" width="29.37026009010423" height="26.67535164855161" class="rect reactive tooltip-trigger"/><desc class="value">121519</desc><desc class="x centered">600.0878141137206</desc><desc class="y centered">376.45375601871217</desc><desc class="x_label">2013</desc></g><g class="bar"><rect x="618.7779796256051" y="325.63220506831016" rx="0" ry="0" width="29.37026009010423" height="29.44695929768153" class="rect reactive tooltip-trigger"/><desc class="value">134145</desc><desc class="x centered">633.4631096706572</desc><desc class="y centered">340.3556847171509</desc><desc class="x_label">2014</desc></g><g class="bar"><rect x="652.1532751825416" y="344.4866445258909" rx="0" ry="0" width="29.37026009010423" height="32.361252276443395" class="rect reactive tooltip-trigger"/><desc class="value">147421</desc><desc class="x centered">666.8384052275937</desc><desc class="y centered">360.6672706641126</desc><desc class="x_label">2015</desc></g><g class="bar"><rect x="685.5285707394784" y="340.7454351829382" rx="0" ry="0" width="29.37026009010423" height="35.675722725850335" class="rect reactive tooltip-trigger"/><desc class="value">162520</desc><desc class="x centered">700.2137007845305</desc><desc class="y centered">358.5832965458634</desc><desc class="x_label">2016</desc></g><g class="bar"><rect x="718.9038662964149" y="328.8966258944" rx="0" ry="0" width="29.37026009010423" height="43.01084624839706" class="rect reactive tooltip-trigger"/><desc class="value">195935</desc><desc class="x centered">733.588996341467</desc><desc class="y centered">350.4020490185985</desc><desc class="x_label">2017</desc></g><g class="bar"><rect x="752.2791618533515" y="315.41198418060316" rx="0" ry="0" width="29.37026009010423" height="51.161471308763964" class="rect reactive tooltip-trigger"/><desc class="value">233065</desc><desc class="x centered">766.9642918984036</desc><desc class="y centered">340.9927198349851</desc><desc class="x_label">2018</desc></g><g class="bar"><rect x="785.6544574102882" y="293.32670982836913" rx="0" ry="0" width="29.37026009010423" height="67.27042550833198" class="rect reactive tooltip-trigger"/><desc class="value">306449</desc><desc class="x centered">800.3395874553403</desc><desc class="y centered">326.9619225825351</desc><desc class="x_label">2019</desc></g></g></g><g class="series serie-2 color-2"><g class="bars"><g class="bar"><rect x="18.02265960074578" y="380.74891371447484" rx="0" ry="0" width="29.37026009010423" height="10.800620905471874" class="rect reactive tooltip-trigger"/><desc class="value">49202</desc><desc class="x centered">32.707789645797895</desc><desc class="y centered">386.1492241672108</desc><desc class="x_label">1996</desc></g><g class="bar"><rect x="51.3979551576824" y="379.34949990462195" rx="0" ry="0" width="29.37026009010423" height="11.788661934200945" class="rect reactive tooltip-trigger"/><desc class="value">53703</desc><desc class="x centered">66.08308520273451</desc><desc class="y centered">385.2438308717224</desc><desc class="x_label">1997</desc></g><g class="bar"><rect x="84.77325071461902" y="377.6721789758241" rx="0" ry="0" width="29.37026009010423" height="12.825655006788452" class="rect reactive tooltip-trigger"/><desc class="value">58427</desc><desc class="x centered">99.45838075967114</desc><desc class="y centered">384.08500647921835</desc><desc class="x_label">1998</desc></g><g class="bar"><rect x="118.14854627155565" y="376.17332446701226" rx="0" ry="0" width="29.37026009010423" height="14.267874415530969" class="rect reactive tooltip-trigger"/><desc class="value">64997</desc><desc class="x centered">132.83367631660775</desc><desc class="y centered">383.30726167477775</desc><desc class="x_label">1999</desc></g><g class="bar"><rect x="151.52384182849227" y="372.6408747371059" rx="0" ry="0" width="29.37026009010423" height="16.479497024827936" class="rect reactive tooltip-trigger"/><desc class="value">75072</desc><desc class="x centered">166.20897187354439</desc><desc class="y centered">380.8806232495199</desc><desc class="x_label">2000</desc></g><g class="bar"><rect x="184.8991373854289" y="369.9548782857552" rx="0" ry="0" width="29.37026009010423" height="19.161322674235464" class="rect reactive tooltip-trigger"/><desc class="value">87289</desc><desc class="x centered">199.58426743048102</desc><desc class="y centered">379.535539622873</desc><desc class="x_label">2001</desc></g><g class="bar"><rect x="218.27443294236554" y="367.13936745827704" rx="0" ry="0" width="29.37026009010423" height="21.380408823851667" class="rect reactive tooltip-trigger"/><desc class="value">97398</desc><desc class="x centered">232.95956298741766</desc><desc class="y centered">377.82957187020287</desc><desc class="x_label">2002</desc></g><g class="bar"><rect x="251.64972849930217" y="362.87241755460315" rx="0" ry="0" width="29.37026009010423" height="24.531339933911056" class="rect reactive tooltip-trigger"/><desc class="value">111752</desc><desc class="x centered">266.3348585443543</desc><desc class="y centered">375.13808752155865</desc><desc class="x_label">2003</desc></g><g class="bar"><rect x="285.0250240562388" y="357.68437896918135" rx="0" ry="0" width="29.37026009010423" height="28.595018121832254" class="rect reactive tooltip-trigger"/><desc class="value">130264</desc><desc class="x centered">299.7101541012909</desc><desc class="y centered">371.9818880300975</desc><desc class="x_label">2004</desc></g><g class="bar"><rect x="318.40031961317544" y="352.2985565653004" rx="0" ry="0" width="29.37026009010423" height="32.72872187921894" class="rect reactive tooltip-trigger"/><desc class="value">149095</desc><desc class="x centered">333.08544965822756</desc><desc class="y centered">368.66291750490984</desc><desc class="x_label">2005</desc></g><g class="bar"><rect x="351.7756151701121" y="345.51793018529304" rx="0" ry="0" width="29.37026009010423" height="38.66904142563931" class="rect reactive tooltip-trigger"/><desc class="value">176156</desc><desc class="x centered">366.4607452151642</desc><desc class="y centered">364.8524508981127</desc><desc class="x_label">2006</desc></g><g class="bar"><rect x="385.15091072704865" y="334.7851396903693" rx="0" ry="0" width="29.37026009010423" height="45.687842548186325" class="rect reactive tooltip-trigger"/><desc class="value">208130</desc><desc class="x centered">399.8360407721008</desc><desc class="y centered">357.6290609644625</desc><desc class="x_label">2007</desc></g><g class="bar"><rect x="418.5262062839853" y="310.766369363675" rx="0" ry="0" width="29.37026009010423" height="68.31049180340386" class="rect reactive tooltip-trigger"/><desc class="value">311187</desc><desc class="x centered">433.2113363290374</desc><desc class="y centered">344.9216152653769</desc><desc class="x_label">2008</desc></g><g class="bar"><rect x="451.90150184092187" y="293.19082949138107" rx="0" ry="0" width="29.37026009010423" height="83.236694378268" class="rect reactive tooltip-trigger"/><desc class="value">379183</desc><desc class="x centered">466.586631885974</desc><desc class="y centered">334.80917668051507</desc><desc class="x_label">2009</desc></g><g class="bar"><rect x="485.27679739785856" y="274.90361909806074" rx="0" ry="0" width="29.37026009010423" height="96.74745848318207" class="rect reactive tooltip-trigger"/><desc class="value">440731</desc><desc class="x centered">499.9619274429107</desc><desc class="y centered">323.2773483396518</desc><desc class="x_label">2010</desc></g><g class="bar"><rect x="518.6520929547952" y="257.1287587960654" rx="0" ry="0" width="29.37026009010423" height="115.02588824083273" class="rect reactive tooltip-trigger"/><desc class="value">523998</desc><desc class="x centered">533.3372229998473</desc><desc class="y centered">314.6417029164818</desc><desc class="x_label">2011</desc></g><g class="bar"><rect x="552.0273885117317" y="228.2062229637547" rx="0" ry="0" width="29.37026009010423" height="139.76489020833142" class="rect reactive tooltip-trigger"/><desc class="value">636696</desc><desc class="x centered">566.7125185567838</desc><desc class="y centered">298.0886680679204</desc><desc class="x_label">2012</desc></g><g class="bar"><rect x="585.4026840686685" y="198.62865171048693" rx="0" ry="0" width="29.37026009010423" height="164.48742848394946" class="rect reactive tooltip-trigger"/><desc class="value">749319</desc><desc class="x centered">600.0878141137206</desc><desc class="y centered">280.8723659524617</desc><desc class="x_label">2013</desc></g><g class="bar"><rect x="618.7779796256051" y="135.33321996981243" rx="0" ry="0" width="29.37026009010423" height="190.29898509849772" class="rect reactive tooltip-trigger"/><desc class="value">866903</desc><desc class="x centered">633.4631096706572</desc><desc class="y centered">230.4827125190613</desc><desc class="x_label">2014</desc></g><g class="bar"><rect x="652.1532751825416" y="126.96944497856441" rx="0" ry="0" width="29.37026009010423" height="217.51719954732647" class="rect reactive tooltip-trigger"/><desc class="value">990895</desc><desc class="x centered">666.8384052275937</desc><desc class="y centered">235.72804475222765</desc><desc class="x_label">2015</desc></g><g class="bar"><rect x="685.5285707394784" y="100.97964145992194" rx="0" ry="0" width="29.37026009010423" height="239.76579372301626" class="rect reactive tooltip-trigger"/><desc class="value">1092248</desc><desc class="x centered">700.2137007845305</desc><desc class="y centered">220.86253832143007</desc><desc class="x_label">2016</desc></g><g class="bar"><rect x="718.9038662964149" y="70.62256927507963" rx="0" ry="0" width="29.37026009010423" height="258.2740566193204" class="rect reactive tooltip-trigger"/><desc class="value">1176562</desc><desc class="x centered">733.588996341467</desc><desc class="y centered">199.75959758473982</desc><desc class="x_label">2017</desc></g><g class="bar"><rect x="752.2791618533515" y="48.72981035990301" rx="0" ry="0" width="29.37026009010423" height="266.68217382070014" class="rect reactive tooltip-trigger"/><desc class="value">1214865</desc><desc class="x centered">766.9642918984036</desc><desc class="y centered">182.07089727025308</desc><desc class="x_label">2018</desc></g><g class="bar"><rect x="785.6544574102882" y="7.961538461538453" rx="0" ry="0" width="29.37026009010423" height="285.3651713668307" class="rect reactive tooltip-trigger"/><desc class="value">1299975</desc><desc class="x centered">800.3395874553403</desc><desc class="y centered">150.6441241449538</desc><desc class="x_label">2019</desc></g></g></g></g><g class="titles"><text x="560.9236885505691" y="480" class="title">Year</text></g><g transform="translate(144, 20)" class="plot overlay"><g class="series serie-0 color-0"/><g class="series serie-1 color-1"/><g class="series serie-2 color-2"/></g><g transform="translate(144, 20)" class="plot text-overlay"><g class="series serie-0 color-0"><text text-anchor="middle" x="32.707789645797895" y="409.2233928393195" class="value showable">19574</text><text text-anchor="middle" x="66.08308520273451" y="409.01540153189427" class="value showable">21469</text><text text-anchor="middle" x="99.45838075967114" y="408.9725959330047" class="value showable">21859</text><text text-anchor="middle" x="132.83367631660775" y="408.764165593796" class="value showable">23758</text><text text-anchor="middle" x="166.20897187354439" y="408.43028192245697" class="value showable">26800</text><text text-anchor="middle" x="199.58426743048102" y="408.2428153509096" class="value showable">28508</text><text text-anchor="middle" x="232.95956298741766" y="408.0855322144767" class="value showable">29941</text><text text-anchor="middle" x="266.3348585443543" y="407.6462809151017" class="value showable">33943</text><text text-anchor="middle" x="299.7101541012909" y="407.47670488873126" class="value showable">35488</text><text text-anchor="middle" x="333.08544965822756" y="407.04700253064703" class="value showable">39403</text><text text-anchor="middle" x="366.4607452151642" y="406.62333685958566" class="value showable">43263</text><text text-anchor="middle" x="399.8360407721008" y="406.165975499142" class="value showable">47430</text><text text-anchor="middle" x="433.2113363290374" y="405.5683434838754" class="value showable">52875</text><text text-anchor="middle" x="466.586631885974" y="405.34015671440994" class="value showable">54954</text><text text-anchor="middle" x="499.9619274429107" y="404.0936357231551" class="value showable">66311</text><text text-anchor="middle" x="533.3372229998473" y="404.1169044076797" class="value showable">66099</text><text text-anchor="middle" x="566.7125185567838" y="402.92570142114374" class="value showable">76952</text><text text-anchor="middle" x="600.0878141137206" y="403.2482800240581" class="value showable">74013</text><text text-anchor="middle" x="633.4631096706572" y="385.89214628555993" class="value showable">232144</text><text text-anchor="middle" x="666.8384052275937" y="396.7765125037312" class="value showable">132977</text><text text-anchor="middle" x="700.2137007845305" y="396.5631430569584" class="value showable">134921</text><text text-anchor="middle" x="733.588996341467" y="394.3063001739626" class="value showable">155483</text><text text-anchor="middle" x="766.9642918984036" y="391.63929184724765" class="value showable">179782</text><text text-anchor="middle" x="800.3395874553403" y="388.6511317709147" class="value showable">207007</text></g><g class="series serie-1 color-1"><text text-anchor="middle" x="32.707789645797895" y="401.9789293800621" class="value showable">46430</text><text text-anchor="middle" x="66.08308520273451" y="401.565251682075" class="value showable">46409</text><text text-anchor="middle" x="99.45838075967114" y="401.2022821550802" class="value showable">48936</text><text text-anchor="middle" x="132.83367631660775" y="400.9655342658368" class="value showable">47295</text><text text-anchor="middle" x="166.20897187354439" y="399.9712370341931" class="value showable">50270</text><text text-anchor="middle" x="199.58426743048102" y="399.7816850616742" class="value showable">48581</text><text text-anchor="middle" x="232.95956298741766" y="399.3261895863103" class="value showable">49865</text><text text-anchor="middle" x="266.3348585443543" y="398.32892889012805" class="value showable">50947</text><text text-anchor="middle" x="299.7101541012909" y="397.59717266500735" class="value showable">54524</text><text text-anchor="middle" x="333.08544965822756" y="396.5414109836759" class="value showable">56313</text><text text-anchor="middle" x="366.4607452151642" y="395.69759189582106" class="value showable">56281</text><text text-anchor="middle" x="399.8360407721008" y="393.383235849189" class="value showable">69033</text><text text-anchor="middle" x="433.2113363290374" y="392.0875432981841" class="value showable">69948</text><text text-anchor="middle" x="466.586631885974" y="390.53468788000373" class="value showable">79938</text><text text-anchor="middle" x="499.9619274429107" y="386.89994374454574" class="value showable">90340</text><text text-anchor="middle" x="533.3372229998473" y="387.17499715689803" class="value showable">88258</text><text text-anchor="middle" x="566.7125185567838" y="383.89202723795603" class="value showable">96463</text><text text-anchor="middle" x="600.0878141137206" y="381.7870893520455" class="value showable">121519</text><text text-anchor="middle" x="633.4631096706572" y="345.6890180504842" class="value showable">134145</text><text text-anchor="middle" x="666.8384052275937" y="366.0006039974459" class="value showable">147421</text><text text-anchor="middle" x="700.2137007845305" y="363.9166298791967" class="value showable">162520</text><text text-anchor="middle" x="733.588996341467" y="355.73538235193183" class="value showable">195935</text><text text-anchor="middle" x="766.9642918984036" y="346.3260531683184" class="value showable">233065</text><text text-anchor="middle" x="800.3395874553403" y="332.29525591586844" class="value showable">306449</text></g><g class="series serie-2 color-2"><text text-anchor="middle" x="32.707789645797895" y="391.4825575005441" class="value showable">49202</text><text text-anchor="middle" x="66.08308520273451" y="390.57716420505574" class="value showable">53703</text><text text-anchor="middle" x="99.45838075967114" y="389.41833981255166" class="value showable">58427</text><text text-anchor="middle" x="132.83367631660775" y="388.64059500811106" class="value showable">64997</text><text text-anchor="middle" x="166.20897187354439" y="386.2139565828532" class="value showable">75072</text><text text-anchor="middle" x="199.58426743048102" y="384.8688729562063" class="value showable">87289</text><text text-anchor="middle" x="232.95956298741766" y="383.1629052035362" class="value showable">97398</text><text text-anchor="middle" x="266.3348585443543" y="380.47142085489196" class="value showable">111752</text><text text-anchor="middle" x="299.7101541012909" y="377.3152213634308" class="value showable">130264</text><text text-anchor="middle" x="333.08544965822756" y="373.99625083824316" class="value showable">149095</text><text text-anchor="middle" x="366.4607452151642" y="370.185784231446" class="value showable">176156</text><text text-anchor="middle" x="399.8360407721008" y="362.9623942977958" class="value showable">208130</text><text text-anchor="middle" x="433.2113363290374" y="350.2549485987102" class="value showable">311187</text><text text-anchor="middle" x="466.586631885974" y="340.1425100138484" class="value showable">379183</text><text text-anchor="middle" x="499.9619274429107" y="328.6106816729851" class="value showable">440731</text><text text-anchor="middle" x="533.3372229998473" y="319.9750362498151" class="value showable">523998</text><text text-anchor="middle" x="566.7125185567838" y="303.42200140125374" class="value showable">636696</text><text text-anchor="middle" x="600.0878141137206" y="286.205699285795" class="value showable">749319</text><text text-anchor="middle" x="633.4631096706572" y="235.81604585239464" class="value showable">866903</text><text text-anchor="middle" x="666.8384052275937" y="241.061378085561" class="value showable">990895</text><text text-anchor="middle" x="700.2137007845305" y="226.1958716547634" class="value showable">1092248</text><text text-anchor="middle" x="733.588996341467" y="205.09293091807317" class="value showable">1176562</text><text text-anchor="middle" x="766.9642918984036" y="187.40423060358643" class="value showable">1214865</text><text text-anchor="middle" x="800.3395874553403" y="155.97745747828714" class="value showable">1299975</text></g></g><g transform="translate(144, 20)" class="plot tooltip-overlay"><g transform="translate(0 0)" style="opacity: 0" class="tooltip"><rect rx="0" ry="0" width="0" height="0" class="tooltip-box"/><g class="text"/></g></g><g transform="translate(10, 30)" class="legends"><g id="activate-serie-0" class="legend reactive activate-serie"><rect x="0.0" y="1.0" width="12" height="12" class="color-0 reactive"/><text x="17.0" y="11.2">None</text></g><g id="activate-serie-1" class="legend reactive activate-serie"><rect x="0.0" y="22.0" width="12" height="12" class="color-1 reactive"/><text x="17.0" y="32.2">Dark</text></g><g id="activate-serie-2" class="legend reactive activate-serie"><rect x="0.0" y="43.0" width="12" height="12" class="color-2 reactive"/><text x="17.0" y="53.2">Bright</text></g></g><g transform="translate(987, 30)" class="legends"/></g></svg>
\ No newline at end of file diff --git a/python/fatcat_web/static/scholar-vaporwave-logo-small.png b/python/fatcat_web/static/scholar-vaporwave-logo-small.png Binary files differnew file mode 100644 index 00000000..c40f7ec5 --- /dev/null +++ b/python/fatcat_web/static/scholar-vaporwave-logo-small.png 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 %} => 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;"> - <a href="{{ paper.best_pdf_url }}" class="ui violet tag label"><i class="file icon"></i>fulltext</a> + + {% 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> {% endif %} - {% if paper.pmid %} - <a href="https://www.ncbi.nlm.nih.gov/pubmed/{{paper.pmid }}" style="color: green;">pmid:{{ paper.pmid }}</a> - {% endif %} {% if paper.pmcid %} <a href="https://pubmed.ncbi.nlm.nih.gov/{{paper.pmcid }}/" style="color: green;">pmcid:{{ paper.pmcid }}</a> + {% elif paper.pmid %} + <a href="https://www.ncbi.nlm.nih.gov/pubmed/{{paper.pmid }}" style="color: green;">pmid:{{ paper.pmid }}</a> {% endif %} {% if paper.arxiv_id %} <a href="https://arxiv.org/abs/{{paper.arxiv_id }}" style="color: green;">arXiv:{{ paper.arxiv_id }}</a> {% endif %} + {% if paper.jstor_id %} + <a href="https://jstor.org/stable/{{paper.jstor_id }}/" style="color: green;">jstor:{{ paper.jstor_id }}</a> + {% endif %} + {% if paper.doaj_id %} + <a href="https://doaj.org/article/{{paper.doaj_id }}/" style="color: green;">doaj:{{ paper.doaj_id }}</a> + {% endif %} + {% if paper.doaj_id %} + <a href="https://dblp.org/rec/{{ paper.dblp_id }}.html" style="color: green;">dblp:{{ paper.dblp_id }}</a> + {% 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 %} + {{ 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> {{ file.size|filesizeformat }} +<div class="ui top segment attached"> + {% if file.size != None %} + <b>Size</b> {{ file.size|filesizeformat }}<br> + {% endif %} + {% if file.mimetype != None %} + <b>MIME Type</b> <code>{{ file.mimetype }}</code><br> + {% endif %} </div> -{% endif %} - -{% if file.mimetype != None %} -<div class="ui segment attached"> - <p><b>File Type</b> <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. <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 }} {% 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 {{ 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> <code>{{ release.version }}</code><br> {% endif %} + {% if release.language != None %} + <b>Language</b> <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: <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 %} <i>Showing results {{ found.offset }} — {{ found.offset + -found.count_returned }} out of {{ found.count_found }} results</i> +found.count_returned }} out of {{ '{0:,}'.format(found.count_found) }} results</i> {% 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 »</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> {{ webcapture.timestamp.strftime("%Y-%m-%d %H:%M:%S") }} </div> {% endif %} diff --git a/python/fatcat_web/web_config.py b/python/fatcat_web/web_config.py index 22a704d9..5d2da830 100644 --- a/python/fatcat_web/web_config.py +++ b/python/fatcat_web/web_config.py @@ -60,6 +60,9 @@ class Config(object): WTF_CSRF_CHECK_DEFAULT = False WTF_CSRF_TIME_LIMIT = None + # for login redirects + USE_SESSION_FOR_NEXT = True + if FATCAT_DOMAIN == "dev.fatcat.wiki": # "Even more verbose" debug options #SQLALCHEMY_ECHO = True |