Some fixes for themes
parent
39dbe43d1d
commit
ba96a3c280
|
|
@ -1,11 +1,21 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>Default Template</title>
|
|
||||||
<link href="${themeUrl}/styles/librecms.css" rel="stylesheet" />
|
<link href="${themeUrl}/styles/librecms.css" rel="stylesheet" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>Default Template</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<p>This theme works.</p>
|
<div class="container">
|
||||||
<pre>${themeUrl}</pre>
|
<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>
|
</body>
|
||||||
</html>
|
</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": "default",
|
||||||
"@default": "default"
|
"@default": "default"
|
||||||
|
},
|
||||||
|
"pages": {
|
||||||
|
"index": "index-page",
|
||||||
|
"default": "default",
|
||||||
|
"@default": "default"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -101,6 +101,7 @@ public class PageManager {
|
||||||
return pageForCategory.get();
|
return pageForCategory.get();
|
||||||
} else {
|
} else {
|
||||||
final Page page = new Page();
|
final Page page = new Page();
|
||||||
|
page.setDisplayName(category.getDisplayName());
|
||||||
pageRepo.save(page);
|
pageRepo.save(page);
|
||||||
categoryManager.addObjectToCategory(page,
|
categoryManager.addObjectToCategory(page,
|
||||||
category,
|
category,
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,8 @@ import javax.inject.Named;
|
||||||
@Named("CmsPageDetailsModel")
|
@Named("CmsPageDetailsModel")
|
||||||
public class PageDetailsModel {
|
public class PageDetailsModel {
|
||||||
|
|
||||||
|
private String displayName;
|
||||||
|
|
||||||
private String site;
|
private String site;
|
||||||
|
|
||||||
private String categoryDomain;
|
private String categoryDomain;
|
||||||
|
|
@ -43,6 +45,14 @@ public class PageDetailsModel {
|
||||||
|
|
||||||
private List<PagePropertyModel> pageProperties;
|
private List<PagePropertyModel> pageProperties;
|
||||||
|
|
||||||
|
public String getDisplayName() {
|
||||||
|
return displayName;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setDisplayName(final String displayName) {
|
||||||
|
this.displayName = displayName;
|
||||||
|
}
|
||||||
|
|
||||||
public String getSite() {
|
public String getSite() {
|
||||||
return site;
|
return site;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,9 +20,7 @@ package org.librecms.ui;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
|
@ -40,6 +38,8 @@ public class PageTreeNodeModel {
|
||||||
|
|
||||||
private boolean pageAssigned;
|
private boolean pageAssigned;
|
||||||
|
|
||||||
|
private String displayName;
|
||||||
|
|
||||||
private List<PagePropertyModel> properties;
|
private List<PagePropertyModel> properties;
|
||||||
|
|
||||||
public PageTreeNodeModel() {
|
public PageTreeNodeModel() {
|
||||||
|
|
@ -87,6 +87,14 @@ public class PageTreeNodeModel {
|
||||||
this.pageAssigned = pageAssigned;
|
this.pageAssigned = pageAssigned;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getDisplayName() {
|
||||||
|
return displayName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDisplayName(final String displayName) {
|
||||||
|
this.displayName = displayName;
|
||||||
|
}
|
||||||
|
|
||||||
public List<PagePropertyModel> getProperties() {
|
public List<PagePropertyModel> getProperties() {
|
||||||
return Collections.unmodifiableList(properties);
|
return Collections.unmodifiableList(properties);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -360,6 +360,7 @@ public class PagesController {
|
||||||
pageDetailsModel.setCategoryPath(
|
pageDetailsModel.setCategoryPath(
|
||||||
categoryManager.getCategoryPath(category)
|
categoryManager.getCategoryPath(category)
|
||||||
);
|
);
|
||||||
|
pageDetailsModel.setDisplayName(page.getDisplayName());
|
||||||
pageDetailsModel.setPageProperties(
|
pageDetailsModel.setPageProperties(
|
||||||
page
|
page
|
||||||
.getProperties()
|
.getProperties()
|
||||||
|
|
@ -374,6 +375,58 @@ public class PagesController {
|
||||||
return "org/librecms/ui/cms/page-details.xhtml";
|
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
|
@POST
|
||||||
@Path("/{pagesInstance}/{category:[\\w\\-@/]+}/@remove")
|
@Path("/{pagesInstance}/{category:[\\w\\-@/]+}/@remove")
|
||||||
@AuthorizationRequired
|
@AuthorizationRequired
|
||||||
|
|
@ -602,6 +655,7 @@ public class PagesController {
|
||||||
node.setCategoryPath(categoryManager.getCategoryPath(category));
|
node.setCategoryPath(categoryManager.getCategoryPath(category));
|
||||||
node.setCategoryName(category.getName());
|
node.setCategoryName(category.getName());
|
||||||
node.setPageAssigned(pageResult.isPresent());
|
node.setPageAssigned(pageResult.isPresent());
|
||||||
|
node.setDisplayName(pageResult.map(Page::getDisplayName).orElse(""));
|
||||||
|
|
||||||
node.setProperties(
|
node.setProperties(
|
||||||
pageResult
|
pageResult
|
||||||
|
|
|
||||||
|
|
@ -49,6 +49,73 @@
|
||||||
</div>
|
</div>
|
||||||
</c:if>
|
</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">
|
<div class="text-right mb-2">
|
||||||
<button class="btn btn-secondary"
|
<button class="btn btn-secondary"
|
||||||
data-toggle="modal"
|
data-toggle="modal"
|
||||||
|
|
@ -88,7 +155,7 @@
|
||||||
class="form-control"
|
class="form-control"
|
||||||
id="property-key"
|
id="property-key"
|
||||||
name="propertyKey"
|
name="propertyKey"
|
||||||
pattern="^([a-z0-9-_]*)$"
|
pattern="^([a-zA-Z0-9-_]*)$"
|
||||||
required="true"
|
required="true"
|
||||||
type="text" />
|
type="text" />
|
||||||
<span class="form-text text-muted"
|
<span class="form-text text-muted"
|
||||||
|
|
|
||||||
|
|
@ -72,6 +72,12 @@
|
||||||
<dd>
|
<dd>
|
||||||
#{node.categoryPath}
|
#{node.categoryPath}
|
||||||
</dd>
|
</dd>
|
||||||
|
<dt>
|
||||||
|
#{CmsAdminMessages['pages.page.details.dialog.displayname.label']}
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
#{node.displayName}
|
||||||
|
</dd>
|
||||||
<dt>
|
<dt>
|
||||||
#{CmsAdminMessages['pages.page.details.dialog.properties.label']}
|
#{CmsAdminMessages['pages.page.details.dialog.properties.label']}
|
||||||
</dt>
|
</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.confirm=Delete document
|
||||||
contentsection.documentfolder.actions.delete_item.dialog.title=Confirm deletation of 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}?
|
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.confirm=Dokument l\u00f6schen
|
||||||
contentsection.documentfolder.actions.delete_item.dialog.title=L\u00f6schen des Dokumentes best\u00e4tigen
|
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?
|
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;
|
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.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
@ -41,6 +32,15 @@ import javax.ws.rs.WebApplicationException;
|
||||||
import javax.ws.rs.core.Response;
|
import javax.ws.rs.core.Response;
|
||||||
import javax.ws.rs.core.UriInfo;
|
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.
|
* 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("contextPath", servletContext.getContextPath());
|
||||||
models.put("themeName", themeInfo.getName());
|
models.put("themeName", themeInfo.getName());
|
||||||
models.put("themeVersion", themeInfo.getVersion());
|
models.put("themeVersion", themeInfo.getVersion());
|
||||||
|
|
@ -156,6 +157,7 @@ public class ThemesMvc {
|
||||||
themeInfo.getVersion()
|
themeInfo.getVersion()
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
models.put("view", view);
|
||||||
|
|
||||||
return String.format(
|
return String.format(
|
||||||
"/@themes/%s/%s/%s",
|
"/@themes/%s/%s/%s",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue