
uk.co.crystalmark.wicket.components.BootstrapTabbedPanel Maven / Gradle / Ivy
The newest version!
package uk.co.crystalmark.wicket.components;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.extensions.markup.html.tabs.ITab;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.util.string.StringValue;
public class BootstrapTabbedPanel extends Panel {
private static final long serialVersionUID = 1L;
private static final Log log = LogFactory.getLog(BootstrapTabbedPanel.class);
private final IModel> tabs;
public BootstrapTabbedPanel(final String id, final IModel> tabs) {
super(id);
this.tabs = tabs;
}
@Override
public void onBeforeRender() {
super.onBeforeRender();
if (!hasBeenRendered()) {
final IModel selectedTabModel = new LoadableDetachableModel() {
private static final long serialVersionUID = 1L;
@Override
protected T load() {
StringValue parameter = getPage().getPageParameters().get("tab");
if (parameter != null && !parameter.isEmpty()) {
for (T tab : tabs.getObject()) {
if (tab.getTitle().getObject().equalsIgnoreCase(parameter.toString())) {
return tab;
}
}
}
return tabs.getObject().get(0);
}
};
setDefaultModel(new PropertyModel(this, "selectedTitle"));
final WebMarkupContainer contentPanel = new WebMarkupContainer("container");
contentPanel.setOutputMarkupId(true);
add(contentPanel);
contentPanel.add(selectedTabModel.getObject().getPanel("content"));
add(contentPanel);
final WebMarkupContainer tabsContainer = new WebMarkupContainer("tabsContainer");
tabsContainer.setOutputMarkupId(true);
add(tabsContainer);
tabsContainer.add(new ListView("tabs", tabs) {
private static final long serialVersionUID = 1L;
@Override
protected void populateItem(final ListItem item) {
final String title = item.getModelObject().getTitle().getObject();
item.add(new AttributeAppender("class", new LoadableDetachableModel() {
private static final long serialVersionUID = 1L;
@Override
protected String load() {
return item.getModelObject().equals(selectedTabModel.getObject()) ? "active" : "";
}
}));
log.debug("Displaying tab for " + title);
PageParameters parameters = new PageParameters(getPage().getPageParameters());
parameters.set("tab", title);
Link link = new BookmarkablePageLink("link", getPage().getClass(), parameters);
item.add(link);
Label label = new Label("title", item.getModelObject().getTitle());
link.add(label);
}
});
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy