package e4s.tutorial; import e4s.html.DIV; import e4s.html.E4CgiParams; import e4s.html.E4Color; import e4s.html.E4HtmlElement_Intf; import e4s.html.E4JavaScript; import e4s.html.E4Message; import e4s.html.E4Method; import e4s.html.FORM; import e4s.html.HTML; import e4s.html.input.extended.E4EventHandlerInputField; import e4s.html.input.extended.E4Fieldset; import e4s.html.input.extended.E4InputFieldName; import e4s.html.input.extended.E4SelectValues; import e4s.html.input.extended.SELECT; import e4s.html.input.extended.TEXTFIELD; import e4s.html.input.extended.E4SelectValues.OPTION; import e4s.servlet.E4ModuleImplementation; import e4s.servlet.E4ServletImplementation_Intf; import e4s.translate.E4LabelApp; import e4s.translate.E4Label_Intf; public class Example_SelectAndText extends E4ModuleImplementation { public static E4Method start = null; public static E4Method submitted = null; public final static E4InputFieldName PARAM_PLANET = new E4InputFieldName("PLANET"); private final static String[] PLANETS = new String[]{"Mercury","Venus","Earth","Mars","Jupiter","Saturn","Uranus","Neptune"}; private static class SelectAndText extends DIV implements E4HtmlElement_Intf { final static String POSTFIX_FIELD = "_SEL"; private SELECT m_SELECT = null; private TEXTFIELD m_TEXT = null; private E4EventHandlerInputField m_evt = null; private static E4JavaScript ms_jsChange = null; private SelectAndText(E4Label_Intf label, E4InputFieldName fieldname, String sel[], int textlength, String defVal, FORM form) { this(label,fieldname,new E4SelectValues(sel),textlength,defVal,form); } private SelectAndText(E4Label_Intf label, E4InputFieldName fieldname, E4SelectValues sel, int textlength, String defVal, FORM form) { E4SelectValues sel2 = new E4SelectValues(sel); OPTION oOther = sel2.addElement("",new E4LabelApp("Other (please specify)")); oOther.Style().setColor(E4Color.WHITE); oOther.Style().setBackgroundColor(E4Color.DARK_GRAY); if (ms_jsChange == null) { ms_jsChange = new E4JavaScript("e4sSelectAndTextChange"); ms_jsChange.appendln("function " + ms_jsChange.getName() + "(formname,fieldname)"); ms_jsChange.appendln("{"); ms_jsChange.appendln(" var frm = document.forms[formname];"); ms_jsChange.appendln(" var fSel = frm.elements[fieldname + '" + POSTFIX_FIELD + "'];"); ms_jsChange.appendln(" var selVal = fSel.value;"); ms_jsChange.appendln(" var fTxt = frm.elements[fieldname];"); ms_jsChange.appendln(" if (selVal == '')"); ms_jsChange.appendln(" {"); ms_jsChange.appendln(" fTxt.style.display = 'block';"); ms_jsChange.appendln(" fTxt.value = '';"); ms_jsChange.appendln(" }"); ms_jsChange.appendln(" else"); ms_jsChange.appendln(" {"); ms_jsChange.appendln(" fTxt.style.display = 'none';"); ms_jsChange.appendln(" fTxt.value = selVal;"); ms_jsChange.appendln(" }"); ms_jsChange.appendln("}"); } addScript(ms_jsChange); //m_jsChange = new E4JavaScript(); //m_jsChange.appendln(" " + ms_jsChange.getName() + "('" + form.getName() + "','" + fieldname + "');"); m_SELECT = new SELECT(new E4InputFieldName(fieldname.getName() + POSTFIX_FIELD),(String)null,sel2); m_SELECT.Style().setWidth(200); m_TEXT = new TEXTFIELD(fieldname,(String)null,textlength); m_TEXT.Style().setWidth(200); if (sel.findOption(defVal) == null) { m_TEXT.Style().setDisplay("block"); } else { m_TEXT.Style().setDisplay("none"); } m_TEXT.setValue(defVal); m_SELECT.setValue(defVal); if (label != null) { println(label); BR(); } addElement(m_SELECT); BR(); addElement(m_TEXT); m_evt = new E4EventHandlerInputField(E4EventHandlerInputField._EVENT_ONCHANGE,ms_jsChange.getName()); m_evt.setParam(form.getName()); m_evt.setParam(fieldname.getHtmlParamName()); m_SELECT.setEventHandler(m_evt); } /** * DO NOT CALL THIS, NOT POSSIBLE WITH THIS ARCHITECTURE RIGHT NOW * @throws error - in any case */ public void setValue( E4CgiParams params ) { throw new Error("INTERNAL ERROR"); } /** * DO NOT CALL THIS, NOT POSSIBLE WITH THIS ARCHITECTURE RIGHT NOW * @throws error - in any case */ public boolean validate( E4CgiParams params, E4ServletImplementation_Intf servlet ) { throw new Error("INTERNAL ERROR"); } } public void start( HTML html ) { html.Message(E4Message.QUESTION,"What is your planet of residence?"); html.P(); paintForm(html,"Earth"); } private void paintForm( HTML html, String defValue ) { // create a form and a fieldset where the two