From 6cacf53bc7ee2f0e389937652cfcd9f36075ff1f Mon Sep 17 00:00:00 2001 From: Claudia Malzer Date: Fri, 20 Sep 2024 11:20:03 +0200 Subject: [PATCH 1/9] 1152-baseUrl-bug use baseUrl in ProjectsApi --- rdmo/projects/assets/js/api/ProjectsApi.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/rdmo/projects/assets/js/api/ProjectsApi.js b/rdmo/projects/assets/js/api/ProjectsApi.js index 5fc35590ad..41673d9430 100644 --- a/rdmo/projects/assets/js/api/ProjectsApi.js +++ b/rdmo/projects/assets/js/api/ProjectsApi.js @@ -10,7 +10,7 @@ function BadRequestError(errors) { class ProjectsApi extends BaseApi { static fetchProjects(params, fetchParams = {}) { - return fetch('/api/v1/projects/projects/?' + encodeParams(params), fetchParams).then(response => { + return fetch(baseUrl + '/api/v1/projects/projects/?' + encodeParams(params), fetchParams).then(response => { if (response.ok) { return response.json() } else if (response.status == 400) { @@ -24,7 +24,7 @@ class ProjectsApi extends BaseApi { } static fetchCatalogs() { - return fetch('/api/v1/projects/catalogs/').then(response => { + return fetch(baseUrl + '/api/v1/projects/catalogs/').then(response => { if (response.ok) { return response.json() } else { @@ -34,7 +34,7 @@ class ProjectsApi extends BaseApi { } static fetchAllowedFileTypes() { - return fetch('/api/v1/projects/projects/upload-accept/') + return fetch(baseUrl + '/api/v1/projects/projects/upload-accept/') .then(response => { if (response.ok) { return response.text() @@ -61,7 +61,7 @@ class ProjectsApi extends BaseApi { } static fetchDirectImportUrls() { - return fetch('/api/v1/projects/projects/imports/') + return fetch(baseUrl + '/api/v1/projects/projects/imports/') .then(response => { if (response.ok) { return response.json() @@ -72,7 +72,7 @@ class ProjectsApi extends BaseApi { } static fetchInvites() { - return fetch('/api/v1/projects/invites/user') + return fetch(baseUrl + '/api/v1/projects/invites/user') .then(response => { if (response.ok) { return response.json() From c6a2d908a722923e0e193023228e162a06d7ba08 Mon Sep 17 00:00:00 2001 From: Claudia Malzer Date: Fri, 20 Sep 2024 12:32:08 +0200 Subject: [PATCH 2/9] use BaseApi methods where possible --- rdmo/core/assets/js/api/BaseApi.js | 9 +++ rdmo/projects/assets/js/api/ProjectsApi.js | 70 +++------------------- 2 files changed, 16 insertions(+), 63 deletions(-) diff --git a/rdmo/core/assets/js/api/BaseApi.js b/rdmo/core/assets/js/api/BaseApi.js index c2d81e9473..b993faaf08 100644 --- a/rdmo/core/assets/js/api/BaseApi.js +++ b/rdmo/core/assets/js/api/BaseApi.js @@ -15,6 +15,10 @@ function ValidationError(errors) { this.errors = errors } +function BadRequestError(errors) { + this.errors = errors +} + class BaseApi { static get(url) { @@ -23,12 +27,17 @@ class BaseApi { }).then(response => { if (response.ok) { return response.json() + } else if (response.status === 400) { + return response.json().then(errors => { + throw new BadRequestError(errors) + }) } else { throw new ApiError(response.statusText, response.status) } }) } + static post(url, data) { return fetch(baseUrl + url, { method: 'POST', diff --git a/rdmo/projects/assets/js/api/ProjectsApi.js b/rdmo/projects/assets/js/api/ProjectsApi.js index 41673d9430..359f2c81e2 100644 --- a/rdmo/projects/assets/js/api/ProjectsApi.js +++ b/rdmo/projects/assets/js/api/ProjectsApi.js @@ -3,83 +3,27 @@ import BaseApi from 'rdmo/core/assets/js/api/BaseApi' import { encodeParams } from 'rdmo/core/assets/js/utils/api' import baseUrl from 'rdmo/core/assets/js/utils/baseUrl' -function BadRequestError(errors) { - this.errors = errors -} - class ProjectsApi extends BaseApi { - static fetchProjects(params, fetchParams = {}) { - return fetch(baseUrl + '/api/v1/projects/projects/?' + encodeParams(params), fetchParams).then(response => { - if (response.ok) { - return response.json() - } else if (response.status == 400) { - return response.json().then(errors => { - throw new BadRequestError(errors) - }) - } else { - throw new Error(response.statusText) - } - }) + static fetchProjects(params) { + const url = '/api/v1/projects/projects/?' + encodeParams(params) + return this.get(url) } static fetchCatalogs() { - return fetch(baseUrl + '/api/v1/projects/catalogs/').then(response => { - if (response.ok) { - return response.json() - } else { - throw new Error(response.statusText) - } - }) + return this.get('/api/v1/projects/catalogs/') } static fetchAllowedFileTypes() { - return fetch(baseUrl + '/api/v1/projects/projects/upload-accept/') - .then(response => { - if (response.ok) { - return response.text() - .then(text => { - try { - // Attempt to parse the text as JSON - const jsonData = JSON.parse(text) - // Check if the parsed data is an array - if (Array.isArray(jsonData)) { - return jsonData - } - } catch (error) { - // If JSON.parse fails, handle text as plain string below - } - - // If it's not a JSON array, process it as a string - const cleanedText = text.replace(/^"|"$/g, '') - return cleanedText ? cleanedText.split(',') : [] - }) - } else { - throw new Error(response.statusText) - } - }) + return this.get('/api/v1/projects/projects/upload-accept/') } static fetchDirectImportUrls() { - return fetch(baseUrl + '/api/v1/projects/projects/imports/') - .then(response => { - if (response.ok) { - return response.json() - } else { - throw new Error(response.statusText) - } - }) + return this.get('/api/v1/projects/projects/imports/') } static fetchInvites() { - return fetch(baseUrl + '/api/v1/projects/invites/user') - .then(response => { - if (response.ok) { - return response.json() - } else { - throw new Error(response.statusText) - } - }) + return this.get('/api/v1/projects/invites/user/') } static uploadProject(url, file) { From 90c7c8788d64e23f84651f7c0013d581a9960908 Mon Sep 17 00:00:00 2001 From: Claudia Malzer Date: Fri, 20 Sep 2024 13:20:41 +0200 Subject: [PATCH 3/9] remove console.log --- rdmo/core/assets/js/components/UploadDropZone.js | 1 - rdmo/projects/assets/js/components/helper/ProjectFilters.js | 1 - 2 files changed, 2 deletions(-) diff --git a/rdmo/core/assets/js/components/UploadDropZone.js b/rdmo/core/assets/js/components/UploadDropZone.js index d4f335f52b..72cb314f7a 100644 --- a/rdmo/core/assets/js/components/UploadDropZone.js +++ b/rdmo/core/assets/js/components/UploadDropZone.js @@ -14,7 +14,6 @@ const UploadDropZone = ({ acceptedTypes, onImportFile }) => { } }, onDropRejected: rejectedFiles => { - console.log(rejectedFiles) setErrorMessage(interpolate(gettext('%s has unsupported file type'), [rejectedFiles[0].path])) } }) diff --git a/rdmo/projects/assets/js/components/helper/ProjectFilters.js b/rdmo/projects/assets/js/components/helper/ProjectFilters.js index 5b317224f6..04cc50e31c 100644 --- a/rdmo/projects/assets/js/components/helper/ProjectFilters.js +++ b/rdmo/projects/assets/js/components/helper/ProjectFilters.js @@ -25,7 +25,6 @@ const ProjectFilters = ({ catalogs, config, configActions, isManager, projectsAc configActions.deleteConfig('params.catalog') configActions.deleteConfig('params.created_after') setStartDate('created', null) - console.log('dateRange', dateRange) configActions.deleteConfig('params.created_before') setEndDate('created', null) configActions.deleteConfig('params.last_changed_after') From ec16709be141debdacf53c319f436bc58a6b1ba6 Mon Sep 17 00:00:00 2001 From: Jochen Klar Date: Fri, 11 Oct 2024 16:26:06 +0200 Subject: [PATCH 4/9] Do not filter CatalogViewSet for availability --- .../assets/js/components/helper/ProjectFilters.js | 3 ++- rdmo/projects/serializers/v1/overview.py | 3 ++- rdmo/projects/tests/test_viewset_catalog.py | 13 ++++++++++++- rdmo/projects/viewsets.py | 1 - 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/rdmo/projects/assets/js/components/helper/ProjectFilters.js b/rdmo/projects/assets/js/components/helper/ProjectFilters.js index 04cc50e31c..0ce94c1a23 100644 --- a/rdmo/projects/assets/js/components/helper/ProjectFilters.js +++ b/rdmo/projects/assets/js/components/helper/ProjectFilters.js @@ -35,7 +35,8 @@ const ProjectFilters = ({ catalogs, config, configActions, isManager, projectsAc projectsActions.fetchProjects() } - const catalogOptions = catalogs?.map(catalog => ({ value: catalog.id.toString(), label: catalog.title })) + const catalogOptions = catalogs?.filter(catalog => catalog.available) + .map(catalog => ({ value: catalog.id.toString(), label: catalog.title })) const selectedCatalog = get(config, 'params.catalog', '') const updateCatalogFilter = (value) => { value ? configActions.updateConfig('params.catalog', value) : configActions.deleteConfig('params.catalog') diff --git a/rdmo/projects/serializers/v1/overview.py b/rdmo/projects/serializers/v1/overview.py index 67b21bb599..6974a93346 100644 --- a/rdmo/projects/serializers/v1/overview.py +++ b/rdmo/projects/serializers/v1/overview.py @@ -13,7 +13,8 @@ class Meta: model = Catalog fields = ( 'id', - 'title' + 'title', + 'available' ) diff --git a/rdmo/projects/tests/test_viewset_catalog.py b/rdmo/projects/tests/test_viewset_catalog.py index f7a35d28e2..fc355e0ed2 100644 --- a/rdmo/projects/tests/test_viewset_catalog.py +++ b/rdmo/projects/tests/test_viewset_catalog.py @@ -1,7 +1,10 @@ import pytest +from django.contrib.sites.models import Site from django.urls import reverse +from rdmo.questions.models import Catalog + users = ( ('owner', 'owner'), ('manager', 'manager'), @@ -14,7 +17,8 @@ ) urlnames = { - 'list': 'v1-projects:catalog-list' + 'list': 'v1-projects:catalog-list', + 'user': 'v1-projects:catalog-user' } catalog_id = 1 @@ -30,5 +34,12 @@ def test_list(db, client, username, password): if password: assert response.status_code == 200 assert isinstance(response.json(), list) + + data = response.json() + site = Site.objects.get_current() + catalogs = Catalog.objects.filter(sites=site) + + assert {c['id'] for c in data} == {c.id for c in catalogs} + assert {c['available'] for c in data} == {c.available for c in catalogs} else: assert response.status_code == 401 diff --git a/rdmo/projects/viewsets.py b/rdmo/projects/viewsets.py index 3ca669e769..8c5d367a5b 100644 --- a/rdmo/projects/viewsets.py +++ b/rdmo/projects/viewsets.py @@ -679,5 +679,4 @@ class CatalogViewSet(ListModelMixin, GenericViewSet): def get_queryset(self): return Catalog.objects.filter_current_site() \ .filter_group(self.request.user) \ - .filter_availability(self.request.user) \ .order_by('-available', 'order') From e3684d84d856a087cb903a997b85cfc14a641e3d Mon Sep 17 00:00:00 2001 From: Jochen Klar Date: Fri, 18 Oct 2024 14:19:29 +0200 Subject: [PATCH 5/9] Update CHANGELOG.md --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1b5c50aa88..98859a8e0c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## [RDMO 2.2.2](https://github.com/rdmorganiser/rdmo/compare/2.2.1...2.2.2) (Oct 18, 2024) + +* Fix projects interface when using RDMMO with a path (#1152) +* Fix missing (unavailable) catalogs projects interface + ## [RDMO 2.2.1](https://github.com/rdmorganiser/rdmo/compare/2.2.0...2.2.1) (Sep 13, 2024) * Fix import error when allauth is not used (#1145) From f23ce839026456f3704e7b0e3951456b7aa90d7c Mon Sep 17 00:00:00 2001 From: Jochen Klar Date: Fri, 18 Oct 2024 14:19:49 +0200 Subject: [PATCH 6/9] Update version --- rdmo/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rdmo/__init__.py b/rdmo/__init__.py index b19ee4b77e..ba51cedfc0 100644 --- a/rdmo/__init__.py +++ b/rdmo/__init__.py @@ -1 +1 @@ -__version__ = "2.2.1" +__version__ = "2.2.2" From a271f345c744a8a3ea35fd2915da398d312e2e9d Mon Sep 17 00:00:00 2001 From: Jochen Klar Date: Fri, 18 Oct 2024 15:55:21 +0200 Subject: [PATCH 7/9] Fix baseUrl for project links in projects interface --- .../components/helper/PendingInvitations.js | 13 ++++++-- .../assets/js/components/main/Projects.js | 31 ++++++++++++------- 2 files changed, 31 insertions(+), 13 deletions(-) diff --git a/rdmo/projects/assets/js/components/helper/PendingInvitations.js b/rdmo/projects/assets/js/components/helper/PendingInvitations.js index 9290ccb32c..e2c13fcfff 100644 --- a/rdmo/projects/assets/js/components/helper/PendingInvitations.js +++ b/rdmo/projects/assets/js/components/helper/PendingInvitations.js @@ -1,5 +1,8 @@ import React from 'react' import PropTypes from 'prop-types' + +import baseUrl from 'rdmo/core/assets/js/utils/baseUrl' + import { ROLE_LABELS } from '../../utils' const PendingInvitations = ({ invitations }) => { @@ -14,8 +17,14 @@ const PendingInvitations = ({ invitations }) => { {ROLE_LABELS[item.role]}
- - + +
)) diff --git a/rdmo/projects/assets/js/components/main/Projects.js b/rdmo/projects/assets/js/components/main/Projects.js index aac7337816..585b9eb354 100644 --- a/rdmo/projects/assets/js/components/main/Projects.js +++ b/rdmo/projects/assets/js/components/main/Projects.js @@ -1,11 +1,14 @@ import React from 'react' import PropTypes from 'prop-types' -import { PendingInvitations, ProjectFilters, ProjectImport, Table } from '../helper' +import { get, isEmpty } from 'lodash' + import { Link, Modal, SearchField } from 'rdmo/core/assets/js/components' import { useFormattedDateTime, useModal, useScrollToTop } from 'rdmo/core/assets/js/hooks' import { language } from 'rdmo/core/assets/js/utils' +import baseUrl from 'rdmo/core/assets/js/utils/baseUrl' + +import { PendingInvitations, ProjectFilters, ProjectImport, Table } from '../helper' import { getTitlePath, getUserRoles, userIsManager, HEADER_FORMATTERS, SORTABLE_COLUMNS } from '../../utils' -import { get, isEmpty } from 'lodash' const Projects = ({ config, configActions, currentUserObject, projectsActions, projectsObject }) => { const { allowedTypes, catalogs, importUrls, invites, projects, projectsCount, hasNext } = projectsObject @@ -54,10 +57,12 @@ const Projects = ({ config, configActions, currentUserObject, projectsActions, p } const handleNew = () => { - window.location.href = '/projects/create' + window.location.href = `${baseUrl}/projects/create/` } - const handleImport = (file) => { projectsActions.uploadProject('/projects/import/', file) } + const handleImport = (file) => { + projectsActions.uploadProject('/projects/import/', file) + } const renderTitle = (title, row) => { const pathArray = getTitlePath(projects, title, row).split(' / ') @@ -67,7 +72,7 @@ const Projects = ({ config, configActions, currentUserObject, projectsActions, p return (
- + {pathArray.map((path, index) => ( {path} / ))} @@ -129,25 +134,26 @@ const Projects = ({ config, configActions, currentUserObject, projectsActions, p created: content => useFormattedDateTime(content, language), last_changed: content => useFormattedDateTime(content, language), actions: (_content, row) => { - const rowUrl = `/projects/${row.id}` - const path = `?next=${window.location.pathname}` + const rowUrl = `${baseUrl}/projects/${row.id}` + const params = `?next=${window.location.pathname}` const { isProjectManager, isProjectOwner } = getUserRoles(row, currentUserId, ['managers', 'owners']) + return (
{(isProjectManager || isProjectOwner || isManager) && window.location.href = `${rowUrl}/update/${path}`} + onClick={() => window.location.href = `${rowUrl}/update/${params}`} /> } {(isProjectOwner || isManager) && window.location.href = `${rowUrl}/delete/${path}`} + onClick={() => window.location.href = `${rowUrl}/delete/${params}`} /> }
@@ -217,10 +223,13 @@ const Projects = ({ config, configActions, currentUserObject, projectsActions, p sortableColumns={SORTABLE_COLUMNS} visibleColumns={visibleColumns} /> + {renderLoadButtons()} + + Date: Fri, 18 Oct 2024 15:57:32 +0200 Subject: [PATCH 8/9] Improve styling --- .../assets/js/components/UploadDropZone.js | 16 +++-- rdmo/core/static/core/css/base.scss | 3 +- rdmo/locale/de/LC_MESSAGES/djangojs.mo | Bin 24893 -> 24886 bytes rdmo/locale/de/LC_MESSAGES/djangojs.po | 68 +++++++++--------- .../templates/projects/project_import.html | 2 +- 5 files changed, 51 insertions(+), 38 deletions(-) diff --git a/rdmo/core/assets/js/components/UploadDropZone.js b/rdmo/core/assets/js/components/UploadDropZone.js index 72cb314f7a..f9be740aac 100644 --- a/rdmo/core/assets/js/components/UploadDropZone.js +++ b/rdmo/core/assets/js/components/UploadDropZone.js @@ -5,7 +5,7 @@ import { useDropzone } from 'react-dropzone' const UploadDropZone = ({ acceptedTypes, onImportFile }) => { const [errorMessage, setErrorMessage] = useState('') - const { getRootProps, getInputProps } = useDropzone({ + const { getRootProps, getInputProps, isDragActive } = useDropzone({ accept: acceptedTypes, onDropAccepted: acceptedFiles => { if (acceptedFiles.length > 0) { @@ -22,9 +22,17 @@ const UploadDropZone = ({ acceptedTypes, onImportFile }) => {
-

- {gettext('Drag and drop a file here or click to select a file')} -

+ { + isDragActive ? ( +
+ {gettext('Drop the file here ...')} +
+ ) : ( +
+ {gettext('Drag and drop a file here or click to select a file')} +
+ ) + } {errorMessage &&
{errorMessage}
}
diff --git a/rdmo/core/static/core/css/base.scss b/rdmo/core/static/core/css/base.scss index ecf2056c51..e3519e18fb 100644 --- a/rdmo/core/static/core/css/base.scss +++ b/rdmo/core/static/core/css/base.scss @@ -214,7 +214,8 @@ metadata { .page h2:nth-child(2) { margin-top: 0; } -.sidebar h2:first-child { +.sidebar h2:first-child, +.sidebar-mt { margin-top: 70px; } diff --git a/rdmo/locale/de/LC_MESSAGES/djangojs.mo b/rdmo/locale/de/LC_MESSAGES/djangojs.mo index 352312c054e95e97dfedb289f758c31cea21a9b1..f75f9f9831fb818b059eb5f642f160830d25c1e6 100644 GIT binary patch delta 5596 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 diff --git a/rdmo/locale/de/LC_MESSAGES/djangojs.po b/rdmo/locale/de/LC_MESSAGES/djangojs.po index fb95e1f41a..f05583a2c3 100644 --- a/rdmo/locale/de/LC_MESSAGES/djangojs.po +++ b/rdmo/locale/de/LC_MESSAGES/djangojs.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: RDMO\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-09-13 12:34+0000\n" -"PO-Revision-Date: 2024-07-23 11:18+0200\n" +"POT-Creation-Date: 2024-10-18 15:56+0200\n" +"PO-Revision-Date: 2024-10-18 15:56+0200\n" "Last-Translator: Jochen Klar \n" "Language-Team: RDMO \n" "Language: de\n" @@ -28,12 +28,16 @@ msgstr "Speichern" msgid "Search" msgstr "Suchen" -#: core/assets/js/components/UploadDropZone.js:18 +#: core/assets/js/components/UploadDropZone.js:17 #, javascript-format msgid "%s has unsupported file type" msgstr "%s hat einen nicht unterstützten Dateityp" -#: core/assets/js/components/UploadDropZone.js:27 +#: core/assets/js/components/UploadDropZone.js:28 +msgid "Drop the file here ..." +msgstr "Legen Sie die Datei hier ab ..." + +#: core/assets/js/components/UploadDropZone.js:32 msgid "Drag and drop a file here or click to select a file" msgstr "Datei hierher ziehen oder klicken um Datei auszuwählen" @@ -136,8 +140,8 @@ msgstr "Neues Attribut erstellen" #: management/assets/js/components/edit/EditAttribute.js:53 #, javascript-format msgid "" -"This attribute will be added to the attribute %s." +"This attribute will be added to the attribute " +"%s." msgstr "" "Dieses Attribut wird dem Attribut %s " "hinzugefügt." @@ -154,8 +158,8 @@ msgstr "" #: management/assets/js/components/edit/EditAttribute.js:68 #, javascript-format msgid "" -"This attribute will be added to the question set %s." +"This attribute will be added to the question set %s." msgstr "" "Dieses Attribut wird dem Fragenset %s " "hinzugefügt." @@ -163,8 +167,8 @@ msgstr "" #: management/assets/js/components/edit/EditAttribute.js:75 #, javascript-format msgid "" -"This attribute will be added to the question %s." +"This attribute will be added to the question " +"%s." msgstr "" "Dieses Attribut wird der Frage %s " "hinzugefügt." @@ -172,8 +176,8 @@ msgstr "" #: management/assets/js/components/edit/EditAttribute.js:82 #, javascript-format msgid "" -"This attribute will be added to the condition %s." +"This attribute will be added to the condition %s." msgstr "" "Dieses Attribut wird der Bedingung %s " "hinzugefügt." @@ -219,8 +223,8 @@ msgstr "Neue Bedingung erstellen" #: management/assets/js/components/edit/EditCondition.js:57 #, javascript-format msgid "" -"This condition will be added to the option set %s." +"This condition will be added to the option set " +"%s." msgstr "" "Diese Bedingung wird dem Optionenset %s " "hinzugefügt." @@ -237,8 +241,8 @@ msgstr "" #: management/assets/js/components/edit/EditCondition.js:71 #, javascript-format msgid "" -"This condition will be added to the question set %s." +"This condition will be added to the question set %s." msgstr "" "Diese Bedingung wird dem Fragenset %s " "hinzugefügt." @@ -246,8 +250,8 @@ msgstr "" #: management/assets/js/components/edit/EditCondition.js:78 #, javascript-format msgid "" -"This condition will be added to the question %s." +"This condition will be added to the question " +"%s." msgstr "" "Diese Bedingung wird der Frage %s " "hinzugefügt." @@ -307,8 +311,8 @@ msgstr "Neues Optionenset erstellen" #: management/assets/js/components/edit/EditOptionSet.js:61 #, javascript-format msgid "" -"This option set will be added to the question %s." +"This option set will be added to the question " +"%s." msgstr "" "Dieser Optionenset wird der Frage %s " "hinzugefügt." @@ -415,8 +419,8 @@ msgstr "" #: management/assets/js/components/edit/EditQuestion.js:74 #, javascript-format msgid "" -"This question will be added to the question set %s." +"This question will be added to the question set %s." msgstr "" "Diese Frage wird dem Fragenset %s " "hinzugefügt." @@ -439,8 +443,8 @@ msgstr "Fragenset erstellen" #: management/assets/js/components/edit/EditQuestionSet.js:96 #, javascript-format msgid "" -"This question set will be added to the page %s." +"This question set will be added to the page " +"%s." msgstr "" "Dieser Fragenset wird der Seite %s " "hinzugefügt." @@ -1444,42 +1448,42 @@ msgstr "Projekt direkt importieren" msgid "Import from file" msgstr "Importieren aus Datei" -#: projects/assets/js/components/main/Projects.js:22 +#: projects/assets/js/components/main/Projects.js:25 #: projects/assets/js/utils/translations.js:13 msgid "Pending invitations" msgstr "Ausstehende Einladungen" -#: projects/assets/js/components/main/Projects.js:28 +#: projects/assets/js/components/main/Projects.js:31 #: projects/assets/js/utils/translations.js:7 msgid "Import project" msgstr "Projekt importieren" -#: projects/assets/js/components/main/Projects.js:33 +#: projects/assets/js/components/main/Projects.js:36 #, javascript-format msgid "%s of %s projects are displayed" msgstr "%s von %s Projekten werden angezeigt" -#: projects/assets/js/components/main/Projects.js:36 +#: projects/assets/js/components/main/Projects.js:39 #, javascript-format msgid "%s of %s" msgstr "%s von %s" -#: projects/assets/js/components/main/Projects.js:47 +#: projects/assets/js/components/main/Projects.js:50 #: projects/assets/js/utils/translations.js:18 msgid "View all projects" msgstr "Alle Projekte ansehen" -#: projects/assets/js/components/main/Projects.js:47 +#: projects/assets/js/components/main/Projects.js:50 #: projects/assets/js/utils/translations.js:19 msgid "View my projects" msgstr "Meine Projekte ansehen" -#: projects/assets/js/components/main/Projects.js:48 +#: projects/assets/js/components/main/Projects.js:51 #: projects/assets/js/utils/translations.js:11 msgid "My projects" msgstr "Meine Projekte" -#: projects/assets/js/components/main/Projects.js:48 +#: projects/assets/js/components/main/Projects.js:51 #: projects/assets/js/utils/translations.js:3 msgid "All projects" msgstr "Alle Projekte" diff --git a/rdmo/projects/templates/projects/project_import.html b/rdmo/projects/templates/projects/project_import.html index ac25b385c6..c3d344f562 100644 --- a/rdmo/projects/templates/projects/project_import.html +++ b/rdmo/projects/templates/projects/project_import.html @@ -153,7 +153,7 @@

{% trans 'Snapshot' %}: {{ snapshot.title }}

{% endif %}