Next part of UI for SciProject

pull/1/head
Jens Pelzetter 2022-04-18 17:38:15 +02:00
parent 2ba30e3e15
commit 1129e7e61d
26 changed files with 1260 additions and 257 deletions

View File

@ -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
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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));
}
}

View File

@ -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;
}
}

View File

@ -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));
}
}

View File

@ -106,6 +106,8 @@ public class SciProjectMembershipModel {
builder.append(" ");
builder.append(suffix);
}
return builder.toString();
}
public String getGivenName() {

View File

@ -184,7 +184,7 @@ public class SciProjectPropertiesStep extends AbstractMvcAuthoringStep {
return documentUi.showAccessDenied(
getContentSection(),
getDocument(),
sciProjectMessageBundle.getMessage("project.edit.denied")
sciProjectMessageBundle.getMessage("sciproject.edit.denied")
);
}
}

View File

@ -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;
}
}

View File

@ -0,0 +1,44 @@
<!DOCTYPE html [<!ENTITY times '&#215;'>]>
<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>

View File

@ -0,0 +1,37 @@
<!DOCTYPE html [<!ENTITY times '&#215;'>]>
<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>

View File

@ -0,0 +1,44 @@
<!DOCTYPE html [<!ENTITY times '&#215;'>]>
<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>

View File

@ -0,0 +1,37 @@
<!DOCTYPE html [<!ENTITY times '&#215;'>]>
<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>

View File

@ -0,0 +1,44 @@
<!DOCTYPE html [<!ENTITY times '&#215;'>]>
<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>

View File

@ -0,0 +1,37 @@
<!DOCTYPE html [<!ENTITY times '&#215;'>]>
<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>

View File

@ -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}"
/>

View File

@ -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>

View File

@ -0,0 +1,164 @@
<!DOCTYPE html [<!ENTITY times '&#215;'>]>
<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>

View File

@ -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

View File

@ -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

View File

@ -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.")
}
}

View File

@ -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.")
}
}

View File

@ -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.")
}
}

View File

@ -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);
}
}

View File

@ -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/**/*"
]
}

View File

@ -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/ }
]
}
}