Bugfixes for RelatedInfoStep

pull/10/head
Jens Pelzetter 2021-07-22 21:17:26 +02:00
parent 30320485d4
commit 80cf9143ee
11 changed files with 234 additions and 99 deletions

View File

@ -21,6 +21,7 @@ package org.librecms.ui.contentsections.assets;
import org.libreccm.api.Identifier; import org.libreccm.api.Identifier;
import org.libreccm.api.IdentifierParser; import org.libreccm.api.IdentifierParser;
import org.libreccm.security.AuthorizationRequired; import org.libreccm.security.AuthorizationRequired;
import org.libreccm.ui.BaseUrl;
import org.librecms.assets.ExternalAudioAsset; import org.librecms.assets.ExternalAudioAsset;
import org.librecms.assets.LegalMetadata; import org.librecms.assets.LegalMetadata;
import org.librecms.contentsection.AssetRepository; import org.librecms.contentsection.AssetRepository;
@ -69,6 +70,9 @@ public class ExternalAudioAssetEditStep extends BookmarkEditStep {
@Inject @Inject
private AssetUi assetUi; private AssetUi assetUi;
@Inject
private BaseUrl baseUrl;
@Inject @Inject
private ExternalAudioAssetEditStepModel editStepModel; private ExternalAudioAssetEditStepModel editStepModel;
@ -96,16 +100,7 @@ public class ExternalAudioAssetEditStep extends BookmarkEditStep {
getExternalAudioAsset().getLegalMetadata() getExternalAudioAsset().getLegalMetadata()
); );
final StringBuilder baseUrlBuilder = new StringBuilder(); editStepModel.setBaseUrl(baseUrl.getBaseUrl(request));
editStepModel.setBaseUrl(
baseUrlBuilder
.append(request.getScheme())
.append("://")
.append(request.getServerName())
.append(addServerPortToBaseUrl())
.append(addContextPathToBaseUrl())
.toString()
);
} else { } else {
throw new AssetNotFoundException( throw new AssetNotFoundException(
assetUi.showAssetNotFound( assetUi.showAssetNotFound(
@ -229,21 +224,4 @@ public class ExternalAudioAssetEditStep extends BookmarkEditStep {
return "org/librecms/ui/contentsection/assets/external-audio-asset/legal-metadata-not-found.xhtml"; return "org/librecms/ui/contentsection/assets/external-audio-asset/legal-metadata-not-found.xhtml";
} }
private String addServerPortToBaseUrl() {
if (request.getServerPort() == 80 || request.getServerPort() == 443) {
return "";
} else {
return String.format(":%d", request.getServerPort());
}
}
private String addContextPathToBaseUrl() {
if (request.getServletContext().getContextPath() == null
|| request.getServletContext().getContextPath().isEmpty()) {
return "/";
} else {
return request.getServletContext().getContextPath();
}
}
} }

View File

@ -26,7 +26,6 @@ import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import org.librecms.ui.contentsections.documents.ItemAttachmentDto;
/** /**
* A data transfer object used by the template for the listing of the * A data transfer object used by the template for the listing of the

View File

@ -16,7 +16,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA * MA 02110-1301 USA
*/ */
package org.librecms.ui.contentsections.documents; package org.librecms.ui.contentsections.documents.relatedinfo;
import org.libreccm.l10n.GlobalizationHelper; import org.libreccm.l10n.GlobalizationHelper;
import org.librecms.contentsection.ItemAttachment; import org.librecms.contentsection.ItemAttachment;
@ -49,6 +49,11 @@ public class ItemAttachmentDto {
*/ */
private String assetType; private String assetType;
/**
* The UUID of the attachment asset.
*/
private String assetUuid;
/** /**
* The title of the asset assigned to an content item. This value is * The title of the asset assigned to an content item. This value is
* determined from the title of the asset using {@link GlobalizationHelper#getValueFromLocalizedString(org.libreccm.l10n.LocalizedString) * determined from the title of the asset using {@link GlobalizationHelper#getValueFromLocalizedString(org.libreccm.l10n.LocalizedString)
@ -106,8 +111,16 @@ public class ItemAttachmentDto {
return internalLink; return internalLink;
} }
public void setLink(final boolean internalLink) { public void setInternalLink(final boolean internalLink) {
this.internalLink = internalLink; this.internalLink = internalLink;
} }
public String getAssetUuid() {
return assetUuid;
}
public void setAssetUuid(final String assetUuid) {
this.assetUuid = assetUuid;
}
} }

View File

@ -42,6 +42,8 @@ import javax.inject.Named;
@Named("CmsLinkDetailsModel") @Named("CmsLinkDetailsModel")
public class LinkDetailsModel { public class LinkDetailsModel {
private String baseUrl;
/** /**
* The identifier of the {@link AttachmentList} of the link. * The identifier of the {@link AttachmentList} of the link.
*/ */
@ -64,6 +66,8 @@ public class LinkDetailsModel {
private String linkType; private String linkType;
private Map<String, String> linkTypes;
/** /**
* The UUID of the target item of the link. * The UUID of the target item of the link.
*/ */
@ -87,6 +91,14 @@ public class LinkDetailsModel {
*/ */
private String targetItemTitle; private String targetItemTitle;
public String getBaseUrl() {
return baseUrl;
}
public void setBaseUrl(final String baseUrl) {
this.baseUrl = baseUrl;
}
public String getListIdentifier() { public String getListIdentifier() {
return listIdentifier; return listIdentifier;
} }
@ -216,4 +228,12 @@ public class LinkDetailsModel {
this.targetItemTitle = targetItemTitle; this.targetItemTitle = targetItemTitle;
} }
public Map<String, String> getLinkTypes() {
return Collections.unmodifiableMap(linkTypes);
}
public void setLinkTypes(final Map<String, String> linkTypes) {
this.linkTypes = new HashMap<>(linkTypes);
}
} }

View File

@ -22,8 +22,9 @@ import org.librecms.ui.contentsections.ContentSectionNotFoundException;
import org.libreccm.api.Identifier; import org.libreccm.api.Identifier;
import org.libreccm.api.IdentifierParser; import org.libreccm.api.IdentifierParser;
import org.libreccm.l10n.GlobalizationHelper; import org.libreccm.l10n.GlobalizationHelper;
import org.libreccm.l10n.LocalizedTextsUtil;
import org.libreccm.security.PermissionChecker; import org.libreccm.security.PermissionChecker;
import org.librecms.assets.AssetTypeInfo; import org.libreccm.ui.BaseUrl;
import org.librecms.assets.AssetTypesManager; import org.librecms.assets.AssetTypesManager;
import org.librecms.assets.RelatedLink; import org.librecms.assets.RelatedLink;
import org.librecms.contentsection.Asset; import org.librecms.contentsection.Asset;
@ -58,14 +59,17 @@ import org.librecms.ui.contentsections.documents.AbstractMvcAuthoringStep;
import org.librecms.ui.contentsections.documents.DefaultAuthoringStepConstants; import org.librecms.ui.contentsections.documents.DefaultAuthoringStepConstants;
import org.librecms.ui.contentsections.documents.DocumentNotFoundException; import org.librecms.ui.contentsections.documents.DocumentNotFoundException;
import org.librecms.ui.contentsections.documents.DocumentUi; import org.librecms.ui.contentsections.documents.DocumentUi;
import org.librecms.ui.contentsections.documents.ItemAttachmentDto;
import org.librecms.ui.contentsections.documents.MvcAuthoringStepDef; import org.librecms.ui.contentsections.documents.MvcAuthoringStepDef;
import org.librecms.ui.contentsections.documents.MvcAuthoringSteps; import org.librecms.ui.contentsections.documents.MvcAuthoringSteps;
import java.util.Collections; import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.core.Context;
/** /**
* Authoring step for managing the {@link AttachmentList} and * Authoring step for managing the {@link AttachmentList} and
* {@link ItemAttachment}s assigned to a {@link ContentItem}. * {@link ItemAttachment}s assigned to a {@link ContentItem}.
@ -129,9 +133,15 @@ public class RelatedInfoStep extends AbstractMvcAuthoringStep {
@Inject @Inject
private AttachmentListRepository listRepo; private AttachmentListRepository listRepo;
@Inject
private BaseUrl baseUrl;
@Inject @Inject
private DocumentUi documentUi; private DocumentUi documentUi;
@Context
private HttpServletRequest request;
/** /**
* Model for the details view of an internal {@link RelatedLink}. * Model for the details view of an internal {@link RelatedLink}.
*/ */
@ -1153,9 +1163,28 @@ public class RelatedInfoStep extends AbstractMvcAuthoringStep {
link.getTargetItem().getUuid() link.getTargetItem().getUuid()
); );
} else { } else {
linkDetailsModel.setLinkType(""); linkDetailsModel.setLinkType("--none--");
} }
linkDetailsModel.setBaseUrl(baseUrl.getBaseUrl(request));
final LocalizedTextsUtil textsUtil = globalizationHelper
.getLocalizedTextsUtil(DefaultAuthoringStepConstants.BUNDLE);
final Map<String, String> linkTypes = new LinkedHashMap<>();
linkTypes.put(
"--none--",
textsUtil.getText("relatedinfo.links.type.none_selected")
);
linkTypes.put(
"external",
textsUtil.getText("relatedinfo.links.type.external")
);
linkTypes.put(
"internal",
textsUtil.getText("relatedinfo.links.type.internal")
);
linkDetailsModel.setLinkTypes(linkTypes);
linkDetailsModel.setTitle( linkDetailsModel.setTitle(
link link
.getTitle() .getTitle()
@ -1352,7 +1381,11 @@ public class RelatedInfoStep extends AbstractMvcAuthoringStep {
assetRepo.save(link); assetRepo.save(link);
return buildRedirectPathForStep( return buildRedirectPathForStep(
String.format("/attachmentlists/%s/@details", list.getName()) String.format(
"/attachmentlists/%s/links/%s/@details",
list.getName(),
link.getUuid()
)
); );
} else { } else {
return documentUi.showAccessDenied( return documentUi.showAccessDenied(
@ -1435,7 +1468,11 @@ public class RelatedInfoStep extends AbstractMvcAuthoringStep {
assetRepo.save(link); assetRepo.save(link);
return buildRedirectPathForStep( return buildRedirectPathForStep(
String.format("/attachmentlists/%s/@details", list.getName()) String.format(
"/attachmentlists/%s/links/%s/@details",
list.getName(),
link.getUuid()
)
); );
} else { } else {
return documentUi.showAccessDenied( return documentUi.showAccessDenied(
@ -1516,7 +1553,11 @@ public class RelatedInfoStep extends AbstractMvcAuthoringStep {
assetRepo.save(link); assetRepo.save(link);
return buildRedirectPathForStep( return buildRedirectPathForStep(
String.format("/attachmentlists/%s/@details", list.getName()) String.format(
"/attachmentlists/%s/links/%s/@details",
list.getName(),
link.getUuid()
)
); );
} else { } else {
return documentUi.showAccessDenied( return documentUi.showAccessDenied(
@ -1945,25 +1986,39 @@ public class RelatedInfoStep extends AbstractMvcAuthoringStep {
final ItemAttachment<?> itemAttachment final ItemAttachment<?> itemAttachment
) { ) {
final ItemAttachmentDto dto = new ItemAttachmentDto(); final ItemAttachmentDto dto = new ItemAttachmentDto();
final AssetTypeInfo assetTypeInfo = assetTypesManager
.getAssetTypeInfo(itemAttachment.getAsset().getClass());
dto.setAssetType( dto.setAssetType(
globalizationHelper Optional
.getLocalizedTextsUtil(assetTypeInfo.getLabelBundle()) .ofNullable(itemAttachment.getAsset())
.getText(assetTypeInfo.getLabelKey()) .map(Asset::getClass)
.map(clazz -> assetTypesManager.getAssetTypeInfo(clazz))
.map(
info -> globalizationHelper.getLocalizedTextsUtil(
info.getLabelBundle()).getText(info.getLabelKey())
).orElse("")
);
dto.setAssetUuid(
Optional
.ofNullable(itemAttachment.getAsset())
.map(Asset::getUuid)
.orElse(null)
); );
dto.setAttachmentId(itemAttachment.getAttachmentId()); dto.setAttachmentId(itemAttachment.getAttachmentId());
dto.setLink( dto.setInternalLink(
itemAttachment.getAsset() instanceof RelatedLink itemAttachment.getAsset() != null
&& itemAttachment.getAsset() instanceof RelatedLink
&& ((RelatedLink) itemAttachment.getAsset()).getTargetItem() && ((RelatedLink) itemAttachment.getAsset()).getTargetItem()
!= null != null
); );
dto.setSortKey(itemAttachment.getSortKey()); dto.setSortKey(itemAttachment.getSortKey());
dto.setTitle( dto.setTitle(
globalizationHelper Optional
.getValueFromLocalizedString( .ofNullable(itemAttachment.getAsset())
itemAttachment.getAsset().getTitle() .map(
asset -> globalizationHelper.getValueFromLocalizedString(
asset.getTitle()
) )
)
.orElse("")
); );
dto.setUuid(itemAttachment.getUuid()); dto.setUuid(itemAttachment.getUuid());
return dto; return dto;

View File

@ -24,14 +24,14 @@
addDialogTitle="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.add_dialog.title']}" addDialogTitle="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.add_dialog.title']}"
addDialogValueHelp="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.add.value.help']}" addDialogValueHelp="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.add.value.help']}"
addDialogValueLabel="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.add.value.label']}" addDialogValueLabel="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.add.value.label']}"
addMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@authoringSteps/relatedinfo/attachmentlists/#{CmsLinkDetailsModel.listIdentifier}/links/#{CmsLinkDetailsModel.uuid}/title/@add" addMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@relatedinfo/attachmentlists/#{CmsLinkDetailsModel.listIdentifier}/links/#{CmsLinkDetailsModel.uuid}/title/@add"
editButtonLabel="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.edit.button_label']}" editButtonLabel="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.edit.button_label']}"
editDialogCancelLabel="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.edit.cancel']}" editDialogCancelLabel="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.edit.cancel']}"
editDialogSubmitLabel="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.edit.submit']}" editDialogSubmitLabel="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.edit.submit']}"
editDialogTitle="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.edit_dialog.title']}" editDialogTitle="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.edit_dialog.title']}"
editDialogValueHelp="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.edit.value.help']}" editDialogValueHelp="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.edit.value.help']}"
editDialogValueLabel="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.edit.value.label']}" editDialogValueLabel="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.edit.value.label']}"
editMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@authoringSteps/relatedinfo/attachmentlists/#{CmsLinkDetailsModel.listIdentifier}/links/#{CmsLinkDetailsModel.uuid}/title/@edit" editMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@relatedinfo/attachmentlists/#{CmsLinkDetailsModel.listIdentifier}/links/#{CmsLinkDetailsModel.uuid}/title/@edit"
editorId="link-title-editor" editorId="link-title-editor"
hasUnusedLocales="#{!CmsLinkDetailsModel.unusedTitleLocales.isEmpty()}" hasUnusedLocales="#{!CmsLinkDetailsModel.unusedTitleLocales.isEmpty()}"
headingLevel="3" headingLevel="3"
@ -41,47 +41,21 @@
removeDialogSubmitLabel="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.remove.submit']}" removeDialogSubmitLabel="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.remove.submit']}"
removeDialogText="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.remove.text']}" removeDialogText="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.remove.text']}"
removeDialogTitle="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.remove.title']}" removeDialogTitle="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.remove.title']}"
removeMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@authoringSteps/relatedinfo/attachmentlists/#{CmsLinkDetailsModel.listIdentifier}/links/#{CmsLinkDetailsModel.uuid}/title/@remove" removeMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@relatedinfo/attachmentlists/#{CmsLinkDetailsModel.listIdentifier}/links/#{CmsLinkDetailsModel.uuid}/title/@remove"
title="#{CmsDefaultStepsMessageBundle['relatedinfo.link.details.title_editor.title']}" title="#{CmsDefaultStepsMessageBundle['relatedinfo.link.details.title_editor.title']}"
unusedLocales="#{CmsLinkDetailsModel.unusedTitleLocales}" unusedLocales="#{CmsLinkDetailsModel.unusedTitleLocales}"
values="#{CmsLinkDetailsModel.title}" values="#{CmsLinkDetailsModel.title}"
/> />
<form> <form>
<fieldset aria-describedby="linktype-help" <bootstrap:formGroupSelect
class="form-group"> help="#{CmsDefaultStepsMessageBundle['relatedinfo.links.type.help']}"
<div class="row"> inputId="link-type-select"
<legend class="col-form-label col-sm-2 pt-0">#{CmsDefaultStepsMessageBundle['relatedinfo.links.type.label']}</legend> label="#{CmsDefaultStepsMessageBundle['relatedinfo.links.type.label']}"
<div class="col-sm-10">
<div class="form-check">
<input
checked="#{'internal'.equals(selectedType)}"
class="form-check-input link-type-select"
id="linktype-internal"
name="linkType" name="linkType"
type="radio" options="#{CmsLinkDetailsModel.linkTypes}"
value="internal" selectedOptions="#{[CmsLinkDetailsModel.linkType]}"
/> />
<label for="linktype-internal">#{CmsDefaultStepsMessageBundle['relatedinfo.links.type.internal']}</label>
</div>
<div class="form-check">
<input
checked="#{'external'.equals(selectedType)}"
class="form-check-input link-type-select"
id="linktype-internal"
name="linkType"
type="radio"
value="external"
/>
<label for="linktype-internal">#{CmsDefaultStepsMessageBundle['relatedinfo.links.type.external']}</label>
</div>
</div>
<small class="form-text text-muted"
id="linktype-help">
#{CmsDefaultStepsMessageBundle['relatedinfo.links.type.help']}
</small>
</div>
</fieldset>
</form> </form>
<h3>#{CmsDefaultStepsMessageBundle['relatedinfo.link.details.title.target']}</h3> <h3>#{CmsDefaultStepsMessageBundle['relatedinfo.link.details.title.target']}</h3>
@ -101,7 +75,7 @@
actionUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@relatedinfo/attachmentlists/#{CmsLinkDetailsModel.listIdentifier}/links/#{CmsLinkDetailsModel.uuid}/details/@set-target-bookmark" actionUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@relatedinfo/attachmentlists/#{CmsLinkDetailsModel.listIdentifier}/links/#{CmsLinkDetailsModel.uuid}/details/@set-target-bookmark"
assetType="#{CmsLinkDetailsModel.bookmarkType}" assetType="#{CmsLinkDetailsModel.bookmarkType}"
assetPickerId="bookmark-picker" assetPickerId="bookmark-picker"
baseUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@relatedinfo-service" baseUrl="#{CmsLinkDetailsModel.baseUrl}"
contentSection="#{CmsLinkDetailsModel.sectionName}" contentSection="#{CmsLinkDetailsModel.sectionName}"
formParamName="bookmarkIdentifier" formParamName="bookmarkIdentifier"
/> />

View File

@ -446,7 +446,7 @@
var="attachment"> var="attachment">
<li class="cms-attachment list-group-item mb-3 d-flex justify-content-between" <li class="cms-attachment list-group-item mb-3 d-flex justify-content-between"
data-id="#{attachment.uuid}"> data-id="#{attachment.uuid}">
<div class="cms-attachment-label">#{attachment.name}</div> <div class="cms-attachment-label">#{attachment.title}</div>
<div class="cms-attachment-buttons"> <div class="cms-attachment-buttons">
<button class="btn btn-secondary cms-sort-handle" <button class="btn btn-secondary cms-sort-handle"
type="button"> type="button">
@ -459,7 +459,7 @@
<span class="sr-only">#{CmsDefaultStepsMessageBundle['relatedinfo.attachments.info.button']}"</span> <span class="sr-only">#{CmsDefaultStepsMessageBundle['relatedinfo.attachments.info.button']}"</span>
</button> </button>
<a class="btn btn-primary" <a class="btn btn-primary"
href="#" href="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@relatedinfo/attachmentlists/#{list.name}/links/#{attachment.assetUuid}/@details"
type="button"> type="button">
<bootstrap:svgIcon icon="pen" /> <bootstrap:svgIcon icon="pen" />
<span class="sr-only">#{CmsDefaultStepsMessageBundle['relatedinfo.attachments.edit.button']}"</span> <span class="sr-only">#{CmsDefaultStepsMessageBundle['relatedinfo.attachments.edit.button']}"</span>

View File

@ -204,3 +204,4 @@ relatedinfo.links.type.external=External link
relatedinfo.links.type.help=The type of the link. Internal links are linked with another document (content item). External links link to an URL. relatedinfo.links.type.help=The type of the link. Internal links are linked with another document (content item). External links link to an URL.
relatedinfo.link.details.title.target=Target of the related link relatedinfo.link.details.title.target=Target of the related link
relatedinfo.link.details.title.target.select_bookmark=Select bookmark relatedinfo.link.details.title.target.select_bookmark=Select bookmark
relatedinfo.links.type.none_selected=Please select a link type.

View File

@ -204,3 +204,4 @@ relatedinfo.links.type.external=Externener Link
relatedinfo.links.type.help=Der Typ des Links. Interne Links verweisen auf ein anderes Dokument (Content Item). Externe Links verweisen auf eine URL. relatedinfo.links.type.help=Der Typ des Links. Interne Links verweisen auf ein anderes Dokument (Content Item). Externe Links verweisen auf eine URL.
relatedinfo.link.details.title.target=Ziel des weiterf\u00fchrenden Links relatedinfo.link.details.title.target=Ziel des weiterf\u00fchrenden Links
relatedinfo.link.details.title.target.select_bookmark=Lesezeichen ausw\u00e4hlen relatedinfo.link.details.title.target.select_bookmark=Lesezeichen ausw\u00e4hlen
relatedinfo.links.type.none_selected=Bitte w\u00e4hlen Sie einen Link-Typ aus.

View File

@ -1,4 +1,38 @@
document.addEventListener("DOMContentLoaded", function (event) { document.addEventListener("DOMContentLoaded", function (event) {
const elem = document.querySelector("#link-type-select");
if (elem) {
const linkTypeSelect: HTMLSelectElement = elem as HTMLSelectElement;
const preSelected = linkTypeSelect.options.item(
linkTypeSelect.selectedIndex
);
if (preSelected) {
const value = preSelected.value;
if (value != "--none--") {
enableLinkTypeInputs(value);
}
}
linkTypeSelect.addEventListener("input", function (event) {
const target = event.currentTarget as HTMLSelectElement;
const selected = target.options.item(
linkTypeSelect.selectedIndex
);
if (selected) {
const value = selected.value;
if (value == "--none--") {
const types = document.querySelectorAll(
".relatedlink-target"
);
for (let j = 0; j < types.length; j++) {
types[j].classList.add("d-none");
}
} else {
enableLinkTypeInputs(value);
}
}
});
}
const linkTypes = document.querySelectorAll(".link-type-select"); const linkTypes = document.querySelectorAll(".link-type-select");
for (let i = 0; i < linkTypes.length; i++) { for (let i = 0; i < linkTypes.length; i++) {
@ -29,7 +63,19 @@ document.addEventListener("DOMContentLoaded", function(event) {
} }
selectedTypeElem.classList.remove("d-none"); selectedTypeElem.classList.remove("d-none");
} }
}); });
} }
}); });
function enableLinkTypeInputs(selectedLinkType: string): void {
const selectedTypeElem = document.querySelector(
`#relatedlink-target-${selectedLinkType}`
);
if (selectedTypeElem) {
const types = document.querySelectorAll(".relatedlink-target");
for (let j = 0; j < types.length; j++) {
types[j].classList.add("d-none");
}
selectedTypeElem.classList.remove("d-none");
}
}

View File

@ -0,0 +1,48 @@
/*
* 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.libreccm.ui;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.core.Context;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@RequestScoped
public class BaseUrl {
public String getBaseUrl(final HttpServletRequest request) {
final StringBuilder baseUrlBuilder = new StringBuilder();
return baseUrlBuilder
.append(request.getScheme())
.append("://")
.append(request.getServerName())
.append(addServerPortToBaseUrl(request))
.append(addContextPathToBaseUrl(request))
.toString();
}
private String addServerPortToBaseUrl(final HttpServletRequest request) {
if (request.getServerPort() == 80 || request.getServerPort() == 443) {
return "";
} else {
return String.format(":%d", request.getServerPort());
}
}
private String addContextPathToBaseUrl(final HttpServletRequest request) {
if (request.getServletContext().getContextPath() == null
|| request.getServletContext().getContextPath().isEmpty()) {
return "/";
} else {
return request.getServletContext().getContextPath();
}
}
}