{
if (_events == null || _events.isEmpty())
return;
Body body = Body.get(cycle);
if (body == null)
throw new ApplicationRuntimeException(
Tapestry.getMessage("Form.needs-body-for-event-handlers"),
this,
null,
null);
StringBuffer buffer = new StringBuffer();
Iterator i = _events.entrySet().iterator();
while (i.hasNext())
{
Map.Entry entry = (Map.Entry) i.next();
FormEventType type = (FormEventType) entry.getKey();
Object value = entry.getValue();
buffer.append("document.");
buffer.append(_name);
buffer.append(".");
buffer.append(type.getPropertyName());
buffer.append(" = ");
// The typical case; one event one event handler. Easy enough.
if (value instanceof String)
{
buffer.append(value.toString());
buffer.append(";");
}
else
{
// Build a composite function in-place
buffer.append("function ()\n{\n");
boolean combineWithAnd = type.getCombineUsingAnd();
List l = (List) value;
int count = l.size();
for (int j = 0; j < count; j++)
{
String functionName = (String) l.get(j);
if (j > 0)
{
if (combineWithAnd)
buffer.append(" &&");
else
buffer.append(";");
}
buffer.append("\n ");
if (combineWithAnd)
{
if (j == 0)
buffer.append("return ");
else
buffer.append(" ");
}
buffer.append(functionName);
buffer.append("()");
}
buffer.append(";\n}");
}
buffer.append("\n\n");
}
body.addInitializationScript(buffer.toString());
}