package de.flower.common.ui.ajax.panel;
import de.flower.common.ui.ajax.behavior.AjaxSlideToggleBehavior;
import de.flower.common.ui.ajax.markup.html.AjaxLink;
import de.flower.common.ui.panel.BasePanel;
import de.flower.common.util.Check;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.ResourceModel;
/**
* Panel with a button and a wrapped panel. Wrapped panel is displayed when button is clicked.
*
* @author flowerrrr
*/
public class AjaxSlideTogglePanel extends Panel {
private AjaxSlideToggleBehavior toggleBehavior;
public static final String WRAPPED_PANEL_ID = "wrappedPanel";
public AjaxSlideTogglePanel(final String id, final String toggleButtonLabelResourceKey, final BasePanel wrappedPanel) {
super(id);
Check.isEqual(wrappedPanel.getId(), WRAPPED_PANEL_ID);
final AjaxLink toggleButton = new AjaxLink("toggleButton") {
@Override
public void onClick(AjaxRequestTarget target) {
if (wrappedPanel.isVisible()) {
toggleBehavior.hide(target);
} else {
toggleBehavior.show(target);
}
target.add(this);
}
};
Label icon = new Label("icon", "");
icon.add(AttributeModifier.replace("class", new AbstractReadOnlyModel<String>() {
@Override
public String getObject() {
return (wrappedPanel.isVisible()) ? "icon-chevron-up" : "icon-chevron-down";
}
}));
toggleButton.add(icon);
toggleButton.add(new Label("label", new ResourceModel(toggleButtonLabelResourceKey)));
add(toggleButton);
toggleBehavior = new AjaxSlideToggleBehavior();
wrappedPanel.setOnCloseCallback(new BasePanel.IOnCloseCallback() {
@Override
public void onClose(final AjaxRequestTarget target) {
toggleBehavior.hide(target);
target.add(toggleButton);
}
});
wrappedPanel.add(toggleBehavior);
add(wrappedPanel);
}
}