invenio-app-rdm 13.0.0rc1__py2.py3-none-any.whl → 13.0.0rc3__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 (155) hide show
  1. invenio_app_rdm/__init__.py +1 -1
  2. invenio_app_rdm/administration/users/users.py +0 -5
  3. invenio_app_rdm/communities_ui/views/communities.py +9 -5
  4. invenio_app_rdm/config.py +11 -1
  5. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/deposit.html +5 -0
  6. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/detail.html +1 -1
  7. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/macros/detail.html +1 -1
  8. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/macros/files.html +20 -3
  9. invenio_app_rdm/records_ui/views/deposits.py +7 -1
  10. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/ImpersonateUserForm.js +12 -17
  11. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/SetQuotaAction.js +1 -1
  12. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/communityRecordsSearch/CommunityRecordsSearchAppLayout.js +3 -4
  13. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/deposit/RDMDepositForm.js +7 -1
  14. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/deposit/index.js +1 -0
  15. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordVersionsList.js +16 -17
  16. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RemoveFromCommunity/RemoveFromCommunityAction.js +5 -5
  17. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/search/components.js +13 -18
  18. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/file_uploader/uppy.less +37 -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/webpack.py +1 -0
  91. invenio_app_rdm/translations/ar/LC_MESSAGES/messages.mo +0 -0
  92. invenio_app_rdm/translations/ar/LC_MESSAGES/messages.po +972 -376
  93. invenio_app_rdm/translations/bg/LC_MESSAGES/messages.mo +0 -0
  94. invenio_app_rdm/translations/bg/LC_MESSAGES/messages.po +907 -278
  95. invenio_app_rdm/translations/ca/LC_MESSAGES/messages.mo +0 -0
  96. invenio_app_rdm/translations/ca/LC_MESSAGES/messages.po +912 -283
  97. invenio_app_rdm/translations/cs/LC_MESSAGES/messages.mo +0 -0
  98. invenio_app_rdm/translations/cs/LC_MESSAGES/messages.po +1069 -405
  99. invenio_app_rdm/translations/da/LC_MESSAGES/messages.mo +0 -0
  100. invenio_app_rdm/translations/da/LC_MESSAGES/messages.po +908 -273
  101. invenio_app_rdm/translations/de/LC_MESSAGES/messages.mo +0 -0
  102. invenio_app_rdm/translations/de/LC_MESSAGES/messages.po +1017 -406
  103. invenio_app_rdm/translations/el/LC_MESSAGES/messages.mo +0 -0
  104. invenio_app_rdm/translations/el/LC_MESSAGES/messages.po +915 -286
  105. invenio_app_rdm/translations/es/LC_MESSAGES/messages.mo +0 -0
  106. invenio_app_rdm/translations/es/LC_MESSAGES/messages.po +963 -371
  107. invenio_app_rdm/translations/et/LC_MESSAGES/messages.mo +0 -0
  108. invenio_app_rdm/translations/et/LC_MESSAGES/messages.po +938 -362
  109. invenio_app_rdm/translations/fa/LC_MESSAGES/messages.mo +0 -0
  110. invenio_app_rdm/translations/fa/LC_MESSAGES/messages.po +906 -277
  111. invenio_app_rdm/translations/fr/LC_MESSAGES/messages.mo +0 -0
  112. invenio_app_rdm/translations/fr/LC_MESSAGES/messages.po +1032 -375
  113. invenio_app_rdm/translations/hr/LC_MESSAGES/messages.mo +0 -0
  114. invenio_app_rdm/translations/hr/LC_MESSAGES/messages.po +907 -278
  115. invenio_app_rdm/translations/hu/LC_MESSAGES/messages.mo +0 -0
  116. invenio_app_rdm/translations/hu/LC_MESSAGES/messages.po +985 -369
  117. invenio_app_rdm/translations/it/LC_MESSAGES/messages.mo +0 -0
  118. invenio_app_rdm/translations/it/LC_MESSAGES/messages.po +928 -298
  119. invenio_app_rdm/translations/ja/LC_MESSAGES/messages.mo +0 -0
  120. invenio_app_rdm/translations/ja/LC_MESSAGES/messages.po +907 -278
  121. invenio_app_rdm/translations/ka/LC_MESSAGES/messages.mo +0 -0
  122. invenio_app_rdm/translations/ka/LC_MESSAGES/messages.po +909 -280
  123. invenio_app_rdm/translations/ko/LC_MESSAGES/messages.mo +0 -0
  124. invenio_app_rdm/translations/ko/LC_MESSAGES/messages.po +1361 -0
  125. invenio_app_rdm/translations/lt/LC_MESSAGES/messages.mo +0 -0
  126. invenio_app_rdm/translations/lt/LC_MESSAGES/messages.po +910 -281
  127. invenio_app_rdm/translations/messages.pot +486 -303
  128. invenio_app_rdm/translations/no/LC_MESSAGES/messages.mo +0 -0
  129. invenio_app_rdm/translations/no/LC_MESSAGES/messages.po +907 -278
  130. invenio_app_rdm/translations/pl/LC_MESSAGES/messages.mo +0 -0
  131. invenio_app_rdm/translations/pl/LC_MESSAGES/messages.po +907 -278
  132. invenio_app_rdm/translations/pt/LC_MESSAGES/messages.mo +0 -0
  133. invenio_app_rdm/translations/pt/LC_MESSAGES/messages.po +906 -277
  134. invenio_app_rdm/translations/ro/LC_MESSAGES/messages.mo +0 -0
  135. invenio_app_rdm/translations/ro/LC_MESSAGES/messages.po +1042 -384
  136. invenio_app_rdm/translations/ru/LC_MESSAGES/messages.mo +0 -0
  137. invenio_app_rdm/translations/ru/LC_MESSAGES/messages.po +1022 -370
  138. invenio_app_rdm/translations/sk/LC_MESSAGES/messages.mo +0 -0
  139. invenio_app_rdm/translations/sk/LC_MESSAGES/messages.po +916 -287
  140. invenio_app_rdm/translations/sv/LC_MESSAGES/messages.mo +0 -0
  141. invenio_app_rdm/translations/sv/LC_MESSAGES/messages.po +989 -380
  142. invenio_app_rdm/translations/tr/LC_MESSAGES/messages.mo +0 -0
  143. invenio_app_rdm/translations/tr/LC_MESSAGES/messages.po +992 -341
  144. invenio_app_rdm/translations/uk/LC_MESSAGES/messages.mo +0 -0
  145. invenio_app_rdm/translations/uk/LC_MESSAGES/messages.po +935 -356
  146. invenio_app_rdm/translations/zh_CN/LC_MESSAGES/messages.mo +0 -0
  147. invenio_app_rdm/translations/zh_CN/LC_MESSAGES/messages.po +939 -347
  148. invenio_app_rdm/translations/zh_TW/LC_MESSAGES/messages.mo +0 -0
  149. invenio_app_rdm/translations/zh_TW/LC_MESSAGES/messages.po +907 -278
  150. {invenio_app_rdm-13.0.0rc1.dist-info → invenio_app_rdm-13.0.0rc3.dist-info}/METADATA +24 -2
  151. {invenio_app_rdm-13.0.0rc1.dist-info → invenio_app_rdm-13.0.0rc3.dist-info}/RECORD +155 -147
  152. {invenio_app_rdm-13.0.0rc1.dist-info → invenio_app_rdm-13.0.0rc3.dist-info}/WHEEL +0 -0
  153. {invenio_app_rdm-13.0.0rc1.dist-info → invenio_app_rdm-13.0.0rc3.dist-info}/entry_points.txt +0 -0
  154. {invenio_app_rdm-13.0.0rc1.dist-info → invenio_app_rdm-13.0.0rc3.dist-info}/licenses/LICENSE +0 -0
  155. {invenio_app_rdm-13.0.0rc1.dist-info → invenio_app_rdm-13.0.0rc3.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.0rc1"
20
+ __version__ = "13.0.0rc3"
21
21
 
22
22
  __all__ = ("__version__",)
@@ -97,11 +97,6 @@ class UsersListView(AdminResourceListView):
97
97
  },
98
98
  }
99
99
 
100
- @staticmethod
101
- def disabled():
102
- """Disable the view on demand."""
103
- return not current_app.config["USERS_RESOURCES_ADMINISTRATION_ENABLED"]
104
-
105
100
  def init_search_config(self):
106
101
  """Build search view config."""
107
102
  return partial(
@@ -112,7 +112,8 @@ def communities_home(pid_value, community, community_ui):
112
112
  return render_community_theme_template(
113
113
  "invenio_communities/details/home/index.html",
114
114
  theme=community_ui.get("theme", {}),
115
- community=community_ui,
115
+ community=community,
116
+ community_ui=community_ui,
116
117
  permissions=permissions,
117
118
  records=records_ui,
118
119
  metrics=metrics,
@@ -133,7 +134,8 @@ def communities_browse(pid_value, community, community_ui):
133
134
  return render_community_theme_template(
134
135
  "invenio_communities/details/browse/index.html",
135
136
  theme=community_ui.get("theme", {}),
136
- community=community_ui,
137
+ community=community,
138
+ community_ui=community_ui,
137
139
  permissions=permissions,
138
140
  roles_can_update=_get_roles_can_update(community.id),
139
141
  roles_can_invite=_get_roles_can_invite(community.id),
@@ -162,8 +164,9 @@ def community_static_page(pid_value, community, community_ui, **kwargs):
162
164
  return render_community_theme_template(
163
165
  page["template_name"],
164
166
  theme=community_ui.get("theme", {}),
167
+ community=community,
168
+ community_ui=community_ui,
165
169
  page=page,
166
- community=community_ui,
167
170
  permissions=permissions,
168
171
  )
169
172
 
@@ -192,11 +195,12 @@ def community_collection(
192
195
  collection_ui = collection.to_dict()
193
196
  return render_community_theme_template(
194
197
  "invenio_communities/collections/collection.html",
198
+ theme=community_ui.get("theme", {}),
199
+ community=community,
200
+ community_ui=community_ui,
195
201
  collection=collection_ui,
196
202
  # TODO _collection should not be accessed from here
197
203
  tree=collection._collection.collection_tree,
198
204
  logo=logo,
199
- community=community,
200
205
  permissions=community.has_permissions_to(HEADER_PERMISSIONS),
201
- theme=community_ui.get("theme", {}),
202
206
  )
invenio_app_rdm/config.py CHANGED
@@ -491,6 +491,10 @@ CELERY_BEAT_SCHEDULE = {
491
491
  "task": "invenio_sitemap.tasks.update_sitemap_cache",
492
492
  "schedule": crontab(minute=0, hour=2),
493
493
  },
494
+ "update-collections-size": {
495
+ "task": "invenio_collections.tasks.update_collections_size",
496
+ "schedule": timedelta(hours=1),
497
+ },
494
498
  }
495
499
  """Scheduled tasks configuration (aka cronjobs)."""
496
500
 
@@ -924,6 +928,13 @@ def github_link_render(record):
924
928
 
925
929
  APP_RDM_RECORDS_EXPORT_URL = "/records/<pid_value>/export/<export_format>"
926
930
 
931
+ APP_RDM_DEPOSIT_NG_FILES_UI_ENABLED = False
932
+ """
933
+ Feature toggle to enable the next-generation (NG) file uploader UI in the deposit form.
934
+
935
+ When enabled, the deposit form will use the new Uppy.io-based file uploader, replacing the current file upload interface.
936
+ """
937
+
927
938
  APP_RDM_DEPOSIT_FORM_DEFAULTS = {
928
939
  "publication_date": lambda: datetime.now().strftime("%Y-%m-%d"),
929
940
  "rights": [
@@ -1482,7 +1493,6 @@ ADMINISTRATION_THEME_BASE_TEMPLATE = "invenio_app_rdm/administration_page.html"
1482
1493
  APP_RDM_SUBCOMMUNITIES_LABEL = "Subcommunities"
1483
1494
  """Label for the subcommunities in the community browse page."""
1484
1495
 
1485
-
1486
1496
  RDM_DETAIL_SIDE_BAR_MANAGE_ATTRIBUTES_EXTENSION_TEMPLATE = None
1487
1497
  """Side bar manage attributes extension template."""
1488
1498
 
@@ -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>
@@ -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
@@ -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>
@@ -672,6 +676,7 @@ export class RDMDepositForm extends Component {
672
676
  (widget) => import(`react-invenio-forms`),
673
677
  ]}
674
678
  fieldPathPrefix="custom_fields"
679
+ severityChecks={this.severityChecks}
675
680
  />
676
681
  </Overridable>
677
682
  )}
@@ -782,6 +787,7 @@ RDMDepositForm.propTypes = {
782
787
  permissions: PropTypes.object,
783
788
  filesLocked: PropTypes.bool,
784
789
  allowEmptyFiles: PropTypes.bool,
790
+ useUppy: PropTypes.bool,
785
791
  };
786
792
 
787
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
+ }
@@ -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
+ };