package er.prototaculous;
import com.webobjects.appserver.WOActionResults;
import com.webobjects.appserver.WOComponent;
import com.webobjects.appserver.WOContext;
import com.webobjects.appserver.WORequest;
import com.webobjects.appserver._private.WOForm;
import er.extensions.components.ERXComponentUtilities;
import er.extensions.foundation.ERXProperties;
/**
* Form with Ajax.Updater onsubmit:
* @see WOForm for bindings (href and multipleSubmit not supported - It's assumed to be default)
*
* @binding showForm @see ERXOptionalForm
*
* @property er.extensions.ERXWOForm.addDefaultSubmitButtonDefault @see ERXWOForm except by default it is used
*
* @author mendis
*/
public class AjaxUpdaterForm extends AjaxUpdater {
public boolean addDefaultSubmitButtonDefault = ERXProperties.booleanForKeyWithDefault("er.extensions.ERXWOForm.addDefaultSubmitButtonDefault", true);
public AjaxUpdaterForm(WOContext context) {
super(context);
}
@Override
public boolean synchronizesVariablesWithBindings() {
return false;
}
// accessors
private String _containerString() {
String container = container();
return (container != null) ? "'" + container + "'": "this";
}
public String onSubmit() {
return "new Ajax.Updater(" + _containerString() + ", '" + href() + "', {parameters: $(this).serialize(true)}); return false;";
}
public boolean _omitTags;
public String href() { // action
return context().componentActionURL(application().ajaxRequestHandlerKey());
}
public String classString() {
String classString = "AjaxUpdaterForm";
classString += (_class() != null) ? " " + _class() : "";
return classString;
}
private String _class() {
return (String) valueForBinding("class");
}
private String _elementID;
public String elementID() {
if (_elementID == null) _elementID = context().elementID();
return _elementID;
}
/**
* Determines if a form tag should be shown.
* This defaults to true.
*
* @return if a form should be displayed.
*/
public boolean showForm() {
return ERXComponentUtilities.booleanValueForBinding(this, "showForm", true);
}
public boolean omitTags() {
return !showForm();
}
// actions
public WOActionResults invokeAction() {
if (hasBinding(Bindings.action)) {
WOActionResults action = action();
if (action instanceof WOComponent) ((WOComponent) action)._setIsPage(true); // cache is pageFrag cache
return action;
} else {
_setIsPage(true);
_omitTags = true;
return this;
}
}
//R&R
@Override
public void takeValuesFromRequest(WORequest request, WOContext context) {
String forceFormSubmittedElementID = (String) request.formValueForKey("_forceFormSubmitted");
boolean forceFormSubmitted = forceFormSubmittedElementID != null && forceFormSubmittedElementID.equals(context.elementID());
boolean _wasFormSubmitted = context.wasFormSubmitted();
if (showForm()) {
if (forceFormSubmitted) context.setFormSubmitted(true);
super.takeValuesFromRequest(request, context);
if (forceFormSubmitted) context.setFormSubmitted(_wasFormSubmitted);
} else super.takeValuesFromRequest(request, context);
}
}