AssetFolder view

Former-commit-id: 4489b16195dc7155096c89c61916dc52b9b7a039
pull/10/head
Jens Pelzetter 2021-02-10 20:43:18 +01:00
parent 00e1da3141
commit 7bd424537e
10 changed files with 684 additions and 11 deletions

View File

@ -30,9 +30,6 @@ public class AssetFolderEntry {
final long entryId, final long entryId,
final String entryUuid, final String entryUuid,
final String displayName, final String displayName,
final Date creationDate,
final Date lastModified,
final String version,
final boolean folder final boolean folder
) { ) {
this.entryId = entryId; this.entryId = entryId;

View File

@ -176,7 +176,7 @@ import static org.librecms.CmsConstants.*;
+ " ON categories.object_id = folders.object_id " + " ON categories.object_id = folders.object_id "
+ "WHERE categories.parent_category_id = :folderId " + "WHERE categories.parent_category_id = :folderId "
+ "AND folders.\"type\" = 'ASSETS_FOLDER'", + "AND folders.\"type\" = 'ASSETS_FOLDER'",
resultSetMapping = "Folder.DocumentFolderEntry" resultSetMapping = "Folder.AssetFolderEntry"
), ),
@NamedNativeQuery( @NamedNativeQuery(
name = "Folder.countDocumentFolderEntries", name = "Folder.countDocumentFolderEntries",
@ -262,7 +262,7 @@ import static org.librecms.CmsConstants.*;
} }
), ),
@SqlResultSetMapping( @SqlResultSetMapping(
name = "Folder.getAssetFolderEntries", name = "Folder.AssetFolderEntry",
classes = { classes = {
@ConstructorResult( @ConstructorResult(
columns = { columns = {

View File

@ -66,6 +66,14 @@ public class AssetFolderModel {
this.maxResults = maxResults; this.maxResults = maxResults;
} }
public long getNumberOfPages() {
return (long) Math.ceil((double) count / maxResults);
}
public long getCurrentPage() {
return (long) Math.ceil((double) firstResult / maxResults) + 1;
}
public List<AssetFolderRowModel> getRows() { public List<AssetFolderRowModel> getRows() {
return Collections.unmodifiableList(rows); return Collections.unmodifiableList(rows);
} }

View File

@ -0,0 +1,51 @@
<!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:cms="http://xmlns.jcp.org/jsf/composite/components/cms"
xmlns:libreccm="http://xmlns.jcp.org/jsf/composite/components/libreccm"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
<ui:composition>
<c:choose>
<c:when test="#{not empty folder.subFolders}">
<li class="folder-tree-node list-group-item">
<div class="d-flex">
<button class="btn btn-light p-0 subfolders-toggler"
data-toggle="collapse"
data-target="##{folder.name}-subfolders"
aria-expanded="false"
aria-controls="##{folder.name}-subfolders"
type="button">
<span class="sr-only">#{CmsAdminMessages['contentsection.assetfolder.foldersnav.subfolders.expand']}
</span>
</button>
<c:choose>
<c:when test="#{folder.permissions.grantedEdit}">
<a class="pl-0"
href="#{basePath}#{folder.path}">#{folder.name}</a>
</c:when>
<c:otherwise>
<span>#{folder.name}</span>
</c:otherwise>
</c:choose>
</div>
<ul class="border-0 #{!folder.open ? 'collapse' : 'collapse.show'} list-group"
id="#{folder.name}-subfolders">
<c:forEach items="#{folder.subFolders}"
var="subFolder">
<ui:include src="asset-folder-tree-node.xhtml">
<ui:param name="basePath" value="#{basePath}" />
<ui:param name="folder" value="#{subFolder}" />
</ui:include>
</c:forEach>
</ul>
</li>
</c:when>
<c:otherwise>
<li class="folder-tree-node list-group-item">
<a href="#{basePath}#{folder.path}">#{folder.name}</a>
</li>
</c:otherwise>
</c:choose>
</ui:composition>
</html>

View File

@ -0,0 +1,526 @@
<!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:cms="http://xmlns.jcp.org/jsf/composite/components/cms"
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/contentsection.xhtml">
<ui:param name="activePage" value="assetFolders" />
<ui:param name="title" value="#{CmsAdminMessages['contentsection.assetfolders.title']}" />
<ui:define name="breadcrumb">
<c:choose>
<c:when test="#{AssetFolderModel.breadcrumbs.isEmpty()}">
<li aria-current="page" class="breadcrumb-item">
#{CmsAdminMessages['contentsection.assetfolders.title']}
</li>
</c:when>
<c:otherwise>
<li class="breadcrumb-item">
<a href="#{mvc.basePath}/#{ContentSectionModel.sectionName}/assetfolders">
#{CmsAdminMessages['contentsection.assetfolders.title']}
</a>
</li>
</c:otherwise>
</c:choose>
<c:forEach items="#{AssetFolderModel.breadcrumbs}"
var="breadcrumb">
<c:choose>
<c:when test="#{breadcrumb.currentFolder}">
<li class="breadcrumb-item #{breadcrumb.currentFolder ? 'active' : ''}">
#{breadcrumb.pathToken}
</li>
</c:when>
<c:otherwise>
<li class="breadcrumb-item">
<a href="#{mvc.basePath}/#{ContentSectionModel.sectionName}/assetfolders/#{breadcrumb.path}">#{breadcrumb.pathToken}</a>
</li>
</c:otherwise>
</c:choose>
</c:forEach>
</ui:define>
<ui:define name="main">
<div class="container-fluid">
<h1>#{CmsAdminMessages.getMessage("contentsection.assetfolder.heading", [ContentSectionModel.sectionName])}</h1>
<div class="row">
<div class="col-sm-3">
<form action="#"
class="mb-3"
method="get">
<label class="sr-only"
for="assetfolders-searchbox">
#{CmsAdminMessages['contentsection.assetfolders.searchbox.label']}
</label>
<div class="input-group">
<input class="form-control"
id="assetfolders-searchbox"
name="term"
type="text" />
<div class="input-group-append">
<button class="btn btn-primary"
type="submit">
<bootstrap:svgIcon icon="search" />
<span class="sr-only">#{CmsAdminMessages['contentsection.assetfolders.searchbox.submit']}</span>
</button>
</div>
</div>
</form>
<nav class="assetfolder foldertree">
<h2>
<a href="#{mvc.basePath}/#{ContentSectionModel.sectionName}/assetfolders">
#{CmsAdminMessages["contentsection.assetfolders.root.title"]}
</a>
</h2>
<ul class="list-group">
<c:forEach items="#{ContentSectionModel.assetFolders}"
var="folder">
<ui:include src="asset-folder-tree-node.xhtml">
<ui:param name="basePath"
value="#{mvc.basePath}/#{ContentSectionModel.sectionName}/assetfolders" />
<ui:param name="folder" value="#{folder}" />
</ui:include>
</c:forEach>
</ul>
</nav>
</div>
<div class="col-sm-9">
<div class="d-flex justify-content-between mb-2">
<form action="#" class="form-inline mr-2" method="GET">
<div class="input-group">
<div class="input-group-prepend">
<label class="mr-2"
for="asset-folder-filter">
<span>#{CmsAdminMessages['contentsection.assetfolder.filter.label']}</span>
</label>
</div>
<input id="assetfolder-filter"
name="filterTerm"
type="text" />
<div class="input-group-append">
<button class="btn btn-secondary"
type="submit">
<bootstrap:svgIcon icon="filter" />
<span class="sr-only">#{CmsAdminMessages['contentsection.assetfolder.filter.submit']}</span>
</button>
</div>
</div>
</form>
<p>
${CmsAdminMessages.getMessage("contentsection.assetfolder.pageof", [AssetFolderModel.currentPage, AssetFolderModel.numberOfPages])}
</p>
<div>
<c:choose>
<c:when test="#{AssetFolderModel.canCreateSubFolders}">
<button class="btn btn-primary"
data-toggle="modal"
data-target="#new-subfolder-dialog"
title="#{CmsAdminMessages['contentsection.assetfolder.add_subfolder']}">
<bootstrap:svgIcon icon="folder-plus" />
<span class="sr-only">#{CmsAdminMessages['contentsection.assetfolder.add_subfolder']}</span>
</button>
<div aria-hidden="true"
aria-labelledby="new-subfolder-dialog-title"
class="modal fade"
id="new-subfolder-dialog"
tabindex="-1">
<div class="modal-dialog">
<form action="#{mvc.basePath}/#{ContentSectionModel.sectionName}/assetfolders/#{AssetFolderModel.path}"
class="modal-content"
method="post">
<div class="modal-header">
<h2 class="modal-title"
id="new-subfolder-dialog-title">
#{CmsAdminMessages['contentsection.assetfolder.new_subfolder_dialog.title']}
</h2>
<button aria-label="#{CmsAdminMessages['contentsection.assetfolder.new_subfolder_dialog.close']}"
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="new-subfolder-name">
#{CmsAdminMessages['contentsection.assetfolder.new_subfolder.name.label']}
</label>
<input aria-describedby="new-subfolder-name-help"
class="form-control"
id="new-subfolder-name"
name="folderName"
pattern="^([a-zA-Z0-9-_]*)$"
type="text"
value="" />
<small class="form-text text-muted"
id="new-subfolder-name-help">
#{CmsAdminMessages['contentsection.assetfolder.new_subfolder.name.help']}
</small>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-danger"
data-dismiss="modal"
type="button">
#{CmsAdminMessages['contentsection.assetfolder.new_subfolder_dialog.close']}
</button>
<button class="btn btn-success"
type="submit">
#{CmsAdminMessages['contentsection.assetfolder.new_subfolder_dialog.submit']}
</button>
</div>
</form>
</div>
</div>
</c:when>
<c:otherwise>
<button class="btn btn-primary"
disabled="disabled"
title="#{CmsAdminMessages['contentsection.assetfolder.add_subfolder']}">
<bootstrap:svgIcon icon="folder-plus" />
<span class="sr-only">#{CmsAdminMessages['contentsection.assetfolder.add_subfolder']}</span>
</button>
</c:otherwise>
</c:choose>
<c:choose>
<c:when test="#{AssetFolderModel.canCreateAssets}">
<button class="btn btn-primary" title="#{CmsAdminMessages['contentsection.assetfolder.add_asset']}">
<bootstrap:svgIcon icon="file-earmark-plus" />
<span class="sr-only">#{CmsAdminMessages['contentsection.assetfolder.add_asset']}</span>
</button>
</c:when>
<c:otherwise>
<button class="btn btn-primary"
disabled="disabled"
title="#{CmsAdminMessages['contentsection.assetfolder.add_asset']}">
<bootstrap:svgIcon icon="file-earmark-plus" />
<span class="sr-only">#{CmsAdminMessages['contentsection.assetfolder.add_asset']}</span>
</button>
</c:otherwise>
</c:choose>
</div>
</div>
<table class="table table-hover assetfolder">
<thead class="thead-light">
<tr>
<th>
#{CmsAdminMessages['contentsection.assetfolder.headers.name.label']}
</th>
<th>
#{CmsAdminMessages['contentsection.assetfolder.headers.title.label']}
</th>
<th>
#{CmsAdminMessages['contentsection.assetfolder.headers.type.label']}
</th>
<th class="text-center" colspan="2">
#{CmsAdminMessages['contentsection.assetfolder.headers.actions.label']}
</th>
</tr>
</thead>
<tbody>
<c:forEach items="#{AssetFolderModel.rows}"
var="row">
<tr>
<td>
<c:choose>
<c:when test="#{row.folder and (row.permissions.grantedEdit or row.permissions.grantedPreview)}">
<a href="#{mvc.basePath}/#{ContentSectionModel.sectionName}/assetfolders/#{row.folderPath}">#{row.name}</a>
</c:when>
<c:when test="#{row.permissions.grantedApprove or row.permissions.grantedCategorize or row.permissions.grantedEdit or row.permissions.grantedPreview or row.permissions.grantedPublish}">
<a href="#">#{row.name}</a>
</c:when>
<c:otherwise>
<span>#{row.name}</span>
</c:otherwise>
</c:choose>
</td>
<td>#{row.title}</td>
<td>#{row.type}</td>
<td>
<c:if test="#{row.folder and row.permissions.grantedEdit}">
<button class="btn btn-info"
data-target="#rename-folder-#{row.name}-dialog"
data-toggle="modal"
title="#{CmsAdminMessages['contentsection.assetfolder.actions.rename_folder.button.label']}">
<bootstrap:svgIcon icon="pen" />
<span class="sr-only">#{CmsAdminMessages['contentsection.assetfolder.actions.rename_folder.button.label']}</span>
</button>
<div aria-hidden="true"
aria-labelledby="rename-folder-#{row.name}-dialog-title"
class="modal fade"
id="rename-folder-#{row.name}-dialog"
tabindex="-1">
<div class="modal-dialog">
<form action="#{mvc.basePath}/#{ContentSectionModel.sectionName}/assetfolders/@rename/#{row.folderPath}"
class="modal-content"
method="post">
<div class="modal-header">
<h2 class="modal-title"
id="rename-folder-#{row.name}-dialog-title">
#{CmsAdminMessages.getMessage('contentsection.assetfolder.rename_folder_dialog.title', [row.folderPath])}
</h2>
<button aria-label="#{CmsMessages['contentsection.assetfolder.rename_folder_dialog.close']}"
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="rename-folder-name">
#{CmsAdminMessages['contentsection.assetfolder.rename_folder.name.label']}
</label>
<input aria-describedby="rename-folder-name-help"
class="form-control"
id="rename-folder-name"
name="folderName"
pattern="^([a-zA-Z0-9-_]*)$"
type="text"
value="#{row.name}" />
<small class="form-text text-muted"
id="rename-folder-name-help">
#{CmsAdminMessages['contentsection.assestfolder.rename_folder.name.help']}
</small>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-secondary"
data-dismiss="modal"
type="button" >#{CmsAdminMessages['contentsection.assetfolder.rename_folder_dialog.close']}</button>
<button class="btn btn-primary"
type="submit">#{CmsAdminMessages['contentsection.assetfolder.rename_folder_dialog.save']}</button>
</div>
</form>
</div>
</div>
</c:if>
</td>
<td>
<c:if test="#{row.deletable}">
<button class="btn btn-danger"
title="#{CmsAdminMessages['contentsection.assetfolder.actions.delete.button.label']}">
<bootstrap:svgIcon icon="x-circle" />
<span class="sr-only">#{CmsAdminMessages['contentsection.assetfolder.actions.delete.button.label']}</span>
</button>
</c:if>
</td>
</tr>
</c:forEach>
</tbody>
</table>
<nav aria-label="#{CmsAdminMessages['contentsection.assetfolder.pagination.label']}">
<ul class="justify-content-center pagination">
<c:choose>
<c:when test="${AssetFolderModel.currentPage gt 1}">
<li class="page-item">
<a class="page-link"
href="?firstResult=#{(AssetFolderModel.currentPage - 1) * AssetFolderModel.maxResults}&amp;maxResults=${AssetFolderModel.maxResults}">
<bootstrap:svgIcon icon="caret-left" />
<span class="sr-only">#{CmsAdminMessages['contentsection.assetfolder.pagination.previous_page']}</span>
</a>
</li>
</c:when>
<c:otherwise>
<li class="page-item disabled" tabindex="-1" aria-disabled="true">
<a class="page-link"
href="#">
<bootstrap:svgIcon icon="caret-left" />
<span class="sr-only">#{CmsAdminMessages['contentsection.assetfolder.pagination.previous_page']}</span>
</a>
</li>
</c:otherwise>
</c:choose>
<c:forEach begin="1"
end="${AssetFolderModel.numberOfPages}"
var="page">
<li class="page-item ${page == AssetFolderModel.currentPage ? 'active' : ''}">
<a class="page-link"
href="?firstResult=#{(page - 1) * AssetFolderModel.maxResults}&amp;maxResults=${AssetFolderModel.maxResults}">${page}</a>
</li>
</c:forEach>
<c:choose>
<c:when test="#{AssetFolderModel.currentPage lt (AssetFolderModel.numberOfPages)}">
<li class="page-item">
<a class="page-link"
href="?firstResult=${(AssetFolderModel.currentPage + 1) * AssetFolderModel.maxResults}&amp;maxResults=${AssetFolderModel.maxResults}">
<bootstrap:svgIcon icon="caret-right" />
<span class="sr-only">#{CmsAdminMessages['contentsection.assetfolder.pagination.next_page']}</span>
</a>
</li>
</c:when>
<c:otherwise>
<li class="page-item disabled" tabindex="-1" aria-disabled="true">
<a class="page-link" href="#">
<bootstrap:svgIcon icon="caret-right" />
<span class="sr-only">#{CmsAdminMessages['contentsection.assetfolder.pagination.next_page']}</span>
</a>
</li>
</c:otherwise>
</c:choose>
</ul>
</nav>
<h2>#{CmsAdminMessages['contentsection.assetfolder.your_permissions.title']}</h2>
<table class="table table-hover permissions-table">
<thead class="thead-light">
<tr>
<c:forEach items="#{AssetFolderModel.privileges}"
var="privilege">
<th class="text-center">
<code>#{CmsAdminMessages['asset_permissions.'.concat(privilege)]}</code>
</th>
</c:forEach>
</tr>
</thead>
<tbody>
<tr>
<c:forEach items="#{AssetFolderModel.currentUserPermissions}"
var="granted">
<td class="text-center permissions-col">
<c:choose>
<c:when test="#{granted.granted}">
<div class="text-success">
<bootstrap:svgIcon icon="check" />
<span class="sr-only">#{CmsAdminMessages['contentsection.assetfolder.permissions.granted']}</span>
</div>
</c:when>
<c:otherwise>
<div class="text-danger">
<bootstrap:svgIcon icon="x" />
<span class="sr-only">#{CmsAdminMessages['contentsection.assetfolder.permissions.denied']}</span>
</div>
</c:otherwise>
</c:choose>
</td>
</c:forEach>
</tr>
</tbody>
</table>
<c:if test="#{AssetFolderModel.canCreateAssets and AssetFolderModel.canCreateSubFolders}">
<h2>#{CmsAdminMessages['contentsection.assetfolder.permissions.title']}</h2>
<table class="table table-hover permissions-table">
<thead class="thead-light">
<tr>
<th class="">
#{CmsAdminMessages['contentsection.assetfolder.permissions.role.header']}
</th>
<c:forEach items="#{AssetFolderModel.privileges}"
var="privilege">
<th class="text-center">
<code>#{CmsAdminMessages['asset_permissions.'.concat(privilege)]}</code>
</th>
</c:forEach>
<th>
#{CmsAdminMessages['contentsection.assetfolder.permissions.actions']}
</th>
</tr>
</thead>
<tbody>
<c:forEach items="#{AssetFolderModel.grantedPermissions}"
var="permissions">
<tr>
<td>#{permissions.grantee}</td>
<c:forEach items="#{permissions.grantedPrivileges}"
var="granted">
<td class="text-center permissions-col">
<c:choose>
<c:when test="#{granted.inherited}">
<div class="text-secondary">
<bootstrap:svgIcon icon="check" />
<span class="sr-only">#{CmsAdminMessages['contentsection.assetfolder.permissions.inherited']}</span>
</div>
</c:when>
<c:when test="#{granted.granted}">
<div class="text-success">
<bootstrap:svgIcon icon="check" />
<span class="sr-only">#{CmsAdminMessages['contentsection.assetfolder.permissions.granted']}</span>
</div>
</c:when>
<c:otherwise>
<div class="text-danger">
<bootstrap:svgIcon icon="x" />
<span class="sr-only">#{CmsAdminMessages['contentsection.assetfolder.permissions.denied']}</span>
</div>
</c:otherwise>
</c:choose>
</td>
</c:forEach>
<td>
<button class="btn btn-info"
data-target="#edit-permissions-for-#{permissions.grantee}"
data-toggle="modal"
type="button">
<bootstrap:svgIcon icon="pen" />
<span>#{CmsAdminMessages['contentsection.assetfolder.permissions.edit']}</span>
</button>
<div aria-hidden="true"
aria-labelledby="edit-permissions-for-#{permissions.grantee}-title"
class="modal fade"
id="edit-permissions-for-#{permissions.grantee}"
tabindex="-1">
<div class="modal-dialog">
<form action="#{mvc.basePath}/#{ContentSectionModel.sectionName}/assetfolders/@permissions/${permissions.grantee}/#{AssetFolderModel.path}"
class="modal-content"
method="post">
<div class="modal-header">
<h3 class="modal-title"
id="edit-permissions-for-#{permissions.grantee}-title">
#{CmsAdminMessages.getMessage('contentsection.assetfolder.permissions.dialog.title', [AssetFolderModel.path, permissions.grantee])}
</h3>
<button aria-label="#{CmsAdminMessages['contentsection.assetfolder.permissions.dialog.close']}"
class="close"
data-dismiss="modal"
type="button">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<c:forEach items="#{permissions.grantedPrivileges}"
var="granted">
<div class="form-check">
<input checked="#{granted.granted ? 'checked' : ''}"
class="form-check-input"
id="edit-permissions-for-#{permissions.grantee}-#{granted.privilege}"
name="permissions"
type="checkbox"
value="#{granted.privilege}" />
<label class="form-check-label"
for="edit-permissions-for-#{permissions.grantee}-#{granted.privilege}">
#{CmsAdminMessages['asset_permissions.'.concat(granted.privilege)]}
</label>
<c:if test="#{granted.inherited}">
<span class="form-text">(#{CmsAdminMessages['contentsection.assetfolder.permissions.dialog.granted_by_inheritence']})</span>
</c:if>
</div>
</c:forEach>
</div>
<div class="modal-footer">
<button class="btn btn-secondary"
data-dismiss="modal"
type="button" >#{CmsAdminMessages['contentsection.assetfolder.permissions.dialog.close']}</button>
<button class="btn btn-primary"
type="submit" >#{CmsAdminMessages['contentsection.assetfolder.permissions.dialog.submit']}</button>
</div>
</form>
</div>
</div>
</td>
</tr>
</c:forEach>
</tbody>
</table>
</c:if>
</div>
</div>
</div>
</ui:define>
</ui:composition>
</html>

View File

@ -41,7 +41,7 @@
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a class="nav-link #{activePage == 'categories' ? 'active' : ''}" <a class="nav-link #{activePage == 'categories' ? 'active' : ''}"
href='#{mvc.basePath}/#{ContentSectionModel.sectionName}/categories'> href='#{mvc.basePath}/#{ContentSectionModel.sectionName}/categorysystems'>
<bootstrap:svgIcon icon="diagram-3-fill" /> <bootstrap:svgIcon icon="diagram-3-fill" />
<span>#{CmsAdminMessages['contentsection.categories.title']}</span> <span>#{CmsAdminMessages['contentsection.categories.title']}</span>
</a> </a>

View File

@ -7,7 +7,7 @@
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"> xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
<ui:composition> <ui:composition>
<c:choose> <c:choose>
<c:when test="#{not empty folder.subFolders}"> <c:when test="#{not empty folder.subFolders}">
<li class="folder-tree-node list-group-item"> <li class="folder-tree-node list-group-item">
<div class="d-flex"> <div class="d-flex">
<button class="btn btn-light p-0 subfolders-toggler" <button class="btn btn-light p-0 subfolders-toggler"
@ -28,7 +28,6 @@
<span>#{folder.name}</span> <span>#{folder.name}</span>
</c:otherwise> </c:otherwise>
</c:choose> </c:choose>
</div> </div>
<ul class="border-0 #{!folder.open ? 'collapse' : 'collapse.show'} list-group" <ul class="border-0 #{!folder.open ? 'collapse' : 'collapse.show'} list-group"
id="#{folder.name}-subfolders"> id="#{folder.name}-subfolders">
@ -40,7 +39,6 @@
</ui:include> </ui:include>
</c:forEach> </c:forEach>
</ul> </ul>
</li> </li>
</c:when> </c:when>
<c:otherwise> <c:otherwise>

View File

@ -94,7 +94,8 @@
<form action="#" class="form-inline mr-2" method="GET"> <form action="#" class="form-inline mr-2" method="GET">
<div class="input-group"> <div class="input-group">
<div class="input-group-prepend"> <div class="input-group-prepend">
<label class="mr-2" for="document-folder-filter"> <label class="mr-2"
for="document-folder-filter">
<span>#{CmsAdminMessages['contentsection.documentfolder.filter.label']}</span> <span>#{CmsAdminMessages['contentsection.documentfolder.filter.label']}</span>
</label> </label>
</div> </div>

View File

@ -95,3 +95,49 @@ contentsection.documentfolder.rename_folder_dialog.close=Cancel
contentsection.documentfolder.rename_folder_dialog.save=Rename folder contentsection.documentfolder.rename_folder_dialog.save=Rename folder
contentsection.documentfolder.rename_folder.name.label=Name contentsection.documentfolder.rename_folder.name.label=Name
contentsection.documentfolder.rename_folder.name.help=The new name of the folder. May only contain the letters a to z and A to Z, numbers, the dash and the underscore contentsection.documentfolder.rename_folder.name.help=The new name of the folder. May only contain the letters a to z and A to Z, numbers, the dash and the underscore
contentsection.assettfolder.foldersnav.subfolders.expand=Show subfolders of
contentsection.assetfolder.heading=Content Section {0} Media & Data Folders
contentsection.assetfolders.searchbox.label=Search in media & data folders
contentsection.assetfolders.searchbox.submit=Search
contentsection.assetfolders.root.title=Media & Data
contentsection.assetfolder.filter.label=Filter media & data asests
contentsection.assetfolder.filter.submit=Apply filter
contentsection.assetfolder.pageof=Page {0} of {1}
contentsection.assetfolder.add_subfolder=Add new subfolder
contentsection.assetfolder.new_subfolder_dialog.title=Create new subfolder
contentsection.assetfolder.new_subfolder_dialog.close=Cancel
contentsection.assetfolder.new_subfolder.name.label=Name
contentsection.assetfolder.new_subfolder.name.help=The name of the new subfolder. May only contain the letters a to z and A to Z, numbers, the dash and the underscore
contentsection.assetfolder.new_subfolder_dialog.submit=Create new folder
contentsection.assetfolder.add_asset=Create new media & data asset
contentsection.assetfolder.headers.name.label=Name
contentsection.assetfolder.headers.title.label=Title
contentsection.assetfolder.headers.type.label=Type
contentsection.assetfolder.headers.actions.label=Actions
contentsection.assetfolder.actions.rename_folder.button.label=Rename folder
contentsection.assetfolder.rename_folder_dialog.title=Rename folder /{0}
contentsection.assetfolder.rename_folder_dialog.close=Cancel
contentsection.assetfolder.rename_folder.name.label=Name
contentsection.assestfolder.rename_folder.name.help=The new name of the folder. May only contain the letters a to z and A to Z, numbers, the dash and the underscore
contentsection.assetfolder.rename_folder_dialog.save=Rename folder
contentsection.assetfolder.actions.delete.button.label=Delete
contentsection.assetfolder.pagination.label=Pages
contentsection.assetfolder.pagination.previous_page=Previous page
contentsection.assetfolder.pagination.next_page=Next page
contentsection.assetfolder.your_permissions.title=Your permissions
contentsection.assetfolder.permissions.granted=Granted
contentsection.assetfolder.permissions.denied=Denied
contentsection.assetfolder.permissions.title=Permissions
contentsection.assetfolder.permissions.role.header=Role
contentsection.assetfolder.permissions.actions=Actions
contentsection.assetfolder.permissions.inherited=Inherited
contentsection.assetfolder.permissions.edit=Edit
contentsection.assetfolder.permissions.dialog.title=Edit permissions of role {1} for folder {0}
contentsection.assetfolder.permissions.dialog.close=Cancel
contentsection.assetfolder.permissions.dialog.granted_by_inheritence=Granted by inhertitence
contentsection.assetfolder.permissions.dialog.submit=Apply changed permissions
asset_permissions.create_new_assets=Create new media & data objects
asset_permissions.delete_assets=Delete
asset_permissions.use_asset=Use
asset_permissions.edit_asset=Edit
asset_permissions.view_asset=View

View File

@ -53,7 +53,7 @@ contentsections.documentfolder.not_found=Es wurde kein Ordner mit dem Pfad {1} i
contentsection.not_found.title=Content Section nicht gefunden contentsection.not_found.title=Content Section nicht gefunden
contentsection.documentfolders.searchbox.label=In Dokument-Ordnern suchen contentsection.documentfolders.searchbox.label=In Dokument-Ordnern suchen
contentsection.documentfolders.searchbox.submit=Suchen contentsection.documentfolders.searchbox.submit=Suchen
contentsection.assetfolders.title=Media & Data contentsection.assetfolders.title=Medien & Daten
contentsection.categories.title=Kategorien & Seitenb\u00e4ume contentsection.categories.title=Kategorien & Seitenb\u00e4ume
contentsection.configuration.title=Konfiguration contentsection.configuration.title=Konfiguration
contentsection.documentfolder.new_subfolder_dialog.title=Neuen Unterordner erstellen contentsection.documentfolder.new_subfolder_dialog.title=Neuen Unterordner erstellen
@ -95,3 +95,49 @@ contentsection.documentfolder.rename_folder_dialog.close=Abbrechen
contentsection.documentfolder.rename_folder_dialog.save=Ordner umbenennen contentsection.documentfolder.rename_folder_dialog.save=Ordner umbenennen
contentsection.documentfolder.rename_folder.name.label=Name contentsection.documentfolder.rename_folder.name.label=Name
contentsection.documentfolder.rename_folder.name.help=Der neue Name des Ordners. Darf nur die Buchstaben a bis z und A bis Z, Ziffern, den Bindestrich und den Unterstrich enthalten. contentsection.documentfolder.rename_folder.name.help=Der neue Name des Ordners. Darf nur die Buchstaben a bis z und A bis Z, Ziffern, den Bindestrich und den Unterstrich enthalten.
contentsection.assettfolder.foldersnav.subfolders.expand=Unterordner anzeigen
contentsection.assetfolder.heading=Content Section {0} Medien & Daten Ordner
contentsection.assetfolders.searchbox.label=Suche in Medien und Daten Ordnern
contentsection.assetfolders.searchbox.submit=Suche
contentsection.assetfolders.root.title=Medien & Daten
contentsection.assetfolder.filter.label=Medien & Daten Objekte filtern
contentsection.assetfolder.filter.submit=Filter anwenden
contentsection.assetfolder.pageof=Seite {0} von {1}
contentsection.assetfolder.add_subfolder=Unterordner erstellen
contentsection.assetfolder.new_subfolder_dialog.title=Neuen Unterordner erstellen
contentsection.assetfolder.new_subfolder_dialog.close=Abbrechen
contentsection.assetfolder.new_subfolder.name.label=Name
contentsection.assetfolder.new_subfolder.name.help=Der Name des neuen Ordners. Darf nur die Buchstaben a bis z und A bis Z, Ziffern, den Bindestrich und den Unterstrich enthalten.
contentsection.assetfolder.new_subfolder_dialog.submit=Neuen Ordner anlegen
contentsection.assetfolder.add_asset=Neues Medien & Daten Objekt anlegen
contentsection.assetfolder.headers.name.label=Name
contentsection.assetfolder.headers.title.label=Title
contentsection.assetfolder.headers.type.label=Typ
contentsection.assetfolder.headers.actions.label=Aktionen
contentsection.assetfolder.actions.rename_folder.button.label=Ordner umbenennen
contentsection.assetfolder.rename_folder_dialog.title=Ordner /{0} umbenennen
contentsection.assetfolder.rename_folder_dialog.close=Abbrechen
contentsection.assetfolder.rename_folder.name.label=Name
contentsection.assestfolder.rename_folder.name.help=Der neue Name des Ordners. Darf nur die Buchstaben a bis z und A bis Z, Ziffern, den Bindestrich und den Unterstrich enthalten.
contentsection.assetfolder.rename_folder_dialog.save=Ordner umbenennen
contentsection.assetfolder.actions.delete.button.label=L\u00f6schen
contentsection.assetfolder.pagination.label=Seiten
contentsection.assetfolder.pagination.previous_page=Eine Seite zur\u00fcck
contentsection.assetfolder.pagination.next_page=Eine Seite vor
contentsection.assetfolder.your_permissions.title=Ihre Berechtigungen
contentsection.assetfolder.permissions.granted=Gew\u00e4hrt
contentsection.assetfolder.permissions.denied=Verweigert
contentsection.assetfolder.permissions.title=Berechtigungen
contentsection.assetfolder.permissions.role.header=Rolle
contentsection.assetfolder.permissions.actions=Aktionen
contentsection.assetfolder.permissions.inherited=Geerbt
contentsection.assetfolder.permissions.edit=Bearbeiten
contentsection.assetfolder.permissions.dialog.title=Berechtigungen der Rolle {1} f\u00fcr Ordner {0} bearbeiten
contentsection.assetfolder.permissions.dialog.close=Abbrechen
contentsection.assetfolder.permissions.dialog.granted_by_inheritence=Durch \u00fcbergeordnetes Objekt gew\u00e4hrt
contentsection.assetfolder.permissions.dialog.submit=Berechtigungen anwenden
asset_permissions.create_new_assets=Neue Medien & Daten Objekte anlegen
asset_permissions.delete_assets=L\u00f6schen
asset_permissions.use_asset=Asset
asset_permissions.edit_asset=Bearbeiten
asset_permissions.view_asset=Betrachten