invenio-app-rdm 13.0.0rc2__py2.py3-none-any.whl → 13.0.0rc4__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. invenio_app_rdm/__init__.py +1 -1
  2. invenio_app_rdm/config.py +14 -1
  3. invenio_app_rdm/ext.py +2 -2
  4. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/deposit.html +5 -0
  5. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/detail.html +1 -1
  6. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/macros/detail.html +1 -1
  7. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/macros/files.html +20 -3
  8. invenio_app_rdm/records_ui/views/deposits.py +11 -5
  9. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/ImpersonateUserForm.js +12 -17
  10. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/SetQuotaAction.js +1 -1
  11. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/communityRecordsSearch/CommunityRecordsSearchAppLayout.js +3 -4
  12. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/deposit/RDMDepositForm.js +6 -1
  13. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/deposit/index.js +1 -0
  14. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordVersionsList.js +16 -17
  15. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RemoveFromCommunity/RemoveFromCommunityAction.js +5 -5
  16. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/search/components.js +13 -18
  17. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/file_uploader/uppy.less +37 -0
  18. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/modules/accordion.overrides +9 -0
  19. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/i18next-scanner.config.js +1 -1
  20. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/i18next.js +1 -1
  21. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/_generatedTranslations.js +66 -0
  22. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ar/messages.po +804 -137
  23. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ar/translations.json +277 -249
  24. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/bg/messages.po +689 -70
  25. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/bg/translations.json +102 -82
  26. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ca/messages.po +699 -80
  27. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ca/translations.json +112 -92
  28. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/cs/messages.po +821 -138
  29. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/cs/translations.json +290 -262
  30. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/da/messages.po +691 -66
  31. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/da/translations.json +91 -71
  32. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/de/messages.po +818 -138
  33. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/de/translations.json +260 -240
  34. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/el/messages.po +698 -78
  35. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/el/translations.json +108 -88
  36. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/en/messages.po +1000 -5
  37. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/en/translations.json +81 -28
  38. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/es/messages.po +810 -137
  39. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/es/translations.json +253 -233
  40. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/et/messages.po +746 -133
  41. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/et/translations.json +130 -110
  42. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/fa/messages.po +688 -69
  43. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/fa/translations.json +103 -79
  44. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/fr/messages.po +809 -126
  45. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/fr/translations.json +277 -257
  46. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/hr/messages.po +695 -70
  47. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/hr/translations.json +101 -79
  48. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/hu/messages.po +801 -135
  49. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/hu/translations.json +254 -234
  50. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/index.js +16 -65
  51. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/it/messages.po +712 -86
  52. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/it/translations.json +116 -96
  53. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ja/messages.po +683 -70
  54. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ja/translations.json +96 -78
  55. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ka/messages.po +689 -70
  56. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ka/translations.json +109 -85
  57. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ko/messages.po +889 -0
  58. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ko/translations.json +277 -0
  59. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/lt/messages.po +702 -71
  60. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/lt/translations.json +113 -85
  61. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/no/messages.po +689 -70
  62. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/no/translations.json +102 -82
  63. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/pl/messages.po +704 -70
  64. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/pl/translations.json +119 -91
  65. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/pt/messages.po +694 -69
  66. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/pt/translations.json +93 -73
  67. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ro/messages.po +717 -85
  68. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ro/translations.json +155 -133
  69. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ru/messages.po +806 -124
  70. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ru/translations.json +288 -260
  71. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/sk/messages.po +713 -82
  72. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/sk/translations.json +119 -91
  73. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/sv/messages.po +807 -141
  74. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/sv/translations.json +260 -240
  75. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/tr/messages.po +799 -128
  76. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/tr/translations.json +259 -239
  77. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/uk/messages.po +756 -131
  78. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/uk/translations.json +124 -96
  79. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/zh_CN/messages.po +736 -123
  80. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/zh_CN/translations.json +130 -108
  81. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/zh_TW/messages.po +683 -70
  82. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/zh_TW/translations.json +100 -78
  83. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/package-lock.json +1295 -678
  84. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/package.json +3 -37
  85. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/scripts/compileCatalog.js +102 -24
  86. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/scripts/fixTrailingNewlines.js +23 -0
  87. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/scripts/initCatalog.js +1 -1
  88. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/scripts/postExtractMessages.js +36 -0
  89. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/translations.pot +243 -94
  90. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/intro_section.html +7 -6
  91. invenio_app_rdm/theme/webpack.py +1 -0
  92. invenio_app_rdm/translations/ar/LC_MESSAGES/messages.mo +0 -0
  93. invenio_app_rdm/translations/ar/LC_MESSAGES/messages.po +972 -376
  94. invenio_app_rdm/translations/bg/LC_MESSAGES/messages.mo +0 -0
  95. invenio_app_rdm/translations/bg/LC_MESSAGES/messages.po +907 -278
  96. invenio_app_rdm/translations/ca/LC_MESSAGES/messages.mo +0 -0
  97. invenio_app_rdm/translations/ca/LC_MESSAGES/messages.po +912 -283
  98. invenio_app_rdm/translations/cs/LC_MESSAGES/messages.mo +0 -0
  99. invenio_app_rdm/translations/cs/LC_MESSAGES/messages.po +1069 -405
  100. invenio_app_rdm/translations/da/LC_MESSAGES/messages.mo +0 -0
  101. invenio_app_rdm/translations/da/LC_MESSAGES/messages.po +908 -273
  102. invenio_app_rdm/translations/de/LC_MESSAGES/messages.mo +0 -0
  103. invenio_app_rdm/translations/de/LC_MESSAGES/messages.po +1017 -406
  104. invenio_app_rdm/translations/el/LC_MESSAGES/messages.mo +0 -0
  105. invenio_app_rdm/translations/el/LC_MESSAGES/messages.po +915 -286
  106. invenio_app_rdm/translations/es/LC_MESSAGES/messages.mo +0 -0
  107. invenio_app_rdm/translations/es/LC_MESSAGES/messages.po +963 -371
  108. invenio_app_rdm/translations/et/LC_MESSAGES/messages.mo +0 -0
  109. invenio_app_rdm/translations/et/LC_MESSAGES/messages.po +938 -362
  110. invenio_app_rdm/translations/fa/LC_MESSAGES/messages.mo +0 -0
  111. invenio_app_rdm/translations/fa/LC_MESSAGES/messages.po +906 -277
  112. invenio_app_rdm/translations/fr/LC_MESSAGES/messages.mo +0 -0
  113. invenio_app_rdm/translations/fr/LC_MESSAGES/messages.po +1032 -375
  114. invenio_app_rdm/translations/hr/LC_MESSAGES/messages.mo +0 -0
  115. invenio_app_rdm/translations/hr/LC_MESSAGES/messages.po +907 -278
  116. invenio_app_rdm/translations/hu/LC_MESSAGES/messages.mo +0 -0
  117. invenio_app_rdm/translations/hu/LC_MESSAGES/messages.po +985 -369
  118. invenio_app_rdm/translations/it/LC_MESSAGES/messages.mo +0 -0
  119. invenio_app_rdm/translations/it/LC_MESSAGES/messages.po +928 -298
  120. invenio_app_rdm/translations/ja/LC_MESSAGES/messages.mo +0 -0
  121. invenio_app_rdm/translations/ja/LC_MESSAGES/messages.po +907 -278
  122. invenio_app_rdm/translations/ka/LC_MESSAGES/messages.mo +0 -0
  123. invenio_app_rdm/translations/ka/LC_MESSAGES/messages.po +909 -280
  124. invenio_app_rdm/translations/ko/LC_MESSAGES/messages.mo +0 -0
  125. invenio_app_rdm/translations/ko/LC_MESSAGES/messages.po +1361 -0
  126. invenio_app_rdm/translations/lt/LC_MESSAGES/messages.mo +0 -0
  127. invenio_app_rdm/translations/lt/LC_MESSAGES/messages.po +910 -281
  128. invenio_app_rdm/translations/messages.pot +486 -303
  129. invenio_app_rdm/translations/no/LC_MESSAGES/messages.mo +0 -0
  130. invenio_app_rdm/translations/no/LC_MESSAGES/messages.po +907 -278
  131. invenio_app_rdm/translations/pl/LC_MESSAGES/messages.mo +0 -0
  132. invenio_app_rdm/translations/pl/LC_MESSAGES/messages.po +907 -278
  133. invenio_app_rdm/translations/pt/LC_MESSAGES/messages.mo +0 -0
  134. invenio_app_rdm/translations/pt/LC_MESSAGES/messages.po +906 -277
  135. invenio_app_rdm/translations/ro/LC_MESSAGES/messages.mo +0 -0
  136. invenio_app_rdm/translations/ro/LC_MESSAGES/messages.po +1042 -384
  137. invenio_app_rdm/translations/ru/LC_MESSAGES/messages.mo +0 -0
  138. invenio_app_rdm/translations/ru/LC_MESSAGES/messages.po +1022 -370
  139. invenio_app_rdm/translations/sk/LC_MESSAGES/messages.mo +0 -0
  140. invenio_app_rdm/translations/sk/LC_MESSAGES/messages.po +916 -287
  141. invenio_app_rdm/translations/sv/LC_MESSAGES/messages.mo +0 -0
  142. invenio_app_rdm/translations/sv/LC_MESSAGES/messages.po +989 -380
  143. invenio_app_rdm/translations/tr/LC_MESSAGES/messages.mo +0 -0
  144. invenio_app_rdm/translations/tr/LC_MESSAGES/messages.po +992 -341
  145. invenio_app_rdm/translations/uk/LC_MESSAGES/messages.mo +0 -0
  146. invenio_app_rdm/translations/uk/LC_MESSAGES/messages.po +935 -356
  147. invenio_app_rdm/translations/zh_CN/LC_MESSAGES/messages.mo +0 -0
  148. invenio_app_rdm/translations/zh_CN/LC_MESSAGES/messages.po +939 -347
  149. invenio_app_rdm/translations/zh_TW/LC_MESSAGES/messages.mo +0 -0
  150. invenio_app_rdm/translations/zh_TW/LC_MESSAGES/messages.po +907 -278
  151. {invenio_app_rdm-13.0.0rc2.dist-info → invenio_app_rdm-13.0.0rc4.dist-info}/METADATA +27 -1
  152. {invenio_app_rdm-13.0.0rc2.dist-info → invenio_app_rdm-13.0.0rc4.dist-info}/RECORD +156 -148
  153. {invenio_app_rdm-13.0.0rc2.dist-info → invenio_app_rdm-13.0.0rc4.dist-info}/WHEEL +0 -0
  154. {invenio_app_rdm-13.0.0rc2.dist-info → invenio_app_rdm-13.0.0rc4.dist-info}/entry_points.txt +0 -0
  155. {invenio_app_rdm-13.0.0rc2.dist-info → invenio_app_rdm-13.0.0rc4.dist-info}/licenses/LICENSE +0 -0
  156. {invenio_app_rdm-13.0.0rc2.dist-info → invenio_app_rdm-13.0.0rc4.dist-info}/top_level.txt +0 -0
@@ -17,6 +17,6 @@
17
17
  #
18
18
  # See PEP 0440 for details - https://www.python.org/dev/peps/pep-0440
19
19
 
20
- __version__ = "13.0.0rc2"
20
+ __version__ = "13.0.0rc4"
21
21
 
22
22
  __all__ = ("__version__",)
invenio_app_rdm/config.py CHANGED
@@ -903,6 +903,13 @@ APP_RDM_RECORD_EXPORTERS = {
903
903
  "content-type": "application/x-yaml",
904
904
  "filename": "{id}.yaml",
905
905
  },
906
+ "datapackage": {
907
+ "name": _("Data Package JSON"),
908
+ "serializer": "invenio_rdm_records.resources.serializers:DataPackageSerializer",
909
+ "params": {},
910
+ "content-type": "application/ld+json",
911
+ "filename": "{id}.json",
912
+ },
906
913
  }
907
914
 
908
915
  APP_RDM_RECORD_LANDING_PAGE_EXTERNAL_LINKS = []
@@ -928,6 +935,13 @@ def github_link_render(record):
928
935
 
929
936
  APP_RDM_RECORDS_EXPORT_URL = "/records/<pid_value>/export/<export_format>"
930
937
 
938
+ APP_RDM_DEPOSIT_NG_FILES_UI_ENABLED = False
939
+ """
940
+ Feature toggle to enable the next-generation (NG) file uploader UI in the deposit form.
941
+
942
+ When enabled, the deposit form will use the new Uppy.io-based file uploader, replacing the current file upload interface.
943
+ """
944
+
931
945
  APP_RDM_DEPOSIT_FORM_DEFAULTS = {
932
946
  "publication_date": lambda: datetime.now().strftime("%Y-%m-%d"),
933
947
  "rights": [
@@ -1486,7 +1500,6 @@ ADMINISTRATION_THEME_BASE_TEMPLATE = "invenio_app_rdm/administration_page.html"
1486
1500
  APP_RDM_SUBCOMMUNITIES_LABEL = "Subcommunities"
1487
1501
  """Label for the subcommunities in the community browse page."""
1488
1502
 
1489
-
1490
1503
  RDM_DETAIL_SIDE_BAR_MANAGE_ATTRIBUTES_EXTENSION_TEMPLATE = None
1491
1504
  """Side bar manage attributes extension template."""
1492
1505
 
invenio_app_rdm/ext.py CHANGED
@@ -33,10 +33,10 @@ def finalize_app(app):
33
33
 
34
34
  def init_config(app):
35
35
  """Initialize configuration."""
36
- record_doi_required = (
36
+ record_doi_required = bool(
37
37
  app.config["RDM_PERSISTENT_IDENTIFIERS"].get("doi", {}).get("required")
38
38
  )
39
- parent_doi_required = (
39
+ parent_doi_required = bool(
40
40
  app.config["RDM_PARENT_PERSISTENT_IDENTIFIERS"].get("doi", {}).get("required")
41
41
  )
42
42
 
@@ -5,6 +5,9 @@
5
5
  {%- block css %}
6
6
  {{ super() }}
7
7
  <link rel="stylesheet" type="text/css" href="/communities/{{community.slug}}/community-theme-{{ community.revision_id }}.css">
8
+ {%- if config.APP_RDM_DEPOSIT_NG_FILES_UI_ENABLED %}
9
+ {{ webpack['uppy-file-uploader.css'] }}
10
+ {%- endif %}
8
11
  {%- endblock %}
9
12
  {%- endif %}
10
13
 
@@ -49,6 +52,8 @@
49
52
  value='{{ config.USERS_RESOURCES_GROUPS_ENABLED | tojson }}'>
50
53
  <input type="hidden" name="records-resources-allow-empty-files"
51
54
  value='{{ config.RECORDS_RESOURCES_ALLOW_EMPTY_FILES | tojson }}'>
55
+ <input type="hidden" name="deposits-use-uppy-ui"
56
+ value='{{ config.APP_RDM_DEPOSIT_NG_FILES_UI_ENABLED | tojson }}'>
52
57
 
53
58
  {%- if forms_config %}
54
59
  <input type="hidden" name="deposits-config"
@@ -21,7 +21,7 @@
21
21
  {%- endblock css %}
22
22
  {% endif %}
23
23
 
24
- {%- from "invenio_app_rdm/records/macros/files.html" import file_list_box, preview_file_box, media_file_list_box %}
24
+ {%- from "invenio_app_rdm/records/macros/files.html" import file_list_box, preview_file_box, media_file_list_box with context %}
25
25
 
26
26
  {%- set title = record_ui["metadata"]["title"] %}
27
27
  {%- set metadata = record_ui["metadata"] %}
@@ -110,7 +110,7 @@
110
110
  <dt class="ui tiny header">
111
111
  <span class="mr-0 text-muted">
112
112
  {% if item.award.acronym %}
113
- {{ item.award.acronym }}
113
+ {{ item.award.acronym }} -
114
114
  {% endif %}
115
115
 
116
116
  {%- if item.award.title_l10n -%}
@@ -32,6 +32,7 @@
32
32
 
33
33
 
34
34
  {% macro preview_file_box(file, pid, is_preview, record, include_deleted) %}
35
+ {%- set is_remote_file = file.transfer.type == transfer_types.REMOTE %}
35
36
  <div class="ui accordion panel mb-10 {{record.ui.access_status.id}}" href="#files-preview-accordion-panel">
36
37
  <h3 class="active title panel-heading {{ record.ui.access_status.id }} m-0">
37
38
  <div
@@ -53,9 +54,22 @@
53
54
  aria-labelledby="files-preview-accordion-trigger"
54
55
  class="active content preview-container pt-0 {{record.ui.access_status.id}}"
55
56
  >
57
+ {%- if is_remote_file %}
58
+ <div class="ui info message">
59
+ <div class="header">
60
+ {{ _('This file cannot be previewed') }}
61
+ </div>
62
+ <ul class="list">
63
+ <li>{{ _('This file is an external reference and not stored directly in this repository.
64
+ To access its content, please download it and open it locally.') }}
65
+ </li>
66
+ </ul>
67
+ </div>
68
+ {%- else %}
56
69
  <div>
57
70
  {{ preview_file('invenio_app_rdm_records.record_file_preview', pid_value=pid, filename=file.key, is_preview=is_preview, include_deleted=include_deleted) }}
58
71
  </div>
72
+ {%- endif %}
59
73
  </div>
60
74
  </div>
61
75
  {%- endmacro %}
@@ -93,6 +107,7 @@
93
107
  {% endif %}
94
108
  {% for file in files %}
95
109
  {% if not file.access.hidden %}
110
+ {%- set is_remote_file = file.transfer.type == transfer_types.REMOTE %}
96
111
  {% if is_preview %}
97
112
  {%- set file_url_download = url_for(download_endpoint, pid_value=pid, filename=file.key, download=1, preview=1) %}
98
113
  {%- set file_url_preview = url_for(preview_endpoint, pid_value=pid, filename=file.key, preview=1, include_deleted=include_deleted_value) %}
@@ -107,16 +122,18 @@
107
122
  <div>
108
123
  <a href="{{ file_url_download }}">{{ file.key }}</a>
109
124
  </div>
125
+ {%- if not is_remote_file %}
110
126
  <small class="ui text-muted font-tiny">{{ file.checksum }}
111
127
  <div class="ui icon inline-block" data-tooltip="{{_('This is the file fingerprint (checksum), which can be used to verify the file integrity.')}}">
112
128
  <i class="question circle checksum icon"></i>
113
129
  </div>
114
130
  </small>
131
+ {%- endif %}
115
132
  </td>
116
- <td>{{ file.size|filesizeformat(binary=binary_sizes) }}</td>
133
+ <td>{%- if is_remote_file %}{{_("N/A (external)")}}{%- else -%}{{ file.size|filesizeformat(binary=binary_sizes) }}{%- endif %}</td>
117
134
  <td class="right aligned">
118
135
  <span>
119
- {% if with_preview and file_type|lower is previewable %}
136
+ {% if with_preview and file_type|lower is previewable and not is_remote_file %}
120
137
  <a role="button" class="ui compact mini button preview-link" href="{{ file_url_preview }}" target="preview-iframe" data-file-key="{{file.key}}">
121
138
  <i class="eye icon" aria-hidden="true"></i>{{_("Preview")}}
122
139
  </a>
@@ -140,7 +157,7 @@
140
157
  <h3 class="active title panel-heading {{ record.ui.access_status.id }} m-0">
141
158
  <div role="button" id="files-list-accordion-trigger" aria-controls="files-list-accordion-panel" aria-expanded="true" tabindex="0" class="trigger">
142
159
  {{ _("Files") }}
143
- <small class="text-muted">{% if files %} ({{files|sum(attribute='size')|filesizeformat(binary=binary_sizes)}}){% endif %}</small>
160
+ <small class="text-muted">{% if files %} ({{files|map(attribute='size', default=0)|sum()|filesizeformat(binary=binary_sizes)}}){% endif %}</small>
144
161
  <i class="angle right icon" aria-hidden="true"></i>
145
162
  </div>
146
163
  </h3>
@@ -3,7 +3,7 @@
3
3
  # Copyright (C) 2019-2025 CERN.
4
4
  # Copyright (C) 2019-2021 Northwestern University.
5
5
  # Copyright (C) 2021 TU Wien.
6
- # Copyright (C) 2022-2024 KTH Royal Institute of Technology
6
+ # Copyright (C) 2022-2025 KTH Royal Institute of Technology
7
7
  # Copyright (C) 2023-2024 Graz University of Technology.
8
8
  #
9
9
  # Invenio App RDM is free software; you can redistribute it and/or modify it
@@ -25,6 +25,8 @@ from invenio_rdm_records.records.api import get_files_quota
25
25
  from invenio_rdm_records.resources.serializers import UIJSONSerializer
26
26
  from invenio_rdm_records.services.schemas import RDMRecordSchema
27
27
  from invenio_rdm_records.services.schemas.utils import dump_empty
28
+ from invenio_rdm_records.views import file_transfer_type
29
+ from invenio_records_resources.proxies import current_transfer_registry
28
30
  from invenio_records_resources.services.errors import PermissionDeniedError
29
31
  from invenio_search.engine import dsl
30
32
  from invenio_vocabularies.proxies import current_service as vocabulary_service
@@ -98,9 +100,9 @@ def get_form_pids_config(record=None):
98
100
 
99
101
  pids_provider = {
100
102
  "scheme": scheme,
101
- "field_label": "Digital Object Identifier",
102
- "pid_label": "DOI",
103
- "pid_placeholder": "Copy/paste your existing DOI here...",
103
+ "field_label": _("Digital Object Identifier"),
104
+ "pid_label": _("DOI"),
105
+ "pid_placeholder": _("Copy/paste your existing DOI here..."),
104
106
  "can_be_managed": can_be_managed,
105
107
  "can_be_unmanaged": can_be_unmanaged,
106
108
  "btn_label_discard_pid": _(
@@ -361,6 +363,7 @@ def get_form_config(**kwargs):
361
363
  cf for cf in custom_fields["ui"] if not cf.get("hide_from_upload_form", False)
362
364
  ]
363
365
  quota = deepcopy(conf.get("APP_RDM_DEPOSIT_FORM_QUOTA", {}))
366
+ max_file_size = conf.get("RDM_FILES_DEFAULT_MAX_FILE_SIZE", None)
364
367
  record_quota = kwargs.pop("quota", None)
365
368
  if record_quota:
366
369
  quota["maxStorage"] = record_quota["quota_size"]
@@ -375,7 +378,7 @@ def get_form_config(**kwargs):
375
378
  current_locale=str(current_i18n.locale),
376
379
  default_locale=conf.get("BABEL_DEFAULT_LOCALE", "en"),
377
380
  pids=get_form_pids_config(record=record),
378
- quota=quota,
381
+ quota=dict(**quota, maxFileSize=max_file_size),
379
382
  decimal_size_display=conf.get("APP_RDM_DISPLAY_DECIMAL_FILE_SIZES", True),
380
383
  links=dict(
381
384
  user_dashboard_request=conf["RDM_REQUESTS_ROUTES"][
@@ -387,6 +390,9 @@ def get_form_config(**kwargs):
387
390
  publish_modal_extra=current_app.config.get(
388
391
  "APP_RDM_DEPOSIT_FORM_PUBLISH_MODAL_EXTRA"
389
392
  ),
393
+ default_transfer_type=current_transfer_registry.default_transfer_type,
394
+ enabled_transfer_types=list(current_transfer_registry.get_transfer_types()),
395
+ transfer_types=file_transfer_type()["transfer_types"],
390
396
  **kwargs,
391
397
  )
392
398
 
@@ -10,7 +10,6 @@
10
10
  import React, { Component } from "react";
11
11
  import PropTypes from "prop-types";
12
12
  import { i18next } from "@translations/invenio_app_rdm/i18next";
13
- import { Trans } from "react-i18next";
14
13
  import { Formik } from "formik";
15
14
  import _get from "lodash/get";
16
15
 
@@ -121,15 +120,13 @@ export class ImpersonateUserForm extends Component {
121
120
  control={Checkbox}
122
121
  fieldPath="acceptImpersonation"
123
122
  label={
124
- <Trans
125
- defaults={i18next.t(
126
- "You are about to impersonate user <bold>{{email}}(id: {{id}})</bold>.",
127
- { email: user.email, id: user.id }
128
- )}
129
- values={{ email: user.email, id: user.id }}
130
- components={{ bold: <b /> }}
131
- shouldUnescape
132
- />
123
+ <>
124
+ {i18next.t("You are about to impersonate user ")}
125
+ <b>
126
+ {user.email} (id: {user.id})
127
+ </b>
128
+ .
129
+ </>
133
130
  }
134
131
  checked={_get(values, "acceptImpersonation") === true}
135
132
  onChange={({ data, formikProps }) => {
@@ -152,13 +149,11 @@ export class ImpersonateUserForm extends Component {
152
149
  control={Checkbox}
153
150
  fieldPath="acceptToLogout"
154
151
  label={
155
- <Trans
156
- defaults={i18next.t(
157
- "You <bold>MUST</bold> logout after completing your inquiry."
158
- )}
159
- components={{ bold: <b /> }}
160
- shouldUnescape
161
- />
152
+ <>
153
+ {i18next.t("You ")}
154
+ <b>{i18next.t("MUST")}</b>
155
+ {i18next.t(" logout after completing your inquiry.")}
156
+ </>
162
157
  }
163
158
  checked={_get(values, "acceptToLogout") === true}
164
159
  onChange={({ data, formikProps }) => {
@@ -78,7 +78,7 @@ export class SetQuotaAction extends Component {
78
78
  <p>
79
79
  <strong>{i18next.t("Note")}:</strong>{" "}
80
80
  {i18next.t(
81
- "This is the default quota that will be applied to any NEW records created by this user it will NOT update quota of existing records."
81
+ "This is the default quota that will be applied to any NEW records created by this user - it will NOT update quota of existing records."
82
82
  )}
83
83
  </p>
84
84
  </Modal.Content>
@@ -9,7 +9,6 @@ import { Count, Sort } from "react-searchkit";
9
9
  import { Button, Container, Grid } from "semantic-ui-react";
10
10
  import { GridResponsiveSidebarColumn } from "react-invenio-forms";
11
11
  import PropTypes from "prop-types";
12
- import { Trans } from "react-i18next";
13
12
 
14
13
  export const CommunityRecordsSearchAppLayout = ({ config, appName }) => {
15
14
  const [sidebarVisible, setSidebarVisible] = React.useState(false);
@@ -35,9 +34,9 @@ export const CommunityRecordsSearchAppLayout = ({ config, appName }) => {
35
34
  <Grid.Column width={4} textAlign="left">
36
35
  <Count
37
36
  label={(cmp) => (
38
- <Trans key="communityRecordsSearch" count={cmp}>
39
- {cmp} results found
40
- </Trans>
37
+ <>
38
+ {cmp} {i18next.t("results found")}
39
+ </>
41
40
  )}
42
41
  />
43
42
  </Grid.Column>
@@ -20,6 +20,7 @@ import {
20
20
  DeleteButton,
21
21
  DepositStatusBox,
22
22
  FileUploader,
23
+ UppyUploader,
23
24
  FormFeedback,
24
25
  IdentifiersField,
25
26
  PIDField,
@@ -113,6 +114,7 @@ export class RDMDepositForm extends Component {
113
114
  allowRecordRestriction,
114
115
  groupsEnabled,
115
116
  allowEmptyFiles,
117
+ useUppy,
116
118
  } = this.props;
117
119
 
118
120
  // Adding section id to custom fields UI, to be used for accordions
@@ -120,6 +122,7 @@ export class RDMDepositForm extends Component {
120
122
  ...section,
121
123
  id: section.section.toLowerCase().replace(/\s+/g, "-") + "-section",
122
124
  }));
125
+ const UploaderField = useUppy ? UppyUploader : FileUploader;
123
126
 
124
127
  return (
125
128
  <Overridable
@@ -196,13 +199,14 @@ export class RDMDepositForm extends Component {
196
199
  filesLocked={filesLocked}
197
200
  allowEmptyFiles={allowEmptyFiles}
198
201
  >
199
- <FileUploader
202
+ <UploaderField
200
203
  isDraftRecord={!record.is_published}
201
204
  quota={this.config.quota}
202
205
  decimalSizeDisplay={this.config.decimal_size_display}
203
206
  showMetadataOnlyToggle={permissions?.can_manage_files}
204
207
  allowEmptyFiles={allowEmptyFiles}
205
208
  filesLocked={filesLocked}
209
+ fileUploadConcurrency={config.fileUploadConcurrency}
206
210
  />
207
211
  </Overridable>
208
212
  </AccordionField>
@@ -783,6 +787,7 @@ RDMDepositForm.propTypes = {
783
787
  permissions: PropTypes.object,
784
788
  filesLocked: PropTypes.bool,
785
789
  allowEmptyFiles: PropTypes.bool,
790
+ useUppy: PropTypes.bool,
786
791
  };
787
792
 
788
793
  RDMDepositForm.defaultProps = {
@@ -21,6 +21,7 @@ ReactDOM.render(
21
21
  preselectedCommunity={getInputFromDOM("deposits-draft-community")}
22
22
  files={getInputFromDOM("deposits-record-files")}
23
23
  config={getInputFromDOM("deposits-config")}
24
+ useUppy={getInputFromDOM("deposits-use-uppy-ui")}
24
25
  permissions={getInputFromDOM("deposits-record-permissions")}
25
26
  filesLocked={getInputFromDOM("deposits-record-locked-files")}
26
27
  recordRestrictionGracePeriod={getInputFromDOM(
@@ -11,7 +11,6 @@ import React, { useEffect, useState } from "react";
11
11
  import { Grid, Icon, Message, Placeholder, List, Divider } from "semantic-ui-react";
12
12
  import { i18next } from "@translations/invenio_app_rdm/i18next";
13
13
  import PropTypes from "prop-types";
14
- import { Trans } from "react-i18next";
15
14
  import { withCancel, http, ErrorMessage } from "react-invenio-forms";
16
15
 
17
16
  const deserializeRecord = (record) => ({
@@ -179,28 +178,28 @@ export const RecordVersionsList = ({ record, isPreview }) => {
179
178
  {recordParentDOI ? (
180
179
  <List.Item className="parent-doi pr-0">
181
180
  <List.Content floated="left">
182
- <Trans>
183
- <p className="text-muted">
184
- <strong>Cite all versions?</strong> You can cite all versions by using
185
- the DOI{" "}
186
- <a href={recordDeserialized.links.parent_doi}>{recordParentDOI}</a>.
187
- This DOI represents all versions, and will always resolve to the latest
188
- one. <a href="/help/versioning">Read more</a>.
189
- </p>
190
- </Trans>
181
+ <p className="text-muted">
182
+ <strong>{i18next.t("Cite all versions?")}</strong>{" "}
183
+ {i18next.t("You can cite all versions by using the DOI")}{" "}
184
+ <a href={recordDeserialized.links.parent_doi}>{recordParentDOI}</a>.{" "}
185
+ {i18next.t(
186
+ "This DOI represents all versions, and will always resolve to the latest one."
187
+ )}{" "}
188
+ <a href="/help/versioning">{i18next.t("Read more")}</a>.
189
+ </p>
191
190
  </List.Content>
192
191
  </List.Item>
193
192
  ) : recordDraftParentDOIFormat ? (
194
193
  // new drafts without registered parent dois yet
195
194
  <List.Item className="parent-doi pr-0">
196
195
  <List.Content floated="left">
197
- <Trans>
198
- <p className="text-muted">
199
- <strong>Cite all versions?</strong> You can cite all versions by using
200
- the DOI {recordDraftParentDOIFormat}. The DOI is registered when the
201
- first version is published. <a href="/help/versioning">Read more</a>.
202
- </p>
203
- </Trans>
196
+ <p className="text-muted">
197
+ <strong>{i18next.t("Cite all versions?")}</strong>{" "}
198
+ {i18next.t("You can cite all versions by using the DOI")}{" "}
199
+ {recordDraftParentDOIFormat}.{" "}
200
+ {i18next.t("The DOI is registered when the first version is published.")}{" "}
201
+ <a href="/help/versioning">{i18next.t("Read more")}</a>.
202
+ </p>
204
203
  </List.Content>
205
204
  </List.Item>
206
205
  ) : null}
@@ -8,7 +8,6 @@
8
8
  import React, { Component } from "react";
9
9
  import { Button, Modal, Message, Icon, Checkbox } from "semantic-ui-react";
10
10
  import { i18next } from "@translations/invenio_app_rdm/i18next";
11
- import { Trans } from "react-i18next";
12
11
  import { http, ErrorMessage } from "react-invenio-forms";
13
12
  import PropTypes from "prop-types";
14
13
 
@@ -124,10 +123,11 @@ export class RemoveFromCommunityAction extends Component {
124
123
  label={
125
124
  /* eslint-disable-next-line jsx-a11y/label-has-associated-control */
126
125
  <label>
127
- <Trans>
128
- Members of the community <b>"{{ communityTitle }}"</b> will{" "}
129
- <u>lose their access</u> to the record.
130
- </Trans>
126
+ {i18next.t("Members of the community ")}
127
+ <b>"{communityTitle}"</b>
128
+ {i18next.t(" will ")}
129
+ <u>{i18next.t("lose their access")}</u>
130
+ {i18next.t(" to the record.")}
131
131
  </label>
132
132
  }
133
133
  checked={checkboxMembers}
@@ -31,7 +31,6 @@ import {
31
31
  } from "semantic-ui-react";
32
32
  import RecordsResultsListItem from "../components/RecordsResultsListItem";
33
33
  import PropTypes from "prop-types";
34
- import { Trans } from "react-i18next";
35
34
 
36
35
  export const RDMRecordResultsListItemWithState = withState(
37
36
  ({ currentQueryState, result, appName }) => (
@@ -224,23 +223,19 @@ export const RDMEmptyResults = ({ queryString, searchPath, resetQuery }) => {
224
223
  <Header as="h3" size="small">
225
224
  {i18next.t("ProTip")}!
226
225
  </Header>
227
- <Trans>
228
- <p>
229
- <a href={`${searchPath}?q=metadata.publication_date:[2017-01-01 TO *]`}>
230
- metadata.publication_date:[2017-01-01 TO *]
231
- </a>{" "}
232
- will give you all the publications from 2017 until today.
233
- </p>
234
- </Trans>
235
- <Trans>
236
- <p>
237
- For more tips, check out our{" "}
238
- <a href="/help/search" title={i18next.t("Search guide")}>
239
- search guide
240
- </a>{" "}
241
- for defining advanced search queries.
242
- </p>
243
- </Trans>
226
+ <p>
227
+ <a href={`${searchPath}?q=metadata.publication_date:[2025-01-01 TO *]`}>
228
+ metadata.publication_date:[2025-01-01 TO *]
229
+ </a>{" "}
230
+ {i18next.t("will give you all the publications from 2025 until today.")}
231
+ </p>
232
+ <p>
233
+ {i18next.t("For more tips, check out our ")}{" "}
234
+ <a href="/help/search" title={i18next.t("Search guide")}>
235
+ {i18next.t("search guide")}
236
+ </a>{" "}
237
+ {i18next.t("for defining advanced search queries.")}
238
+ </p>
244
239
  </Segment>
245
240
  </Grid.Column>
246
241
  </Grid.Row>
@@ -0,0 +1,37 @@
1
+ /*
2
+ * Copyright (C) 2025 CESNET
3
+ *
4
+ * Invenio RDM Records is free software; you can redistribute it and/or modify
5
+ * it under the terms of the MIT License; see LICENSE file for more details.
6
+ */
7
+
8
+ @import "@uppy/core/dist/style.min.css";
9
+ @import "@uppy/dashboard/dist/style.min.css";
10
+ @import "@uppy/image-editor/dist/style.min.css";
11
+
12
+ .uppy-Dashboard-AddFiles {
13
+ padding: 1.2rem;
14
+ }
15
+ .uppy-Dashboard-AddFiles-info {
16
+ display: block;
17
+ }
18
+
19
+ .uppy-Dashboard-note {
20
+ padding-top: 3rem;
21
+ }
22
+
23
+ .uppy-Dashboard-inner {
24
+ border-radius: 0 0 5px 5px;
25
+ }
26
+
27
+ .uppy-Dashboard-innerWrap {
28
+ height: 350px;
29
+
30
+ &:has(#uppy-DashboardContent-panel--editor) {
31
+ height: 500px;
32
+ }
33
+ }
34
+
35
+ .uppy-DashboardContent-bar, .uppy-StatusBar {
36
+ z-index: 10;
37
+ }
@@ -3,6 +3,15 @@
3
3
  &.tab-menu-accordion {
4
4
  transform: none;
5
5
  }
6
+
7
+ transform: @activeIconTransform;
8
+ }
9
+
10
+ .ui.accordion .title .icon,
11
+ .ui.accordion .accordion .title .icon {
12
+ transition: @iconTransition;
13
+ width: auto;
14
+ height: auto;
6
15
  }
7
16
 
8
17
  /* use these classes to change accordion title when up/down */
@@ -1,4 +1,4 @@
1
- // This file is part of React-Invenio-Deposit
1
+ // This file is part of invenio-app-rdm.
2
2
  // Copyright (C) 2021 Graz University of Technology.
3
3
  //
4
4
  // Invenio-app-rdm is free software; you can redistribute it and/or modify it
@@ -1,4 +1,4 @@
1
- // This file is part of React-Invenio-Deposit
1
+ // This file is part of invenio-app-rdm.
2
2
  // Copyright (C) 2021 Graz University of Technology.
3
3
  //
4
4
  // Invenio-app-rdm is free software; you can redistribute it and/or modify it
@@ -0,0 +1,66 @@
1
+ // AUTO-GENERATED FILE - DO NOT EDIT MANUALLY
2
+ // This file exports all available translations for i18next
3
+
4
+ import TRANSLATE_AR from "./ar/translations.json";
5
+ import TRANSLATE_BG from "./bg/translations.json";
6
+ import TRANSLATE_CA from "./ca/translations.json";
7
+ import TRANSLATE_CS from "./cs/translations.json";
8
+ import TRANSLATE_DA from "./da/translations.json";
9
+ import TRANSLATE_DE from "./de/translations.json";
10
+ import TRANSLATE_EL from "./el/translations.json";
11
+ import TRANSLATE_EN from "./en/translations.json";
12
+ import TRANSLATE_ES from "./es/translations.json";
13
+ import TRANSLATE_ET from "./et/translations.json";
14
+ import TRANSLATE_FA from "./fa/translations.json";
15
+ import TRANSLATE_FR from "./fr/translations.json";
16
+ import TRANSLATE_HR from "./hr/translations.json";
17
+ import TRANSLATE_HU from "./hu/translations.json";
18
+ import TRANSLATE_IT from "./it/translations.json";
19
+ import TRANSLATE_JA from "./ja/translations.json";
20
+ import TRANSLATE_KA from "./ka/translations.json";
21
+ import TRANSLATE_KO from "./ko/translations.json";
22
+ import TRANSLATE_LT from "./lt/translations.json";
23
+ import TRANSLATE_NO from "./no/translations.json";
24
+ import TRANSLATE_PL from "./pl/translations.json";
25
+ import TRANSLATE_PT from "./pt/translations.json";
26
+ import TRANSLATE_RO from "./ro/translations.json";
27
+ import TRANSLATE_RU from "./ru/translations.json";
28
+ import TRANSLATE_SK from "./sk/translations.json";
29
+ import TRANSLATE_SV from "./sv/translations.json";
30
+ import TRANSLATE_TR from "./tr/translations.json";
31
+ import TRANSLATE_UK from "./uk/translations.json";
32
+ import TRANSLATE_ZH_CN from "./zh_CN/translations.json";
33
+ import TRANSLATE_ZH_TW from "./zh_TW/translations.json";
34
+
35
+ export const translations = {
36
+ ar: { translation: TRANSLATE_AR },
37
+ bg: { translation: TRANSLATE_BG },
38
+ ca: { translation: TRANSLATE_CA },
39
+ cs: { translation: TRANSLATE_CS },
40
+ da: { translation: TRANSLATE_DA },
41
+ de: { translation: TRANSLATE_DE },
42
+ el: { translation: TRANSLATE_EL },
43
+ en: { translation: TRANSLATE_EN },
44
+ es: { translation: TRANSLATE_ES },
45
+ et: { translation: TRANSLATE_ET },
46
+ fa: { translation: TRANSLATE_FA },
47
+ fr: { translation: TRANSLATE_FR },
48
+ hr: { translation: TRANSLATE_HR },
49
+ hu: { translation: TRANSLATE_HU },
50
+ it: { translation: TRANSLATE_IT },
51
+ ja: { translation: TRANSLATE_JA },
52
+ ka: { translation: TRANSLATE_KA },
53
+ ko: { translation: TRANSLATE_KO },
54
+ lt: { translation: TRANSLATE_LT },
55
+ no: { translation: TRANSLATE_NO },
56
+ pl: { translation: TRANSLATE_PL },
57
+ pt: { translation: TRANSLATE_PT },
58
+ ro: { translation: TRANSLATE_RO },
59
+ ru: { translation: TRANSLATE_RU },
60
+ sk: { translation: TRANSLATE_SK },
61
+ sv: { translation: TRANSLATE_SV },
62
+ tr: { translation: TRANSLATE_TR },
63
+ uk: { translation: TRANSLATE_UK },
64
+ zh_CN: { translation: TRANSLATE_ZH_CN },
65
+ zh_TW: { translation: TRANSLATE_ZH_TW },
66
+ };