package er.yui;
import com.webobjects.appserver.WOApplication;
import com.webobjects.appserver.WOComponent;
import com.webobjects.appserver.WOContext;
import com.webobjects.appserver.WOElement;
import com.webobjects.appserver.WOResponse;
import com.webobjects.appserver._private.WODynamicGroup;
import com.webobjects.foundation.NSDictionary;
import com.webobjects.foundation.NSMutableArray;
import com.webobjects.foundation.NSMutableDictionary;
import er.ajax.AjaxOption;
import er.ajax.AjaxOptions;
import er.ajax.AjaxUtils;
/**
* Generates a YUI panel (@see http://developer.yahoo.com/yui/container/panel/).
*
* @binding id the id of the panel
* @binding class the css class of the panel
* @binding style the style of the panel
*
* @binding close refer to YUI docs
* @binding constraintoviewport refer to YUI docs
* @binding context refer to YUI docs
* @binding draggable refer to YUI docs
* @binding context refer to YUI docs
* @binding effect refer to YUI docs
* @binding fixedcenter refer to YUI docs
* @binding height refer to YUI docs
* @binding iframe refer to YUI docs
* @binding keylisteners refer to YUI docs
* @binding modal refer to YUI docs
* @binding monitorresize refer to YUI docs
* @binding underlay refer to YUI docs
* @binding visible refer to YUI docs
* @binding width refer to YUI docs
* @binding x refer to YUI docs
* @binding xy refer to YUI docs
* @binding y refer to YUI docs
* @binding zIndex refer to YUI docs
*
* @author mschrag
*/
public class YUITooltip extends WODynamicGroup {
private NSDictionary _associations;
public YUITooltip(String name, NSDictionary associations, WOElement template) {
super(name, associations, template);
_associations = associations;
}
protected NSDictionary createYUIOptions(WOContext context) {
WOComponent component = context.component();
NSMutableArray ajaxOptionsArray = new NSMutableArray();
ajaxOptionsArray.addObject(new AjaxOption("text", AjaxOption.STRING));
ajaxOptionsArray.addObject(new AjaxOption("context", AjaxOption.STRING_OR_ARRAY));
ajaxOptionsArray.addObject(new AjaxOption("container", AjaxOption.SCRIPT));
ajaxOptionsArray.addObject(new AjaxOption("preventoverlap", AjaxOption.BOOLEAN));
ajaxOptionsArray.addObject(new AjaxOption("showdelay", AjaxOption.NUMBER));
ajaxOptionsArray.addObject(new AjaxOption("hidedelay", AjaxOption.NUMBER));
ajaxOptionsArray.addObject(new AjaxOption("autodismissdelay", AjaxOption.NUMBER));
ajaxOptionsArray.addObject(new AjaxOption("constraintoviewport", AjaxOption.BOOLEAN));
ajaxOptionsArray.addObject(new AjaxOption("effect", AjaxOption.SCRIPT));
ajaxOptionsArray.addObject(new AjaxOption("fixedcenter", AjaxOption.SCRIPT));
ajaxOptionsArray.addObject(new AjaxOption("height", AjaxOption.STRING));
ajaxOptionsArray.addObject(new AjaxOption("iframe", AjaxOption.BOOLEAN));
ajaxOptionsArray.addObject(new AjaxOption("monitorresize", AjaxOption.BOOLEAN));
ajaxOptionsArray.addObject(new AjaxOption("visible", AjaxOption.BOOLEAN));
ajaxOptionsArray.addObject(new AjaxOption("width", AjaxOption.STRING));
ajaxOptionsArray.addObject(new AjaxOption("x", AjaxOption.NUMBER));
ajaxOptionsArray.addObject(new AjaxOption("xy", AjaxOption.SCRIPT));
ajaxOptionsArray.addObject(new AjaxOption("y", AjaxOption.NUMBER));
ajaxOptionsArray.addObject(new AjaxOption("zIndex", AjaxOption.NUMBER));
NSMutableDictionary options = AjaxOption.createAjaxOptionsDictionary(ajaxOptionsArray, component, _associations);
if (options.objectForKey("text") == null && hasChildrenElements()) {
WOResponse childrenResponse = WOApplication.application().createResponseInContext(context);
super.appendToResponse(childrenResponse, context);
String text = childrenResponse.contentString();
text = text.replaceAll("\"", """);
options.setObjectForKey("\"" + text + "\"", "text");
}
return options;
}
public void appendToResponse(WOResponse response, WOContext context) {
YUIUtils.addScriptResourceInHead(context, response, "yahoo/yahoo.js");
YUIUtils.addScriptResourceInHead(context, response, "dom/dom.js");
YUIUtils.addScriptResourceInHead(context, response, "event/event.js");
YUIUtils.addScriptResourceInHead(context, response, "container/container.js");
YUIUtils.addStylesheetResourceInHead(context, response, "container/assets/container.css");
AjaxUtils.appendScriptHeader(response);
String id = YUIUtils.id("id", _associations, context);
String varName = YUIUtils.varName(id, _associations, context);
response.appendContentString(varName + " = new YAHOO.widget.Tooltip(\"" + id + "\",");
AjaxOptions.appendToResponse(createYUIOptions(context), response, context);
response.appendContentString(");");
response.appendContentString("\n");
AjaxUtils.appendScriptFooter(response);
}
}