Composite components for UI

ccm-docs
Jens Pelzetter 2020-11-15 14:36:02 +01:00
parent 04d28c1b3f
commit 72fd38bef7
6 changed files with 614 additions and 315 deletions

View File

@ -252,12 +252,11 @@ public class CategorySystemsController {
} }
@POST @POST
@Path("/{categorySystemIdentifier}/title/add") @Path("/{identifier}/title/add")
@AuthorizationRequired @AuthorizationRequired
@Transactional(Transactional.TxType.REQUIRED) @Transactional(Transactional.TxType.REQUIRED)
public String addTitle( public String addTitle(
@PathParam("categorySystemIdentifier") @PathParam("identifier") final String categorySystemIdentifier,
final String categorySystemIdentifier,
@FormParam("locale") final String localeParam, @FormParam("locale") final String localeParam,
@FormParam("value") final String value @FormParam("value") final String value
) { ) {
@ -309,12 +308,11 @@ public class CategorySystemsController {
} }
@POST @POST
@Path("/{categorySystemIdentifier}/title/${locale}/edit") @Path("/{identifier}/title/${locale}/edit")
@AuthorizationRequired @AuthorizationRequired
@Transactional(Transactional.TxType.REQUIRED) @Transactional(Transactional.TxType.REQUIRED)
public String editTitle( public String editTitle(
@PathParam("categorySystemIdentifier") @PathParam("identifier") final String categorySystemIdentifier,
final String categorySystemIdentifier,
@PathParam("locale") final String localeParam, @PathParam("locale") final String localeParam,
@FormParam("value") final String value @FormParam("value") final String value
) { ) {
@ -366,12 +364,11 @@ public class CategorySystemsController {
} }
@POST @POST
@Path("/{categorySystemIdentifier}/title/${locale}/remove") @Path("/{identifier}/title/${locale}/remove")
@AuthorizationRequired @AuthorizationRequired
@Transactional(Transactional.TxType.REQUIRED) @Transactional(Transactional.TxType.REQUIRED)
public String removeTitle( public String removeTitle(
@PathParam("categorySystemIdentifier") @PathParam("identifier") final String categorySystemIdentifier,
final String categorySystemIdentifier,
@PathParam("locale") final String localeParam, @PathParam("locale") final String localeParam,
@FormParam("confirmed") @FormParam("confirmed")
final String confirmed final String confirmed
@ -427,12 +424,11 @@ public class CategorySystemsController {
} }
@POST @POST
@Path("/{categorySystemIdentifier}/description/add") @Path("/{identifier}/description/add")
@AuthorizationRequired @AuthorizationRequired
@Transactional(Transactional.TxType.REQUIRED) @Transactional(Transactional.TxType.REQUIRED)
public String addDescription( public String addDescription(
@PathParam("categorySystemIdentifier") @PathParam("identifier") final String categorySystemIdentifier,
final String categorySystemIdentifier,
@FormParam("locale") final String localeParam, @FormParam("locale") final String localeParam,
@FormParam("value") final String value @FormParam("value") final String value
) { ) {
@ -485,13 +481,12 @@ public class CategorySystemsController {
@POST @POST
@Path( @Path(
"categorysystems/{categorySystemIdentifier}/description/${locale}/edit" "categorysystems/{identifier}/description/${locale}/edit"
) )
@AuthorizationRequired @AuthorizationRequired
@Transactional(Transactional.TxType.REQUIRED) @Transactional(Transactional.TxType.REQUIRED)
public String editDescription( public String editDescription(
@PathParam("categorySystemIdentifier") @PathParam("identifier") final String categorySystemIdentifier,
final String categorySystemIdentifier,
@PathParam("locale") final String localeParam, @PathParam("locale") final String localeParam,
@FormParam("value") final String value @FormParam("value") final String value
) { ) {
@ -544,12 +539,11 @@ public class CategorySystemsController {
@POST @POST
@Path( @Path(
"categorysystems/{categorySystemIdentifier}/description/${locale}/remove") "categorysystems/{identifier}/description/${locale}/remove")
@AuthorizationRequired @AuthorizationRequired
@Transactional(Transactional.TxType.REQUIRED) @Transactional(Transactional.TxType.REQUIRED)
public String removeDescription( public String removeDescription(
@PathParam("categorySystemIdentifier") @PathParam("identifier") final String categorySystemIdentifier,
final String categorySystemIdentifier,
@PathParam("locale") final String localeParam, @PathParam("locale") final String localeParam,
@FormParam("confirmed") @FormParam("confirmed")
final String confirmed final String confirmed

View File

@ -0,0 +1,18 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:cc="http://xmlns.jcp.org/jsf/composite"
xmlns:xlink="http://www.w3.org/1999/xlink">
<cc:interface shortDescription="Component for inserting Bootstrap icons">
<cc:attribute name="icon"
required="true"
shortDescription="The name of the Icon to insert" />
</cc:interface>
<cc:implementation>
<svg class="bi"
width="1em"
height="1em"
fill="currentColor">
<use xlink:href="#{request.contextPath}/assets/bootstrap/bootstrap-icons.svg##{cc.attrs.icon}" />
</svg>
</cc:implementation>
</html>

View File

@ -0,0 +1,504 @@
<!DOCTYPE html [<!ENTITY times '&#215;'>]>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:bootstrap="http://xmlns.jcp.org/jsf/composite/components/bootstrap"
xmlns:cc="http://xmlns.jcp.org/jsf/composite"
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core">
<cc:interface shortDescription="A editor component for localized strings.">
<cc:attribute name="addMethod"
required="true"
shortDescription="Name of the endpoiint to which the POST request from the add form is send. The URL must contain a path parameter named identifier. Two values are submitted: locale and value."
type="String" />
<cc:attribute name="addButtonLabel"
default="Add"
required="false"
shortDescription="Label for the add button."
type="String" />
<cc:attribute name="addDialogCancelLabel"
default="Cancel"
required="false"
shortDescription="Label for the cancel and close buttons."
type="String" />
<cc:attribute name="addDialogLocaleSelectHelp"
default="The locale of the value of add"
required="false"
shortDescription="Help text for the locale select field"
type="String" />
<cc:attribute name="addDialogLocaleSelectLabel"
default="Locale"
required="false"
shortDescription="Label for the locale select field"
type="String" />
<cc:attribute name="addDialogSubmitLabel"
default="Add"
required="false"
shortDescription="Label for the submit button"
type="String" />
<cc:attribute name="addDialogTitle"
default="Add localization"
required="false"
shortDescription="Title for the dialog."
type="String" />
<cc:attribute name="addDialogValueHelp"
required="false"
shortDescription="The value to add"
type="String" />
<cc:attribute name="addDialogValueLabel"
required="false"
shortDescription="Value"
type="String" />
<cc:attribute name="editButtonLabel"
default="Edit"
required="false"
shortDescription="Label for the edit button"
type="String" />
<cc:attribute name="editDialogCancelLabel"
required="false"
shortDescription="Label for the cancel and close button of the edit dialog"
type="String" />
<cc:attribute name="editDialogSubmitLabel"
required="false"
shortDescription="Label for the submit button of the edit dialog"
type="String" />
<cc:attribute name="editDialogValueHelp"
default="Value to update"
required="false"
shortDescription="Help text for the value field"
type="String" />
<cc:attribute name="editDialogValueLabel"
default="Value"
required="false"
shortDescription="Label for the value field"
type="String" />
<cc:attribute name="editDialogTitle"
default="Edit localized value"
required="false"
shortDescription="Title for the edit dialog"
type="String" />
<cc:attribute name="editMethod"
required="true"
shortDescription="Name of the endpoiint to which the POST request from the edit form is send. The URL must contain a path parameter named identifier, and a path parameter named locale. The new value is submitted as form parameter with the name value."
type="String" />
<cc:attribute name="hasUnusedLocales"
required="true"
shortDescription="Are there unused locales? This will usually be an expression pointing to some method. The result must resolve to boolean."
type="boolean" />
<cc:attribute name="headingLevel"
default="2"
required="false"
shortDescription="Level of the heading used for the component. Also determines the heading levels used for other parts of the component."
type="int" />
<cc:attribute name="editorId"
required="true"
shortDescription="ID for the editor. Also used as prefix to generate IDs for some subcomponents"
type="String" />
<cc:attribute name="emptyText"
default="No localized values"
required="false"
shortDescription="Text shown if the localized has no values yet."
type="String" />
<cc:attribute name="objectIdentifier"
required="true"
shortDescription="Identifier of the object to which the localized string belongs"
type="String" />
<cc:attribute name="removeButtonLabel"
default="Edit"
required="false"
shortDescription="Label for the remove button"
type="String" />
<cc:attribute name="removeDialogCancelLabel"
default="Cancel"
required="false"
shortDescription="Label for the cancel and close buttons of the remove dialog"
type="String" />
<cc:attribute name="removeDialogSubmitLabel"
default="Remove localized value"
required="false"
shortDescription="Label for the submit button of the remove dialog (removes the localized value)"
type="String" />
<cc:attribute name="removeDialogText"
default="Are you sure to remove the following localized value?"
required="false"
shortDescription="Text for the remove dialog"
type="String" />
<cc:attribute name="removeDialogTitle"
default="Remove localized value"
required="false"
shortDescription="The title of the remove dialog"
type="String" />
<cc:attribute name="removeMethod"
required="true"
shortDescription="Name of the endpoint to which the POST request from the remove form is send. The URL must contain a path parameter named identifier, and a path parameter named locale."
type="String" />
<cc:attribute name="tableActionsHeading"
default="Actions"
required="false"
shortDescription="Heading for the action columns"
type="String" />
<cc:attribute name="tableLocaleHeading"
default="Locale"
required="false"
shortDescription="Heading for the locale column"
type="String" />
<cc:attribute name="tableValueHeading"
default="Value"
required="false"
shortDescription="Heading for the value column"
type="String" />
<cc:attribute name="title"
required="true"
shortDescription="Title/Heading of the editor widget"
type="String" />
<cc:attribute name="unusedLocales"
required="true"
shortDescription="A collection of the unused locales of the edited localized string"
type="java.util.Collection" />
<cc:attribute name="useTextarea"
default="false"
required="false"
shortDescription="Use a textarea for the value field?"
type="boolean" />
<cc:attribute name="values"
required="true"
shortDescription="The localized values"
type="java.util.Map" />
</cc:interface>
<cc:implementation>
<div class="libreccm-localized-string-editor"
id="#{cc.attrs.editorId}">
<c:choose>
<c:when test="#{cc.attrs.headingLevel == 1}">
<h1>#{cc.attrs.title}</h1>
</c:when>
<c:when test="#{cc.attrs.headingLevel == 2}">
<h2>#{cc.attrs.title}</h2>
</c:when>
<c:when test="#{cc.attrs.headingLevel == 3}">
<h3>#{cc.attrs.title}</h3>
</c:when>
<c:when test="#{cc.attrs.headingLevel == 4}">
<h4>#{cc.attrs.title}</h4>
</c:when>
<c:when test="#{cc.attrs.headingLevel == 5}">
<h5>#{cc.attrs.title}</h5>
</c:when>
<c:when test="#{cc.attrs.headingLevel == 6}">
<h6>#{cc.attrs.title}</h6>
</c:when>
<c:otherwise>
<div>#{cc.attrs.title}</div>
</c:otherwise>
</c:choose>
<c:if test="#{cc.attrs.hasUnusedLocales}">
<div class="mb-2">
<div class="text-right">
<button class="btn btn-secondary"
data-target="##{cc.attrs.editorId}-dialog"
data-toggle="modal"
type="button">
<bootstrap:svgIcon icon="plus-circle" />
<span>
#{cc.attrs.addButtonLabel}
</span>
</button>
</div>
<div aria-labelledby="#{cc.attrs.editorId}-dialog-title"
aria-hidden="true"
class="modal fade"
id="#{cc.attrs.editorId}-dialog"
tabindex="-1">
<div class="modal-dialog">
<form action="#{mvc.uri(cc.attrs.addMethod, { 'identifier': cc.attrs.objectIdentifier})}"
class="modal-content"
method="post">
<div class="modal-header">
<c:choose>
<c:when test="#{cc.attrs.headingLevel == 1}">
<h2>#{cc.attrs.addDialogTitle}</h2>
</c:when>
<c:when test="#{cc.attrs.headingLevel == 2}">
<h3>#{cc.attrs.addDialogTitle}</h3>
</c:when>
<c:when test="#{cc.attrs.headingLevel == 3}">
<h4>#{cc.attrs.addDialogTitle}</h4>
</c:when>
<c:when test="#{cc.attrs.headingLevel == 4}">
<h5>#{cc.attrs.addDialogTitle}</h5>
</c:when>
<c:when test="#{cc.attrs.headingLevel == 5}">
<h6>#{cc.attrs.addDialogTitle}</h6>
</c:when>
<c:otherwise>
<div>#{cc.attrs.addDialogTitle}</div>
</c:otherwise>
</c:choose>
<button aria-label="#{cc.attrs.addDialogCancelLabel}"
class="close"
data-dismiss="modal"
type="button" >
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<div class="form-group">
<label for="#{cc.attrs.editorId}-form-locale-select">
#{cc.attrs.addDialogLocaleSelectLabel}
</label>
<select aria-describedby="#{cc.attrs.editorId}-form-locale-select-help"
id="#{cc.attrs.editorId}-form-locale-select"
name="locale"
required="true">
<c:forEach items="#{cc.attrs.unusedLocales}"
var="locale">
<option value="#{locale}">#{locale}</option>
</c:forEach>
</select>
<small class="form-text text-muted"
id="#{cc.attrs.editorId}-form-locale-select-help">
#{cc.attrs.addDialogLocaleSelectHelp}
</small>
</div>
<div class="form-group">
<label for="#{cc.attrs.editorId}-form-value">
#{cc.attrs.addDialogValueLabel}
</label>
<c:choose>
<c:when test="#{cc.attrs.useTextarea}">
<textarea aria-describedby="#{cc.attrs.editorId}-form-value-help"
class="form-control"
cols="80"
id="#{cc.attrs.editorId}-form-value"
name="value"
required="true"
rows="10"></textarea>
</c:when>
<c:otherwise>
<input aria-describedby="#{cc.attrs.editorId}-form-value-help"
class="form-control"
id="#{cc.attrs.editorId}-form-value"
name="value"
required="true"
type="text" />
</c:otherwise>
</c:choose>
<small class="form-text text-muted"
id="#{cc.attrs.editorId}-form-value-help">
#{cc.attrs.addDialogValueHelp}
</small>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-secondary"
data-dismiss="modal"
type="button" >
#{cc.attrs.addDialogCancelLabel}
</button>
<button type="submit" class="btn btn-primary">
#{cc.attrs.addDialogSubmitLabel}
</button>
</div>
</form>
</div>
</div>
</div>
</c:if>
<c:choose>
<c:when test="#{cc.attrs.values.isEmpty()}">
<p>
#{cc.attrs.emptyText}
</p>
</c:when>
<c:otherwise>
<table class="table table-hover">
<thead class="thead-light">
<tr>
<th scope="col">#{cc.attrs.tableLocaleHeading}</th>
<th scope="col">#{cc.attrs.tableValueHeading}</th>
<th class="text-center"
colspan="2"
scope="col">#{cc.attrs.tableActionsHeading}</th>
</tr>
</thead>
<tbody>
<c:forEach items="#{cc.attrs.values}" var="entry">
<tr>
<td>#{entry.key}</td>
<td>#{entry.value}</td>
<td>
<div class="text-center">
<button class="btn btn-info"
data-target="##{cc.attrs.editorId}-#{entry.key}-edit-dialog"
data-toggle="modal"
type="button">
<bootstrap:svgIcon icon="pen" />
<span>#{cc.attrs.editButtonLabel}</span>
</button>
</div>
<div aria-labelledby="#{cc.attrs.editorId}-#{entry.key}-edit-dialog-title"
aria-hidden="true"
class="modal fade"
data-backdrop="static"
id="#{cc.attrs.editorId}-#{entry.key}-edit-dialog"
tabindex="-1">
<div class="modal-dialog">
<form action="#{mvc.uri(cc.attrs.addMethod, { 'identifier': cc.attrs.objectIdentifier, 'locale': entry.key })}"
class="modal-content"
method="post">
<div class="modal-header">
<c:choose>
<c:when test="#{cc.attrs.headingLevel == 1}">
<h2>#{cc.attrs.editDialogTitle}</h2>
</c:when>
<c:when test="#{cc.attrs.headingLevel == 2}">
<h3>#{cc.attrs.editDialogTitle}</h3>
</c:when>
<c:when test="#{cc.attrs.headingLevel == 3}">
<h4>#{cc.attrs.editDialogTitle}</h4>
</c:when>
<c:when test="#{cc.attrs.headingLevel == 4}">
<h5>#{cc.attrs.editDialogTitle}</h5>
</c:when>
<c:when test="#{cc.attrs.headingLevel == 5}">
<h6>#{cc.attrs.editDialogTitle}</h6>
</c:when>
<c:otherwise>
<div>#{cc.attrs.editDialogTitle}</div>
</c:otherwise>
</c:choose>
<button aria-label="#{cc.attrs.editDialogCancelLabel}"
class="close"
data-dismiss="modal"
type="button" >
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<input name="locale"
value="#{entry.key}"
type="hidden" />
<div class="form-group">
<label for="#{cc.attrs.editorId}-#{entry.key}-edit-dialog-value}">
#{cc.attrs.editDialogValueLabel}
</label>
<c:choose>
<c:when test="#{cc.attrs.useTextarea}">
<textarea aria-describedby="#{cc.attrs.editorId}-#{entry.key}-edit-dialog-value-help"
class="form-control"
cols="80"
id="#{cc.attrs.editorId}-#{entry.key}-edit-dialog-value"
name="value"
required="true"
rows="10">#{entry.value}</textarea>
</c:when>
<c:otherwise>
<input aria-describedby="#{cc.attrs.editorId}-#{entry.key}-edit-dialog-value-help"
class="form-control"
id="#{cc.attrs.editorId}-#{entry.key}-edit-dialog-value"
name="value"
required="true"
type="text"
value="#{entry.value}" />
</c:otherwise>
</c:choose>
<small class="form-text text-muted"
id="#{cc.attrs.editorId}-#{entry.key}-edit-dialog-value-help">
#{cc.attrs.addDialogValueHelp}
</small>
</div>
</div>
<div class="modal-footer">
<div class="modal-footer">
<button class="btn btn-secondary"
data-dismiss="modal"
type="button" >
#{cc.attrs.editDialogCancelLabel}
</button>
<button type="submit" class="btn btn-primary">
#{cc.attrs.editDialogSubmitLabel}
</button>
</div>
</div>
</form>
</div>
</div>
</td>
<td>
<div class="text-center">
<button class="btn btn-danger"
data-target="##{cc.attrs.editorId}-#{entry.key}-remove-dialog"
data-toggle="modal"
type="button">
<bootstrap:svgIcon icon="x-circle" />
<span>#{cc.attrs.removeButtonLabel}</span>
</button>
</div>
<div aria-describedby="#{cc.attrs.editorId}-#{entry.key}-remove-dialog-title"
aria-hidden="true"
class="modal fade"
data-backdrop="static"
id="#{cc.attrs.editorId}-#{entry.key}-remove-dialog"
tabindex="-1">
<div class="modal-dialog">
<form action="#{mvc.uri(cc.attrs.removeMethod, {'identifier': cc.attrs.objectIdentifier, 'locale': entry.key})}"
class="modal-content"
method="post">
<div class="modal-header">
<c:choose>
<c:when test="#{cc.attrs.headingLevel == 1}">
<h2>#{cc.attrs.removeDialogTitle}</h2>
</c:when>
<c:when test="#{cc.attrs.headingLevel == 2}">
<h3>#{cc.attrs.removeDialogTitle}</h3>
</c:when>
<c:when test="#{cc.attrs.headingLevel == 3}">
<h4>#{cc.attrs.removeDialogTitle}</h4>
</c:when>
<c:when test="#{cc.attrs.headingLevel == 4}">
<h5>#{cc.attrs.removeDialogTitle}</h5>
</c:when>
<c:when test="#{cc.attrs.headingLevel == 5}">
<h6>#{cc.attrs.removeDialogTitle}</h6>
</c:when>
<c:otherwise>
<div>#{cc.attrs.removeDialogTitle}</div>
</c:otherwise>
</c:choose>
<button aria-label="#{cc.attrs.removeDialogCancelLabel}"
class="close"
data-dismiss="modal"
type="button" >
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<p>
#{cc.attrs.removeDialogText}
</p>
<pre>#{entry.key}: #{entry.value}</pre>
<input name="confirmed"
type="hidden"
value="true" />
</div>
<div class="modal-footer">
<button class="btn btn-secondary"
data-dismiss="modal"
type="button" >
#{cc.attrs.removeDialogCancelLabel}
</button>
<button type="submit" class="btn btn-danger">
#{cc.attrs.removeDialogSubmitLabel}
</button>
</div>
</form>
</div>
</div>
</td>
</tr>
</c:forEach>
</tbody>
</table>
</c:otherwise>
</c:choose>
</div>
</cc:implementation>
</html>

View File

@ -1,9 +1,10 @@
<!DOCTYPE html [<!ENTITY times '&#215;'>]> <!DOCTYPE html [<!ENTITY times '&#215;'>]>
<html xmlns="http://www.w3.org/1999/xhtml" <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:c="http://xmlns.jcp.org/jsp/jstl/core"
xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets" xmlns:libreccm="http://xmlns.jcp.org/jsf/composite/components/libreccm"
xmlns:xlink="http://www.w3.org/1999/xlink"> xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
<ui:composition template="/WEB-INF/views/org/libreccm/ui/admin/ccm-admin.xhtml"> <ui:composition template="/WEB-INF/views/org/libreccm/ui/admin/ccm-admin.xhtml">
<ui:param name="activePage" value="categories" /> <ui:param name="activePage" value="categories" />
@ -77,272 +78,79 @@
<div class="mb-4"> <div class="mb-4">
<a class="btn btn-primary" <a class="btn btn-primary"
href="#{mvc.uri('CategorySystemsController#editCategorySystem', {'categorySystemIdentifier': CategorySystemDetailsModel.identifier } )}"> href="#{mvc.uri('CategorySystemsController#editCategorySystem', {'categorySystemIdentifier': CategorySystemDetailsModel.identifier } )}">
<svg class="bi" <bootstrap:svgIcon icon="pen" />
width="1em"
height="1em"
fill="currentColor">
<use xlink:href="#{request.contextPath}/assets/bootstrap/bootstrap-icons.svg#pen" />
</svg>
<span>#{AdminMessages['categorysystems.details.edit']}</span> <span>#{AdminMessages['categorysystems.details.edit']}</span>
</a> </a>
</div> </div>
<h2> <libreccm:localizedStringEditor addMethod="CategorySystemsController#addTitle"
#{AdminMessages['categorysystems.details.title.heading']} addButtonLabel="#{AdminMessages['categorysystems.details.title.add']}"
</h2> addDialogCancelLabel="#{AdminMessages['categorysystems.details.title.add.dialog.close']}"
<c:if test="#{CategorySystemDetailsModel.hasUnusedTitleLocales()}"> addDialogLocaleSelectHelp="#{AdminMessages['categorysystems.details.title.add.dialog.locale.help']}"
<div class="mb-2"> addDialogLocaleSelectLabel="#{AdminMessages['categorysystems.details.title.add.dialog.locale.label']}"
<div class="text-right"> addDialogSubmitLabel="#{AdminMessages['categorysystems.details.title.add.dialog.submit']}"
<button class="btn btn-secondary" addDialogTitle="#{AdminMessages['categorysystems.details.title.add.dialog.title']}"
data-target="#categorysystem-title-add" addDialogValueHelp="#{AdminMessages['categorysystems.details.title.add.dialog.value.help']}"
data-toggle="modal" addDialogValueLabel="#{AdminMessages['categorysystems.details.title.add.dialog.value.label']}"
type="button"> editButtonLabel="#{AdminMessages['categorysystems.details.title.table.actions.edit']}"
<svg class="bi" editDialogCancelLabel="#{AdminMessages['categorysystems.details.title.edit.dialog.close']}"
width="1em" editDialogSubmitLabel="#{AdminMessages['categorysystems.details.title.edit.dialog.submit']}"
height="1em" editDialogTitle="#{AdminMessages['categorysystems.details.title.table.actions.edit.dialog.title']}"
fill="currentColor"> editDialogValueHelp="#{AdminMessages['categorysystems.details.title.edit.dialog.value.help']}"
<use xlink:href="#{request.contextPath}/assets/bootstrap/bootstrap-icons.svg#plus-circle" /> editDialogValueLabel="#{AdminMessages['categorysystems.details.title.edit.dialog.value.label']}"
</svg> editMethod="CategorySystemsController#editTitle"
<span>#{AdminMessages['categorysystems.details.title.add']}</span> editorId="categorysystem-title"
</button> emptyText="#{AdminMessages['categorysystems.details.title.none']}"
</div> hasUnusedLocales="#{CategorySystemDetailsModel.hasUnusedTitleLocales()}"
<div class="modal fade" objectIdentifier="#{CategorySystemDetailsModel.identifier}"
data-backdrop="static" removeButtonLabel="#{AdminMessages['categorysystems.details.title.table.actions.remove']}"
id="categorysystem-title-add" removeDialogCancelLabel="#{AdminMessages['categorysystems.details.title.remove.dialog.close']}"
tabindex="-1"> removeDialogSubmitLabel="#{AdminMessages['categorysystems.details.title.remove.dialog.submit']}"
<div class="modal-dialog"> removeDialogText="#{AdminMessages['categorysystems.details.title.remove.dialog.message']}"
<form action="#{mvc.uri('CategorySystemsController#addTitle', {'categorySystemIdentifier': CategorySystemDetailsModel.identifier })}" removeDialogTitle="#{AdminMessages['categorysystems.details.title.table.actions.remove.dialog.title']}"
class="modal-content" removeMethod="CategorySystemsController#removeTitle"
method="post"> tableActionsHeading="#{AdminMessages['categorysystems.details.title.table.headings.actions']}"
<div class="modal-header"> tableLocaleHeading="#{AdminMessages['categorysystems.details.title.table.headings.locale']}"
<h3 class="modal-title"> tableValueHeading="#{AdminMessages['categorysystems.details.title.table.headings.value']}"
#{AdminMessages['categorysystems.details.title.add.dialog.title']} title="#{AdminMessages['categorysystems.details.title.heading']}"
</h3> unusedLocales="#{CategorySystemDetailsModel.unusedTitleLocales}"
<button aria-label="#{AdminMessages['categorysystems.details.title.add.dialog.close']}" values="#{CategorySystemDetailsModel.title}" />
class="close"
data-dismiss="modal" <libreccm:localizedStringEditor addMethod="CategorySystemsController#addDescription"
type="button"> addButtonLabel="#{AdminMessages['categorysystems.details.description.add']}"
<span aria-hidden="true">&times;</span> addDialogCancelLabel="#{AdminMessages['categorysystems.details.description.add.dialog.close']}"
</button> addDialogLocaleSelectHelp="#{AdminMessages['categorysystems.details.description.add.dialog.locale.help']}"
</div> addDialogLocaleSelectLabel=" #{AdminMessages['categorysystems.details.description.add.dialog.locale.label']}"
<div class="modal-body"> addDialogSubmitLabel="#{AdminMessages['categorysystems.details.description.add.dialog.submit']}"
<div class="form-group"> addDialogTitle="#{AdminMessages['categorysystems.details.description.add.dialog.title']}"
<label for="categorysystem-title-add-locale"> addDialogValueHelp="#{AdminMessages['categorysystems.details.description.add.dialog.value.help']}"
#{AdminMessages['categorysystems.details.title.add.dialog.locale.label']} addDialogValueLabel="#{AdminMessages['categorysystems.details.description.add.dialog.value.label']}"
</label> editButtonLabel="#{AdminMessages['categorysystems.details.description.table.actions.edit']}"
<select aria-describedby="categorysystem-title-add-locale-help" editDialogCancelLabel="#{AdminMessages['categorysystems.details.description.edit.dialog.close']}"
id="categorysystem-title-add-locale" editDialogSubmitLabel="#{AdminMessages['categorysystems.details.description.edit.dialog.submit']}"
name="locale" editDialogTitle="#{AdminMessages['categorysystems.details.description.table.actions.edit.dialog.title']}"
required="true"> editDialogValueHelp="#{AdminMessages['categorysystems.details.description.edit.dialog.value.help']}"
<c:forEach items="#{CategorySystemDetailsModel.unusedTitleLocales}" var="locale"> editDialogValueLabel="#{AdminMessages['categorysystems.details.description.edit.dialog.value.label']}"
<option value="#{locale}">#{locale}</option> editMethod="CategorySystemsController#editDescription"
</c:forEach> editorId="categorysystem-description"
</select> emptyText="#{AdminMessages['categorysystems.details.description.none']}"
<small class="form-text text-muted" hasUnusedLocales="#{CategorySystemDetailsModel.hasUnusedDescriptionLocales()}"
id="categorysystem-title-add-locale-help"> objectIdentifier="#{CategorySystemDetailsModel.identifier}"
#{AdminMessages['categorysystems.details.title.add.dialog.locale.help']} removeButtonLabel="#{AdminMessages['categorysystems.details.description.table.actions.remove']}"
</small> removeDialogCancelLabel="#{AdminMessages['categorysystems.details.description.remove.dialog.close']}"
removeDialogSubmitLabel="#{AdminMessages['categorysystems.details.description.remove.dialog.submit']}"
removeDialogText="#{AdminMessages['categorysystems.details.description.remove.dialog.message']}"
removeDialogTitle="#{AdminMessages['categorysystems.details.description.table.actions.remove.dialog.title']}"
removeMethod="CategorySystemsController#removeDescription"
tableActionsHeading="#{AdminMessages['categorysystems.details.description.table.headings.actions']}"
tableLocaleHeading="#{AdminMessages['categorysystems.details.description.table.headings.locale']}"
tableValueHeading="#{AdminMessages['categorysystems.details.description.table.headings.value']}"
title="#{AdminMessages['categorysystems.details.description.heading']}"
unusedLocales="#{CategorySystemDetailsModel.unusedTitleLocales}"
useTextarea="true"
values="#{CategorySystemDetailsModel.description}" />
</div> <!-- <h2>
<div class="form-group">
<label for="categorysystem-title-add-value">
#{AdminMessages['categorysystems.details.title.add.dialog.value.label']}
</label>
<input aria-describedby="categorysystem-title-add-value-help"
class="form-control"
id="categorysystem-title-add-value"
name="value"
required="true"
type="text" />
<small class="form-text text-muted"
id="categorysystem-title-add-locale-help">
#{AdminMessages['categorysystems.details.title.add.dialog.value.help']}
</small>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-secondary"
data-dismiss="modal"
type="button" >
#{AdminMessages['categorysystems.details.title.add.dialog.close']}
</button>
<button type="submit" class="btn btn-primary">
#{AdminMessages['categorysystems.details.title.add.dialog.submit']}
</button>
</div>
</form>
</div>
</div>
</div>
</c:if>
<c:choose>
<c:when test="#{CategorySystemDetailsModel.getTitle().isEmpty()}">
<p>
#{AdminMessages['categorysystems.details.title.none']}
</p>
</c:when>
<c:otherwise>
<table class="table table-hover">
<thead class="thead-light">
<tr>
<th scope="col">#{AdminMessages['categorysystems.details.title.table.headings.locale']}</th>
<th scope="col">#{AdminMessages['categorysystems.details.title.table.headings.value']}</th>
<th class="text-center"
colspan="2"
scope="col">#{AdminMessages['categorysystems.details.title.table.headings.actions']}</th>
</tr>
</thead>
<tbody>
<c:forEach items="#{CategorySystemDetailsModel.title}"
var="entry">
<tr>
<td>
#{entry.key}
</td>
<td>
#{entry.value}
</td>
<td>
<div class="text-center">
<button class="btn btn-info"
data-target="#categorysystem-title-#{entry.key}-edit"
data-toggle="modal"
type="button">
<svg class="bi"
width="1em"
height="1em"
fill="currentColor">
<use xlink:href="#{request.contextPath}/assets/bootstrap/bootstrap-icons.svg#pen" />
</svg>
<span>#{AdminMessages['categorysystems.details.title.table.actions.edit']}</span>
</button>
</div>
<div aria-describedby="categorysystem-title-#{entry.key}-edit-title"
aria-hidden="true"
class="modal fade"
data-backdrop="static"
id="categorysystem-title-#{entry.key}-edit"
tabindex="-1">
<div class="modal-dialog">
<form action="#{mvc.uri('CategorySystemsController#editTitle', {'categorySystemIdentifier': CategorySystemDetailsModel.identifier, 'locale': entry.key })}"
class="modal-content"
method="post">
<div class="modal-header">
<h3 class="modal-title" id="categorysystem-title-#{entry.key}-edit-title">
#{AdminMessages['categorysystems.details.title.table.actions.edit.dialog.title']}
</h3>
<button aria-label="#{AdminMessages['categorysystems.details.title.edit.dialog.close']}"
class="close"
data-dismiss="modal"
type="button">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<input name="locale"
value="#{entry.key}"
type="hidden" />
<div class="form-group">
<label for="categorysystem-title-#{entry.key}-edit-value">
#{AdminMessages['categorysystems.details.title.edit.dialog.value.label']}
</label>
<input aria-describedby="categorysystem-title-#{entry.key}-edit-value-help"
class="form-control"
id="categorysystem-title-#{entry.key}-edit-value"
name="value"
required="true"
type="text"
value="#{entry.value}" />
<small class="form-text text-muted"
id="categorysystem-title-#{entry.key}-edit-value-help">
#{AdminMessages['categorysystems.details.title.edit.dialog.value.help']}
</small>
</div>
</div>
<div class="modal-footer">
<div class="modal-footer">
<button class="btn btn-secondary"
data-dismiss="modal"
type="button" >
#{AdminMessages['categorysystems.details.title.edit.dialog.close']}
</button>
<button type="submit" class="btn btn-primary">
#{AdminMessages['categorysystems.details.title.edit.dialog.submit']}
</button>
</div>
</div>
</form>
</div>
</div>
</td>
<td>
<div class="text-center">
<button class="btn btn-danger"
data-target="#categorysystem-title-#{entry.key}-remove"
data-toggle="modal"
type="button">
<svg class="bi"
width="1em"
height="1em"
fill="currentColor">
<use xlink:href="#{request.contextPath}/assets/bootstrap/bootstrap-icons.svg#x-circle" />
</svg>
<span>#{AdminMessages['categorysystems.details.title.table.actions.remove']}</span>
</button>
</div>
<div aria-describedby="categorysystem-title-#{entry.key}-remove-title"
aria-hidden="true"
class="modal fade"
data-backdrop="static"
id="categorysystem-title-#{entry.key}-remove"
tabindex="-1">
<div class="modal-dialog">
<form action="#{mvc.uri('CategorySystemsController#removeTitle', {'categorySystemIdentifier': CategorySystemDetailsModel.identifier, 'locale': entry.key })}"
class="modal-content"
method="post">
<div class="modal-header">
<h3 class="modal-title" id="categorysystem-title-#{entry.key}-remove-title">
#{AdminMessages['categorysystems.details.title.table.actions.remove.dialog.title']}
</h3>
<button aria-label="#{AdminMessages['categorysystems.details.title.remove.dialog.close']}"
class="close"
data-dismiss="modal"
type="button">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<p>
#{AdminMessages.getMessage('categorysystems.details.title.remove.dialog.message', [entry.key, entry.value])}
</p>
<input name="confirmed"
type="hidden"
value="true" />
</div>
<div class="modal-footer">
<div class="modal-footer">
<button class="btn btn-secondary"
data-dismiss="modal"
type="button" >
#{AdminMessages['categorysystems.details.title.remove.dialog.close']}
</button>
<button type="submit" class="btn btn-danger">
#{AdminMessages['categorysystems.details.title.remove.dialog.submit']}
</button>
</div>
</div>
</form>
</div>
</div>
</td>
</tr>
</c:forEach>
</tbody>
</table>
</c:otherwise>
</c:choose>
<h2>
#{AdminMessages['categorysystems.details.description.heading']} #{AdminMessages['categorysystems.details.description.heading']}
</h2> </h2>
<c:if test="#{CategorySystemDetailsModel.hasUnusedDescriptionLocales()}"> <c:if test="#{CategorySystemDetailsModel.hasUnusedDescriptionLocales()}">
@ -352,12 +160,7 @@
data-target="#categorysystem-description-add" data-target="#categorysystem-description-add"
data-toggle="modal" data-toggle="modal"
type="button"> type="button">
<svg class="bi" <bootstrap:svgIcon icon="plus-circle" />
width="1em"
height="1em"
fill="currentColor">
<use xlink:href="#{request.contextPath}/assets/bootstrap/bootstrap-icons.svg#plus-circle" />
</svg>
<span>#{AdminMessages['categorysystems.details.description.add']}</span> <span>#{AdminMessages['categorysystems.details.description.add']}</span>
</button> </button>
</div> </div>
@ -463,12 +266,7 @@
data-target="#categorysystem-description-#{entry.key}-edit" data-target="#categorysystem-description-#{entry.key}-edit"
data-toggle="modal" data-toggle="modal"
type="button"> type="button">
<svg class="bi" <bootstrap:svgIcon icon="pen" />
width="1em"
height="1em"
fill="currentColor">
<use xlink:href="#{request.contextPath}/assets/bootstrap/bootstrap-icons.svg#pen" />
</svg>
<span>#{AdminMessages['categorysystems.details.description.table.actions.edit']}</span> <span>#{AdminMessages['categorysystems.details.description.table.actions.edit']}</span>
</button> </button>
</div> </div>
@ -538,12 +336,7 @@
data-target="#categorysystem-description-#{entry.key}-remove" data-target="#categorysystem-description-#{entry.key}-remove"
data-toggle="modal" data-toggle="modal"
type="button"> type="button">
<svg class="bi" <bootstrap:svgIcon icon="x-circle" />
width="1em"
height="1em"
fill="currentColor">
<use xlink:href="#{request.contextPath}/assets/bootstrap/bootstrap-icons.svg#x-circle" />
</svg>
<span>#{AdminMessages['categorysystems.details.description.table.actions.remove']}</span> <span>#{AdminMessages['categorysystems.details.description.table.actions.remove']}</span>
</button> </button>
</div> </div>
@ -595,7 +388,7 @@
</tbody> </tbody>
</table> </table>
</c:otherwise> </c:otherwise>
</c:choose> </c:choose>-->
<h2> <h2>
#{AdminMessages['categorysystems.details.owners.heading']} #{AdminMessages['categorysystems.details.owners.heading']}
@ -606,12 +399,7 @@
data-target="#categorysystem-owner-add" data-target="#categorysystem-owner-add"
data-toggle="modal" data-toggle="modal"
type="button"> type="button">
<svg class="bi" <bootstrap:svgIcon icon="plus-circle" />
width="1em"
height="1em"
fill="currentColor">
<use xlink:href="#{request.contextPath}/assets/bootstrap/bootstrap-icons.svg#plus-circle" />
</svg>
<span>#{AdminMessages['categorysystems.details.owners.add']}</span> <span>#{AdminMessages['categorysystems.details.owners.add']}</span>
</button> </button>
</div> </div>
@ -720,12 +508,7 @@
data-target="#categorysystem-owner-#{owner.uuid}-remove" data-target="#categorysystem-owner-#{owner.uuid}-remove"
data-toggle="modal" data-toggle="modal"
type="button"> type="button">
<svg class="bi" <bootstrap:svgIcon icon="x-circle" />
width="1em"
height="1em"
fill="currentColor">
<use xlink:href="#{request.contextPath}/assets/bootstrap/bootstrap-icons.svg#x-circle" />
</svg>
<span>#{AdminMessages['categorysystems.details.owners.remove']}</span> <span>#{AdminMessages['categorysystems.details.owners.remove']}</span>
</button> </button>
</div> </div>

View File

@ -315,7 +315,7 @@ categorysystems.details.title.edit.dialog.value.help=The new value for the title
categorysystems.details.title.edit.dialog.submit=Save categorysystems.details.title.edit.dialog.submit=Save
categorysystems.details.title.table.actions.remove.dialog.title=Remove localized title categorysystems.details.title.table.actions.remove.dialog.title=Remove localized title
categorysystems.details.title.remove.dialog.close=Cancel categorysystems.details.title.remove.dialog.close=Cancel
categorysystems.details.title.remove.dialog.message=Are your sure to delete title "{1}" for locale? categorysystems.details.title.remove.dialog.message=Are your sure to remove the following localized value for the title:
categorysystems.details.title.remove.dialog.submit=Delete title categorysystems.details.title.remove.dialog.submit=Delete title
categorysystems.details.description.add.dialog.title=Add localized description categorysystems.details.description.add.dialog.title=Add localized description
categorysystems.details.description.add.dialog.locale.label=Locale categorysystems.details.description.add.dialog.locale.label=Locale
@ -331,7 +331,7 @@ categorysystems.details.description.edit.dialog.value.help=The localized descrip
categorysystems.details.description.edit.dialog.submit=Save categorysystems.details.description.edit.dialog.submit=Save
categorysystems.details.description.table.actions.remove.dialog.title=Removed localized description categorysystems.details.description.table.actions.remove.dialog.title=Removed localized description
categorysystems.details.description.remove.dialog.close=Cancel categorysystems.details.description.remove.dialog.close=Cancel
categorysystems.details.description.remove.dialog.message=Are your sure to delete the description for locale {0}? categorysystems.details.description.remove.dialog.message=Are your sure to delete the following localized value for the description:
categorysystems.details.description.remove.dialog.submit=Remove localized description categorysystems.details.description.remove.dialog.submit=Remove localized description
categorysstems.details.owner.add.dialog.title=Add Application Mapping categorysstems.details.owner.add.dialog.title=Add Application Mapping
categorysystems.details.owner.add.dialog.application.label=Application categorysystems.details.owner.add.dialog.application.label=Application

View File

@ -315,7 +315,7 @@ categorysystems.details.title.edit.dialog.value.help=Neuer Wert f\u00fcr den Tit
categorysystems.details.title.edit.dialog.submit=Speichern categorysystems.details.title.edit.dialog.submit=Speichern
categorysystems.details.title.table.actions.remove.dialog.title=Lokalisierten Titel entfernen categorysystems.details.title.table.actions.remove.dialog.title=Lokalisierten Titel entfernen
categorysystems.details.title.remove.dialog.close=Abbrechen categorysystems.details.title.remove.dialog.close=Abbrechen
categorysystems.details.title.remove.dialog.message=Sind Sie sicher, dass Sie den Titel "{1}" f\u00fcr die Sprache {0} entfernen wollen? categorysystems.details.title.remove.dialog.message=Sind Sie sicher, dass die folgende Lokalisierung f\u00fcr den Titel entfernen wollen?
categorysystems.details.title.remove.dialog.submit=Titel entfernen categorysystems.details.title.remove.dialog.submit=Titel entfernen
categorysystems.details.description.add.dialog.title=Lokalisierte Beschreibung hinzuf\u00fcgen categorysystems.details.description.add.dialog.title=Lokalisierte Beschreibung hinzuf\u00fcgen
categorysystems.details.description.add.dialog.locale.label=Sprache categorysystems.details.description.add.dialog.locale.label=Sprache