diff options
-rw-r--r-- | python/fatcat_web/editing_routes.py | 255 | ||||
-rw-r--r-- | python/fatcat_web/entity_helpers.py | 135 | ||||
-rw-r--r-- | python/fatcat_web/routes.py | 205 | ||||
-rw-r--r-- | python/fatcat_web/templates/changelog_view.html | 1 | ||||
-rw-r--r-- | python/fatcat_web/templates/container_edit.html | 3 | ||||
-rw-r--r-- | python/fatcat_web/templates/container_view.html | 34 | ||||
-rw-r--r-- | python/fatcat_web/templates/creator_view.html | 8 | ||||
-rw-r--r-- | python/fatcat_web/templates/editgroup_view.html | 2 | ||||
-rw-r--r-- | python/fatcat_web/templates/file_edit.html | 8 | ||||
-rw-r--r-- | python/fatcat_web/templates/file_view.html | 4 | ||||
-rw-r--r-- | python/fatcat_web/templates/fileset_view.html | 8 | ||||
-rw-r--r-- | python/fatcat_web/templates/release_edit.html | 8 | ||||
-rw-r--r-- | python/fatcat_web/templates/release_view.html | 80 | ||||
-rw-r--r-- | python/fatcat_web/templates/webcapture_view.html | 6 | ||||
-rw-r--r-- | python/fatcat_web/templates/work_view.html | 8 |
15 files changed, 405 insertions, 360 deletions
diff --git a/python/fatcat_web/editing_routes.py b/python/fatcat_web/editing_routes.py index c8cebd62..73db76a6 100644 --- a/python/fatcat_web/editing_routes.py +++ b/python/fatcat_web/editing_routes.py @@ -47,8 +47,6 @@ def form_editgroup_get_or_create(api, edit_form): .format(eg.editgroup_id, eg.editgroup_id)) return eg -### Views ################################################################### - def generic_entity_edit(editgroup_id, entity_type, existing_ident, edit_template): """ @@ -99,6 +97,10 @@ def generic_entity_edit(editgroup_id, entity_type, existing_ident, edit_template status = 200 if entity_type == 'container': form = ContainerEntityForm() + elif entity_type == 'file': + form = FileEntityForm() + elif entity_type == 'release': + form = ReleaseEntityForm() else: raise NotImplementedError @@ -116,6 +118,10 @@ def generic_entity_edit(editgroup_id, entity_type, existing_ident, edit_template try: if entity_type == 'container': edit = user_api.create_container(editgroup.editgroup_id, entity) + elif entity_type == 'file': + edit = user_api.create_file(editgroup.editgroup_id, entity) + elif entity_type == 'release': + edit = user_api.create_release(editgroup.editgroup_id, entity) else: raise NotImplementedError except ApiException as ae: @@ -138,6 +144,10 @@ def generic_entity_edit(editgroup_id, entity_type, existing_ident, edit_template try: if entity_type == 'container': user_api.delete_container_edit(editgroup.editgroup_id, existing_edit.edit_id) + elif entity_type == 'file': + user_api.delete_file_edit(editgroup.editgroup_id, existing_edit.edit_id) + elif entity_type == 'release': + user_api.delete_release_edit(editgroup.editgroup_id, existing_edit.edit_id) else: raise NotImplementedError except ApiException as ae: @@ -148,6 +158,10 @@ def generic_entity_edit(editgroup_id, entity_type, existing_ident, edit_template try: if entity_type == 'container': edit = user_api.update_container(editgroup.editgroup_id, existing.ident, existing) + elif entity_type == 'file': + edit = user_api.update_file(editgroup.editgroup_id, existing.ident, existing) + elif entity_type == 'release': + edit = user_api.update_release(editgroup.editgroup_id, existing.ident, existing) else: raise NotImplementedError except ApiException as ae: @@ -164,6 +178,10 @@ def generic_entity_edit(editgroup_id, entity_type, existing_ident, edit_template if existing: if entity_type == 'container': form = ContainerEntityForm.from_entity(existing) + elif entity_type == 'file': + form = FileEntityForm.from_entity(existing) + elif entity_type == 'release': + form = ReleaseEntityForm.from_entity(existing) else: raise NotImplementedError @@ -201,6 +219,10 @@ def generic_edit_delete(editgroup_id, entity_type, edit_id): try: if entity_type == 'container': user_api.delete_container_edit(editgroup.editgroup_id, edit_id) + elif entity_type == 'file': + user_api.delete_file_edit(editgroup.editgroup_id, edit_id) + elif entity_type == 'release': + user_api.delete_release_edit(editgroup.editgroup_id, edit_id) else: raise NotImplementedError except ApiException as ae: @@ -208,9 +230,11 @@ def generic_edit_delete(editgroup_id, entity_type, edit_id): return redirect("/editgroup/{}".format(editgroup_id)) +### Views ################################################################### + @app.route('/container/create', methods=['GET', 'POST']) @login_required -def container_create(): +def container_create_view(): return generic_entity_edit(None, 'container', None, 'container_create.html') @app.route('/container/<ident>/edit', methods=['GET', 'POST']) @@ -228,175 +252,110 @@ def container_editgroup_edit(editgroup_id, ident): def container_edit_delete(editgroup_id, edit_id): return generic_edit_delete(editgroup_id, 'container', edit_id) -@app.route('/creator/<ident>/edit', methods=['GET']) -def creator_edit(ident): - return render_template('entity_edit.html'), 404 - -@app.route('/creator/create', methods=['GET']) -def creator_create_view(): - return abort(404) - @app.route('/file/create', methods=['GET', 'POST']) @login_required -def file_create(): - form = FileEntityForm() - status = 200 - if form.is_submitted(): - if form.validate_on_submit(): - # API on behalf of user - user_api = auth_api(session['api_token']) - eg = form_editgroup_get_or_create(user_api, form) - if eg: - # no merge or anything hard to do; just create the entity - entity = form.to_entity() - try: - edit = user_api.create_file(eg.editgroup_id, entity) - except ApiException as ae: - app.log.warning(ae) - abort(ae.status) - # redirect to new entity - return redirect('/file/{}'.format(edit.ident)) - else: - status = 400 - elif form.errors: - status = 400 - app.log.info("form errors (did not validate): {}".format(form.errors)) - else: - form.urls.append_entry() - form.release_ids.append_entry() - return render_template('file_create.html', form=form), status +def file_create_view(): + return generic_entity_edit(None, 'file', None, 'file_create.html') @app.route('/file/<ident>/edit', methods=['GET', 'POST']) @login_required def file_edit(ident): - # TODO: prev_rev interlock - try: - entity = api.get_file(ident) - except ApiException as ae: - abort(ae.status) - status = 200 - form = FileEntityForm() - if form.is_submitted(): - if form.validate_on_submit(): - # API on behalf of user - user_api = auth_api(session['api_token']) - eg = form_editgroup_get_or_create(user_api, form) - if eg: - # all the tricky logic is in the update method - form.update_entity(entity) - try: - edit = user_api.update_file(eg.editgroup_id, entity.ident, entity) - except ApiException as ae: - app.log.warning(ae) - abort(ae.status) - # redirect to entity revision - # TODO: file_rev_view - return redirect('/file/{}'.format(edit.ident)) - else: - status = 400 - elif form.errors: - status = 400 - app.log.info("form errors (did not validate): {}".format(form.errors)) - else: # not submitted - form = FileEntityForm.from_entity(entity) - return render_template('file_edit.html', form=form, entity=entity), status + return generic_entity_edit(None, 'file', ident, 'file_edit.html') -@app.route('/fileset/<ident>/edit', methods=['GET']) -def fileset_edit(ident): - try: - entity = api.get_fileset(ident) - except ApiException as ae: - abort(ae.status) +@app.route('/editgroup/<editgroup_id>/file/<ident>/edit', methods=['GET', 'POST']) +@login_required +def file_editgroup_edit(editgroup_id, ident): + return generic_entity_edit(editgroup_id, 'file', ident, 'file_edit.html') + +@app.route('/editgroup/<editgroup_id>/file/edit/<edit_id>/delete', methods=['POST']) +@login_required +def file_edit_delete(editgroup_id, edit_id): + return generic_edit_delete(editgroup_id, 'file', edit_id) + +@app.route('/release/create', methods=['GET', 'POST']) +@login_required +def release_create_view(): + return generic_entity_edit(None, 'release', None, 'release_create.html') + +@app.route('/release/<ident>/edit', methods=['GET', 'POST']) +@login_required +def release_edit(ident): + return generic_entity_edit(None, 'release', ident, 'release_edit.html') + +@app.route('/editgroup/<editgroup_id>/release/<ident>/edit', methods=['GET', 'POST']) +@login_required +def release_editgroup_edit(editgroup_id, ident): + return generic_entity_edit(editgroup_id, 'release', ident, 'release_edit.html') + +@app.route('/editgroup/<editgroup_id>/release/edit/<edit_id>/delete', methods=['POST']) +@login_required +def release_edit_delete(editgroup_id, edit_id): + return generic_edit_delete(editgroup_id, 'release', edit_id) + + +### Not-Implemented Views ################################################### + +@app.route('/creator/create', methods=['GET']) +def creator_create_view(): + return abort(404) + +@app.route('/creator/<ident>/edit', methods=['GET']) +def creator_edit(ident): return render_template('entity_edit.html'), 404 +@app.route('/editgroup/<editgroup_id>/creator/<ident>/edit', methods=['GET', 'POST']) +def creator_editgroup_edit(editgroup_id, ident): + return abort(404) + +@app.route('/editgroup/<editgroup_id>/creator/edit/<edit_id>/delete', methods=['POST']) +def creator_edit_delete(editgroup_id, edit_id): + return abort(404) + @app.route('/fileset/create', methods=['GET']) def fileset_create_view(): return abort(404) -@app.route('/webcapture/<ident>/edit', methods=['GET']) -def webcapture_edit(ident): - try: - entity = api.get_webcapture(ident) - except ApiException as ae: - abort(ae.status) +@app.route('/fileset/<ident>/edit', methods=['GET']) +def fileset_edit(ident): return render_template('entity_edit.html'), 404 +@app.route('/editgroup/<editgroup_id>/fileset/<ident>/edit', methods=['GET', 'POST']) +def fileset_editgroup_edit(editgroup_id, ident): + return abort(404) + +@app.route('/editgroup/<editgroup_id>/fileset/edit/<edit_id>/delete', methods=['POST']) +def fileset_edit_delete(editgroup_id, edit_id): + return abort(404) + @app.route('/webcapture/create', methods=['GET']) def webcapture_create_view(): return abort(404) -@app.route('/release/create', methods=['GET', 'POST']) -@login_required -def release_create(): - form = ReleaseEntityForm() - status = 200 - if form.is_submitted(): - if form.validate_on_submit(): - # API on behalf of user - user_api = auth_api(session['api_token']) - eg = form_editgroup_get_or_create(user_api, form) - if eg: - # no merge or anything hard to do; just create the entity - entity = form.to_entity() - try: - edit = user_api.create_release(eg.editgroup_id, entity) - except ApiException as ae: - app.log.warning(ae) - abort(ae.status) - # redirect to new release - return redirect('/release/{}'.format(edit.ident)) - else: - status = 400 - elif form.errors: - status = 400 - app.log.info("form errors (did not validate): {}".format(form.errors)) - else: # not submitted - form.contribs.append_entry() - return render_template('release_create.html', form=form), status +@app.route('/webcapture/<ident>/edit', methods=['GET']) +def webcapture_edit(ident): + return render_template('entity_edit.html'), 404 -@app.route('/release/<ident>/edit', methods=['GET', 'POST']) -@login_required -def release_edit(ident): - # TODO: prev_rev interlock - try: - entity = api.get_release(ident) - except ApiException as ae: - abort(ae.status) - status = 200 - form = ReleaseEntityForm() - if form.is_submitted(): - if form.validate_on_submit(): - # API on behalf of user - user_api = auth_api(session['api_token']) - eg = form_editgroup_get_or_create(user_api, form) - if eg: - # all the tricky logic is in the update method - form.update_entity(entity) - try: - edit = user_api.update_release(eg.editgroup_id, entity.ident, entity) - except ApiException as ae: - app.log.warning(ae) - abort(ae.status) - # redirect to entity revision - # TODO: release_rev_view - return redirect('/release/{}'.format(edit.ident)) - else: - status = 400 - elif form.errors: - status = 400 - app.log.info("form errors (did not validate): {}".format(form.errors)) - else: # not submitted - form = ReleaseEntityForm.from_entity(entity) - return render_template('release_edit.html', form=form, entity=entity), status +@app.route('/editgroup/<editgroup_id>/webcapture/<ident>/edit', methods=['GET', 'POST']) +def webcapture_editgroup_edit(editgroup_id, ident): + return abort(404) + +@app.route('/editgroup/<editgroup_id>/webcapture/edit/<edit_id>/delete', methods=['POST']) +def webcapture_edit_delete(editgroup_id, edit_id): + return abort(404) @app.route('/work/create', methods=['GET']) def work_create_view(): return abort(404) @app.route('/work/<ident>/edit', methods=['GET']) -def work_edit_view(ident): - try: - entity = api.get_work(ident) - except ApiException as ae: - abort(ae.status) +def work_edit(ident): return render_template('entity_edit.html'), 404 + +@app.route('/editgroup/<editgroup_id>/work/<ident>/edit', methods=['GET', 'POST']) +def work_editgroup_edit(editgroup_id, ident): + return abort(404) + +@app.route('/editgroup/<editgroup_id>/work/edit/<edit_id>/delete', methods=['POST']) +def work_edit_delete(editgroup_id, edit_id): + return abort(404) + diff --git a/python/fatcat_web/entity_helpers.py b/python/fatcat_web/entity_helpers.py index 8a28deb3..b3cda67f 100644 --- a/python/fatcat_web/entity_helpers.py +++ b/python/fatcat_web/entity_helpers.py @@ -2,16 +2,105 @@ from flask import abort from fatcat_client.rest import ApiException from fatcat_tools.transforms import * -from fatcat_web import api +from fatcat_web import app, api +from fatcat_web.search import get_elastic_container_stats +from fatcat_web.hacks import strip_extlink_xml, wayback_suffix +def enrich_container_entity(entity): + if entity.state in ('redirect', 'deleted'): + return entity + if entity.state == "active": + entity._es = container_to_elasticsearch(entity, force_bool=False) + entity._stats = None + if entity.issnl: + try: + entity._stats = get_elastic_container_stats(entity.issnl) + except Exception as e: + app.log.error(e) + pass + return entity + +def enrich_creator_entity(entity): + if entity.state in ('redirect', 'deleted'): + return entity + entity._releases = None + if entity.state in ('active', 'wip'): + entity._releases = api.get_creator_releases(entity.ident) + return entity + +def enrich_file_entity(entity): + return entity + +def enrich_fileset_entity(entity): + if entity.state in ('redirect', 'deleted'): + return entity + entity._total_size = None + if entity.manifest != None: + entity._total_size = sum([f.size for f in entity.manifest]) or 0 + return entity + +def enrich_webcapture_entity(entity): + if entity.state in ('redirect', 'deleted'): + return entity + entity.wayback_suffix = wayback_suffix(entity) + return entity + +def enrich_release_entity(entity): + if entity.state in ('redirect', 'deleted'): + return entity + if entity.state == "active": + entity._es = release_to_elasticsearch(entity, force_bool=False) + if entity.container and entity.container.state == "active": + entity.container._es = container_to_elasticsearch(entity.container, force_bool=False) + if entity.filesets: + for fs in entity.filesets: + fs._total_size = sum([f.size for f in fs.manifest]) + if entity.webcaptures: + for wc in entity.webcaptures: + wc._wayback_suffix = wayback_suffix(wc) + for ref in entity.refs: + # this is a UI hack to get rid of XML crud in unstructured refs like: + # LOCKSS (2014) Available: <ext-link + # xmlns:xlink="http://www.w3.org/1999/xlink" ext-link-type="uri" + # xlink:href="http://lockss.org/" + # xlink:type="simple">http://lockss.org/</ext-link>. Accessed: 2014 + # November 1. + if ref.extra and ref.extra.get('unstructured'): + ref.extra['unstructured'] = strip_extlink_xml(ref.extra['unstructured']) + # author list to display; ensure it's sorted by index (any othors with + # index=None go to end of list) + authors = [c for c in entity.contribs if c.role in ('author', None)] + entity._authors = sorted(authors, key=lambda c: (c.index == None and 99999999) or c.index) + # hack to show plain text instead of latex abstracts + if entity.abstracts: + if 'latex' in entity.abstracts[0].mimetype: + entity.abstracts.reverse() + return entity + +def enrich_work_entity(entity): + if entity.state in ('redirect', 'deleted'): + return entity + entity._releases = None + if entity.state in ('active', 'wip'): + entity._releases = api.get_work_releases(entity.ident) + return entity def generic_get_entity(entity_type, ident): try: if entity_type == 'container': - entity = api.get_container(ident) - if entity.state == "active": - entity.es = container_to_elasticsearch(entity, force_bool=False) - return entity + return enrich_container_entity(api.get_container(ident)) + elif entity_type == 'creator': + return enrich_creator_entity(api.get_creator(ident)) + elif entity_type == 'file': + return enrich_file_entity(api.get_file(ident, expand="releases")) + elif entity_type == 'fileset': + return enrich_fileset_entity(api.get_fileset(ident, expand="releases")) + elif entity_type == 'webcapture': + return enrich_webcapture_entity(api.get_webcapture(ident, expand="releases")) + elif entity_type == 'release': + return enrich_release_entity(api.get_release(ident, expand="container,files,filesets,webcaptures")) + elif entity_type == 'work': + return api.get_work(ident) else: raise NotImplementedError except ApiException as ae: @@ -20,8 +109,19 @@ def generic_get_entity(entity_type, ident): def generic_get_entity_revision(entity_type, revision_id): try: if entity_type == 'container': - entity = api.get_container_revision(revision_id) - return entity + return enrich_container_entity(api.get_container_revision(revision_id)) + elif entity_type == 'creator': + return enrich_creator_entity(api.get_creator_revision(revision_id)) + elif entity_type == 'file': + return enrich_file_entity(api.get_file_revision(revision_id, expand="releases")) + elif entity_type == 'fileset': + return enrich_fileset_entity(api.get_fileset_revision(revision_id, expand="releases")) + elif entity_type == 'webcapture': + return enrich_webcapture_entity(api.get_webcapture_revision(revision_id, expand="releases")) + elif entity_type == 'release': + return enrich_release_entity(api.get_release_revision(revision_id, expand="container")) + elif entity_type == 'work': + return enrich_work_entity(api.get_work_revision(revision_id)) else: raise NotImplementedError except ApiException as ae: @@ -30,6 +130,18 @@ def generic_get_entity_revision(entity_type, revision_id): def generic_get_editgroup_entity(editgroup, entity_type, ident): if entity_type == 'container': edits = editgroup.edits.containers + elif entity_type == 'creator': + edits = editgroup.edits.creators + elif entity_type == 'file': + edits = editgroup.edits.files + elif entity_type == 'fileset': + edits = editgroup.edits.filesets + elif entity_type == 'webcapture': + edits = editgroup.edits.webcaptures + elif entity_type == 'release': + edits = editgroup.edits.releases + elif entity_type == 'work': + edits = editgroup.edits.works else: raise NotImplementedError revision_id = None @@ -41,12 +153,7 @@ def generic_get_editgroup_entity(editgroup, entity_type, ident): if not revision_id: # couldn't find relevent edit in this editgroup abort(404) - try: - if entity_type == 'container': - entity = api.get_container_revision(revision_id) - else: - raise NotImplementedError - except ApiException as ae: - abort(ae.status) + + entity = generic_get_entity_revision(entity_type, revision_id) entity.ident = ident return entity, edit diff --git a/python/fatcat_web/routes.py b/python/fatcat_web/routes.py index 6211b90c..9af0724e 100644 --- a/python/fatcat_web/routes.py +++ b/python/fatcat_web/routes.py @@ -13,7 +13,6 @@ from fatcat_web import app, api, auth_api, priv_api, mwoauth from fatcat_web.auth import handle_token_login, handle_logout, load_user, handle_ia_xauth, handle_wmoauth from fatcat_web.cors import crossdomain from fatcat_web.search import * -from fatcat_web.hacks import strip_extlink_xml, wayback_suffix from fatcat_web.entity_helpers import * @@ -189,149 +188,125 @@ def release_lookup(): def work_lookup(): abort(404) -### Entity Views ############################################################ +### More Generic Entity Views ############################################### -@app.route('/container/<ident>', methods=['GET']) -def container_view(ident): - entity = generic_get_entity('container', ident) - - if entity.issnl: - try: - stats = get_elastic_container_stats(entity.issnl) - except Exception as e: - stats = None - app.log.error(e) - else: - stats = None +def generic_entity_view(entity_type, ident, view_template): + entity = generic_get_entity(entity_type, ident) if entity.state == "redirect": - return redirect('/container/{}'.format(entity.redirect)) + return redirect('/{}/{}'.format(entity_type, entity.redirect)) + elif entity.state == "deleted": + return render_template('deleted_entity.html', entity_type=entity_type, entity=entity) + + return render_template(view_template, entity=entity, editgroup_id=None) + +def generic_editgroup_entity_view(editgroup_id, entity_type, ident, view_template): + try: + editgroup = api.get_editgroup(editgroup_id) + except ApiException as ae: + abort(ae.status) + + entity, edit = generic_get_editgroup_entity(editgroup, entity_type, ident) + if entity.state == "deleted": - return render_template('deleted_entity.html', entity=entity, entity_type="container") - if entity.state == "active": - entity.es = container_to_elasticsearch(entity, force_bool=False) - return render_template('container_view.html', - container=entity, editgroup_id=None, container_stats=stats) + return render_template('deleted_entity.html', entity=entity, + entity_type=entity_type, editgroup=editgroup) + + return render_template(view_template, entity=entity, editgroup=editgroup) + + +@app.route('/container/<ident>', methods=['GET']) +def container_view(ident): + return generic_entity_view('container', ident, 'container_view.html') @app.route('/container/rev/<revision_id>', methods=['GET']) def container_revision_view(revision_id): entity = generic_get_entity_revision('container', revision_id) - return render_template('container_view.html', container=entity, editgroup=None) + return render_template('container_view.html', entity=entity, editgroup=None) @app.route('/editgroup/<editgroup_id>/container/<ident>', methods=['GET']) def container_editgroup_view(editgroup_id, ident): - try: - editgroup = api.get_editgroup(editgroup_id) - except ApiException as ae: - abort(ae.status) - entity, edit = generic_get_editgroup_entity(editgroup, 'container', ident) - if entity.state == "deleted": - return render_template('deleted_entity.html', entity=entity, entity_type="container", editgroup=editgroup) - return render_template('container_view.html', container=entity, editgroup=editgroup) + return generic_editgroup_entity_view(editgroup_id, 'container', ident, 'container_view.html') + @app.route('/creator/<ident>', methods=['GET']) def creator_view(ident): - try: - entity = api.get_creator(ident) - releases = api.get_creator_releases(ident) - except ApiException as ae: - abort(ae.status) - if entity.state == "redirect": - return redirect('/creator/{}'.format(entity.redirect)) - if entity.state == "deleted": - return render_template('deleted_entity.html', entity=entity, entity_type="creator") - return render_template('creator_view.html', creator=entity, releases=releases) + return generic_entity_view('creator', ident, 'creator_view.html') + +@app.route('/creator/rev/<revision_id>', methods=['GET']) +def creator_revision_view(revision_id): + entity = generic_get_entity_revision('creator', revision_id) + return render_template('creator_view.html', creator=entity, editgroup=None) + +@app.route('/editgroup/<editgroup_id>/creator/<ident>', methods=['GET']) +def creator_editgroup_view(editgroup_id, ident): + return generic_editgroup_entity_view(editgroup_id, 'creator', ident, 'creator_view.html') @app.route('/file/<ident>', methods=['GET']) def file_view(ident): - try: - entity = api.get_file(ident, expand="releases") - except ApiException as ae: - abort(ae.status) - if entity.state == "redirect": - return redirect('/file/{}'.format(entity.redirect)) - elif entity.state == "deleted": - return render_template('deleted_entity.html', entity=entity, entity_type="file") - return render_template('file_view.html', file=entity) + return generic_entity_view('file', ident, 'file_view.html') + +@app.route('/file/rev/<revision_id>', methods=['GET']) +def file_revision_view(revision_id): + entity = generic_get_entity_revision('file', revision_id) + return render_template('file_view.html', entity=entity, editgroup=None) + +@app.route('/editgroup/<editgroup_id>/file/<ident>', methods=['GET']) +def file_editgroup_view(editgroup_id, ident): + return generic_editgroup_entity_view(editgroup_id, 'file', ident, 'file_view.html') @app.route('/fileset/<ident>', methods=['GET']) def fileset_view(ident): - try: - entity = api.get_fileset(ident, expand="releases") - except ApiException as ae: - abort(ae.status) - if entity.state == "redirect": - return redirect('/fileset/{}'.format(entity.redirect)) - elif entity.state == "deleted": - return render_template('deleted_entity.html', entity=entity, entity_type="fileset") - else: - entity.total_size = sum([f.size for f in entity.manifest]) - return render_template('fileset_view.html', fileset=entity) + return generic_entity_view('fileset', ident, 'fileset_view.html') + +@app.route('/fileset/rev/<revision_id>', methods=['GET']) +def fileset_revision_view(revision_id): + entity = generic_get_entity_revision('fileset', revision_id) + return render_template('fileset_view.html', entity=entity, editgroup=None) + +@app.route('/editgroup/<editgroup_id>/fileset/<ident>', methods=['GET']) +def fileset_editgroup_view(editgroup_id, ident): + return generic_editgroup_entity_view(editgroup_id, 'fileset', ident, 'fileset_view.html') @app.route('/webcapture/<ident>', methods=['GET']) def webcapture_view(ident): - try: - entity = api.get_webcapture(ident, expand="releases") - except ApiException as ae: - abort(ae.status) - if entity.state == "redirect": - return redirect('/webcapture/{}'.format(entity.redirect)) - elif entity.state == "deleted": - return render_template('deleted_entity.html', entity=entity, entity_type="webcapture") - entity.wayback_suffix = wayback_suffix(entity) - #print("SUFFIX: {}".format(entity.wayback_suffix)) - return render_template('webcapture_view.html', webcapture=entity) + return generic_entity_view('webcapture', ident, 'webcapture_view.html') + +@app.route('/webcapture/rev/<revision_id>', methods=['GET']) +def webcapture_revision_view(revision_id): + entity = generic_get_entity_revision('webcapture', revision_id) + return render_template('webcapture_view.html', entity=entity, editgroup=None) + +@app.route('/editgroup/<editgroup_id>/webcapture/<ident>', methods=['GET']) +def webcapture_editgroup_view(editgroup_id, ident): + return generic_editgroup_entity_view(editgroup_id, 'webcapture', ident, 'webcapture_view.html') @app.route('/release/<ident>', methods=['GET']) def release_view(ident): - try: - entity = api.get_release(ident, expand="container,files,filesets,webcaptures") - except ApiException as ae: - abort(ae.status) - if entity.state == "redirect": - return redirect('/release/{}'.format(entity.redirect)) - if entity.state == "deleted": - return render_template('deleted_entity.html', entity=entity, entity_type="release") - if entity.container and entity.container.state == "active": - entity.container.es = container_to_elasticsearch(entity.container, force_bool=False) - if entity.state == "active": - entity.es = release_to_elasticsearch(entity, force_bool=False) - for fs in entity.filesets: - fs.total_size = sum([f.size for f in fs.manifest]) - for wc in entity.webcaptures: - wc.wayback_suffix = wayback_suffix(wc) - for ref in entity.refs: - # this is a UI hack to get rid of XML crud in unstructured refs like: - # LOCKSS (2014) Available: <ext-link - # xmlns:xlink="http://www.w3.org/1999/xlink" ext-link-type="uri" - # xlink:href="http://lockss.org/" - # xlink:type="simple">http://lockss.org/</ext-link>. Accessed: 2014 - # November 1. - if ref.extra and ref.extra.get('unstructured'): - ref.extra['unstructured'] = strip_extlink_xml(ref.extra['unstructured']) - # author list to display; ensure it's sorted by index (any othors with - # index=None go to end of list) - authors = [c for c in entity.contribs if c.role in ('author', None)] - authors = sorted(authors, key=lambda c: (c.index == None and 99999999) or c.index) - # hack to show plain text instead of latex abstracts - if entity.abstracts: - if 'latex' in entity.abstracts[0].mimetype: - entity.abstracts.reverse() - return render_template('release_view.html', release=entity, - authors=authors, container=entity.container) + return generic_entity_view('release', ident, 'release_view.html') + +@app.route('/release/rev/<revision_id>', methods=['GET']) +def release_revision_view(revision_id): + entity = generic_get_entity_revision('release', revision_id) + return render_template('release_view.html', entity=entity, editgroup=None) + +@app.route('/editgroup/<editgroup_id>/release/<ident>', methods=['GET']) +def release_editgroup_view(editgroup_id, ident): + return generic_editgroup_entity_view(editgroup_id, 'release', ident, 'release_view.html') @app.route('/work/<ident>', methods=['GET']) def work_view(ident): - try: - entity = api.get_work(ident) - releases = api.get_work_releases(ident) - except ApiException as ae: - abort(ae.status) - if entity.state == "redirect": - return redirect('/work/{}'.format(entity.redirect)) - if entity.state == "deleted": - return render_template('deleted_entity.html', entity=entity, entity_type="work") - return render_template('work_view.html', work=entity, releases=releases) + return generic_entity_view('work', ident, 'work_view.html') + +@app.route('/work/rev/<revision_id>', methods=['GET']) +def work_revision_view(revision_id): + entity = generic_get_entity_revision('work', revision_id) + return render_template('work_view.html', entity=entity, editgroup=None) + +@app.route('/editgroup/<editgroup_id>/work/<ident>', methods=['GET']) +def work_editgroup_view(editgroup_id, ident): + return generic_editgroup_entity_view(editgroup_id, 'work', ident, 'work_view.html') + ### Views ################################################################### diff --git a/python/fatcat_web/templates/changelog_view.html b/python/fatcat_web/templates/changelog_view.html index 8c4684d5..5b403b09 100644 --- a/python/fatcat_web/templates/changelog_view.html +++ b/python/fatcat_web/templates/changelog_view.html @@ -1,3 +1,4 @@ +{% set auth_to = {} %} {% extends "editgroup_view.html" %} {% block editgroupheader %} diff --git a/python/fatcat_web/templates/container_edit.html b/python/fatcat_web/templates/container_edit.html index 91432d5e..238335b4 100644 --- a/python/fatcat_web/templates/container_edit.html +++ b/python/fatcat_web/templates/container_edit.html @@ -10,7 +10,7 @@ {% endblock %} {{ form.hidden_tag() }} - <h3 class="ui dividing header">Editgroup</h3> + <h3 class="ui dividing header">Editgroup Metadata</h3> {{ edit_macros.editgroup_dropdown(form, editgroup, potential_editgroups) }} <h3 class="ui dividing header">The Basics</h3> @@ -70,7 +70,6 @@ <!-- Form code --> $(document).ready(function() { - $('.ui.accordion').accordion(); $('.ui.dropdown') .dropdown(); var fixup_url_numbering = function(group_item) { diff --git a/python/fatcat_web/templates/container_view.html b/python/fatcat_web/templates/container_view.html index ef4335fb..b86b1aa7 100644 --- a/python/fatcat_web/templates/container_view.html +++ b/python/fatcat_web/templates/container_view.html @@ -1,4 +1,4 @@ -{% set entity = container %} +{% set container = entity %} {% import "entity_macros.html" as entity_macros %} {% extends "base.html" %} @@ -50,9 +50,9 @@ <div class="five wide column"> <div class="ui segment top attached"> -{% if container.es and container.es.is_oa == True %} +{% if container._es and container._es.is_oa == True %} <i class="icon unlock huge orange"></i><b>Open Access Publisher</b> -{% elif container.es and container.es.is_oa == False %} +{% elif container._es and container._es.is_oa == False %} <i class="icon lock huge black"></i><b>Not Open Access</b> {% else %} <i class="icon question huge grey"></i><b>Unknown OA Status</b> @@ -77,37 +77,37 @@ </div><div class="ui segment attached"> {% endif %} -{% if container_stats %} +{% if container._stats %} <b>Release Counts</b><br> - {{ "{:,}".format(container_stats.total) }} total - {% if container_stats.total >= 1 %} - <br>{{ "{:,}".format(container_stats.is_preserved) }} - (<b>{{ "{:.1f}".format(container_stats.is_preserved/container_stats.total*100) }}%</b>) + {{ "{:,}".format(container._stats.total) }} total + {% if container._stats.total >= 1 %} + <br>{{ "{:,}".format(container._stats.is_preserved) }} + (<b>{{ "{:.1f}".format(container._stats.is_preserved/container._stats.total*100) }}%</b>) preserved or archived - <br>{{ "{:,}".format(container_stats.in_web) }} - (<b>{{ "{:.1f}".format(container_stats.in_web/container_stats.total*100) }}%</b>) + <br>{{ "{:,}".format(container._stats.in_web) }} + (<b>{{ "{:.1f}".format(container._stats.in_web/container._stats.total*100) }}%</b>) fulltext available to read {% endif %} </div><div class="ui segment attached"> {% endif %} -{% if (container.es and container.es != None) %} +{% if (container._es and container._es != None) %} <b>Directory Listings</b><br> - {% if container.es.in_doaj == True %} + {% if container._es.in_doaj == True %} <i class="icon check green"></i> In <a href="https://doaj.org/toc/{{ container.issnl }}">DOAJ</a><br> - {% elif container.es.in_doaj == False %} + {% elif container._es.in_doaj == False %} <i class="icon times grey"></i> Not in <a href="https://doaj.org">DOAJ</a><br> {% endif %} - {% if container.es.in_road == True %} + {% if container._es.in_road == True %} <i class="icon check green"></i> In <a href="http://road.issn.org/issn/{{ container.issnl }}">ISSN ROAD</a><br> - {% elif container.es.in_road == False %} + {% elif container._es.in_road == False %} <i class="icon times grey"></i> Not in <a href="https://road.issn.org">ISSN ROAD</a><br> {% endif %} - {% if container.es.in_kbart == True %} + {% if container._es.in_kbart == True %} <i class="icon check green"></i> In <a href="https://thekeepers.org/purl/issn/{{ container.issnl }}">Keepers Registery</a><br> - {% elif container.es.in_kbart == False %} + {% elif container._es.in_kbart == False %} <i class="icon times grey"></i> Not in <a href="https://thekeepers.org/journals?query={{ container.issnl }}">Keepers Registry</a><br> {% endif %} diff --git a/python/fatcat_web/templates/creator_view.html b/python/fatcat_web/templates/creator_view.html index 63308a51..63f83917 100644 --- a/python/fatcat_web/templates/creator_view.html +++ b/python/fatcat_web/templates/creator_view.html @@ -1,4 +1,4 @@ -{% set entity = creator %} +{% set creator = entity %} {% import "entity_macros.html" as entity_macros %} {% extends "base.html" %} @@ -38,9 +38,9 @@ <br> <h3>Releases</h3> -{% if releases != [] %} +{% if creator._releases != [] %} <p>This creator has contributed to: - {{ entity_macros.release_list(releases) }} + {{ entity_macros.release_list(creator._releases) }} {% else %} This creator has not contributed to any releases. {% endif %} @@ -68,7 +68,7 @@ This creator has not contributed to any releases. <br><a href="https://scholar.google.com/scholar?q={{ creator.display_name|urlencode }}">Google Scholar</a> </div> -{{ entity_macros.fatcat_bits(entity, "creator", "") }} +{{ entity_macros.fatcat_bits(entity, "creator", "", editgroup) }} </div> </div> diff --git a/python/fatcat_web/templates/editgroup_view.html b/python/fatcat_web/templates/editgroup_view.html index 41434a42..2b56d838 100644 --- a/python/fatcat_web/templates/editgroup_view.html +++ b/python/fatcat_web/templates/editgroup_view.html @@ -23,7 +23,7 @@ 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 %} + {% if auth_to.edit and not editgroup.changelog_index and not editgroup.submitted and entity_type in ('release', 'file', 'container') %} <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() }}"/> diff --git a/python/fatcat_web/templates/file_edit.html b/python/fatcat_web/templates/file_edit.html index bef80ee3..74a5682a 100644 --- a/python/fatcat_web/templates/file_edit.html +++ b/python/fatcat_web/templates/file_edit.html @@ -6,12 +6,12 @@ <div class="ui segment"> <h1 class="ui header">Edit File Entity</h1> -<form class="ui form" id="edit_file_form" method="POST" action="/file/{{ entity.ident }}/edit"> +<form class="ui form" id="edit_file_form" method="POST" action="{% if editgroup %}/editgroup/{{ editgroup.editgroup_id }}{% endif %}/file/{{ existing_ident }}/edit"> {% endblock %} {{ form.hidden_tag() }} - <br> - {{ edit_macros.editgroup_dropdown(form) }} + <h3 class="ui dividing header">Editgroup Metadata</h3> + {{ edit_macros.editgroup_dropdown(form, editgroup, potential_editgroups) }} <br> <h3 class="ui dividing header">File Metadata</h3> @@ -103,7 +103,7 @@ <!-- Form code --> $(document).ready(function() { - $('.ui.accordion').accordion(); + $('.ui.dropdown') .dropdown(); var fixup_url_numbering = function(group_item) { items = Array.from(group_item.querySelectorAll(".list-group-item")) diff --git a/python/fatcat_web/templates/file_view.html b/python/fatcat_web/templates/file_view.html index 097ee5f6..39ffaaa0 100644 --- a/python/fatcat_web/templates/file_view.html +++ b/python/fatcat_web/templates/file_view.html @@ -1,4 +1,4 @@ -{% set entity = file %} +{% set file = entity %} {% import "entity_macros.html" as entity_macros %} {% extends "base.html" %} @@ -75,7 +75,7 @@ No known public URL, mirror, or archive for this file. </div> {% endif %} -{{ entity_macros.fatcat_bits(entity, "file", "") }} +{{ entity_macros.fatcat_bits(entity, "file", "", editgroup) }} </div> </div> diff --git a/python/fatcat_web/templates/fileset_view.html b/python/fatcat_web/templates/fileset_view.html index 7f41e617..7bc46d45 100644 --- a/python/fatcat_web/templates/fileset_view.html +++ b/python/fatcat_web/templates/fileset_view.html @@ -1,4 +1,4 @@ -{% set entity = fileset %} +{% set fileset = entity %} {% import "entity_macros.html" as entity_macros %} {% extends "base.html" %} @@ -64,13 +64,13 @@ No known public URL, mirror, or archive for this File Set. </div> <div class="five wide column"> -{% if fileset.total_size != None %} +{% if fileset._total_size != None %} <div class="ui segment attached"> - <p><b>Total Size</b> {{ fileset.total_size|filesizeformat }} + <p><b>Total Size</b> {{ fileset._total_size|filesizeformat }} </div> {% endif %} -{{ entity_macros.fatcat_bits(entity, "fileset", "") }} +{{ entity_macros.fatcat_bits(entity, "fileset", "", editgroup) }} </div> </div> diff --git a/python/fatcat_web/templates/release_edit.html b/python/fatcat_web/templates/release_edit.html index b3beec2b..9a4cf80d 100644 --- a/python/fatcat_web/templates/release_edit.html +++ b/python/fatcat_web/templates/release_edit.html @@ -6,12 +6,12 @@ <div class="ui segment"> <h1 class="ui header">Edit Release Entity</h1> -<form class="ui form" id="edit_release_form" method="POST" action="/release/{{ entity.ident }}/edit"> +<form class="ui form" id="edit_release_form" method="POST" action="{% if editgroup %}/editgroup/{{ editgroup.editgroup_id }}{% endif %}/release/{{ existing_ident }}/edit"> {% endblock %} {{ form.hidden_tag() }} - <br> - {{ edit_macros.editgroup_dropdown(form) }} + <h3 class="ui dividing header">Editgroup Metadata</h3> + {{ edit_macros.editgroup_dropdown(form, editgroup, potential_editgroups) }} <br> <h3 class="ui dividing header">The Basics</h3> @@ -134,7 +134,7 @@ $(document).ready(function() { // form focusing (eg, for required fields) :( //$('#release_type').dropdown(); //$('#release_stage').dropdown(); - $('.ui.accordion').accordion(); + $('.ui.dropdown') .dropdown(); var fixup_contrib_numbering = function(group_item) { items = Array.from(group_item.querySelectorAll(".list-group-item")) diff --git a/python/fatcat_web/templates/release_view.html b/python/fatcat_web/templates/release_view.html index a5977166..5fdc2244 100644 --- a/python/fatcat_web/templates/release_view.html +++ b/python/fatcat_web/templates/release_view.html @@ -1,4 +1,4 @@ -{% set entity = release %} +{% set release = entity %} {% import "entity_macros.html" as entity_macros %} {% extends "base.html" %} @@ -19,7 +19,7 @@ <meta name="DC.description" content="{{ release.abstracts[0].content }}"> <meta name="twitter:description" content="{{ release.abstracts[0].content }}"> {% endif %} - {% for author in authors %} + {% for author in release._authors %} <meta name="DC.creator" content="{{ author.raw_name }}"> <meta name="citation_author" content="{{ author.raw_name }}"> {% endfor %} @@ -89,15 +89,16 @@ </span> </h1> <p style="font-size: larger;"> - {% if authors != [] %} by {% endif %} - {% for contrib in authors[:12] %} + {% if release._authors != [] %} by {% endif %} + {% for contrib in release._authors[:12] %} {% if contrib.creator_id %} <b><a href="/creator/{{contrib.creator_id}}">{{ contrib.raw_name }}</a></b>{% if not loop.last %}, {% endif %} {% else %} {% if contrib.raw_name != None %}{{ contrib.raw_name }}{% else %}<i>Unknown</i>{% endif %}{% if not loop.last %}, {% endif %} {% endif %} {% endfor %} - {% if authors|count > 12 %} <b>(+{{ authors|length - 12 }} others)</b> + {% if release._authors|count > 12 %} <b> + (+{{ release._authors|length - 12 }} others)</b> {% endif %} </div> </div> @@ -109,10 +110,10 @@ <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 in <a href="/container/{{ container.ident }}"><span itemprop="name">{{ container.name }}</span></a> + <i class="dropdown icon"></i>Published in <a href="/container/{{ release.container.ident }}"><span itemprop="name">{{ release.container.name }}</span></a> {% else %} <i class="dropdown icon"></i>Released as a <i>{{ release.release_type }}</i> - {% if container %} in <a href="/container/{{ container.ident }}"><span itemprop="name">{{ container.name }}</span></a> {% endif %} + {% if release.container %} in <a href="/container/{{ release.container.ident }}"><span itemprop="name">{{ release.container.name }}</span></a> {% endif %} {% endif %} {% if release.publisher %} by <span itemprop="publisher">{{ release.publisher }}</span> @@ -128,9 +129,9 @@ <tr><td class="right aligned">Version</td> <td class="">{{ release.version }} {% endif %} - {% if container != None and container.issnl != None %} + {% if release.container != None and release.container.issnl != None %} <tr><td class="right aligned">ISSN-L</td> - <td class="" itemprop="issn">{{ container.issnl }} + <td class="" itemprop="issn">{{ release.container.issnl }} {% endif %} {% if release.volume != None %} <tr itemprop="isPartOf" itemscope itemtype="http://schema.org/PublicationVolume"> @@ -154,9 +155,9 @@ <tr><td class="right aligned">Release Year</td> <td class="">{{ release.release_year }} {% endif %} - {% if container != None and container.container_type != None %} + {% if release.container != None and release.container.container_type != None %} <tr><td class="right aligned">Container Type</td> - <td class="">{{ container.container_type }} + <td class="">{{ release.container.container_type }} {% endif %} {% if release.publisher != None %} <tr><td class="right aligned">Publisher</td> @@ -215,7 +216,7 @@ {{ entity_macros.extra_metadata(entity.extra) }} {% endif %} - +{% if entity.status == 'active' %} <h3>Known Files and URLs</h3> {% if entity.files != [] %} <table class="ui compact fixed table"> @@ -251,14 +252,15 @@ <p>There are no known files associated with this release (you could try <a href="/work/{{ release.work_id }}">other releases for this work?</a>). {% endif %} +{% endif %} - +{% if entity.status == 'active' %} {% if entity.filesets != [] %} <h3>File Sets</h3> <table class="ui compact fixed table"> <tbody> {% for fileset in entity.filesets %} - <tr><td>{{ fileset.manifest|count }} files {{ fileset.total_size|filesizeformat }} + <tr><td>{{ fileset.manifest|count }} files {{ fileset._total_size|filesizeformat }} <br><small><code><a href="/fileset/{{ fileset.ident }}">fileset:{{ fileset.ident }}</a></code></small> <td class="single line"> {% for url in fileset.urls[:5] %} @@ -275,8 +277,9 @@ </tbody> </table> {% endif %} +{% endif %} - +{% if entity.status == 'active' %} {% if entity.webcaptures != [] %} <h3>Web Captures</h3> <table class="ui single line compact fixed table"> @@ -287,7 +290,7 @@ <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> + <a href="{{ url.url }}{% if url.rel == "wayback" %}{{ webcapture._wayback_suffix }}{% endif %}">{{ url.url.split('/')[2] }}</a> ({{ url.rel }})<br> {% endfor %} {% if webcapture.urls|length > 5 %} + {{ file.urls|length - 5 }} more URLs @@ -296,6 +299,7 @@ </tbody> </table> {% endif %} +{% endif %} {% if release.refs != None and release.refs.size != 0 %} @@ -335,10 +339,10 @@ </div> <div class="five wide column"> -{% if entity.files != [] and entity.files[0].urls != [] %} +{% if entity.status == 'active' and entity.files != [] and entity.files[0].urls != [] %} <a href="{{ entity.files[0].urls[0].url }}" class="ui top attached fluid huge green button"><i class="file pdf outline icon"></i>Download Full Text</a> -{% elif 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.status == '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> {% else %} <span class="ui top attached fluid huge grey button"><i class="file cross icon"></i>No Full Text Available</span> {% endif %} @@ -401,36 +405,36 @@ </div> {% endif %} -{% if container != None and container.es %} +{% if release.container != None and release.container._es %} <div class="ui segment attached"> <b>Container Metadata</b><br> -{% if container.es.is_oa == True %} +{% if release.container._es.is_oa == True %} <i class="icon unlock orange"></i>Open Access Publication<br> -{% elif container.es.is_oa == False %} +{% elif release.container._es.is_oa == False %} <i class="icon lock black"></i>Not Open Access<br> {% else %} <i class="icon question grey"></i>Unknown OA Status<br> {% endif %} -{% if (container.es != None) %} - {% if container.es.in_doaj == True %} - <i class="icon check green"></i> In <a href="https://doaj.org/toc/{{ container.issnl }}">DOAJ</a><br> - {% elif container.es.in_doaj == False %} +{% if (release.container._es != None) %} + {% if release.container._es.in_doaj == True %} + <i class="icon check green"></i> In <a href="https://doaj.org/toc/{{ release.container.issnl }}">DOAJ</a><br> + {% elif release.container._es.in_doaj == False %} <i class="icon times grey"></i> Not in <a href="https://doaj.org">DOAJ</a><br> {% endif %} - {% if container.es.in_road == True %} - <i class="icon check green"></i> In <a href="http://road.issn.org/issn/{{ container.issnl }}">ISSN ROAD</a><br> - {% elif container.es.in_road == False %} + {% 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 %} <i class="icon times grey"></i> Not in <a href="https://road.issn.org">ISSN ROAD</a><br> {% endif %} - {% if container.es.in_kbart == True %} - <i class="icon check green"></i> In <a href="https://thekeepers.org/purl/issn/{{ container.issnl }}">Keepers Registery</a><br> - {% elif container.es.in_kbart == False %} <i class="icon times grey"></i> Not in <a href="https://thekeepers.org/journals?query={{ container.issnl }}">Keepers Registry</a><br> + {% if release.container._es.in_kbart == True %} + <i class="icon check green"></i> In <a href="https://thekeepers.org/purl/issn/{{ release.container.issnl }}">Keepers Registery</a><br> + {% elif release.container._es.in_kbart == False %} <i class="icon times grey"></i> Not in <a href="https://thekeepers.org/journals?query={{ release.container.issnl }}">Keepers Registry</a><br> {% endif %} {% endif %} -{% if container.issnl != None %} - <i class="icon linkify"></i>ISSN-L: <code>{{ container.issnl }}</code><br> +{% if release.container.issnl != None %} + <i class="icon linkify"></i>ISSN-L: <code>{{ release.container.issnl }}</code><br> {% endif %} - <a href="/container/{{ container.ident }}" title="container {{ container.ident }}"><i class="icon share"></i>Fatcat Entry</a> + <a href="/container/{{ release.container.ident }}" title="container {{ release.container.ident }}"><i class="icon share"></i>Fatcat Entry</a> </div> {% endif %} @@ -457,8 +461,8 @@ <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"> - {% if container != None and container.issnl != None %} - <a href="http://www.sherpa.ac.uk/romeo/issn/{{ container.issnl }}/">SHERPA/RoMEO</a> (journal policies)<br/> + {% if release.container != None and release.container.issnl != None %} + <a href="http://www.sherpa.ac.uk/romeo/issn/{{ release.container.issnl }}/">SHERPA/RoMEO</a> (journal policies)<br/> {% endif %} {% if release != None and release.ext_ids.doi != None %} <a href="https://oadoi.org/{{ release.ext_ids.doi }}">oaDOI/unpaywall</a><br/> @@ -479,7 +483,7 @@ </div> </div> -{{ entity_macros.fatcat_bits(entity, "release", "container,files,filesets,webcaptures") }} +{{ entity_macros.fatcat_bits(entity, "release", "container,files,filesets,webcaptures", editgroup) }} </div> </div> diff --git a/python/fatcat_web/templates/webcapture_view.html b/python/fatcat_web/templates/webcapture_view.html index 9020bf63..b5495cee 100644 --- a/python/fatcat_web/templates/webcapture_view.html +++ b/python/fatcat_web/templates/webcapture_view.html @@ -1,4 +1,4 @@ -{% set entity = webcapture %} +{% set webcapture = entity %} {% import "entity_macros.html" as entity_macros %} {% extends "base.html" %} @@ -36,7 +36,7 @@ <br> <h3>Archive URLs</h3> {% if webcapture.archive_urls != None %} - {{ entity_macros.url_list(webcapture.archive_urls, webcapture.wayback_suffix) }} + {{ entity_macros.url_list(webcapture.archive_urls, webcapture._wayback_suffix) }} {% else %} No known public archive for this webcapture. {% endif %} @@ -78,7 +78,7 @@ This web capture is empty (contains no resources). </div> {% endif %} -{{ entity_macros.fatcat_bits(entity, "webcapture", "") }} +{{ entity_macros.fatcat_bits(entity, "webcapture", "", editgroup) }} </div> </div> diff --git a/python/fatcat_web/templates/work_view.html b/python/fatcat_web/templates/work_view.html index 507498c8..aa32ba39 100644 --- a/python/fatcat_web/templates/work_view.html +++ b/python/fatcat_web/templates/work_view.html @@ -1,4 +1,4 @@ -{% set entity = work %} +{% set work = entity %} {% import "entity_macros.html" as entity_macros %} {% extends "base.html" %} @@ -22,8 +22,8 @@ {% endif %} <h3>Releases</h3> -{% if releases != [] %} - {{ entity_macros.release_list(releases) }} +{% if work._releases != [] and work._releases != None %} + {{ entity_macros.release_list(work._releases) }} {% else %} <p>There are no known releases associated with this work. {% endif %} @@ -42,7 +42,7 @@ reference the same underlying "work". <div class="five wide column"> -{{ entity_macros.fatcat_bits(entity, "work", "") }} +{{ entity_macros.fatcat_bits(entity, "work", "", editgroup) }} </div> </div> |