package de.flower.common.ui.tooltips;
import de.flower.common.util.Check;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.Component;
import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.html.IHeaderResponse;
import org.apache.wicket.model.IModel;
/**
* @author flowerrrr
*/
public class TooltipBehavior extends Behavior {
public static final String TOOLTIP_JS = "$(function () { $(\"[rel=tooltip]\").tooltip({ live: false }) })";
private IModel<String> model;
public TooltipBehavior(final IModel<String> model) {
this.model = model;
}
@Override
public void bind(final Component component) {
component.add(AttributeModifier.prepend("onclick", "$('#" + component.getMarkupId() + "').tooltip('hide');"));
}
@Override
public void renderHead(final Component component, final IHeaderResponse response) {
renderJavaScriptReference(component, response);
// wicket takes care of rendering the script only once if multiple components with this behavior are added.
response.renderOnDomReadyJavaScript(TOOLTIP_JS);
}
/**
* Subclass can override to provide necessary javascript libs.
* @param component
* @param response
*/
@SuppressWarnings("EmptyMethod")
protected void renderJavaScriptReference(final Component component, final IHeaderResponse response) {
}
@Override
public void onComponentTag(final Component component, final ComponentTag tag) {
// must be an A-tag
Check.isEqual(tag.getName().toLowerCase(), "a", "Behavior can only be added to links");
tag.put("rel", "tooltip");
tag.put("data-original-title", model.getObject());
}
}