package de.alpharogroup.popupoverlay;
import java.util.HashMap;
import java.util.Map;
import org.apache.wicket.Application;
import org.apache.wicket.Component;
import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import org.apache.wicket.markup.head.OnLoadHeaderItem;
import org.apache.wicket.request.resource.JavaScriptResourceReference;
import org.apache.wicket.request.resource.ResourceReference;
import org.apache.wicket.util.template.PackageTextTemplate;
import org.apache.wicket.util.template.TextTemplate;
import de.alpharogroup.js.behaviors.simple.alert.WicketAlertJsBehavior;
public class PopupoverlayBehavior extends Behavior
{
/**
* The serialVersionUID.
*/
private static final long serialVersionUID = 1L;
public static final ResourceReference pluginReference = new JavaScriptResourceReference(
PopupoverlayBehavior.class, "jquery.popupoverlay.js");
private Component component;
private PopupoverlaySettings settings = new PopupoverlaySettings();
private final TextTemplate wicketAlertTemplate = new PackageTextTemplate(
PopupoverlayBehavior.class, "popupoverlay-template.js");
public PopupoverlayBehavior()
{
}
public PopupoverlayBehavior(PopupoverlaySettings settings)
{
this.settings = settings;
}
@Override
public void bind(final Component component)
{
super.bind(component);
this.component = component;
this.component.setOutputMarkupId(true);
}
protected String generateJS(final TextTemplate textTemplate)
{
final Map<String, Object> variables = new HashMap<String, Object>();
variables.put("componentId", this.component.getMarkupId());
variables.put("type", "'" + this.settings.getType() + "'");
variables.put("autoopen", this.settings.isAutoopen());
variables.put("scrolllock", this.settings.isScrolllock());
variables.put("background", this.settings.isBackground());
variables.put("backgroundactive", this.settings.isBackgroundactive());
variables.put("color", "'" + this.settings.getColor() + "'");
variables.put("opacity", "'" + this.settings.getOpacity() + "'");
variables.put("horizontal", "'" + this.settings.getHorizontal() + "'");
variables.put("vertical", "'" + this.settings.getVertical() + "'");
variables.put("offsettop", this.settings.getOffsettop());
variables.put("offsetleft", this.settings.getOffsetleft());
variables.put("escape", this.settings.isEscape());
variables.put("blur", this.settings.isBlur());
variables.put("setzindex", this.settings.isSetzindex());
variables.put("autozindex", this.settings.isAutozindex());
variables.put("keepfocus", this.settings.isKeepfocus());
setVariableWithSingeQuotationMarks("focuselement", this.settings.getFocuselement(),
variables);
variables.put("focusdelay", this.settings.getFocusdelay());
setVariableWithSingeQuotationMarks("pagecontainer", this.settings.getPagecontainer(),
variables);
variables.put("outline", this.settings.isOutline());
variables.put("detach", this.settings.isDetach());
setVariableWithSingeQuotationMarks("openelement", this.settings.getOpenelement(),
variables);
setVariableWithSingeQuotationMarks("closeelement", this.settings.getCloseelement(),
variables);
setVariableWithSingeQuotationMarks("transition", this.settings.getTransition(), variables);
setVariableWithSingeQuotationMarks("tooltipanchor", this.settings.getTooltipanchor(),
variables);
setVariable("beforeopen", this.settings.getBeforeopen(), variables);
setVariable("onopen", this.settings.getOnopen(), variables);
setVariable("onclose", this.settings.getOnclose(), variables);
setVariable("opentransitionend", this.settings.getOpentransitionend(), variables);
setVariable("closetransitionend", this.settings.getClosetransitionend(), variables);
textTemplate.interpolate(variables);
return textTemplate.asString();
}
/**
* Replace the created map with the variables in the method
* {@link WicketAlertJsBehavior#generateJS(TextTemplate)} with in the js-template
* 'wicket-alert.js'.
*/
@Override
public void renderHead(Component c, final IHeaderResponse response)
{
response.render(JavaScriptHeaderItem
.forReference(Application.get().getJavaScriptLibrarySettings().getJQueryReference()));
response.render(JavaScriptHeaderItem.forReference(pluginReference));
response.render(OnLoadHeaderItem.forScript(generateJS(wicketAlertTemplate)));
}
public void setSettings(PopupoverlaySettings settings)
{
this.settings = settings;
}
protected void setVariable(String variablename, Object object,
final Map<String, Object> variables)
{
if (object != null)
{
variables.put(variablename, object);
}
else
{
variables.put(variablename, "null");
}
}
protected void setVariableWithSingeQuotationMarks(String variablename, Object object,
final Map<String, Object> variables)
{
if (object != null)
{
variables.put(variablename, "'" + object + "'");
}
else
{
variables.put(variablename, "null");
}
}
}