Compare commits

...

11 Commits

Author SHA1 Message Date
Mojib Wali
ecacf0ba59 v2.0.2 2021-03-31 09:51:54 +02:00
Unix
592d59e54d depositform: disable field languages 2021-03-31 08:53:44 +02:00
Mojib Wali
f40fb37ec4 v2.0.1 2021-03-29 11:20:47 +02:00
Unix
44e4b01332 bugfix: hyperlink no-decoration 2021-03-29 10:42:40 +02:00
Mojib Wali
97feb284cf v2.0.0 2021-03-29 10:07:03 +02:00
Unix
20fc3e62be bugfix: recent uploads filter only latest version 2021-03-29 09:46:16 +02:00
Mojib Wali
530d32d7c7 migrate: to invenio-app-rdm:v2 2021-03-29 09:41:35 +02:00
Mojib Wali
b27d54b6f0 v1.9.6 2021-03-23 11:43:52 +01:00
Mojib Wali
f81ca88835 footer: adds documentation link
* footer: adds documentation link

* landingpage: disable jump btn
2021-03-23 11:40:47 +01:00
Mojib Wali
39c19238dd v1.9.5 2021-03-19 14:40:29 +01:00
Mojib Wali
3f14a3ada4 PublisherField: makes field required
* Publisher: makes field required
* publisherField: change in helptext
2021-03-19 14:39:29 +01:00
17 changed files with 150 additions and 79 deletions

View File

@@ -0,0 +1,47 @@
// This file is part of React-Invenio-Deposit
// Copyright (C) 2020 CERN.
// Copyright (C) 2020 Northwestern University.
// Copyright (C) 2021 Graz University of Technology.
//
// React-Invenio-Deposit is free software; you can redistribute it and/or modify it
// under the terms of the MIT License; see LICENSE file for more details.
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { FieldLabel, TextField } from 'react-invenio-forms';
export class PublisherField extends Component {
render() {
const { fieldPath, label, labelIcon, placeholder, required } = this.props;
return (
<TextField
fieldPath={fieldPath}
helpText={
'The publisher is used to formulate the citation, if you are plannig to mint a new DOI this publisher will be cited.'
}
label={
<FieldLabel htmlFor={fieldPath} icon={labelIcon} label={label} />
}
placeholder={placeholder}
required={required}
/>
);
}
}
PublisherField.propTypes = {
fieldPath: PropTypes.string.isRequired,
label: PropTypes.string,
labelIcon: PropTypes.string,
placeholder: PropTypes.string,
required: PropTypes.bool,
};
PublisherField.defaultProps = {
fieldPath: 'metadata.publisher',
label: 'Publisher',
labelIcon: 'building outline',
placeholder: 'Enter publisher name',
};

View File

@@ -33,7 +33,6 @@ import {
LanguagesField, LanguagesField,
PublishButton, PublishButton,
PublicationDateField, PublicationDateField,
PublisherField,
ResourceTypeField, ResourceTypeField,
SaveButton, SaveButton,
SubjectsField, SubjectsField,
@@ -44,6 +43,7 @@ import {
} from "react-invenio-deposit"; } from "react-invenio-deposit";
import { AccordionField } from "react-invenio-forms"; import { AccordionField } from "react-invenio-forms";
import { DoiMint } from "./DoiMint"; import { DoiMint } from "./DoiMint";
import { PublisherField } from "./PublisherField";
export class RDMDepositForm extends Component { export class RDMDepositForm extends Component {
constructor(props) { constructor(props) {
@@ -279,14 +279,11 @@ export class RDMDepositForm extends Component {
config={this.config} config={this.config}
record={this.props.record} record={this.props.record}
files={this.props.files} files={this.props.files}
permissions={this.props.permissions}
> >
<FormFeedback fieldPath="message" /> <FormFeedback fieldPath="message" />
<Container style={{ marginTop: "10px" }}> <Container style={{ marginTop: "10px" }}>
<DepositFormTitle <DepositFormTitle />
// TODO: make is_published part of the API response
// so we don't have to do this
isPublished={this.props.record.is_published}
/>
<Grid> <Grid>
<Grid.Row> <Grid.Row>
<Grid.Column width={11}> <Grid.Column width={11}>
@@ -296,7 +293,7 @@ export class RDMDepositForm extends Component {
label={"Files"} label={"Files"}
ui={this.accordionStyle} ui={this.accordionStyle}
> >
{this.noFiles && ( {this.noFiles && this.props.record.is_published && (
<p <p
style={{ style={{
textAlign: "center", textAlign: "center",
@@ -431,8 +428,10 @@ export class RDMDepositForm extends Component {
label="Subjects" label="Subjects"
labelIcon="tag" labelIcon="tag"
/> */} /> */}
{/**TODO- enable once issue is solved:
<LanguagesField * https://github.com/inveniosoftware/invenio-app-rdm/issues/738
*/}
{/* <LanguagesField
initialOptions={_get( initialOptions={_get(
this.props.record, this.props.record,
"ui.languages", "ui.languages",
@@ -445,10 +444,10 @@ export class RDMDepositForm extends Component {
key: item.id, key: item.id,
})) }))
} }
/> /> */}
<DatesField options={this.vocabularies.metadata.dates} /> <DatesField options={this.vocabularies.metadata.dates} />
<VersionField /> <VersionField />
<PublisherField /> <PublisherField required />
<br /> <br />
</AccordionField> </AccordionField>
{/**TODO: uncomment to use FundingField*/} {/**TODO: uncomment to use FundingField*/}
@@ -505,8 +504,11 @@ export class RDMDepositForm extends Component {
label={"Protection"} label={"Protection"}
labelIcon={"shield"} labelIcon={"shield"}
/> />
{this.config.data_cite &&( {this.config.data_cite && (
<DoiMint record={this.props.record} config={this.config.data_cite}/> <DoiMint
record={this.props.record}
config={this.config.data_cite}
/>
)} )}
</Sticky> </Sticky>
</Grid.Column> </Grid.Column>

View File

@@ -17,6 +17,7 @@ ReactDOM.render(
record={getInputFromDOM("deposits-record")} record={getInputFromDOM("deposits-record")}
files={getInputFromDOM("deposits-record-files")} files={getInputFromDOM("deposits-record-files")}
config={getInputFromDOM("deposits-config")} config={getInputFromDOM("deposits-config")}
permissions={getInputFromDOM("deposits-record-permissions")}
/>, />,
document.getElementById("deposit-form") document.getElementById("deposit-form")
); );

View File

@@ -54,11 +54,6 @@
vertical-align: top; vertical-align: top;
} }
a {
color: inherit;
text-decoration: none;
transition: background-color 0.15s ease 0s, color 0.15s ease 0s;
}
/*****END logo section******/ /*****END logo section******/
.short-menu { .short-menu {

View File

@@ -24,3 +24,11 @@
//@import "../invenio_app_rdm/theme"; //@import "../invenio_app_rdm/theme";
//@import "variables"; //@import "variables";
// used in various templates
// add no hyperlink decoration
.no-decoration{
color: inherit;
text-decoration: none;
transition: background-color 0.15s ease 0s, color 0.15s ease 0s;
}

View File

@@ -21,4 +21,6 @@ class FrontpageRecordsSearch(RecordsSearch):
"""Default index and filter for frontpage search.""" """Default index and filter for frontpage search."""
index = "rdmrecords-records" index = "rdmrecords-records"
default_filter = Q("query_string", query=("access.record:public")) default_filter = Q(
"query_string", query=(
"access.record:public" "AND versions.is_latest:true"))

View File

@@ -4,14 +4,14 @@
{%- if config.SECURITY_REGISTERABLE %} {%- if config.SECURITY_REGISTERABLE %}
<div class="short-menu-right-button"> <div class="short-menu-right-button">
<a href="{{ url_for('security.register') }}"> <a href="{{ url_for('security.register') }}" class="no-decoration">
{{_ ("Sign up")}} {{_ ("Sign up")}}
</a> </a>
</div> </div>
{%- endif %} {%- endif %}
<div class="short-menu-right-button"> <div class="short-menu-right-button">
<a href="{{url_for_security('login', next=request.path)}}" style="text-decoration:none"> <a href="{{url_for_security('login', next=request.path)}}" class="no-decoration">
{{_ ("Log in")}} {{_ ("Log in")}}
</a> </a>
</div> </div>
@@ -21,12 +21,12 @@
{%- if config.USERPROFILES %} {%- if config.USERPROFILES %}
<div class="short-menu-right-button"> <div class="short-menu-right-button">
<a href="{{ url_for('invenio_userprofiles.profile') }}"> <a href="{{ url_for('invenio_userprofiles.profile') }}" class="no-decoration">
<i class="user icon"></i> {{ current_user.email }} <i class="user icon"></i> {{ current_user.email }}
</a> </a>
</div> </div>
<div class="short-menu-right-button"> <div class="short-menu-right-button">
<a class="dropdown-item" href="{{url_for_security('logout')}}"> <a class="dropdown-item no-decoration" href="{{url_for_security('logout')}}">
{{_('Sign out')}} {{_('Sign out')}}
</a> </a>
</div> </div>

View File

@@ -19,8 +19,11 @@
{%- if forms_config %} {%- if forms_config %}
<input type="hidden" name="deposits-config" value='{{forms_config | tojson }}'></input> <input type="hidden" name="deposits-config" value='{{forms_config | tojson }}'></input>
{%- endif %} {%- endif %}
{%- if permissions %}
<input id="deposits-record-permissions" type="hidden" name="deposits-record-permissions" value='{{permissions | tojson }}'></input>
{%- endif %}
<div id="deposit-form"></div> <div id="deposit-form"></div>
{%- endblock page_body %} {%- endblock page_body %}
{%- block javascript %} {%- block javascript %}
{{ super() }} {{ super() }}

View File

@@ -29,6 +29,10 @@
<h2>{{_ ("Repository")}}</h2> <h2>{{_ ("Repository")}}</h2>
<p class="bodytext"> <p class="bodytext">
<a href="https://tu-graz-library.github.io/docs-repository" title="Repository documentation" target="_blank">
{{_ ("Documentation")}} <i class="external alternate icon"></i>
</a>
<br>
<!-- <a href="{{ url_for('invenio_theme_tugraz.comingsoon') }}"> <!-- <a href="{{ url_for('invenio_theme_tugraz.comingsoon') }}">
{{_ ("Impressum")}}<i class="angle right icon"></i> {{_ ("Impressum")}}<i class="angle right icon"></i>
</a> </a>

View File

@@ -19,7 +19,7 @@
<div class="ui grid stackable container"> <div class="ui grid stackable container">
<div class="three column row centered" style="padding-bottom: 0;"> <div class="three column row centered" style="padding-bottom: 0;">
<div class="two wide column main-menu-entry"> <div class="two wide column main-menu-entry">
<a href="{{url_for('invenio_theme_tugraz.index')}}" title="Home"> <a href="{{url_for('invenio_theme_tugraz.index')}}" title="Home" class="no-decoration">
<span class="home-inline"> <span class="home-inline">
<svg shape-rendering="geometricPrecision" id="int-menu-q-home-icon" <svg shape-rendering="geometricPrecision" id="int-menu-q-home-icon"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg"
@@ -44,7 +44,7 @@
<!--TODO: remove this once above is uncommented--> <!--TODO: remove this once above is uncommented-->
<div class="two wide column main-menu-entry"> <div class="two wide column main-menu-entry">
<a href="{{url_for('invenio_app_rdm_records.deposit_search')}}">{{_ ("Uploads")}}</a> <a href="{{url_for('invenio_app_rdm_records.deposit_search')}}" class="no-decoration">{{_ ("Uploads")}}</a>
</div> </div>
</div> </div>

View File

@@ -73,7 +73,7 @@
</div> </div>
<h4> <h4>
<a href="{{ record_url }}"> <a href="{{ record_url }}" class="no-decoration">
{{r.metadata.title}} {{r.metadata.title}}
</a> </a>
</h4> </h4>
@@ -83,7 +83,7 @@
</p> </p>
<p class="hidden-xs"> <p class="hidden-xs">
<a href="{{record_url}}"> <a href="{{record_url}}" class="no-decoration">
{{ r.metadata.description | striptags | truncate(300) }} {{ r.metadata.description | striptags | truncate(300) }}
</a> </a>
</p> </p>

View File

@@ -17,12 +17,34 @@
{%- set metadata = record.metadata %} {%- set metadata = record.metadata %}
{%- block page_body %} {%- block page_body %}
{% if permissions is defined and permissions.can_update_draft %} <div class="banners">
<div {% if permissions is defined and permissions.can_edit %}
id="recordManagement" <div class="ui warning flashed top-attached manage message">
data-recid='{{ record["id"] | tojson }}'> <div class="ui container">
<div id="recordManagement" data-record='{{ record | tojson }}' data-permissions='{{ permissions | tojson }}'></div>
</div>
</div> </div>
{% endif %} {% endif %}
{% if not record.versions.is_latest %}
<div class="ui warning flashed top-attached manage message">
<div class="ui container">
<div class="ui relaxed grid">
<div class="column">
<div class="row">
<p>
{% trans link_start=('<a href="' + record.links.latest_html + '"><b>')|safe, link_end='</b></a>'|safe %}
There is a {{ link_start }}newer version{{ link_end }} of the record available.
{% endtrans %}
</p>
</div>
</div>
</div>
</div>
</div>
{% endif %}
</div>
<div class="ui container"> <div class="ui container">
<div class="ui relaxed grid"> <div class="ui relaxed grid">
<div class="two column row top-padded"> <div class="two column row top-padded">
@@ -33,9 +55,7 @@
<div class="two column row"> <div class="two column row">
<div class="left floated left aligned column"> <div class="left floated left aligned column">
<span class="ui" title="Publication date">{{ record.ui.publication_date_l10n_long }}</span> <span class="ui" title="Publication date">{{ record.ui.publication_date_l10n_long }}</span>
{%- if metadata.version %} <span class="label text-muted"> | Version {{ record.ui.version }}</span>
<span class="label text-muted"> | Version {{ metadata.version }}</span>
{% endif %}
</div> </div>
<div class="right floated right aligned column"> <div class="right floated right aligned column">
<span class="ui label small grey">{{ record.ui.resource_type }}</span> <span class="ui label small grey">{{ record.ui.resource_type }}</span>
@@ -88,7 +108,7 @@
<div class="ui grid"> <div class="ui grid">
<div class="two column row top-bottom-padded font-small"> <div class="two column row top-bottom-padded font-small">
<div class="four wide column"> <div class="four wide column">
<p><b>Upload infromation</b></p> <p><b>Upload information</b></p>
</div> </div>
<div class="twelve wide column"> <div class="twelve wide column">
<span class="label text-muted"> <span class="label text-muted">
@@ -98,7 +118,7 @@
</div> </div>
</div> </div>
{%- endblock record_footer -%} {%- endblock record_footer -%}
{%- block jump -%} <!-- {%- block jump -%}
<div class="ui grid"> <div class="ui grid">
<div class="centered row" id="jump-btn"> <div class="centered row" id="jump-btn">
<a style="cursor: pointer;"> <a style="cursor: pointer;">
@@ -107,7 +127,7 @@
</a> </a>
</div> </div>
</div> </div>
{%- endblock jump -%} {%- endblock jump -%} -->
{%- endblock record_body %} {%- endblock record_body %}
</div> </div>
<div class="five wide column"> <div class="five wide column">

View File

@@ -16,13 +16,13 @@
{%- for l in current_i18n.get_locales() %} {%- for l in current_i18n.get_locales() %}
{%- if current_i18n.language != l.language %} {%- if current_i18n.language != l.language %}
<a <a
href="{{ url_for('invenio_i18n.set_lang', lang_code=l.language) }}">{{ l.get_display_name().upper() [0:2]}}</a> href="{{ url_for('invenio_i18n.set_lang', lang_code=l.language) }}" class="no-decoration">{{ l.get_display_name().upper() [0:2]}}</a>
{%- endif %} {%- endif %}
{%- endfor %} {%- endfor %}
</div> </div>
{%- endif %} {%- endif %}
<div class="search-icon-header"> <div class="search-icon-header">
<a href="{{url_for('invenio_search_ui.search')}}"> <a href="{{url_for('invenio_search_ui.search')}}" class="no-decoration">
<svg class="short-menu-icon" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" <svg class="short-menu-icon" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://www.w3.org/2000/svg" height="26.015" width="26.015" version="1.1" xmlns="http://www.w3.org/2000/svg" height="26.015" width="26.015" version="1.1"
xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"
@@ -60,7 +60,7 @@
<img height="51.862" src="{{ url_for('static', filename='images/library_logo.png')}}"> <img height="51.862" src="{{ url_for('static', filename='images/library_logo.png')}}">
</div> </div>
<div class="affiliation-text"> <div class="affiliation-text">
<a title="RDM" href="{{url_for('invenio_theme_tugraz.index')}}"> <a title="Home" href="{{url_for('invenio_theme_tugraz.index')}}" class="no-decoration">
TU GRAZ TU GRAZ
<br> <br>
{{_ ("REPOSITORY")}} {{_ ("REPOSITORY")}}
@@ -73,7 +73,7 @@
<!--Right--> <!--Right-->
<div class="right floated right aligned six wide column"> <div class="right floated right aligned six wide column">
<div class="affiliation-logo" id="int-header-logo"> <div class="affiliation-logo" id="int-header-logo">
<a href="https://www.tugraz.at" title="TU Graz Home" target="_blank"> <a href="https://www.tugraz.at" title="TU Graz Home" target="_blank" class="no-decoration">
<div class="affiliation-logo-claim"> <div class="affiliation-logo-claim">
<div class="affiliation-logo-claim-single">{{_ ("SCIENCE")}}</div> <div class="affiliation-logo-claim-single">{{_ ("SCIENCE")}}</div>
<div class="affiliation-logo-claim-single">{{_ ("PASSION")}}</div> <div class="affiliation-logo-claim-single">{{_ ("PASSION")}}</div>

View File

@@ -12,4 +12,4 @@ This file is imported by ``invenio_theme_tugraz.__init__``,
and parsed by ``setup.py``. and parsed by ``setup.py``.
""" """
__version__ = "1.9.4" __version__ = "2.0.2"

View File

@@ -22,13 +22,13 @@ from invenio_app_rdm.records_ui.views.decorators import (
pass_record, pass_record,
pass_record_files, pass_record_files,
service, service,
user_permissions,
) )
from invenio_app_rdm.records_ui.views.deposits import ( from invenio_app_rdm.records_ui.views.deposits import (
get_form_config, get_form_config,
get_search_url, get_search_url,
new_record, new_record,
) )
from invenio_rdm_records.proxies import current_rdm_records
from invenio_rdm_records.resources.config import RDMDraftFilesResourceConfig from invenio_rdm_records.resources.config import RDMDraftFilesResourceConfig
from invenio_rdm_records.resources.serializers import UIJSONSerializer from invenio_rdm_records.resources.serializers import UIJSONSerializer
from invenio_rdm_records.services import RDMDraftFilesService from invenio_rdm_records.services import RDMDraftFilesService
@@ -146,9 +146,7 @@ def deposit_create():
@pass_draft @pass_draft
def deposit_edit(draft=None, pid_value=None): def deposit_edit(draft=None, pid_value=None):
"""Edit an existing deposit.""" """Edit an existing deposit."""
# TODO: should be embedded in record service files_list = current_rdm_records.draft_files_service.list_files(
files_service = RDMDraftFilesService()
files_list = files_service.list_files(
id_=pid_value, id_=pid_value,
identity=g.identity, identity=g.identity,
links_config=RDMDraftFilesResourceConfig.links_config, links_config=RDMDraftFilesResourceConfig.links_config,
@@ -157,15 +155,6 @@ def deposit_edit(draft=None, pid_value=None):
serializer = UIJSONSerializer() serializer = UIJSONSerializer()
record = serializer.serialize_object_to_dict(draft.to_dict()) record = serializer.serialize_object_to_dict(draft.to_dict())
# TODO: get the `is_published` field when reading the draft
from invenio_pidstore.errors import PIDUnregistered
try:
service().draft_cls.pid.resolve(pid_value, registered_only=True)
record["is_published"] = True
except PIDUnregistered:
record["is_published"] = False
forms_config = get_form_config(apiUrl=f"/api/records/{pid_value}/draft") forms_config = get_form_config(apiUrl=f"/api/records/{pid_value}/draft")
forms_config["data_cite"] = get_datacite_details() forms_config["data_cite"] = get_datacite_details()
@@ -175,13 +164,13 @@ def deposit_edit(draft=None, pid_value=None):
record=record, record=record,
files=files_list.to_dict(), files=files_list.to_dict(),
searchbar_config=dict(searchUrl=get_search_url()), searchbar_config=dict(searchUrl=get_search_url()),
permissions=draft.has_permissions_to(['new_version'])
) )
@pass_record @pass_record
@pass_record_files @pass_record_files
@user_permissions(actions=["update_draft"]) def record_detail(record=None, files=None, pid_value=None):
def record_detail(record=None, files=None, pid_value=None, permissions=None):
"""Record detail page (aka landing page).""" """Record detail page (aka landing page)."""
files_dict = None if files is None else files.to_dict() files_dict = None if files is None else files.to_dict()
return render_template( return render_template(
@@ -189,5 +178,5 @@ def record_detail(record=None, files=None, pid_value=None, permissions=None):
record=UIJSONSerializer().serialize_object_to_dict(record.to_dict()), record=UIJSONSerializer().serialize_object_to_dict(record.to_dict()),
pid=pid_value, pid=pid_value,
files=files_dict, files=files_dict,
permissions=permissions, permissions=record.has_permissions_to(['edit', 'new_version']),
) )

View File

@@ -32,7 +32,7 @@ theme = WebpackThemeBundle(
'prop-types': '^15.7.2', 'prop-types': '^15.7.2',
'react-dnd': '^11.1.3', 'react-dnd': '^11.1.3',
'react-dnd-html5-backend': '^11.1.3', 'react-dnd-html5-backend': '^11.1.3',
'react-invenio-deposit': '^0.11.10', 'react-invenio-deposit': '^0.12.0',
'react-invenio-forms': '^0.6.3', 'react-invenio-forms': '^0.6.3',
'react-dropzone': "^11.0.3", 'react-dropzone': "^11.0.3",
'yup': '^0.27.0', 'yup': '^0.27.0',

View File

@@ -20,9 +20,9 @@ tests_require = [
"invenio-app>=1.3.0,<2.0.0", "invenio-app>=1.3.0,<2.0.0",
] ]
# Should follow inveniosoftware/invenio versions # Should follow invenio-app-rdm
invenio_search_version = ">=1.4.0,<2.0.0" invenio_search_version = ">=1.4.0,<1.5.0"
invenio_db_version = ">=1.0.5,<2.0.0" invenio_db_version = ">=1.0.9,<1.1.0"
extras_require = { extras_require = {
"elasticsearch7": [f"invenio-search[elasticsearch7]{invenio_search_version}"], "elasticsearch7": [f"invenio-search[elasticsearch7]{invenio_search_version}"],
@@ -60,7 +60,7 @@ install_requires = [
"invenio_search>=1.4.0,<2.0.0", "invenio_search>=1.4.0,<2.0.0",
"invenio_config_tugraz>=0.5.1", "invenio_config_tugraz>=0.5.1",
# keep this package updated. # keep this package updated.
"invenio_app_rdm<=1.0.0", "invenio_app_rdm==2.0.1",
] ]
packages = find_packages() packages = find_packages()