Next part of UI for SciProject
parent
2ba30e3e15
commit
1129e7e61d
|
|
@ -0,0 +1,29 @@
|
|||
{
|
||||
"name": "sci-types-project",
|
||||
"version: "7.0.0",
|
||||
"description": "JavaScript parts of the UI of sci-types-project",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"build": "npm-run-all build:*",
|
||||
"build:js": "webpack"
|
||||
},
|
||||
"author": "Jens Pelzetter",
|
||||
"license": "LGPL-3.0-or-later",
|
||||
"devDependencies": {
|
||||
"@types/jquery": "^3.5.6",
|
||||
"@types/sortablejs": "^1.10.7",
|
||||
"npm-run-all": "^4.1.5",
|
||||
"sass": "^1.42.1",
|
||||
"ts-loader": "^9.2.6",
|
||||
"typescript": "^4.4.3",
|
||||
"webpack": "^5.55.1",
|
||||
"webpack-cli": "^4.8.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@librecms/ccm-cms": "7.0.0"
|
||||
},
|
||||
"targets": {
|
||||
"main": false
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -20,6 +20,8 @@ public class SciProjectDescriptionContactsModel {
|
|||
private boolean canEdit;
|
||||
|
||||
private List<SciProjectContactModel> contacts;
|
||||
|
||||
private String baseUrl;
|
||||
|
||||
public boolean getCanEdit() {
|
||||
return canEdit;
|
||||
|
|
@ -40,4 +42,12 @@ public class SciProjectDescriptionContactsModel {
|
|||
public String getContactableType() {
|
||||
return ContactableEntity.class.getName();
|
||||
}
|
||||
|
||||
public String getBaseUrl() {
|
||||
return baseUrl;
|
||||
}
|
||||
|
||||
protected void setBaseUrl(final String baseUrl) {
|
||||
this.baseUrl = baseUrl;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,6 +28,8 @@ public class SciProjectDescriptionMembersModel {
|
|||
private List<SciProjectMembershipModel> members;
|
||||
|
||||
private Map<String, String> statusValues;
|
||||
|
||||
private String baseUrl;
|
||||
|
||||
public boolean getCanEdit() {
|
||||
return canEdit;
|
||||
|
|
@ -56,4 +58,12 @@ public class SciProjectDescriptionMembersModel {
|
|||
protected void setStatusValues(final Map<String, String> statusValues) {
|
||||
this.statusValues = new LinkedHashMap<>(statusValues);
|
||||
}
|
||||
|
||||
public String getBaseUrl() {
|
||||
return baseUrl;
|
||||
}
|
||||
|
||||
protected void setBaseUrl(final String baseUrl) {
|
||||
this.baseUrl = baseUrl;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ package org.scientificcms.contenttypes.sciproject.ui;
|
|||
|
||||
import org.libreccm.l10n.GlobalizationHelper;
|
||||
import org.libreccm.security.AuthorizationRequired;
|
||||
import org.libreccm.ui.BaseUrl;
|
||||
import org.librecms.assets.ContactableEntity;
|
||||
import org.librecms.assets.Person;
|
||||
import org.librecms.contentsection.AssetRepository;
|
||||
|
|
@ -53,12 +54,14 @@ import javax.enterprise.context.RequestScoped;
|
|||
import javax.inject.Inject;
|
||||
import javax.mvc.Controller;
|
||||
import javax.mvc.Models;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.transaction.Transactional;
|
||||
import javax.ws.rs.FormParam;
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.POST;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.PathParam;
|
||||
import javax.ws.rs.core.Context;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
@ -80,6 +83,9 @@ public class SciProjectDescriptionStep extends AbstractMvcAuthoringStep {
|
|||
|
||||
@Inject
|
||||
private AssetRepository assetRepo;
|
||||
|
||||
@Inject
|
||||
private BaseUrl baseUrl;
|
||||
|
||||
@Inject
|
||||
private ContentItemRepository itemRepo;
|
||||
|
|
@ -93,6 +99,9 @@ public class SciProjectDescriptionStep extends AbstractMvcAuthoringStep {
|
|||
@Inject
|
||||
private GlobalizationHelper globalizationHelper;
|
||||
|
||||
@Context
|
||||
private HttpServletRequest request;
|
||||
|
||||
@Inject
|
||||
private ItemPermissionChecker itemPermissionChecker;
|
||||
|
||||
|
|
@ -179,7 +188,7 @@ public class SciProjectDescriptionStep extends AbstractMvcAuthoringStep {
|
|||
return documentUi.showAccessDenied(
|
||||
getContentSection(),
|
||||
getProject(),
|
||||
sciProjectMessageBundle.getMessage("event.edit.denied")
|
||||
sciProjectMessageBundle.getMessage("sciproject.edit.denied")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -222,7 +231,7 @@ public class SciProjectDescriptionStep extends AbstractMvcAuthoringStep {
|
|||
return documentUi.showAccessDenied(
|
||||
getContentSection(),
|
||||
getProject(),
|
||||
sciProjectMessageBundle.getMessage("event.edit.denied")
|
||||
sciProjectMessageBundle.getMessage("sciproject.edit.denied")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -256,7 +265,7 @@ public class SciProjectDescriptionStep extends AbstractMvcAuthoringStep {
|
|||
return documentUi.showAccessDenied(
|
||||
getContentSection(),
|
||||
getProject(),
|
||||
sciProjectMessageBundle.getMessage("event.edit.denied")
|
||||
sciProjectMessageBundle.getMessage("sciproject.edit.denied")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -291,7 +300,7 @@ public class SciProjectDescriptionStep extends AbstractMvcAuthoringStep {
|
|||
return documentUi.showAccessDenied(
|
||||
getContentSection(),
|
||||
getProject(),
|
||||
sciProjectMessageBundle.getMessage("event.edit.denied")
|
||||
sciProjectMessageBundle.getMessage("sciproject.edit.denied")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -325,7 +334,7 @@ public class SciProjectDescriptionStep extends AbstractMvcAuthoringStep {
|
|||
return documentUi.showAccessDenied(
|
||||
getContentSection(),
|
||||
getProject(),
|
||||
sciProjectMessageBundle.getMessage("event.edit.denied")
|
||||
sciProjectMessageBundle.getMessage("sciproject.edit.denied")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -369,7 +378,7 @@ public class SciProjectDescriptionStep extends AbstractMvcAuthoringStep {
|
|||
return documentUi.showAccessDenied(
|
||||
getContentSection(),
|
||||
getProject(),
|
||||
sciProjectMessageBundle.getMessage("event.edit.denied")
|
||||
sciProjectMessageBundle.getMessage("sciproject.edit.denied")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -421,7 +430,7 @@ public class SciProjectDescriptionStep extends AbstractMvcAuthoringStep {
|
|||
return documentUi.showAccessDenied(
|
||||
getContentSection(),
|
||||
getProject(),
|
||||
sciProjectMessageBundle.getMessage("event.edit.denied")
|
||||
sciProjectMessageBundle.getMessage("sciproject.edit.denied")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -469,7 +478,7 @@ public class SciProjectDescriptionStep extends AbstractMvcAuthoringStep {
|
|||
return documentUi.showAccessDenied(
|
||||
getContentSection(),
|
||||
getProject(),
|
||||
sciProjectMessageBundle.getMessage("event.edit.denied")
|
||||
sciProjectMessageBundle.getMessage("sciproject.edit.denied")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -525,7 +534,7 @@ public class SciProjectDescriptionStep extends AbstractMvcAuthoringStep {
|
|||
return documentUi.showAccessDenied(
|
||||
getContentSection(),
|
||||
getProject(),
|
||||
sciProjectMessageBundle.getMessage("event.edit.denied")
|
||||
sciProjectMessageBundle.getMessage("sciproject.edit.denied")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -580,7 +589,7 @@ public class SciProjectDescriptionStep extends AbstractMvcAuthoringStep {
|
|||
return documentUi.showAccessDenied(
|
||||
getContentSection(),
|
||||
getProject(),
|
||||
sciProjectMessageBundle.getMessage("event.edit.denied")
|
||||
sciProjectMessageBundle.getMessage("sciproject.edit.denied")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -628,7 +637,7 @@ public class SciProjectDescriptionStep extends AbstractMvcAuthoringStep {
|
|||
return documentUi.showAccessDenied(
|
||||
getContentSection(),
|
||||
getProject(),
|
||||
sciProjectMessageBundle.getMessage("event.edit.denied")
|
||||
sciProjectMessageBundle.getMessage("sciproject.edit.denied")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -683,6 +692,7 @@ public class SciProjectDescriptionStep extends AbstractMvcAuthoringStep {
|
|||
.map(this::buildContactModel)
|
||||
.collect(Collectors.toList())
|
||||
);
|
||||
contactsModel.setBaseUrl(baseUrl.getBaseUrl(request));
|
||||
|
||||
membersModel.setCanEdit(canEdit);
|
||||
membersModel.setMembers(
|
||||
|
|
@ -709,6 +719,7 @@ public class SciProjectDescriptionStep extends AbstractMvcAuthoringStep {
|
|||
)
|
||||
)
|
||||
);
|
||||
membersModel.setBaseUrl(baseUrl.getBaseUrl(request));
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
package org.scientificcms.contenttypes.sciproject.ui;
|
||||
|
||||
import org.librecms.assets.Organization;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
|
@ -9,18 +11,20 @@ import javax.inject.Named;
|
|||
|
||||
/**
|
||||
*
|
||||
*
|
||||
*
|
||||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||
*/
|
||||
@RequestScoped
|
||||
@Named("SciProjectFundingSponsoring")
|
||||
public class SciProjectFundingSponsoringModel {
|
||||
|
||||
|
||||
private boolean canEdit;
|
||||
|
||||
|
||||
private List<SciProjectSponsoringModel> sponsoring;
|
||||
|
||||
public boolean getCanEdit() {
|
||||
|
||||
private String baseUrl;
|
||||
|
||||
public boolean getCanEdit() {
|
||||
return canEdit;
|
||||
}
|
||||
|
||||
|
|
@ -37,5 +41,17 @@ public class SciProjectFundingSponsoringModel {
|
|||
) {
|
||||
this.sponsoring = new ArrayList<>(sponsoring);
|
||||
}
|
||||
|
||||
|
||||
public String getSponsorType() {
|
||||
return Organization.class.getName();
|
||||
}
|
||||
|
||||
public String getBaseUrl() {
|
||||
return baseUrl;
|
||||
}
|
||||
|
||||
protected void setBaseUrl(final String baseUrl) {
|
||||
this.baseUrl = baseUrl;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package org.scientificcms.contenttypes.sciproject.ui;
|
|||
|
||||
import org.libreccm.l10n.GlobalizationHelper;
|
||||
import org.libreccm.security.AuthorizationRequired;
|
||||
import org.libreccm.ui.BaseUrl;
|
||||
import org.librecms.assets.Organization;
|
||||
import org.librecms.contentsection.AssetRepository;
|
||||
import org.librecms.contentsection.ContentItemRepository;
|
||||
|
|
@ -28,12 +29,14 @@ import javax.enterprise.context.RequestScoped;
|
|||
import javax.inject.Inject;
|
||||
import javax.mvc.Controller;
|
||||
import javax.mvc.Models;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.transaction.Transactional;
|
||||
import javax.ws.rs.FormParam;
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.POST;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.PathParam;
|
||||
import javax.ws.rs.core.Context;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
@ -55,6 +58,9 @@ public class SciProjectFundingStep extends AbstractMvcAuthoringStep {
|
|||
|
||||
@Inject
|
||||
private AssetRepository assetRepo;
|
||||
|
||||
@Inject
|
||||
private BaseUrl baseUrl;
|
||||
|
||||
@Inject
|
||||
private ContentItemRepository itemRepo;
|
||||
|
|
@ -65,6 +71,9 @@ public class SciProjectFundingStep extends AbstractMvcAuthoringStep {
|
|||
@Inject
|
||||
private GlobalizationHelper globalizationHelper;
|
||||
|
||||
@Context
|
||||
private HttpServletRequest request;
|
||||
|
||||
@Inject
|
||||
private ItemPermissionChecker itemPermissionChecker;
|
||||
|
||||
|
|
@ -115,7 +124,7 @@ public class SciProjectFundingStep extends AbstractMvcAuthoringStep {
|
|||
return documentUi.showAccessDenied(
|
||||
getContentSection(),
|
||||
getProject(),
|
||||
sciProjectMessageBundle.getMessage("event.edit.denied")
|
||||
sciProjectMessageBundle.getMessage("sciproject.edit.denied")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -149,7 +158,7 @@ public class SciProjectFundingStep extends AbstractMvcAuthoringStep {
|
|||
return documentUi.showAccessDenied(
|
||||
getContentSection(),
|
||||
getProject(),
|
||||
sciProjectMessageBundle.getMessage("event.edit.denied")
|
||||
sciProjectMessageBundle.getMessage("sciproject.edit.denied")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -191,7 +200,7 @@ public class SciProjectFundingStep extends AbstractMvcAuthoringStep {
|
|||
return documentUi.showAccessDenied(
|
||||
getContentSection(),
|
||||
getProject(),
|
||||
sciProjectMessageBundle.getMessage("event.edit.denied")
|
||||
sciProjectMessageBundle.getMessage("sciproject.edit.denied")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -225,7 +234,7 @@ public class SciProjectFundingStep extends AbstractMvcAuthoringStep {
|
|||
return documentUi.showAccessDenied(
|
||||
getContentSection(),
|
||||
getProject(),
|
||||
sciProjectMessageBundle.getMessage("event.edit.denied")
|
||||
sciProjectMessageBundle.getMessage("sciproject.edit.denied")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -260,7 +269,7 @@ public class SciProjectFundingStep extends AbstractMvcAuthoringStep {
|
|||
return documentUi.showAccessDenied(
|
||||
getContentSection(),
|
||||
getProject(),
|
||||
sciProjectMessageBundle.getMessage("event.edit.denied")
|
||||
sciProjectMessageBundle.getMessage("sciproject.edit.denied")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -294,7 +303,7 @@ public class SciProjectFundingStep extends AbstractMvcAuthoringStep {
|
|||
return documentUi.showAccessDenied(
|
||||
getContentSection(),
|
||||
getProject(),
|
||||
sciProjectMessageBundle.getMessage("event.edit.denied")
|
||||
sciProjectMessageBundle.getMessage("sciproject.edit.denied")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -328,7 +337,7 @@ public class SciProjectFundingStep extends AbstractMvcAuthoringStep {
|
|||
return documentUi.showAccessDenied(
|
||||
getContentSection(),
|
||||
getProject(),
|
||||
sciProjectMessageBundle.getMessage("event.edit.denied")
|
||||
sciProjectMessageBundle.getMessage("sciproject.edit.denied")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -370,7 +379,7 @@ public class SciProjectFundingStep extends AbstractMvcAuthoringStep {
|
|||
return documentUi.showAccessDenied(
|
||||
getContentSection(),
|
||||
getProject(),
|
||||
sciProjectMessageBundle.getMessage("event.edit.denied")
|
||||
sciProjectMessageBundle.getMessage("sciproject.edit.denied")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -404,7 +413,7 @@ public class SciProjectFundingStep extends AbstractMvcAuthoringStep {
|
|||
return documentUi.showAccessDenied(
|
||||
getContentSection(),
|
||||
getProject(),
|
||||
sciProjectMessageBundle.getMessage("event.edit.denied")
|
||||
sciProjectMessageBundle.getMessage("sciproject.edit.denied")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -439,7 +448,7 @@ public class SciProjectFundingStep extends AbstractMvcAuthoringStep {
|
|||
return documentUi.showAccessDenied(
|
||||
getContentSection(),
|
||||
getProject(),
|
||||
sciProjectMessageBundle.getMessage("event.edit.denied")
|
||||
sciProjectMessageBundle.getMessage("sciproject.edit.denied")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -473,7 +482,7 @@ public class SciProjectFundingStep extends AbstractMvcAuthoringStep {
|
|||
return documentUi.showAccessDenied(
|
||||
getContentSection(),
|
||||
getProject(),
|
||||
sciProjectMessageBundle.getMessage("event.edit.denied")
|
||||
sciProjectMessageBundle.getMessage("sciproject.edit.denied")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -481,7 +490,7 @@ public class SciProjectFundingStep extends AbstractMvcAuthoringStep {
|
|||
@POST
|
||||
@Path("/sponsoring/add")
|
||||
@Transactional(Transactional.TxType.REQUIRED)
|
||||
public String addSponsoringing(
|
||||
public String addSponsoring(
|
||||
@PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
|
||||
final String sectionIdentifier,
|
||||
@PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME)
|
||||
|
|
@ -516,7 +525,7 @@ public class SciProjectFundingStep extends AbstractMvcAuthoringStep {
|
|||
return documentUi.showAccessDenied(
|
||||
getContentSection(),
|
||||
getProject(),
|
||||
sciProjectMessageBundle.getMessage("event.edit.denied")
|
||||
sciProjectMessageBundle.getMessage("sciproject.edit.denied")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -567,7 +576,7 @@ public class SciProjectFundingStep extends AbstractMvcAuthoringStep {
|
|||
return documentUi.showAccessDenied(
|
||||
getContentSection(),
|
||||
getProject(),
|
||||
sciProjectMessageBundle.getMessage("event.edit.denied")
|
||||
sciProjectMessageBundle.getMessage("sciproject.edit.denied")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -615,7 +624,7 @@ public class SciProjectFundingStep extends AbstractMvcAuthoringStep {
|
|||
return documentUi.showAccessDenied(
|
||||
getContentSection(),
|
||||
getProject(),
|
||||
sciProjectMessageBundle.getMessage("event.edit.denied")
|
||||
sciProjectMessageBundle.getMessage("sciproject.edit.denied")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -705,6 +714,7 @@ public class SciProjectFundingStep extends AbstractMvcAuthoringStep {
|
|||
.map(this::buildSponsoringModel)
|
||||
.collect(Collectors.toList())
|
||||
);
|
||||
sponsoringModel.setBaseUrl(baseUrl.getBaseUrl(request));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -106,6 +106,8 @@ public class SciProjectMembershipModel {
|
|||
builder.append(" ");
|
||||
builder.append(suffix);
|
||||
}
|
||||
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
public String getGivenName() {
|
||||
|
|
|
|||
|
|
@ -184,7 +184,7 @@ public class SciProjectPropertiesStep extends AbstractMvcAuthoringStep {
|
|||
return documentUi.showAccessDenied(
|
||||
getContentSection(),
|
||||
getDocument(),
|
||||
sciProjectMessageBundle.getMessage("project.edit.denied")
|
||||
sciProjectMessageBundle.getMessage("sciproject.edit.denied")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,141 +0,0 @@
|
|||
/*
|
||||
* To change this license header, choose License Headers in Project Properties.
|
||||
* To change this template file, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package org.scientificcms.pagemodel.contentitems;
|
||||
|
||||
import org.librecms.assets.ContactableEntity;
|
||||
import org.librecms.assets.Organization;
|
||||
import org.librecms.assets.Person;
|
||||
import org.librecms.contentsection.ContentItem;
|
||||
import org.librecms.pagemodel.assets.AbstractAssetRenderer;
|
||||
import org.librecms.pagemodel.assets.AssetRenderers;
|
||||
import org.librecms.pagemodel.contentitems.AbstractContentItemRenderer;
|
||||
import org.librecms.pagemodel.contentitems.ContentItemRenderer;
|
||||
import org.scientificcms.contenttypes.sciproject.Contact;
|
||||
import org.scientificcms.contenttypes.sciproject.Membership;
|
||||
import org.scientificcms.contenttypes.sciproject.SciProject;
|
||||
import org.scientificcms.contenttypes.sciproject.Sponsoring;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.enterprise.context.RequestScoped;
|
||||
import javax.inject.Inject;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||
*/
|
||||
@ContentItemRenderer(renders = SciProject.class)
|
||||
@RequestScoped
|
||||
public class SciProjectRenderer extends AbstractContentItemRenderer {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Inject
|
||||
private AssetRenderers assetRenderers;
|
||||
|
||||
@Override
|
||||
protected void renderItem(final ContentItem item,
|
||||
final Locale language,
|
||||
final Map<String, Object> result) {
|
||||
|
||||
final SciProject project;
|
||||
if (item instanceof SciProject) {
|
||||
project = (SciProject) item;
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
result.put("begin", project.getBegin());
|
||||
result.put("end", project.getEnd());
|
||||
|
||||
result.put("shortDescription",
|
||||
project.getShortDescription().getValue(language));
|
||||
result.put("projectDescription",
|
||||
project.getProjectDescription().getValue(language));
|
||||
result.put("funding",
|
||||
project.getFunding().getValue(language));
|
||||
result.put("fundingVolume",
|
||||
project.getFundingVolume().getValue(language));
|
||||
|
||||
result.put("contacts",
|
||||
project
|
||||
.getContacts()
|
||||
.stream()
|
||||
.map(contact -> renderContact(contact, language))
|
||||
.collect(Collectors.toList())
|
||||
);
|
||||
result.put("members",
|
||||
project
|
||||
.getMembers()
|
||||
.stream()
|
||||
.map(member -> renderMember(member, language))
|
||||
.collect(Collectors.toList()));
|
||||
result.put("sponsoring",
|
||||
project
|
||||
.getSponsoring()
|
||||
.stream()
|
||||
.map(sponsoring -> renderSponsoring(sponsoring, language))
|
||||
.collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected AssetRenderers getAssetRenderers() {
|
||||
return assetRenderers;
|
||||
}
|
||||
|
||||
private Map<String, Object> renderContact(final Contact contact,
|
||||
final Locale language) {
|
||||
|
||||
final Map<String, Object> result = new HashMap<>();
|
||||
result.put("contactId", contact.getContactId());
|
||||
result.put("contactType", contact.getContactType());
|
||||
result.put("order", contact.getOrder());
|
||||
|
||||
final ContactableEntity contactable = contact.getContactable();
|
||||
final AbstractAssetRenderer contactableRenderer = assetRenderers
|
||||
.findRenderer(contactable.getClass());
|
||||
result.put("contactable", contactableRenderer.render(contactable,
|
||||
language));
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private Map<String, Object> renderMember(final Membership membership,
|
||||
final Locale language) {
|
||||
|
||||
final Map<String, Object> result = new HashMap<>();
|
||||
result.put("membershipId", membership.getMembershipId());
|
||||
result.put("role", membership.getRole());
|
||||
result.put("status", membership.getStatus().toString());
|
||||
|
||||
final Person member = membership.getMember();
|
||||
final AbstractAssetRenderer memberRenderer = assetRenderers
|
||||
.findRenderer(member.getClass());
|
||||
result.put("member", memberRenderer.render(member, language));
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private Map<String, Object> renderSponsoring(final Sponsoring sponsoring,
|
||||
final Locale language) {
|
||||
|
||||
final Map<String, Object> result = new HashMap<>();
|
||||
result.put("sponsoringId", sponsoring.getSponsoringId());
|
||||
result.put("fundingCode", sponsoring.getFundingCode());
|
||||
result.put("order", sponsoring.getOrder());
|
||||
|
||||
final Organization sponsor = sponsoring.getSponsor();
|
||||
final AbstractAssetRenderer sponsorRenderer = assetRenderers
|
||||
.findRenderer(sponsor.getClass());
|
||||
result.put("sponsor", sponsorRenderer.render(sponsor, language));
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
<!DOCTYPE html [<!ENTITY times '×'>]>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml"
|
||||
xmlns:bootstrap="http://xmlns.jcp.org/jsf/composite/components/bootstrap"
|
||||
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
|
||||
xmlns:libreccm="http://xmlns.jcp.org/jsf/composite/components/libreccm"
|
||||
xmlns:librecms="http://xmlns.jcp.org/jsf/composite/components/librecms"
|
||||
xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
|
||||
<ui:composition template="/WEB-INF/views/org/librecms/ui/contentsection/documents/authoringstep.xhtml">
|
||||
|
||||
<ui:define name="authoringStep">
|
||||
<div class="d-flex">
|
||||
<a class="btn btn-secondary btn-sm align-self-center mr-2"
|
||||
href="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemName}/@sciproject-description">
|
||||
<bootstrap:svgIcon icon="caret-left-fill" />
|
||||
<span class="sr-only">#{SciProjectMessageBundle['description_step.back']}</span>
|
||||
</a>
|
||||
|
||||
<h2>#{SciProjectMessageBundle['description_step.description.header.edit']}</h2>
|
||||
</div>
|
||||
|
||||
<c:if test="#{SciProjectDescriptionModel.canEdit}">
|
||||
<librecms:cmsEditor
|
||||
backUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-description"
|
||||
baseUrl="#{mvc.basePath}"
|
||||
canEdit="#{SciProjectDescriptionModel.canEdit}"
|
||||
contentSection="#{ContentSectionModel.sectionName}"
|
||||
editMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-description/description/edit"
|
||||
editorId="sciproject-description-editor"
|
||||
objectIdentifier="#{CmsSelectedDocumentModel.itemPath}"
|
||||
selectedLocale="#{SciProjectDescriptionModel.selectedLocale}"
|
||||
title="#{SciProjectMessageBundle['description.editor.header']}"
|
||||
variantUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-description/description/variants"
|
||||
/>
|
||||
</c:if>
|
||||
|
||||
</ui:define>
|
||||
|
||||
<ui:define name="scripts">
|
||||
<script src="#{request.contextPath}/assets/@content-sections/sciproject-description.js"></script>
|
||||
</ui:define>
|
||||
|
||||
</ui:composition>
|
||||
|
||||
</html>
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
<!DOCTYPE html [<!ENTITY times '×'>]>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml"
|
||||
xmlns:bootstrap="http://xmlns.jcp.org/jsf/composite/components/bootstrap"
|
||||
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
|
||||
xmlns:h="http://xmlns.jcp.org/jsf/html"
|
||||
xmlns:libreccm="http://xmlns.jcp.org/jsf/composite/components/libreccm"
|
||||
xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
|
||||
<ui:composition template="/WEB-INF/views/org/librecms/ui/contentsection/documents/authoringstep.xhtml">
|
||||
|
||||
<ui:define name="authoringStep">
|
||||
<div class="d-flex">
|
||||
<a class="btn btn-secondary btn-sm align-self-center mr-2"
|
||||
href="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemName}/@sciproject-description">
|
||||
<bootstrap:svgIcon icon="caret-left-fill" />
|
||||
<span class="sr-only">#{SciProjectMessageBundle['description_step.back']}</span>
|
||||
</a>
|
||||
|
||||
<h2>#{SciProjectMessageBundle['description_step.description.header.view']}</h2>
|
||||
</div>
|
||||
|
||||
<c:if test="#{SciProjectDescriptionModel.canEdit}">
|
||||
<div class="text-right">
|
||||
<a class="btn btn-secondary"
|
||||
href="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-description/description/edit">
|
||||
<bootstrap:svgIcon icon="pen" />
|
||||
<span class="sr-only">#{SciProjectMessageBundle['description_step.edit']}</span>
|
||||
</a>
|
||||
</div>
|
||||
</c:if>
|
||||
<div class="cms-text-preview article-text border p-2">
|
||||
<h:outputText escape="false"
|
||||
value="#{SciProjectDescriptionModel.descriptionValues.get(SciProjectDescriptionModel.selectedLocale)}" />
|
||||
</div>
|
||||
|
||||
</ui:composition>
|
||||
|
||||
</html>
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
<!DOCTYPE html [<!ENTITY times '×'>]>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml"
|
||||
xmlns:bootstrap="http://xmlns.jcp.org/jsf/composite/components/bootstrap"
|
||||
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
|
||||
xmlns:libreccm="http://xmlns.jcp.org/jsf/composite/components/libreccm"
|
||||
xmlns:librecms="http://xmlns.jcp.org/jsf/composite/components/librecms"
|
||||
xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
|
||||
<ui:composition template="/WEB-INF/views/org/librecms/ui/contentsection/documents/authoringstep.xhtml">
|
||||
|
||||
<ui:define name="authoringStep">
|
||||
<div class="d-flex">
|
||||
<a class="btn btn-secondary btn-sm align-self-center mr-2"
|
||||
href="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemName}/@sciproject-funding">
|
||||
<bootstrap:svgIcon icon="caret-left-fill" />
|
||||
<span class="sr-only">#{SciProjectMessageBundle['funding_step.back']}</span>
|
||||
</a>
|
||||
|
||||
<h2>#{SciProjectMessageBundle['funding_step.fundingtext.header.edit']}</h2>
|
||||
</div>
|
||||
|
||||
<c:if test="#{SciProjectFundingText.canEdit}">
|
||||
<librecms:cmsEditor
|
||||
backUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-funding"
|
||||
baseUrl="#{mvc.basePath}"
|
||||
canEdit="#{SciProjectFundingText.canEdit}"
|
||||
contentSection="#{ContentSectionModel.sectionName}"
|
||||
editMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-funding/funding-text/edit"
|
||||
editorId="sciproject-fundingtext-editor"
|
||||
objectIdentifier="#{CmsSelectedDocumentModel.itemPath}"
|
||||
selectedLocale="#{SciProjectFundingText.selectedLocale}"
|
||||
title="#{SciProjectMessageBundle['fundingtext.editor.header']}"
|
||||
variantUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-funding/funding-text/variants"
|
||||
/>
|
||||
</c:if>
|
||||
|
||||
</ui:define>
|
||||
|
||||
<ui:define name="scripts">
|
||||
<script src="#{request.contextPath}/assets/@content-sections/sciproject-fundingtext.js"></script>
|
||||
</ui:define>
|
||||
|
||||
</ui:composition>
|
||||
|
||||
</html>
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
<!DOCTYPE html [<!ENTITY times '×'>]>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml"
|
||||
xmlns:bootstrap="http://xmlns.jcp.org/jsf/composite/components/bootstrap"
|
||||
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
|
||||
xmlns:h="http://xmlns.jcp.org/jsf/html"
|
||||
xmlns:libreccm="http://xmlns.jcp.org/jsf/composite/components/libreccm"
|
||||
xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
|
||||
<ui:composition template="/WEB-INF/views/org/librecms/ui/contentsection/documents/authoringstep.xhtml">
|
||||
|
||||
<ui:define name="authoringStep">
|
||||
<div class="d-flex">
|
||||
<a class="btn btn-secondary btn-sm align-self-center mr-2"
|
||||
href="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemName}/@sciproject-funding">
|
||||
<bootstrap:svgIcon icon="caret-left-fill" />
|
||||
<span class="sr-only">#{SciProjectMessageBundle['funding_step.back']}</span>
|
||||
</a>
|
||||
|
||||
<h2>#{SciProjectMessageBundle['funding_step.fundingtext.header.view']}</h2>
|
||||
</div>
|
||||
|
||||
<c:if test="#{SciProjectFundingText.canEdit}">
|
||||
<div class="text-right">
|
||||
<a class="btn btn-secondary"
|
||||
href="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-funding/funding-text/edit">
|
||||
<bootstrap:svgIcon icon="pen" />
|
||||
<span class="sr-only">#{SciProjectMessageBundle['funding_step.edit']}</span>
|
||||
</a>
|
||||
</div>
|
||||
</c:if>
|
||||
<div class="cms-text-preview article-text border p-2">
|
||||
<h:outputText escape="false"
|
||||
value="#{SciProjectFundingText.fundingValues.get(SciProjectFundingText.selectedLocale)}" />
|
||||
</div>
|
||||
|
||||
</ui:composition>
|
||||
|
||||
</html>
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
<!DOCTYPE html [<!ENTITY times '×'>]>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml"
|
||||
xmlns:bootstrap="http://xmlns.jcp.org/jsf/composite/components/bootstrap"
|
||||
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
|
||||
xmlns:libreccm="http://xmlns.jcp.org/jsf/composite/components/libreccm"
|
||||
xmlns:librecms="http://xmlns.jcp.org/jsf/composite/components/librecms"
|
||||
xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
|
||||
<ui:composition template="/WEB-INF/views/org/librecms/ui/contentsection/documents/authoringstep.xhtml">
|
||||
|
||||
<ui:define name="authoringStep">
|
||||
<div class="d-flex">
|
||||
<a class="btn btn-secondary btn-sm align-self-center mr-2"
|
||||
href="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemName}/@sciproject-funding">
|
||||
<bootstrap:svgIcon icon="caret-left-fill" />
|
||||
<span class="sr-only">#{SciProjectMessageBundle['funding_step.back']}</span>
|
||||
</a>
|
||||
|
||||
<h2>#{SciProjectMessageBundle['funding_step.fundingvolume.header.edit']}</h2>
|
||||
</div>
|
||||
|
||||
<c:if test="#{SciProjectFundingText.canEdit}">
|
||||
<librecms:cmsEditor
|
||||
backUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-funding"
|
||||
baseUrl="#{mvc.basePath}"
|
||||
canEdit="#{SciProjectFundingText.canEdit}"
|
||||
contentSection="#{ContentSectionModel.sectionName}"
|
||||
editMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-funding/funding-volume/edit"
|
||||
editorId="sciproject-funding-volume-editor"
|
||||
objectIdentifier="#{CmsSelectedDocumentModel.itemPath}"
|
||||
selectedLocale="#{SciProjectFundingText.selectedLocale}"
|
||||
title="#{SciProjectMessageBundle['fundingvolume.editor.header']}"
|
||||
variantUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-funding/funding-volume/variants"
|
||||
/>
|
||||
</c:if>
|
||||
|
||||
</ui:define>
|
||||
|
||||
<ui:define name="scripts">
|
||||
<script src="#{request.contextPath}/assets/@content-sections/sciproject-fundingvolume.js"></script>
|
||||
</ui:define>
|
||||
|
||||
</ui:composition>
|
||||
|
||||
</html>
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
<!DOCTYPE html [<!ENTITY times '×'>]>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml"
|
||||
xmlns:bootstrap="http://xmlns.jcp.org/jsf/composite/components/bootstrap"
|
||||
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
|
||||
xmlns:h="http://xmlns.jcp.org/jsf/html"
|
||||
xmlns:libreccm="http://xmlns.jcp.org/jsf/composite/components/libreccm"
|
||||
xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
|
||||
<ui:composition template="/WEB-INF/views/org/librecms/ui/contentsection/documents/authoringstep.xhtml">
|
||||
|
||||
<ui:define name="authoringStep">
|
||||
<div class="d-flex">
|
||||
<a class="btn btn-secondary btn-sm align-self-center mr-2"
|
||||
href="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemName}/@sciproject-funding">
|
||||
<bootstrap:svgIcon icon="caret-left-fill" />
|
||||
<span class="sr-only">#{SciProjectMessageBundle['funding_step.back']}</span>
|
||||
</a>
|
||||
|
||||
<h2>#{SciProjectMessageBundle['funding_step.fundingvolume.header.view']}</h2>
|
||||
</div>
|
||||
|
||||
<c:if test="#{SciProjectFundingVolume.canEdit}">
|
||||
<div class="text-right">
|
||||
<a class="btn btn-secondary"
|
||||
href="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-funding/funding-volume/edit">
|
||||
<bootstrap:svgIcon icon="pen" />
|
||||
<span class="sr-only">#{SciProjectMessageBundle['funding_step.edit']}</span>
|
||||
</a>
|
||||
</div>
|
||||
</c:if>
|
||||
<div class="cms-text-preview article-text border p-2">
|
||||
<h:outputText escape="false"
|
||||
value="#{SciProjectFundingVolume.fundingVolumeValues.get(SciProjectFundingVolume.selectedLocale)}" />
|
||||
</div>
|
||||
|
||||
</ui:composition>
|
||||
|
||||
</html>
|
||||
|
|
@ -11,7 +11,7 @@
|
|||
value="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-basicproperties" />
|
||||
|
||||
<ui:define name="authoringStep">
|
||||
<h2>#{SciProjectMessageBundle.getMessage('basicproperties.header', [SciProjectPropertiesSteo.name])}</h2>
|
||||
<h2>#{SciProjectMessageBundle.getMessage('basicproperties.header', [SciProjectPropertiesStep.name])}</h2>
|
||||
|
||||
<h3>#{SciProjectMessageBundle['basicproperties.name.header']}</h3>
|
||||
<div class="d-flex">
|
||||
|
|
@ -152,13 +152,13 @@
|
|||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<bootstrap:formGroupDateTime
|
||||
<bootstrap:formGroupDate
|
||||
help="#{SciProjectMessageBundle['basicproperties.begin.edit.dialog.startdate.help']}"
|
||||
inputId="startDateTime"
|
||||
label="#{SciProjectMessageBundle['basicproperties.begin.edit.dialog.startdate.label']}"
|
||||
name="begin"
|
||||
required="true"
|
||||
value="#{SciProjectPropertiesStep.startDateTime}"
|
||||
value="#{SciProjectPropertiesStep.begin}"
|
||||
/>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
|
|
@ -216,13 +216,13 @@
|
|||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<bootstrap:formGroupDateTime
|
||||
help="#{SciProjectMessageBundle['basicproperties.end.edit.dialog.startdate.help']}"
|
||||
<bootstrap:formGroupDate
|
||||
help="#{SciProjectMessageBundle['basicproperties.end.edit.dialog.enddate.help']}"
|
||||
inputId="startDateTime"
|
||||
label="#{SciProjectMessageBundle['basicproperties.end.edit.dialog.startdate.label']}"
|
||||
label="#{SciProjectMessageBundle['basicproperties.end.edit.dialog.enddate.label']}"
|
||||
name="end"
|
||||
required="true"
|
||||
value="#{SciProjectPropertiesStep.startDateTime}"
|
||||
value="#{SciProjectPropertiesStep.endDate}"
|
||||
/>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
|
|
@ -270,6 +270,7 @@
|
|||
removeMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-basicproperties/short-description/@remove"
|
||||
title="#{SciProjectMessageBundle['basicproperties.shortdescription.header']}"
|
||||
unusedLocales="#{SciProjectPropertiesStep.unusedShortDescriptionLocales}"
|
||||
useTextarea="true"
|
||||
values="#{SciProjectPropertiesStep.shortDescriptionValues}"
|
||||
/>
|
||||
|
||||
|
|
|
|||
|
|
@ -65,77 +65,79 @@
|
|||
>#{SciProjectMessageBundle['contacts.cols.actions']}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<c:forEach items="#{SciProjectDescriptionContacts.contacts}"
|
||||
var="contact">
|
||||
<tr id="#{contact.contactId}">
|
||||
<td>#{contact.contactable}</td>
|
||||
<td>#{contact.contactType}</td>
|
||||
<td>
|
||||
<button class="btn btn-secondary"
|
||||
data-toggle="modal"
|
||||
data-target="#contact-edit-dialog"
|
||||
type="button">
|
||||
<bootstrap:svgIcon icon="pen" />
|
||||
<span>#{SciProjectMessageBundle['contacts.edit.label']}</span>
|
||||
</button>
|
||||
<div aria-hidden="true"
|
||||
aria-labelledby="contact-edit-dialog-title"
|
||||
class="modal fade"
|
||||
id="contact-edit-dialog"
|
||||
tabindex="-1">
|
||||
<div class="modal-dialog">
|
||||
<form class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title"
|
||||
id="contact-edit-dialog-title">
|
||||
#{SciProjectMessageBundle['contacts.edit.title']}
|
||||
</h4>
|
||||
<button
|
||||
aria-label="#{SciProjectMessageBundle['contacts.edit.cancel']}"
|
||||
class="close"
|
||||
data-dismiss="modal"
|
||||
type="button">
|
||||
<bootstrap:svgIcon icon="x"/>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<bootstrap:formGroupText
|
||||
help="#{SciProjectMessageBundle['contacts.edit.type.help']}"
|
||||
inputId="type-edit"
|
||||
label="#{SciProjectMessageBundle['contacts.edit.type.label']}"
|
||||
name="type"
|
||||
|
||||
/>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="btn btn-warning"
|
||||
<tbody>
|
||||
<c:forEach items="#{SciProjectDescriptionContacts.contacts}"
|
||||
var="contact">
|
||||
<tr id="#{contact.contactId}">
|
||||
<td>#{contact.contactable}</td>
|
||||
<td>#{contact.contactType}</td>
|
||||
<td>
|
||||
<button class="btn btn-secondary"
|
||||
data-toggle="modal"
|
||||
data-target="#contact-edit-dialog"
|
||||
type="button">
|
||||
<bootstrap:svgIcon icon="pen" />
|
||||
<span>#{SciProjectMessageBundle['contacts.edit.label']}</span>
|
||||
</button>
|
||||
<div aria-hidden="true"
|
||||
aria-labelledby="contact-edit-dialog-title"
|
||||
class="modal fade"
|
||||
id="contact-edit-dialog"
|
||||
tabindex="-1">
|
||||
<div class="modal-dialog">
|
||||
<form class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title"
|
||||
id="contact-edit-dialog-title">
|
||||
#{SciProjectMessageBundle['contacts.edit.title']}
|
||||
</h4>
|
||||
<button
|
||||
aria-label="#{SciProjectMessageBundle['contacts.edit.cancel']}"
|
||||
class="close"
|
||||
data-dismiss="modal"
|
||||
type="button">
|
||||
#{SciProjectMessageBundle['contacts.edit.cancel']}
|
||||
</button>
|
||||
<button class="btn btn-success"
|
||||
type="submit">
|
||||
#{SciProjectMessageBundle['contacts.edit.submit']}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<libreccm:deleteDialog
|
||||
actionTarget="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-description/contacts/remove/#{contact.contactId}"
|
||||
buttonText="#{SciProjectMessageBundle['contacts.delete.label']}"
|
||||
cancelLabel="#{SciProjectMessageBundle['contacts.delete.cancel']}"
|
||||
confirmLabel="#{SciProjectMessageBundle['contacts.delete.confirm']}"
|
||||
dialogId="contact-delete-dialog"
|
||||
dialogTitle="#{SciProjectMessageBundle['contacts.delete.title']}"
|
||||
message="#{SciProjectMessageBundle['contacts.delete.message']}"
|
||||
<bootstrap:svgIcon icon="x"/>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<bootstrap:formGroupText
|
||||
help="#{SciProjectMessageBundle['contacts.edit.type.help']}"
|
||||
inputId="type-edit"
|
||||
label="#{SciProjectMessageBundle['contacts.edit.type.label']}"
|
||||
name="type"
|
||||
|
||||
/>
|
||||
</td>
|
||||
</tr>
|
||||
</c:forEach>
|
||||
/>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="btn btn-warning"
|
||||
data-dismiss="modal"
|
||||
type="button">
|
||||
#{SciProjectMessageBundle['contacts.edit.cancel']}
|
||||
</button>
|
||||
<button class="btn btn-success"
|
||||
type="submit">
|
||||
#{SciProjectMessageBundle['contacts.edit.submit']}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<libreccm:deleteDialog
|
||||
actionTarget="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-description/contacts/remove/#{contact.contactId}"
|
||||
buttonText="#{SciProjectMessageBundle['contacts.delete.label']}"
|
||||
cancelLabel="#{SciProjectMessageBundle['contacts.delete.cancel']}"
|
||||
confirmLabel="#{SciProjectMessageBundle['contacts.delete.confirm']}"
|
||||
dialogId="contact-delete-dialog"
|
||||
dialogTitle="#{SciProjectMessageBundle['contacts.delete.title']}"
|
||||
message="#{SciProjectMessageBundle.getMessage('contacts.delete.message', [contact.contactable, contact.contactType])}"
|
||||
|
||||
/>
|
||||
</td>
|
||||
</tr>
|
||||
</c:forEach>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
|
|
@ -184,7 +186,7 @@
|
|||
scope="col">#{SciProjectMessageBundle['memberships.cols.actions']}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tbody id="members-list">
|
||||
<c:forEach items="#{SciProjectDescriptionMembers.members}"
|
||||
var="member">
|
||||
<tr>
|
||||
|
|
@ -228,7 +230,7 @@
|
|||
<bootstrap:formGroupText
|
||||
help="#{SciProjectMessageBundle['memberships.edit.role.help']}"
|
||||
inputId="type"
|
||||
label="#{SciProjectMessageBundle['contacts.edit.role.label']}"
|
||||
label="#{SciProjectMessageBundle['memberships.edit.role.label']}"
|
||||
name="type-edit"
|
||||
/>
|
||||
|
||||
|
|
@ -244,11 +246,11 @@
|
|||
<button class="btn btn-warning"
|
||||
data-dismiss="modal"
|
||||
type="button">
|
||||
#{SciProjectMessageBundle['contacts.edit.cancel']}
|
||||
#{SciProjectMessageBundle['members.edit.cancel']}
|
||||
</button>
|
||||
<button class="btn btn-success"
|
||||
type="submit">
|
||||
#{SciProjectMessageBundle['contacts.edit.submit']}
|
||||
#{SciProjectMessageBundle['members.edit.submit']}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
|
|
@ -258,12 +260,12 @@
|
|||
<td>
|
||||
<libreccm:deleteDialog
|
||||
actionTarget="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-description/members/remove/#{member.membershipId}"
|
||||
buttonText="#{SciProjectMessageBundle['memberships.delete.label']}"
|
||||
buttonText="#{SciProjectMessageBundle['memberships.delete.label']}"
|
||||
cancelLabel="#{SciProjectMessageBundle['memberships.delete.cancel']}"
|
||||
confirmLabel="#{SciProjectMessageBundle['memberships.delete.confirm']}"
|
||||
dialogId="membership-delete-dialog"
|
||||
dialogTitle="#{SciProjectMessageBundle['memberships.delete.title']}"
|
||||
message="#{SciProjectMessageBundle['memberships.delete.message']}"
|
||||
message="#{SciProjectMessageBundle.getMessage('memberships.delete.message', [member.name])}"
|
||||
/>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
@ -271,8 +273,11 @@
|
|||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
|
||||
</ui:define>
|
||||
|
||||
<ui:define name="scripts">
|
||||
<script src="#{request.contextPath}/assets/@content-sections/sciproject-contacts.js" />
|
||||
<script src="#{request.contextPath}/assets/@content-sections/sciproject-members.js" />
|
||||
</ui:define>
|
||||
|
||||
</ui:composition>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,164 @@
|
|||
<!DOCTYPE html [<!ENTITY times '×'>]>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml"
|
||||
xmlns:bootstrap="http://xmlns.jcp.org/jsf/composite/components/bootstrap"
|
||||
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
|
||||
xmlns:libreccm="http://xmlns.jcp.org/jsf/composite/components/libreccm"
|
||||
xmlns:librecms="http://xmlns.jcp.org/jsf/composite/components/librecms"
|
||||
xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
|
||||
<ui:composition template="/WEB-INF/views/org/librecms/ui/contentsection/documents/authoringstep.xhtml">
|
||||
|
||||
<ui:param name="authoringStep"
|
||||
value="/libreccm/@contentsections/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/sciproject-funding" />
|
||||
|
||||
<ui:define name="authoringStep">
|
||||
<h2>#{SciProjectMessageBundle['funding_step.header']}</h2>
|
||||
|
||||
<librecms:cmsEditorVariants
|
||||
addButtonLabel="#{SciProjectMessageBundle['funding.editor.add_variant']}"
|
||||
addDialogLocaleSelectHelp="#{SciProjectMessageBundle['funding.editor.add.locale.help']}"
|
||||
addMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-funding/funding-text/add"
|
||||
canEdit="#{SciProjectFundingText.canEdit}"
|
||||
editorPageUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-funding/funding-text/edit"
|
||||
hasUnusedLocales="#{!SciProjectFundingText.unusedLocales.isEmpty()}"
|
||||
headingLevel="3"
|
||||
removeMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-funding/funding-text/remove"
|
||||
sourceEditorPageUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-funding/funding-text/edit-source"
|
||||
title="#{SciProjectMessageBundle['funding.editor.header']}"
|
||||
unusedLocales="#{SciProjectFundingText.unusedLocales}"
|
||||
variants="#{SciProjectFundingText.variants}"
|
||||
variantsId="fundingtext"
|
||||
viewPageUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-funding/funding-text/view"
|
||||
/>
|
||||
|
||||
<librecms:cmsEditorVariants
|
||||
addButtonLabel="#{SciProjectMessageBundle['fundingvolume.editor.add_variant']}"
|
||||
addDialogLocaleSelectHelp="#{SciProjectMessageBundle['fundingvolume.editor.add.locale.help']}"
|
||||
addMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-funding/funding-volume/add"
|
||||
canEdit="#{SciProjectFundingVolume.canEdit}"
|
||||
editorPageUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-funding/funding-volume/edit"
|
||||
hasUnusedLocales="#{!SciProjectFundingVolume.unusedLocales.isEmpty()}"
|
||||
headingLevel="3"
|
||||
removeMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-funding/funding-volume/remove"
|
||||
sourceEditorPageUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-funding/funding-volume/edit-source"
|
||||
title="#{SciProjectMessageBundle['fundingvolume.editor.header']}"
|
||||
unusedLocales="#{SciProjectFundingVolume.unusedLocales}"
|
||||
variants="#{SciProjectFundingVolume.variants}"
|
||||
variantsId="fundingvolume"
|
||||
viewPageUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-funding/funding-volume/view"
|
||||
/>
|
||||
|
||||
<h3>#{SciProjectMessageBundle['sponsoring.header']}</h3>
|
||||
<div class="mb-2">
|
||||
<div class="text-right">
|
||||
<librecms:assetPickerButton
|
||||
assetPickerId="sponsoring-picker"
|
||||
buttonIcon="plus-circle"
|
||||
buttonText="#{SciProjectMessageBundle['sponsoring.add_button.label']}"
|
||||
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<librecms:assetPicker
|
||||
actionUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-funding/sponsoring/add"
|
||||
assetPickerId="sponsoring-picker"
|
||||
assetType="#{SciProjectFundingSponsoring.sponsorType}"
|
||||
baseUrl="#{SciProjectFundingSponsoring.baseUrl}"
|
||||
contentSection="#{ContentSectionModel.sectionName}"
|
||||
formParamName="sponsorUuid">
|
||||
<bootstrap:formGroupText
|
||||
help="#{SciProjectMessageBundle['sponsoring.fundingcode.help']}"
|
||||
inputId="fundingcode"
|
||||
label="#{SciProjectMessageBundle['sponsoring.fundingcode.label']}"
|
||||
name="fundingCode"
|
||||
/>
|
||||
</librecms:assetPicker>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">#{SciProjectMessageBundle['sponsoring.cols.sponsor']}</th>
|
||||
<th scope="col">#{SciProjectMessageBundle['sponsoring.cols.fundingcode']}</th>
|
||||
<th colspan="2"
|
||||
scope="col">#{SciProjectMessageBundle['sponsoring.cols.actions']}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<c:forEach items="#{SciProjectFundingSponsoring.sponsoring}"
|
||||
var="sponsoring">
|
||||
<tr id="#{sponsoring.sponsoringId}">
|
||||
<td>#{sponsoring.sponsor}</td>
|
||||
<td>#{sponsoring.fundingCode}</td>
|
||||
<td>
|
||||
<button class="btn btn-secondary"
|
||||
data-toggle="modal"
|
||||
data-target="#sponsoring-edit-dialog"
|
||||
type="button">
|
||||
<bootstrap:svgIcon icon="pen" />
|
||||
<span>#{SciProjectMessageBundle['sponsoring.edit.label']}</span>
|
||||
</button>
|
||||
<div aria-hidden="true"
|
||||
aria-labelledby="sponsoring-edit-dialog-title"
|
||||
class="modal fade"
|
||||
id="spoonsoring-edit-dialog"
|
||||
tabindex="-1">
|
||||
<div class="modal-dialog">
|
||||
<form class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title"
|
||||
id="sponsoring-edit-dialog-title">
|
||||
#{SciProjectMessageBundle['sponsoring.edit.title']}
|
||||
</h4>
|
||||
<button
|
||||
aria-label="#{SciProjectMessageBundle['sponsoring.edit.cancel']}"
|
||||
class="close"
|
||||
data-dismiss="modal"
|
||||
type="button">
|
||||
<bootstrap:svgIcon icon="x"/>
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<bootstrap:formGroupText
|
||||
help="#{SciProjectMessageBundle['sponsoring.fundingcode.help']}"
|
||||
inputId="fundingcode"
|
||||
label="#{SciProjectMessageBundle['sponsoring.fundingcode.label']}"
|
||||
name="fundingCode"
|
||||
/>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="btn btn-warning"
|
||||
data-dismiss="modal"
|
||||
type="button">
|
||||
#{SciProjectMessageBundle['sponsoring.edit.cancel']}
|
||||
</button>
|
||||
<button class="btn btn-success"
|
||||
type="submit">
|
||||
#{SciProjectMessageBundle['sponsoring.edit.submit']}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<libreccm:deleteDialog
|
||||
actionTarget="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@sciproject-funding/sponsoring/remove"
|
||||
buttonText="#{SciProjectMessageBundle['sponsoring.remove.label']}"
|
||||
cancelLabel="#{SciProjectMessageBundle['sponsoring.remove.cancel']}"
|
||||
confirmLabel="#{SciProjectMessageBundle['sponsoring.remove.confirm']}"
|
||||
dialogId="sponsoring-remove-dialog"
|
||||
dialogTitle="#{SciProjectMessageBundle['sponsoring.remove.title']}"
|
||||
message="#{SciProjectMessageBundle.getMessage('sponsoring.remove.message', [sponsoring.sponsor])}"
|
||||
/>
|
||||
</td>
|
||||
</tr>
|
||||
</c:forEach>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<ui:define name="scripts">
|
||||
<script src="#{request.contextPath}/assets/@content-sections/sciproject-sponsoring.js"></script>
|
||||
</ui:define>
|
||||
|
||||
</ui:define>
|
||||
|
||||
</ui:composition>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,148 @@
|
|||
|
||||
sciproject.edit.denied=Access denied
|
||||
members.status.active=Active
|
||||
members.status.associated=Associated
|
||||
members.status.former=Former
|
||||
basicproperties.header=Edit basic properties of project {0}
|
||||
basicproperties.name.header=Name
|
||||
basicproperties.name.edit=Edit name
|
||||
basicproperties.name.edit.title=Edit name
|
||||
basicproperties.name.edit.close=Cancel
|
||||
basicproperties.name.help=The name of the project. Also used as URL fragment.
|
||||
basicproperties.name.label=Name
|
||||
basicproperties.name.edit.submit=Save
|
||||
basicproperties.title.add=Add a localized title
|
||||
basicproperties.title.add.cancel=Cancel
|
||||
basicproperties.title.add.locale.help=The locale of the localized title.
|
||||
basicproperties.title.add.locale.label=Locale
|
||||
basicproperties.title.add.submit=Add
|
||||
basicproperties.title.add.header=Add localized title
|
||||
basicproperties.title.add.value.help=The localized title.
|
||||
basicproperties.title.add.value.label=Title
|
||||
basicproperties.title.edit=Edit
|
||||
basicproperties.title.edit.cancel=Cancel
|
||||
basicproperties.title.edit.submit=Save
|
||||
basicproperties.title.edit.header=Edit localized title
|
||||
basicproperties.title.edit.value.help=The localized title.
|
||||
basicproperties.title.edit.value.label=Title
|
||||
basicproperties.title.remove=Remove
|
||||
basicproperties.title.remove.cancel=Cancel
|
||||
basicproperties.title.remove.submit=Remove
|
||||
basicproperties.title.remove.text=Are you sure to remove this localized title?
|
||||
basicproperties.title.remove.header=Confirm removal of localized title
|
||||
basicproperties.title.header=Title
|
||||
basicproperties.begin.header=Begin of the project
|
||||
basicproperties.begin.edit=Edit
|
||||
basicproperties.begin.label=Begin
|
||||
basicproperties.begin.edit.dialog.title=Edit
|
||||
basicproperties.begin.edit.dialog.close=Cancel
|
||||
basicproperties.begin.edit.dialog.startdate.help=The begin of the project
|
||||
basicproperties.begin.edit.dialog.startdate.label=Begin
|
||||
basicproperties.begin.edit.dialog.submit=Save
|
||||
basicproperties.end.header=End of the project
|
||||
basicproperties.end.edit=Edit
|
||||
basicproperties.end.label=End
|
||||
basicproperties.end.edit.dialog.title=Edit end of the project
|
||||
basicproperties.end.edit.dialog.close=Cancel
|
||||
basicproperties.end.edit.dialog.enddate.help=The end of the project
|
||||
basicproperties.end.edit.dialog.enddate.label=End
|
||||
basicproperties.end.edit.dialog.submit=Save
|
||||
basicproperties.shortdescription.add=Add
|
||||
basicproperties.shortdescription.add.cancel=Cancel
|
||||
basicproperties.shortdescription.add.locale.help=The locale of the localized short description.
|
||||
basicproperties.shortdescription.add.locale.label=Locale
|
||||
basicproperties.shortdescription.add.submit=Add
|
||||
basicproperties.shortdescription.add.header=Add a localized short description
|
||||
basicproperties.shortdescription.add.value.help=The localized short description.
|
||||
basicproperties.shortdescription.add.value.label=Short description
|
||||
basicproperties.shortdescription.edit=Edit
|
||||
basicproperties.shortdescription.edit.cancel=Cancel
|
||||
basicproperties.shortdescription.edit.submit=Save
|
||||
basicproperties.shortdescription.edit.header=Edit localized short description
|
||||
basicproperties.shortdescription.edit.value.help=The localized short description.
|
||||
basicproperties.shortdescription.edit.value.label=Short description
|
||||
basicproperties.shortdescription.remove=Remove
|
||||
basicproperties.shortdescription.remove.cancel=Cancel
|
||||
basicproperties.shortdescription.remove.submit=Remove
|
||||
basicproperties.shortdescription.remove.text=Are you sure to remove this localized short description?
|
||||
basicproperties.shortdescription.remove.header=Confirm removal of localized short description
|
||||
basicproperties.shortdescription.header=Short description
|
||||
description_step.header=Project description
|
||||
description.editor.add_variant=Add
|
||||
description.editor.add.locale.help=The locale of the localized description
|
||||
description.editor.header=Description
|
||||
contacts.header=Contacts
|
||||
contacts.add_button.label=Add
|
||||
contacts.type.help=The type of the contact.
|
||||
contacts.type.label=Type
|
||||
contacts.cols.contactable=Contact
|
||||
contacts.cols.type=Type
|
||||
contacts.cols.actions=Actions
|
||||
contacts.edit.label=Edit
|
||||
contacts.edit.title=Add a contact
|
||||
contacts.edit.cancel=Cancel
|
||||
contacts.edit.type.help=The type of the contact.
|
||||
contacts.edit.type.label=Type
|
||||
contacts.edit.submit=Add
|
||||
contacts.delete.label=Remove
|
||||
contacts.delete.cancel=Cancel
|
||||
contacts.delete.confirm=Remove
|
||||
contacts.delete.title=Confirm removal of contact
|
||||
contacts.delete.message=Are you sure to remove the contact {0} of type {1}?
|
||||
memberships.header=Members
|
||||
memberships.add_button.label=Add
|
||||
memberships.role.help=The role of the member in the project.
|
||||
memberships.role.label=Role
|
||||
memberships.status.help=The status of the membership.
|
||||
memberships.status.label=Status
|
||||
memberships.cols.name=Name
|
||||
memberships.cols.role=Role
|
||||
memberships.cols.status=Status
|
||||
memberships.cols.actions=Actions
|
||||
memberships.edit.label=Edit
|
||||
memberships.edit.cancel=Cancel
|
||||
memberships.edit.role.help=The role of the member in the project.
|
||||
memberships.edit.role.label=Role
|
||||
memberships.edit.status.help=The status of the membership.
|
||||
memberships.edit.status.label=Status
|
||||
members.edit.cancel=Cancel
|
||||
members.edit.submit=Save
|
||||
memberships.delete.label=Remove
|
||||
memberships.delete.cancel=Cancel
|
||||
memberships.delete.confirm=Remove
|
||||
memberships.delete.title=Confirm removal of member
|
||||
memberships.delete.message=Are your sure to remove the member {0} from the project?
|
||||
funding_step.header=Funding
|
||||
funding.editor.add_variant=Add
|
||||
funding.editor.add.locale.help=The locale of the localized text.
|
||||
funding.editor.header=Funding
|
||||
fundingvolume.editor.add_variant=Add
|
||||
fundingvolume.editor.add.locale.help=The locale of the localized text.
|
||||
fundingvolume.editor.header=Volume of funding
|
||||
sponsoring.header=Sponsoring
|
||||
sponsoring.add_button.label=Add
|
||||
sponsoring.fundingcode.help=An optional funding code of the sponsor.
|
||||
sponsoring.fundingcode.label=Funding code
|
||||
sponsoring.cols.sponsor=Organization
|
||||
sponsoring.cols.fundingcode=Funding code
|
||||
sponsoring.cols.actions=Actions
|
||||
sponsoring.edit.label=Edit
|
||||
sponsoring.edit.title=Edit sponsoring
|
||||
sponsoring.edit.cancel=Cancel
|
||||
sponsoring.edit.submit=Save
|
||||
sponsoring.remove.label=Remove
|
||||
sponsoring.remove.cancel=Cancel
|
||||
sponsoring.remove.confirm=Remove
|
||||
sponsoring.remove.title=Remove sponsoring
|
||||
sponsoring.remove.message=Are you sure to remove the sponsoring of {0} from the project?
|
||||
description_step.back=Back
|
||||
description_step.description.header.edit=Edit the description of the project
|
||||
description_step.description.header.view=Project description
|
||||
description_step.edit=Edit project description
|
||||
funding_step.back=Back
|
||||
funding_step.fundingtext.header.edit=Edit description of funding
|
||||
fundingtext.editor.header=Funding
|
||||
funding_step.fundingtext.header.view=Description of funding
|
||||
funding_step.edit=Edit
|
||||
funding_step.fundingvolume.header.edit=Edit description of volume of funding
|
||||
funding_step.fundingvolume.header.view=Description of the volume of funding
|
||||
|
|
@ -0,0 +1,148 @@
|
|||
|
||||
sciproject.edit.denied=Zugriff verweigert
|
||||
members.status.active=Aktiv
|
||||
members.status.associated=Assoziert
|
||||
members.status.former=Ehemalig
|
||||
basicproperties.header=Basiseigenschaften des Projektes {0} bearbeiten
|
||||
basicproperties.name.header=Name
|
||||
basicproperties.name.edit=Name bearbeiten
|
||||
basicproperties.name.edit.title=Name bearbeiten
|
||||
basicproperties.name.edit.close=Abbrechen
|
||||
basicproperties.name.help=Der Name des Projektes. Wird auch als URL fragment verwendet.
|
||||
basicproperties.name.label=Name
|
||||
basicproperties.name.edit.submit=Speichern
|
||||
basicproperties.title.add=Lokalisierten Titel hinzuf\u00fcgen
|
||||
basicproperties.title.add.cancel=Abbrechen
|
||||
basicproperties.title.add.locale.help=Die Sprache des lokalisierten Titels.
|
||||
basicproperties.title.add.locale.label=Sprache
|
||||
basicproperties.title.add.submit=Hinzuf\u00fcgen
|
||||
basicproperties.title.add.header=Lokalisierten Titel hinzuf\u00fcgen
|
||||
basicproperties.title.add.value.help=Der lokalisierte Titel.
|
||||
basicproperties.title.add.value.label=Titel
|
||||
basicproperties.title.edit=Bearbeiten
|
||||
basicproperties.title.edit.cancel=Abbrechen
|
||||
basicproperties.title.edit.submit=Speichern
|
||||
basicproperties.title.edit.header=Lokalisierten Titel bearbeiten
|
||||
basicproperties.title.edit.value.help=Der lokalisierte Titel.
|
||||
basicproperties.title.edit.value.label=Titel
|
||||
basicproperties.title.remove=Entfernen
|
||||
basicproperties.title.remove.cancel=Abbrechen
|
||||
basicproperties.title.remove.submit=Entfernen
|
||||
basicproperties.title.remove.text=Sind Sie sicher dass Sie diesen lokalisierten Titel entfernen wollen?
|
||||
basicproperties.title.remove.header=Entfernen eines lokalisierten Titels entfernen
|
||||
basicproperties.title.header=Titel
|
||||
basicproperties.begin.header=Beginn des Projektes
|
||||
basicproperties.begin.edit=Bearbeiten
|
||||
basicproperties.begin.label=Beginn
|
||||
basicproperties.begin.edit.dialog.title=Bearbeiten
|
||||
basicproperties.begin.edit.dialog.close=Abbrechen
|
||||
basicproperties.begin.edit.dialog.startdate.help=Der Beginn des Projektes
|
||||
basicproperties.begin.edit.dialog.startdate.label=Beginn
|
||||
basicproperties.begin.edit.dialog.submit=Speichern
|
||||
basicproperties.end.header=Ende des Projektes
|
||||
basicproperties.end.edit=Bearbeiten
|
||||
basicproperties.end.label=Ende
|
||||
basicproperties.end.edit.dialog.title=Ende des Projektes bearbeiten
|
||||
basicproperties.end.edit.dialog.close=Abbrechen
|
||||
basicproperties.end.edit.dialog.enddate.help=Das Ende des Projektes
|
||||
basicproperties.end.edit.dialog.enddate.label=Ende
|
||||
basicproperties.end.edit.dialog.submit=Speichern
|
||||
basicproperties.shortdescription.add=Hinzuf\u00fcgen
|
||||
basicproperties.shortdescription.add.cancel=Abbrechen
|
||||
basicproperties.shortdescription.add.locale.help=Die Sprache der lokaliserten Kurzbeschreibung.
|
||||
basicproperties.shortdescription.add.locale.label=Sprache
|
||||
basicproperties.shortdescription.add.submit=Hinzuf\u00fcgen
|
||||
basicproperties.shortdescription.add.header=Eine lokaliserte Kurzbeschreibung hinzuf\u00fcgen
|
||||
basicproperties.shortdescription.add.value.help=Die lokalisierte Kurzbeschreibung.
|
||||
basicproperties.shortdescription.add.value.label=Kurzbeschreibung
|
||||
basicproperties.shortdescription.edit=Bearbeiten
|
||||
basicproperties.shortdescription.edit.cancel=Abbrechen
|
||||
basicproperties.shortdescription.edit.submit=Speichern
|
||||
basicproperties.shortdescription.edit.header=Lokalisierte Kurzbeschreibung bearbeiten
|
||||
basicproperties.shortdescription.edit.value.help=Die lokalisierte Kurzbeschreibung.
|
||||
basicproperties.shortdescription.edit.value.label=Kurzbeschreibung
|
||||
basicproperties.shortdescription.remove=Entfernen
|
||||
basicproperties.shortdescription.remove.cancel=Abbrechen
|
||||
basicproperties.shortdescription.remove.submit=Entfernen
|
||||
basicproperties.shortdescription.remove.text=Sind Sie sicher, dass Sie diese lokaliserte Kurzbeschreibung entfernen wollen?
|
||||
basicproperties.shortdescription.remove.header=Entfernen einer lokalisierten Kurzbeschreibung best\u00e4tigen
|
||||
basicproperties.shortdescription.header=Kurzbeschreibung
|
||||
description_step.header=Projektbeschreibung
|
||||
description.editor.add_variant=Hinzuf\u00fcgen
|
||||
description.editor.add.locale.help=Die Sprache der lokalisierten Beschreibung
|
||||
description.editor.header=Beschreibung
|
||||
contacts.header=Kontakte
|
||||
contacts.add_button.label=Hinzuf\u00fcgen
|
||||
contacts.type.help=Der Typ des Kontaktes.
|
||||
contacts.type.label=Typ
|
||||
contacts.cols.contactable=Kontakt
|
||||
contacts.cols.type=Typ
|
||||
contacts.cols.actions=Aktionen
|
||||
contacts.edit.label=Bearbeiten
|
||||
contacts.edit.title=Kontakt hinzuf\u00fcgen
|
||||
contacts.edit.cancel=Abbrechen
|
||||
contacts.edit.type.help=Der Typ des Kontaktes.
|
||||
contacts.edit.type.label=Typ
|
||||
contacts.edit.submit=Hinzuf\u00fcgen
|
||||
contacts.delete.label=Entfernen
|
||||
contacts.delete.cancel=Abbrechen
|
||||
contacts.delete.confirm=Entfernen
|
||||
contacts.delete.title=Entfernen des Kontaktes best\u00e4tigen
|
||||
contacts.delete.message=Sind Sie sicher, dass Sie den Kontakt {0} vom Type {1} entfernen wollen?
|
||||
memberships.header=Mitglieder
|
||||
memberships.add_button.label=Entfernen
|
||||
memberships.role.help=Die Rolle des Mitglieds im Projekt.
|
||||
memberships.role.label=Rolle
|
||||
memberships.status.help=Der Status der Mitgliedschaft.
|
||||
memberships.status.label=Status
|
||||
memberships.cols.name=Name
|
||||
memberships.cols.role=Rolle
|
||||
memberships.cols.status=Status
|
||||
memberships.cols.actions=Aktionen
|
||||
memberships.edit.label=Bearbeiten
|
||||
memberships.edit.cancel=Abbrechen
|
||||
memberships.edit.role.help=Die Rolle des Mitglieds im Projekt.
|
||||
memberships.edit.role.label=Rolle
|
||||
memberships.edit.status.help=Der Status der Mitgliedschaft.
|
||||
memberships.edit.status.label=Status
|
||||
members.edit.cancel=Abbrechen
|
||||
members.edit.submit=Speichern
|
||||
memberships.delete.label=Entfernen
|
||||
memberships.delete.cancel=Abbrechen
|
||||
memberships.delete.confirm=Entfernen
|
||||
memberships.delete.title=Entfernen eines Mitglieds best\u00e4tigen
|
||||
memberships.delete.message=Sind Sie sicher, dass Sie das Mitglied {0} aus dem Projekt entfernen wollen?
|
||||
funding_step.header=Finanzierung
|
||||
funding.editor.add_variant=Hinzuf\u00fcgen
|
||||
funding.editor.add.locale.help=The Sprache des lokalisierten Textes.
|
||||
funding.editor.header=Finanzierung
|
||||
fundingvolume.editor.add_variant=Hinzuf\u00fcgen
|
||||
fundingvolume.editor.add.locale.help=The Sprache des lokalisierten Textes.
|
||||
fundingvolume.editor.header=Volumen der Finanzierung
|
||||
sponsoring.header=Finanziert durch
|
||||
sponsoring.add_button.label=Hinzuf\u00fcgen
|
||||
sponsoring.fundingcode.help=Eine optinale Angabe zur Finanzierung
|
||||
sponsoring.fundingcode.label=Bezeichnung
|
||||
sponsoring.cols.sponsor=Organisation
|
||||
sponsoring.cols.fundingcode=Bezeichnung
|
||||
sponsoring.cols.actions=Aktionen
|
||||
sponsoring.edit.label=Bearbeiten
|
||||
sponsoring.edit.title=Finanzierung bearbeiten
|
||||
sponsoring.edit.cancel=Abbrechen
|
||||
sponsoring.edit.submit=Speichern
|
||||
sponsoring.remove.label=Entfernen
|
||||
sponsoring.remove.cancel=Abbrechen
|
||||
sponsoring.remove.confirm=Entfernen
|
||||
sponsoring.remove.title=Finanzierung entfernen
|
||||
sponsoring.remove.message=Sind Sie sicher dass Sie die Finanzierung durch {0} aus dem Projekt entfernen wollen?
|
||||
description_step.back=Zur\u00fcck
|
||||
description_step.description.header.edit=Projektbeschreibung bearbeiten
|
||||
description_step.description.header.view=Projektbeschreibung
|
||||
description_step.edit=Projektbeschreibung bearbeiten
|
||||
funding_step.back=Zur\u00fcck
|
||||
funding_step.fundingtext.header.edit=Beschreibung der Finanzierung bearbeiten
|
||||
fundingtext.editor.header=Finanzierung
|
||||
funding_step.fundingtext.header.view=Beschreibung der Finanzierung
|
||||
funding_step.edit=Bearbeiten
|
||||
funding_step.fundingvolume.header.edit=Beschreibung des Volumens der Finanzierung bearbeiten
|
||||
funding_step.fundingvolume.header.view=Beschreibung des Volumens der Finanzierung
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
import { CmsEditorBuilder, CmsEditor} from @librecms/ccm-cms;
|
||||
|
||||
document.addEventListener("DOMContentLoaded", (event) => {
|
||||
const editorElem = document.querySelector("#sciproject-description-editor");
|
||||
|
||||
if (editorElem) {
|
||||
const saveUrl = editorElem.getAttribute("data-save-url");
|
||||
const variantUrl = editorElem.getAttribute("data-variant-url");
|
||||
|
||||
if (!saveUrl) {
|
||||
console.error("saveUrl is null");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!variantUrl) {
|
||||
console.error("variantUrl is null");
|
||||
return;
|
||||
}
|
||||
|
||||
const builder = new CmsEditorBuilder(
|
||||
editorElem as HTMLElement,
|
||||
saveUrl,
|
||||
variantUrl
|
||||
);
|
||||
|
||||
builder
|
||||
.buildEditor()
|
||||
.then((editor) => {
|
||||
const submitButton = document.querySelector(
|
||||
".cms-editor-save-button"
|
||||
);
|
||||
|
||||
if (submitButton) {
|
||||
submitButton.addEventListener("click", (event) => {
|
||||
event.preventDefault();
|
||||
|
||||
console.log("HTML output of editor: ");
|
||||
console.log(editor.getEditor().getHTML());
|
||||
});
|
||||
} else {
|
||||
console.error("Save button not found.")
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error(error);
|
||||
console.trace(error);
|
||||
});
|
||||
} else {
|
||||
console.error("Editor element not found.")
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
import { CmsEditorBuilder, CmsEditor} from "@librecms/ccm-cms";
|
||||
|
||||
document.addEventListener("DOMContentLoaded", (event) => {
|
||||
const editorElem = document.querySelector("#sciproject-fundingtext-editor");
|
||||
|
||||
if (editorElem) {
|
||||
const saveUrl = editorElem.getAttribute("data-save-url");
|
||||
const variantUrl = editorElem.getAttribute("data-variant-url");
|
||||
|
||||
if (!saveUrl) {
|
||||
console.error("saveUrl is null");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!variantUrl) {
|
||||
console.error("variantUrl is null");
|
||||
return;
|
||||
}
|
||||
|
||||
const builder = new CmsEditorBuilder(
|
||||
editorElem as HTMLElement,
|
||||
saveUrl,
|
||||
variantUrl
|
||||
);
|
||||
|
||||
builder
|
||||
.buildEditor()
|
||||
.then((editor) => {
|
||||
const submitButton = document.querySelector(
|
||||
".cms-editor-save-button"
|
||||
);
|
||||
|
||||
if (submitButton) {
|
||||
submitButton.addEventListener("click", (event) => {
|
||||
event.preventDefault();
|
||||
|
||||
console.log("HTML output of editor: ");
|
||||
console.log(editor.getEditor().getHTML());
|
||||
});
|
||||
} else {
|
||||
console.error("Save button not found.")
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error(error);
|
||||
console.trace(error);
|
||||
});
|
||||
} else {
|
||||
console.error("Editor element not found.")
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
import { CmsEditorBuilder, CmsEditor} from "@librecms/ccm-cms";
|
||||
|
||||
document.addEventListener("DOMContentLoaded", (event) => {
|
||||
const editorElem = document.querySelector("#sciproject-funding-volume-editor");
|
||||
|
||||
if (editorElem) {
|
||||
const saveUrl = editorElem.getAttribute("data-save-url");
|
||||
const variantUrl = editorElem.getAttribute("data-variant-url");
|
||||
|
||||
if (!saveUrl) {
|
||||
console.error("saveUrl is null");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!variantUrl) {
|
||||
console.error("variantUrl is null");
|
||||
return;
|
||||
}
|
||||
|
||||
const builder = new CmsEditorBuilder(
|
||||
editorElem as HTMLElement,
|
||||
saveUrl,
|
||||
variantUrl
|
||||
);
|
||||
|
||||
builder
|
||||
.buildEditor()
|
||||
.then((editor) => {
|
||||
const submitButton = document.querySelector(
|
||||
".cms-editor-save-button"
|
||||
);
|
||||
|
||||
if (submitButton) {
|
||||
submitButton.addEventListener("click", (event) => {
|
||||
event.preventDefault();
|
||||
|
||||
console.log("HTML output of editor: ");
|
||||
console.log(editor.getEditor().getHTML());
|
||||
});
|
||||
} else {
|
||||
console.error("Save button not found.")
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error(error);
|
||||
console.trace(error);
|
||||
});
|
||||
} else {
|
||||
console.error("Editor element not found.")
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,148 @@
|
|||
import Sortable, { SortableEvent } from "sortablejs";
|
||||
|
||||
let membersSortable: Sortable;
|
||||
|
||||
document.addEventListener("DOMContentLoaded", (event) => {
|
||||
const members = document.querySelector("members-list");
|
||||
|
||||
if (members) {
|
||||
membersSortable = initMembers(members as HTMLElement);
|
||||
}
|
||||
|
||||
const saveOrderButtons = document.querySelectorAll(
|
||||
".members-save-order-button"
|
||||
);
|
||||
for (let i = 0; i < saveOrderButtons.length; i++) {
|
||||
saveOrderButtons[i].addEventListener("click", saveOrder);
|
||||
}
|
||||
});
|
||||
|
||||
function initMembers(members: HTMLElement): Sortable {
|
||||
return new Sortable(
|
||||
members,
|
||||
{
|
||||
animation: 150,
|
||||
group: "members-list",
|
||||
handle: ".member-sort-handle",
|
||||
onEnd: enableSaveButton
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
function enableSaveButton(event: SortableEvent) {
|
||||
console.log("Enabling save buttons...");
|
||||
const saveOrderButtons = document.querySelectorAll(
|
||||
".members-save-order-button"
|
||||
);
|
||||
for (let i = 0; i < saveOrderButtons.length; i++) {
|
||||
const saveOrderButton: HTMLButtonElement = saveOrderButtons[
|
||||
i
|
||||
] as HTMLButtonElement;
|
||||
saveOrderButton.disabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
function saveOrder() {
|
||||
const baseUrl = cmsMedia.getAttribute("data-baseUrl");
|
||||
if (!baseUrl) {
|
||||
showGeneralError();
|
||||
throw Error(
|
||||
"data-baseUrl attribute on cms-media-lists container is missing or empty."
|
||||
);
|
||||
}
|
||||
|
||||
console.log("spinner on");
|
||||
const saveOrderButtons = document.querySelectorAll(".members-save-order-button");
|
||||
for (let i = 0; i < saveOrderButtons.length; i++) {
|
||||
const saveOrderButton: HTMLButtonElement = saveOrderButtons[
|
||||
i
|
||||
] as HTMLButtonElement;
|
||||
saveOrderButton.disabled = true;
|
||||
const saveIcon = saveOrderButton.querySelector(".save-icon");
|
||||
const spinner = saveOrderButton.querySelector(".save-spinner");
|
||||
saveIcon?.classList.toggle("d-none");
|
||||
spinner?.classList.toggle("d-none");
|
||||
}
|
||||
|
||||
console.log("fetch POST");
|
||||
const headers = new Headers();
|
||||
headers.append("Content-Type", "application/json");
|
||||
fetch(baseUrl, {
|
||||
credentials: "include",
|
||||
body: JSON.stringify(membersSortable.toArray()),
|
||||
headers,
|
||||
method: "POST"
|
||||
})
|
||||
.then(response => {
|
||||
if (response.ok) {
|
||||
for(let i = 0; i < saveOrderButtons.length; i++) {
|
||||
const saveOrderButton: HTMLButtonElement = saveOrderButtons[
|
||||
i
|
||||
] as HTMLButtonElement;
|
||||
// saveOrderButton.disabled = true;
|
||||
const saveIcon =
|
||||
saveOrderButton.querySelector(".save-icon");
|
||||
const spinner =
|
||||
saveOrderButton.querySelector(".save-spinner");
|
||||
saveIcon?.classList.toggle("d-none");
|
||||
spinner?.classList.toggle("d-none");
|
||||
}
|
||||
} else {
|
||||
showSaveError();
|
||||
for (let i = 0; i < saveOrderButtons.length; i++) {
|
||||
const saveOrderButton: HTMLButtonElement = saveOrderButtons[
|
||||
i
|
||||
] as HTMLButtonElement;
|
||||
saveOrderButton.disabled = false;
|
||||
const saveIcon =
|
||||
saveOrderButton.querySelector(".save-icon");
|
||||
const spinner =
|
||||
saveOrderButton.querySelector(".save-spinner");
|
||||
saveIcon?.classList.toggle("d-none");
|
||||
spinner?.classList.toggle("d-none");
|
||||
}
|
||||
throw Error(
|
||||
`Failed to save media order. Response status: ${response.status}, statusText: ${response.statusText}`
|
||||
);
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
showSaveError();
|
||||
for (let i = 0; i < saveOrderButtons.length; i++) {
|
||||
const saveOrderButton: HTMLButtonElement = saveOrderButtons[
|
||||
i
|
||||
] as HTMLButtonElement;
|
||||
saveOrderButton.disabled = false;
|
||||
const saveIcon = saveOrderButton.querySelector(".save-icon");
|
||||
const spinner = saveOrderButton.querySelector(".save-spinner");
|
||||
saveIcon?.classList.toggle("d-none");
|
||||
spinner?.classList.toggle("d-none");
|
||||
}
|
||||
throw new Error(`Failed to save media order: ${error}`);
|
||||
});
|
||||
}
|
||||
|
||||
function showGeneralError(): void {
|
||||
const alertTemplate = document.querySelector(
|
||||
"#member-sort-error-general"
|
||||
) as HTMLTemplateElement;
|
||||
const alert = alertTemplate.content.cloneNode(true) as Element;
|
||||
|
||||
const container = document.querySelector("#messages");
|
||||
if (container) {
|
||||
container.appendChild(alert);
|
||||
}
|
||||
}
|
||||
|
||||
function showSaveError(): void {
|
||||
const alertTemplate = document.querySelector(
|
||||
"#member-sort-error-save"
|
||||
) as HTMLTemplateElement;
|
||||
const alert = alertTemplate.content.cloneNode(true) as Element;
|
||||
|
||||
const container = document.querySelector("#messages");
|
||||
if (container) {
|
||||
container.appendChild(alert);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"declaration": true,
|
||||
"lib": [
|
||||
"DOM",
|
||||
"ES2016"
|
||||
],
|
||||
"module": "commonjs",
|
||||
"moduleResolution": "node",
|
||||
"outDir": "target/generated-resources/assets/@content-sections",
|
||||
"sourceMap": true,
|
||||
"strict": true,
|
||||
"target": "ES5"
|
||||
},
|
||||
"include": [
|
||||
"src/main/typescript/**/*"
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
module.exports = {
|
||||
mode: "development",
|
||||
devtool: "source-map",
|
||||
optimization: {
|
||||
chunkIds: false
|
||||
},
|
||||
entry: {
|
||||
"sciproject-description": "./src/main/typescript/sciproject/sciproject-description.ts",
|
||||
"sciproject-contacts": "./src/main/typescript/sciproject/sciproject-contacts.ts",
|
||||
"sciproject-members": "./src/main/typescript/sciproject/sciproject-members.ts",
|
||||
"sciproject-sponsoring": "./src/main/typescript/sciproject/sciproject-sponsoring.ts"
|
||||
},
|
||||
output: {
|
||||
filename: "[name].js",
|
||||
path: __dirname + "/target/generated-resources/assets/@sciproject"
|
||||
},
|
||||
resolve: {
|
||||
extensions: [".tsx", ".ts", ".js", ".json"]
|
||||
},
|
||||
module: {
|
||||
rules: [
|
||||
// all files with a '.ts' or '.tsx' extension will be handled by 'ts-loader'
|
||||
{ test: /\.tsx?$/, use: ["ts-loader"], exclude: /node_modules/ }
|
||||
]
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue