Some fixes for themes
parent
39dbe43d1d
commit
ba96a3c280
|
|
@ -1,11 +1,21 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Default Template</title>
|
||||
<link href="${themeUrl}/styles/librecms.css" rel="stylesheet" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Default Template</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>This theme works.</p>
|
||||
<pre>${themeUrl}</pre>
|
||||
<div class="container">
|
||||
<p>This theme works.</p>
|
||||
<dl>
|
||||
<dt>application</dt>
|
||||
<dd>${application}</dd>
|
||||
<dt>themeUrl</dt>
|
||||
<dd>${themeUrl}</dd>
|
||||
<dt>view</dt>
|
||||
<dd>${view!""}</dd>
|
||||
</dl>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<link href="${themeUrl}/styles/librecms.css" rel="stylesheet" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Default Template</title>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<h1>Index page</h1>
|
||||
<p>This theme works.</p>
|
||||
<dl>
|
||||
<dt>application</dt>
|
||||
<dd>${application}</dd>
|
||||
<dt>themeUrl</dt>
|
||||
<dd>${themeUrl}</dd>
|
||||
<dt>view</dt>
|
||||
<dd>${view!""}</dd>
|
||||
</dl>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -55,6 +55,30 @@
|
|||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"index-page": {
|
||||
"description": {
|
||||
"values": {
|
||||
"value": [
|
||||
{
|
||||
"lang": "en",
|
||||
"value": "Template for the index page of a site."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"name": "index-page",
|
||||
"path": "templates/index-page.html.ftl",
|
||||
"title": {
|
||||
"values": {
|
||||
"value": [
|
||||
{
|
||||
"lang": "en",
|
||||
"value": "Index Page"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
|
|
@ -62,6 +86,11 @@
|
|||
"default": {
|
||||
"default": "default",
|
||||
"@default": "default"
|
||||
},
|
||||
"pages": {
|
||||
"index": "index-page",
|
||||
"default": "default",
|
||||
"@default": "default"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -101,6 +101,7 @@ public class PageManager {
|
|||
return pageForCategory.get();
|
||||
} else {
|
||||
final Page page = new Page();
|
||||
page.setDisplayName(category.getDisplayName());
|
||||
pageRepo.save(page);
|
||||
categoryManager.addObjectToCategory(page,
|
||||
category,
|
||||
|
|
|
|||
|
|
@ -33,6 +33,8 @@ import javax.inject.Named;
|
|||
@Named("CmsPageDetailsModel")
|
||||
public class PageDetailsModel {
|
||||
|
||||
private String displayName;
|
||||
|
||||
private String site;
|
||||
|
||||
private String categoryDomain;
|
||||
|
|
@ -43,6 +45,14 @@ public class PageDetailsModel {
|
|||
|
||||
private List<PagePropertyModel> pageProperties;
|
||||
|
||||
public String getDisplayName() {
|
||||
return displayName;
|
||||
}
|
||||
|
||||
protected void setDisplayName(final String displayName) {
|
||||
this.displayName = displayName;
|
||||
}
|
||||
|
||||
public String getSite() {
|
||||
return site;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,9 +20,7 @@ package org.librecms.ui;
|
|||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
@ -40,6 +38,8 @@ public class PageTreeNodeModel {
|
|||
|
||||
private boolean pageAssigned;
|
||||
|
||||
private String displayName;
|
||||
|
||||
private List<PagePropertyModel> properties;
|
||||
|
||||
public PageTreeNodeModel() {
|
||||
|
|
@ -86,6 +86,14 @@ public class PageTreeNodeModel {
|
|||
public void setPageAssigned(final boolean pageAssigned) {
|
||||
this.pageAssigned = pageAssigned;
|
||||
}
|
||||
|
||||
public String getDisplayName() {
|
||||
return displayName;
|
||||
}
|
||||
|
||||
public void setDisplayName(final String displayName) {
|
||||
this.displayName = displayName;
|
||||
}
|
||||
|
||||
public List<PagePropertyModel> getProperties() {
|
||||
return Collections.unmodifiableList(properties);
|
||||
|
|
|
|||
|
|
@ -360,6 +360,7 @@ public class PagesController {
|
|||
pageDetailsModel.setCategoryPath(
|
||||
categoryManager.getCategoryPath(category)
|
||||
);
|
||||
pageDetailsModel.setDisplayName(page.getDisplayName());
|
||||
pageDetailsModel.setPageProperties(
|
||||
page
|
||||
.getProperties()
|
||||
|
|
@ -373,6 +374,58 @@ public class PagesController {
|
|||
|
||||
return "org/librecms/ui/cms/page-details.xhtml";
|
||||
}
|
||||
|
||||
@POST
|
||||
@Path("/{pagesInstance}/{category:[\\w\\-@/]+}/@details")
|
||||
@AuthorizationRequired
|
||||
@RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN)
|
||||
@Transactional(Transactional.TxType.REQUIRED)
|
||||
public String updatePageDetails(
|
||||
@PathParam("pagesInstance") final String pagesInstance,
|
||||
@PathParam("category") final String categoryParam,
|
||||
@FormParam("displayName") final String displayName
|
||||
) {
|
||||
final Optional<Pages> pagesResult = findPages(pagesInstance);
|
||||
if (pagesResult.isEmpty()) {
|
||||
return showPagesNotFound(pagesInstance);
|
||||
}
|
||||
final Pages pages = pagesResult.get();
|
||||
initPagesDetailsModel(pages);
|
||||
|
||||
final Optional<Category> categoryResult;
|
||||
if ("@root".equals(categoryParam)) {
|
||||
categoryResult = categoryRepo.findByPath(
|
||||
pages.getCategoryDomain(),
|
||||
"/"
|
||||
);
|
||||
} else {
|
||||
categoryResult = categoryRepo.findByPath(
|
||||
pages.getCategoryDomain(),
|
||||
categoryParam
|
||||
);
|
||||
}
|
||||
|
||||
if (categoryResult.isEmpty()) {
|
||||
models.put("categoryNotFound", true);
|
||||
models.put(
|
||||
"categoryDomain", pages.getCategoryDomain().getDomainKey()
|
||||
);
|
||||
models.put("category", categoryParam);
|
||||
return showPagesDetails(pagesInstance);
|
||||
}
|
||||
|
||||
final Category category = categoryResult.get();
|
||||
|
||||
final Page page = pageManager.findPageForCategory(category);
|
||||
page.setDisplayName(displayName);
|
||||
pageRepo.save(page);
|
||||
|
||||
return String.format(
|
||||
"redirect:/pages/%s/%s/@details",
|
||||
pagesInstance,
|
||||
categoryParam
|
||||
);
|
||||
}
|
||||
|
||||
@POST
|
||||
@Path("/{pagesInstance}/{category:[\\w\\-@/]+}/@remove")
|
||||
|
|
@ -602,6 +655,7 @@ public class PagesController {
|
|||
node.setCategoryPath(categoryManager.getCategoryPath(category));
|
||||
node.setCategoryName(category.getName());
|
||||
node.setPageAssigned(pageResult.isPresent());
|
||||
node.setDisplayName(pageResult.map(Page::getDisplayName).orElse(""));
|
||||
|
||||
node.setProperties(
|
||||
pageResult
|
||||
|
|
|
|||
|
|
@ -49,6 +49,73 @@
|
|||
</div>
|
||||
</c:if>
|
||||
|
||||
<p>
|
||||
#{CmsAdminMessages['pages.page.details.displayname']}:
|
||||
#{CmsPageDetailsModel.displayName}
|
||||
<button class="btn btn-primary"
|
||||
data-toggle="modal"
|
||||
data-target="#edit-displayname-dialog"
|
||||
type="button">
|
||||
<bootstrap:svgIcon icon="pen" />
|
||||
<span class="sr-only">#{CmsAdminMessages['pages.page.details.displayname.edit']}</span>
|
||||
</button>
|
||||
</p>
|
||||
|
||||
<div aria-hidden="true"
|
||||
aria-describedby="edit-displayname-dialog-title"
|
||||
class="modal fade"
|
||||
id="edit-displayname-dialog"
|
||||
tab-index="-1">
|
||||
<div class="modal-dialog">
|
||||
<form action="#{mvc.basePath}/pages/ID-#{CmsPagesDetailsModel.pagesId}/#{CmsPageDetailsModel.categoryPath}/@details"
|
||||
class="modal-content"
|
||||
method="post">
|
||||
<div class="modal-header">
|
||||
<h2 class="modal-title"
|
||||
id="edit-displayname-dialog-title">
|
||||
#{CmsAdminMessages['pages.page.details.displayname.edit']}
|
||||
</h2>
|
||||
<button aria-label="#{CmsAdminMessages['pages.page.details.displayname.dialog.close']}"
|
||||
class="close"
|
||||
data-dismiss="modal"
|
||||
type="button">
|
||||
<bootstrap:svgIcon icon="x-circle" />
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="form-group">
|
||||
<label for="displayname">
|
||||
#{CmsAdminMessages['pages.page.details.displayname.dialog.displayname.label']}
|
||||
</label>
|
||||
<input aria-describedby="displayname-help"
|
||||
class="form-control"
|
||||
id="displayname"
|
||||
name="displayName"
|
||||
pattern="^([a-zA-Z0-9-_]*)$"
|
||||
required="true"
|
||||
type="text"
|
||||
value="#{CmsPageDetailsModel.displayName}" />
|
||||
<span class="form-text text-muted"
|
||||
id="displyname-help">
|
||||
#{CmsAdminMessages['pages.page.details.displayname.dialog.displayname.help']}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="btn btn-danger"
|
||||
data-dismiss="modal"
|
||||
type="button">
|
||||
#{CmsAdminMessages['pages.page.details.displayname.dialog.close']}
|
||||
</button>
|
||||
<button class="btn btn-success"
|
||||
type="submit">
|
||||
#{CmsAdminMessages['pages.page.details.displayname.dialog.submit']}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="text-right mb-2">
|
||||
<button class="btn btn-secondary"
|
||||
data-toggle="modal"
|
||||
|
|
@ -88,7 +155,7 @@
|
|||
class="form-control"
|
||||
id="property-key"
|
||||
name="propertyKey"
|
||||
pattern="^([a-z0-9-_]*)$"
|
||||
pattern="^([a-zA-Z0-9-_]*)$"
|
||||
required="true"
|
||||
type="text" />
|
||||
<span class="form-text text-muted"
|
||||
|
|
|
|||
|
|
@ -72,6 +72,12 @@
|
|||
<dd>
|
||||
#{node.categoryPath}
|
||||
</dd>
|
||||
<dt>
|
||||
#{CmsAdminMessages['pages.page.details.dialog.displayname.label']}
|
||||
</dt>
|
||||
<dd>
|
||||
#{node.displayName}
|
||||
</dd>
|
||||
<dt>
|
||||
#{CmsAdminMessages['pages.page.details.dialog.properties.label']}
|
||||
</dt>
|
||||
|
|
|
|||
|
|
@ -1023,3 +1023,10 @@ contentsection.documentfolder.actions.delete_item.cancel=Cancel
|
|||
contentsection.documentfolder.actions.delete_item.confirm=Delete document
|
||||
contentsection.documentfolder.actions.delete_item.dialog.title=Confirm deletation of document
|
||||
contentsection.documentfolder.actions.delete_item.dialog.message=Are you sure to delete the document {0}/{1}?
|
||||
pages.page.details.displayname=Display name (view)
|
||||
pages.page.details.displayname.dialog.close=Cancel
|
||||
pages.page.details.displayname.dialog.displayname.label=Display name
|
||||
pages.page.details.displayname.dialog.displayname.help=The display name of the page. Also the view used by the theme for displaying the page.
|
||||
pages.page.details.displayname.dialog.submit=Save
|
||||
pages.page.details.displayname.edit=Edit display name
|
||||
pages.page.details.dialog.displayname.label=Display name
|
||||
|
|
|
|||
|
|
@ -1024,3 +1024,10 @@ contentsection.documentfolder.actions.delete_item.cancel=Abbrechen
|
|||
contentsection.documentfolder.actions.delete_item.confirm=Dokument l\u00f6schen
|
||||
contentsection.documentfolder.actions.delete_item.dialog.title=L\u00f6schen des Dokumentes best\u00e4tigen
|
||||
contentsection.documentfolder.actions.delete_item.dialog.message=Sind Sie sicher, dass Sie das Dokument {0}/{1} l\u00f6schen wollen?
|
||||
pages.page.details.displayname=Display name (view)
|
||||
pages.page.details.displayname.dialog.close=Abbrechen
|
||||
pages.page.details.displayname.dialog.displayname.label=Display name
|
||||
pages.page.details.displayname.dialog.displayname.help=The display name of the page. Also the view used by the theme for displaying the page.
|
||||
pages.page.details.displayname.dialog.submit=Speichern
|
||||
pages.page.details.displayname.edit=Display Name bearbeiten
|
||||
pages.page.details.dialog.displayname.label=Display Name
|
||||
|
|
|
|||
|
|
@ -18,15 +18,6 @@
|
|||
*/
|
||||
package org.libreccm.theming.mvc;
|
||||
|
||||
import org.libreccm.core.CoreConstants;
|
||||
import org.libreccm.sites.Site;
|
||||
import org.libreccm.sites.SiteRepository;
|
||||
import org.libreccm.theming.ThemeInfo;
|
||||
import org.libreccm.theming.ThemeVersion;
|
||||
import org.libreccm.theming.Themes;
|
||||
import org.libreccm.theming.manifest.ThemeManifest;
|
||||
import org.libreccm.theming.manifest.ThemeTemplate;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
|
@ -41,6 +32,15 @@ import javax.ws.rs.WebApplicationException;
|
|||
import javax.ws.rs.core.Response;
|
||||
import javax.ws.rs.core.UriInfo;
|
||||
|
||||
import org.libreccm.core.CoreConstants;
|
||||
import org.libreccm.sites.Site;
|
||||
import org.libreccm.sites.SiteRepository;
|
||||
import org.libreccm.theming.ThemeInfo;
|
||||
import org.libreccm.theming.ThemeVersion;
|
||||
import org.libreccm.theming.Themes;
|
||||
import org.libreccm.theming.manifest.ThemeManifest;
|
||||
import org.libreccm.theming.manifest.ThemeTemplate;
|
||||
|
||||
/**
|
||||
* Main integration point for MVC application with the theme system.
|
||||
*
|
||||
|
|
@ -144,6 +144,7 @@ public class ThemesMvc {
|
|||
)
|
||||
);
|
||||
|
||||
models.put("application", application);
|
||||
models.put("contextPath", servletContext.getContextPath());
|
||||
models.put("themeName", themeInfo.getName());
|
||||
models.put("themeVersion", themeInfo.getVersion());
|
||||
|
|
@ -156,6 +157,7 @@ public class ThemesMvc {
|
|||
themeInfo.getVersion()
|
||||
)
|
||||
);
|
||||
models.put("view", view);
|
||||
|
||||
return String.format(
|
||||
"/@themes/%s/%s/%s",
|
||||
|
|
|
|||
Loading…
Reference in New Issue