package org.brixcms.plugin.content.blog.tile.post;
import org.apache.wicket.datetime.markup.html.basic.DateLabel;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.OnLoadHeaderItem;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.image.Image;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.util.convert.IConverter;
import org.brixcms.jcr.wrapper.BrixNode;
import org.brixcms.plugin.content.blog.post.PostNode;
import org.brixcms.plugin.content.blog.post.admin.resource.ResourceConverter;
import org.brixcms.plugin.content.blog.tile.post.comment.CommentsLinkPanel;
import org.brixcms.plugin.content.blog.tile.post.comment.CommentsPanel;
import org.brixcms.plugin.content.resource.FileResourceReference;
import org.brixcms.plugin.content.resource.ResourceUtils;
import org.brixcms.web.generic.BrixGenericPanel;
import org.brixcms.web.nodepage.BrixPageParameters;
import org.brixcms.web.nodepage.PageParametersLink;
/**
* @author dan.simko@gmail.com
*/
@SuppressWarnings("serial")
public class PostPanel extends BrixGenericPanel<PostNode> {
private static final String COMMENTS_PANEL_ID = "comments";
public static final String ANCHOR_PARAM_NAME = "anchor";
private boolean anchorExists;
public PostPanel(String id, IModel<PostNode> model, boolean expanded) {
super(id, new CompoundPropertyModel<>(model));
PageParametersLink link = new PostLink("link", model);
add(link.add(new Label("title")));
BrixNode featuredImage = getModelObject().getFeaturedImageReference().getNodeModel().getObject();
PostLink featuredImageLink = new PostLink("imgLink", model);
featuredImageLink.add(new Image("img", FileResourceReference.INSTANCE, ResourceUtils.getResourceParameters(featuredImage)));
add(featuredImageLink.setVisible(featuredImage != null));
add(new Label("createdBy"));
add(DateLabel.forDateStyle("publish", "FS"));
add(new Label("dataAsString") {
@Override
@SuppressWarnings("unchecked")
public <C> IConverter<C> getConverter(final Class<C> type) {
return (IConverter<C>) new ResourceConverter(PostPanel.this);
}
}.setEscapeModelStrings(false));
if (expanded) {
add(new CommentsPanel<>(COMMENTS_PANEL_ID, model, true));
} else {
add(new CommentsLinkPanel(COMMENTS_PANEL_ID, model));
}
}
@Override
protected void onConfigure() {
super.onConfigure();
anchorExists = BrixPageParameters.getCurrent().get(ANCHOR_PARAM_NAME).toBoolean(false);
}
@Override
public void renderHead(IHeaderResponse response) {
super.renderHead(response);
if (anchorExists) {
response.render(new OnLoadHeaderItem("location.href='#comments-anchor';"));
}
}
private static class PostLink extends PageParametersLink {
public PostLink(String id, IModel<PostNode> model) {
super(id, model);
}
@Override
protected void contributeToPageParameters(BrixPageParameters parameters) {
super.contributeToPageParameters(parameters);
parameters.set(0, ((PostNode) getDefaultModelObject()).getName());
}
}
}