From 421592464a87db180e74754f0fc04ca2b1a69cc0 Mon Sep 17 00:00:00 2001
From: Jenny Bonsak
Date: Tue, 4 Jul 2023 16:41:53 +0200
Subject: [PATCH] frontpage: replace react recent uploads component with jinja
---
.../less/zenodo-rdm/modules/popup.overrides | 44 ++++++
.../less/zenodo-rdm/modules/popup.variables | 0
assets/less/zenodo-rdm/views/item.overrides | 37 +++++
invenio.cfg | 4 +-
site/zenodo_rdm/views.py | 30 +++-
.../semantic-ui/zenodo_rdm/frontpage.html | 8 +-
.../zenodo_rdm/macros/creators.html | 71 +++++++++
.../macros/recent_uploads_list.html | 46 ++++++
.../zenodo_rdm/macros/record_item.html | 135 ++++++++++++++++++
9 files changed, 370 insertions(+), 5 deletions(-)
create mode 100644 assets/less/zenodo-rdm/modules/popup.overrides
create mode 100644 assets/less/zenodo-rdm/modules/popup.variables
create mode 100644 templates/semantic-ui/zenodo_rdm/macros/creators.html
create mode 100644 templates/semantic-ui/zenodo_rdm/macros/recent_uploads_list.html
create mode 100644 templates/semantic-ui/zenodo_rdm/macros/record_item.html
diff --git a/assets/less/zenodo-rdm/modules/popup.overrides b/assets/less/zenodo-rdm/modules/popup.overrides
new file mode 100644
index 00000000..9aaa8614
--- /dev/null
+++ b/assets/less/zenodo-rdm/modules/popup.overrides
@@ -0,0 +1,44 @@
+
+.ui.label.stats-popup {
+ position: relative;
+
+ .ui.popup {
+ display: none;
+ position: absolute;
+ top: -200%;
+ width: max-content;
+
+ &:before {
+ top: 95%;
+ }
+
+ }
+
+ uniqueViews {
+ .ui.popup {
+ left: 0;
+
+ &:before {
+ top: 87%;
+ left: 24%;
+ }
+ }
+ }
+
+ uniqueDownloads {
+ .ui.popup {
+ right: 0;
+
+ &:before {
+ top: 87%;
+ right: 16%;
+ }
+ }
+ }
+
+ &:hover {
+ .ui.popup {
+ display: block !important;
+ }
+ }
+}
diff --git a/assets/less/zenodo-rdm/modules/popup.variables b/assets/less/zenodo-rdm/modules/popup.variables
new file mode 100644
index 00000000..e69de29b
diff --git a/assets/less/zenodo-rdm/views/item.overrides b/assets/less/zenodo-rdm/views/item.overrides
index 37ef8b39..c62a3640 100644
--- a/assets/less/zenodo-rdm/views/item.overrides
+++ b/assets/less/zenodo-rdm/views/item.overrides
@@ -7,3 +7,40 @@
font-weight: @bold;
}
}
+
+
+.ui.items {
+
+ &.link > .item:hover .content .header {
+ color: @darkTextColor;
+ }
+
+ &.carousel.page {
+ width: 100%;
+
+ &:first-child {
+ margin: 1.5em 0 !important;
+ }
+ }
+
+ & > .carousel.item {
+ min-width: 100%;
+ }
+
+ .content {
+ width: 100% !important;
+
+ &.flex.right-column {
+ flex-direction: column;
+ align-items: end;
+ };
+ }
+ }
+
+ #records-list {
+ .ui.items {
+ li.item {
+ padding-left: 0 !important; // Needed because of override for li ~ .item
+ }
+ }
+ }
\ No newline at end of file
diff --git a/invenio.cfg b/invenio.cfg
index d5074461..78bf1f13 100644
--- a/invenio.cfg
+++ b/invenio.cfg
@@ -12,7 +12,7 @@ Only configuration created via cookiecutter or very likely to be edited
by installer are included here.
"""
-from invenio_app_rdm.config import CELERY_BEAT_SCHEDULE
+from invenio_app_rdm.config import CELERY_BEAT_SCHEDULE, APP_RDM_ROUTES
from invenio_i18n import lazy_gettext as _
from invenio_oauthclient.contrib.openaire_aai import REMOTE_SANDBOX_APP
from invenio_oauthclient.contrib.orcid import ORCIDOAuthSettingsHelper
@@ -27,6 +27,7 @@ from invenio_records_resources.services.records.queryparser import (
from invenio_oauthclient.views.client import auto_redirect_login
from zenodo_rdm.custom_fields import CUSTOM_FIELDS_UI, CUSTOM_FIELDS, CUSTOM_FIELDS_FACETS, NAMESPACES
+from zenodo_rdm.views import frontpage_view_function
from zenodo_rdm.permissions import ZenodoRDMRecordPermissionPolicy
# Flask
@@ -40,6 +41,7 @@ SECRET_KEY="CHANGE_ME"
# route correct hosts to the application.
APP_ALLOWED_HOSTS = ['0.0.0.0', 'localhost', '127.0.0.1']
+APP_RDM_ROUTES["index"] = ("/", frontpage_view_function)
# Flask-SQLAlchemy
# ================
diff --git a/site/zenodo_rdm/views.py b/site/zenodo_rdm/views.py
index 00235124..74a0fdea 100644
--- a/site/zenodo_rdm/views.py
+++ b/site/zenodo_rdm/views.py
@@ -6,12 +6,40 @@
# under the terms of the MIT License; see LICENSE file for more details.
"""Additional views."""
-from flask import Blueprint
+from flask import Blueprint, current_app, g, render_template
+from invenio_rdm_records.proxies import current_rdm_records
+from invenio_rdm_records.resources.serializers import UIJSONSerializer
+from invenio_records_resources.resources.records.utils import search_preference
from marshmallow import ValidationError
from .support.support import ZenodoSupport
+#
+# Views
+#
+def frontpage_view_function():
+ """Zenodo frontpage view."""
+ recent_uploads = current_rdm_records.records_service.search(
+ identity=g.identity,
+ params={"sort": "newest", "size": 10},
+ search_preference=search_preference(),
+ expand=False,
+ )
+
+ records_ui = []
+
+ for record in recent_uploads:
+ record_ui = UIJSONSerializer().dump_obj(record)
+ records_ui.append(record_ui)
+
+ return render_template(
+ current_app.config["THEME_FRONTPAGE_TEMPLATE"],
+ show_intro_section=current_app.config["THEME_SHOW_FRONTPAGE_INTRO_SECTION"],
+ recent_uploads=records_ui,
+ )
+
+
#
# Registration
#
diff --git a/templates/semantic-ui/zenodo_rdm/frontpage.html b/templates/semantic-ui/zenodo_rdm/frontpage.html
index 81944afd..cb8536cd 100644
--- a/templates/semantic-ui/zenodo_rdm/frontpage.html
+++ b/templates/semantic-ui/zenodo_rdm/frontpage.html
@@ -22,7 +22,7 @@
# as an Intergovernmental Organization or submit itself to any jurisdiction.
-#}
-{% from "invenio_app_rdm/macros/records_list.html" import records_list %}
+{% from "zenodo_rdm/macros/recent_uploads_list.html" import recent_uploads_list %}
{%- extends "invenio_app_rdm/frontpage.html" %}
{%- block page_header %}
@@ -30,7 +30,9 @@
{%- endblock page_header %}
{% block main_column_content %}
- {{ records_list(fetch_url=config.ZENODO_FRONTPAGE_RECENT_UPLOADS_QUERY) }}
+ {% if recent_uploads %}
+ {{ recent_uploads_list(records=recent_uploads) }}
+ {% endif %}
{% endblock main_column_content %}
{% block side_column_content %}
@@ -82,4 +84,4 @@
-{% endblock side_column_content %}
+{% endblock side_column_content %}
\ No newline at end of file
diff --git a/templates/semantic-ui/zenodo_rdm/macros/creators.html b/templates/semantic-ui/zenodo_rdm/macros/creators.html
new file mode 100644
index 00000000..095b0f4d
--- /dev/null
+++ b/templates/semantic-ui/zenodo_rdm/macros/creators.html
@@ -0,0 +1,71 @@
+{#
+# This file is part of Zenodo.
+# Copyright (C) 2022 CERN.
+#
+# Zenodo is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of the
+# License, or (at your option) any later version.
+#
+# Zenodo is distributed in the hope that it will be
+# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Zenodo; if not, write to the
+# Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307, USA.
+#
+# In applying this license, CERN does not
+# waive the privileges and immunities granted to it by virtue of its status
+# as an Intergovernmental Organization or submit itself to any jurisdiction.
+-#}
+
+{% macro creators(creators=None) %}
+ {% for creator in creators %}
+ {% set creator_name = creator.person_or_org.get("name", "No name") if creator.person_or_org %}
+ {% set ids = creator.person_or_org.get("identifiers", []) if creator.person_or_org %}
+
+
+
+ {{ creator_name }}
+
+
+ {{ creator_icons(creator_name=creator_name, ids=ids) }}
+
+ {% endfor%}
+{% endmacro %}
+
+
+{% macro creator_icons(creator_name=None, ids=None) %}
+ {% for id in ids %}
+ {% if id.scheme == "orcid" %}
+ {% set link = "https://orcid.org/{identifier}".format(identifier=id.identifier) %}
+ {% set link_title = _("ORCID profile") %}
+ {% set icon = "/static/images/orcid.svg" %}
+
+ {% elif id.scheme == "ror" %}
+ {% set link = "https://ror.org/{identifier}".format(identifier=id.identifier) %}
+ {% set link_title = _("ROR profile") %}
+ {% set icon = "/static/images/ror-icon.svg" %}
+
+ {% elif id.scheme == "gnd" %}
+ {% set link = "https://d-nb.info/gnd/{identifier}".format(identifier=id.identifier) %}
+ {% set link_title = _("GND profile") %}
+ {% set icon = "/static/images/gnd-icon.svg" %}
+ {% endif %}
+
+
+
+ {% endfor %}
+{% endmacro %}
\ No newline at end of file
diff --git a/templates/semantic-ui/zenodo_rdm/macros/recent_uploads_list.html b/templates/semantic-ui/zenodo_rdm/macros/recent_uploads_list.html
new file mode 100644
index 00000000..9aff1cfc
--- /dev/null
+++ b/templates/semantic-ui/zenodo_rdm/macros/recent_uploads_list.html
@@ -0,0 +1,46 @@
+{#
+# This file is part of Zenodo.
+# Copyright (C) 2022 CERN.
+#
+# Zenodo is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of the
+# License, or (at your option) any later version.
+#
+# Zenodo is distributed in the hope that it will be
+# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Zenodo; if not, write to the
+# Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307, USA.
+#
+# In applying this license, CERN does not
+# waive the privileges and immunities granted to it by virtue of its status
+# as an Intergovernmental Organization or submit itself to any jurisdiction.
+-#}
+
+{% from "zenodo_rdm/macros/record_item.html" import record_item %}
+
+{% macro recent_uploads_list(title="Recent uploads", records=None) %}
+
+
+
+
+
+
+ {% for record in records %}
+ {{ record_item(record=record) }}
+ {% endfor %}
+
+
+
+
+
+{% endmacro %}
\ No newline at end of file
diff --git a/templates/semantic-ui/zenodo_rdm/macros/record_item.html b/templates/semantic-ui/zenodo_rdm/macros/record_item.html
new file mode 100644
index 00000000..2f100189
--- /dev/null
+++ b/templates/semantic-ui/zenodo_rdm/macros/record_item.html
@@ -0,0 +1,135 @@
+{#
+# This file is part of Zenodo.
+# Copyright (C) 2022 CERN.
+#
+# Zenodo is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of the
+# License, or (at your option) any later version.
+#
+# Zenodo is distributed in the hope that it will be
+# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Zenodo; if not, write to the
+# Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307, USA.
+#
+# In applying this license, CERN does not
+# waive the privileges and immunities granted to it by virtue of its status
+# as an Intergovernmental Organization or submit itself to any jurisdiction.
+-#}
+
+{% from "zenodo_rdm/macros/creators.html" import creators %}
+
+{% macro record_item(record=None) %}
+
+
+
+ {# Top labels #}
+
+
+ {# Title #}
+
+
+ {# Creators #}
+
+ {% set creators_list = record.ui.creators.creators %}
+ {% set creators_sliced = creators_list[:3] %}
+
+ {{ creators(creators=creators_sliced) }}
+
+
+ {# Description #}
+
+ {% set description = record.ui.get("description_stripped", "No description") %}
+
+ {{ description | truncate(length=350, end='...') }}
+
+
+
+
+
+{% endmacro %}
\ No newline at end of file