zhtml/src/main/java/org/zkoss/zhtml/Input.java

Summary

Maintainability
C
1 day
Test Coverage
/* Input.java

    Purpose:
        
    Description:
        
    History:
        Tue Nov 29 21:59:11     2005, Created by tomyeh

Copyright (C) 2005 Potix Corporation. All Rights Reserved.

{{IS_RIGHT
    This program is distributed under LGPL Version 2.1 in the hope that
    it will be useful, but WITHOUT ANY WARRANTY.
}}IS_RIGHT
*/
package org.zkoss.zhtml;

import org.zkoss.zhtml.impl.AbstractTag;
import org.zkoss.zk.ui.WrongValueException;
import org.zkoss.zk.ui.event.CheckEvent;
import org.zkoss.zk.ui.event.Events;
import org.zkoss.zk.ui.event.InputEvent;

/**
 * The input tag.
 *
 * @author tomyeh
 */
public class Input extends AbstractTag {
    private transient boolean _byClient;

    static {
        addClientEvent(Input.class, Events.ON_CHANGE, 0);
        addClientEvent(Input.class, Events.ON_CHECK, 0);
    }

    public Input() {
        this("input");
    }

    protected Input(String tagnm) {
        super(tagnm);
        setValue("");
    }

    /**
     * Returns the value of this input.
     */
    public String getValue() {
        return (String) getDynamicProperty("value");
    }

    /**
     * Sets the vallue of this input.
     */
    public void setValue(String value) throws WrongValueException {
        setDynamicProperty("value", value);
    }

    /**
     * Returns if the input is checked (type: checkbox or radio).
     */
    public boolean isChecked() {
        final Boolean b = (Boolean) getDynamicProperty("checked");
        return b != null && b.booleanValue();
    }

    /**
     * Sets if the input is checked (type: checkbox or radio).
     */
    public void setChecked(boolean checked) throws WrongValueException {
        setDynamicProperty("checked", checked ? Boolean.valueOf(checked) : null);
    }

    /**
     * Returns the accept of this input tag.
     * @since 8.0.3
     */
    public String getAccept() {
        return (String) getDynamicProperty("accept");
    }

    /**
     * Sets the accept of this input tag
     * @since 8.0.3
     */
    public void setAccept(String accept) throws WrongValueException {
        setDynamicProperty("accept", accept);
    }
    /**
     * Returns the alt of this input tag.
     * @since 8.0.3
     */
    public String getAlt() {
        return (String) getDynamicProperty("alt");
    }

    /**
     * Sets the alt of this input tag
     * @since 8.0.3
     */
    public void setAlt(String alt) throws WrongValueException {
        setDynamicProperty("alt", alt);
    }
    /**
     * Returns the autocomplete of this input tag.
     * <p>Notice that this attribute refers to the corresponding attribute of the HTML5 specification.
     * Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.
     * @since 8.0.3
     */
    public String getAutocomplete() {
        return (String) getDynamicProperty("autocomplete");
    }

    /**
     * Sets the autocomplete of this input tag
     * <p>Notice that this attribute refers to the corresponding attribute of the HTML5 specification.
     * Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.
     * @since 8.0.3
     */
    public void setAutocomplete(String autocomplete) throws WrongValueException {
        setDynamicProperty("autocomplete", autocomplete);
    }
    /**
     * Returns the autofocus of this input tag.
     * <p>Notice that this attribute refers to the corresponding attribute of the HTML5 specification.
     * Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.
     * @since 8.0.3
     */
    public boolean isAutofocus() {
        final Boolean b = (Boolean) getDynamicProperty("autofocus");
        return b != null && b.booleanValue();
    }

    /**
     * Sets the autofocus of this input tag.
     * <p>Notice that this attribute refers to the corresponding attribute of the HTML5 specification.
     * Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.
     * @since 8.0.3
     */
    public void setAutofocus(boolean autofocus) throws WrongValueException {
        setDynamicProperty("autofocus", autofocus ? Boolean.valueOf(autofocus) : null);
    }

    /**
     * Returns the dirname of this input tag.
     * <p>Notice that this attribute refers to the corresponding attribute of the HTML5 specification.
     * Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.
     * @since 8.0.3
     */
    public String getDirname() {
        return (String) getDynamicProperty("dirname");
    }

    /**
     * Sets the dirname of this input tag
     * <p>Notice that this attribute refers to the corresponding attribute of the HTML5 specification.
     * Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.
     * @since 8.0.3
     */
    public void setDirname(String dirname) throws WrongValueException {
        setDynamicProperty("dirname", dirname);
    }
    /**
     * Returns the disabled of this input tag.
     * @since 8.0.3
     */
    public boolean isDisabled() {
        final Boolean b = (Boolean) getDynamicProperty("disabled");
        return b != null && b.booleanValue();
    }

    /**
     * Sets the disabled of this input tag.
     * @since 8.0.3
     */
    public void setDisabled(boolean disabled) throws WrongValueException {
        setDynamicProperty("disabled", disabled ? Boolean.valueOf(disabled) : null);
    }
    /**
     * Returns the height of this input tag.
     * <p>Notice that this attribute refers to the corresponding attribute of the HTML5 specification.
     * Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.
     * @since 8.0.3
     */
    public String getHeight() {
        return (String) getDynamicProperty("height");
    }

    /**
     * Sets the height of this input tag
     * <p>Notice that this attribute refers to the corresponding attribute of the HTML5 specification.
     * Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.
     * @since 8.0.3
     */
    public void setHeight(String height) throws WrongValueException {
        setDynamicProperty("height", height);
    }
    /**
     * Returns the inputmode of this input tag.
     * <p>Notice that this attribute refers to the corresponding attribute of the HTML5 specification.
     * Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.
     * @since 8.0.3
     */
    public String getInputmode() {
        return (String) getDynamicProperty("inputmode");
    }

    /**
     * Sets the inputmode of this input tag
     * <p>Notice that this attribute refers to the corresponding attribute of the HTML5 specification.
     * Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.
     * @since 8.0.3
     */
    public void setInputmode(String inputmode) throws WrongValueException {
        setDynamicProperty("inputmode", inputmode);
    }
    /**
     * Returns the list of this input tag.
     * <p>Notice that this attribute refers to the corresponding attribute of the HTML5 specification.
     * Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.
     * @since 8.0.3
     */
    public String getList() {
        return (String) getDynamicProperty("list");
    }

    /**
     * Sets the list of this input tag
     * <p>Notice that this attribute refers to the corresponding attribute of the HTML5 specification.
     * Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.
     * @since 8.0.3
     */
    public void setList(String list) throws WrongValueException {
        setDynamicProperty("list", list);
    }
    /**
     * Returns the max of this input tag.
     * <p>Notice that this attribute refers to the corresponding attribute of the HTML5 specification.
     * Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.
     * @since 8.0.3
     */
    public String getMax() {
        return (String) getDynamicProperty("max");
    }

    /**
     * Sets the max of this input tag
     * <p>Notice that this attribute refers to the corresponding attribute of the HTML5 specification.
     * Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.
     * @since 8.0.3
     */
    public void setMax(String max) throws WrongValueException {
        setDynamicProperty("max", max);
    }
    /**
     * Returns the maxlength of this input tag.
     * @since 8.0.3
     */
    public Integer getMaxlength() {
        return (Integer) getDynamicProperty("maxlength");
    }

    /**
     * Sets the maxlength of this input tag
     * @since 8.0.3
     */
    public void setMaxlength(Integer maxlength) throws WrongValueException {
        setDynamicProperty("maxlength", maxlength);
    }
    /**
     * Returns the min of this input tag.
     * <p>Notice that this attribute refers to the corresponding attribute of the HTML5 specification.
     * Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.
     * @since 8.0.3
     */
    public String getMin() {
        return (String) getDynamicProperty("min");
    }

    /**
     * Sets the min of this input tag
     * <p>Notice that this attribute refers to the corresponding attribute of the HTML5 specification.
     * Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.
     * @since 8.0.3
     */
    public void setMin(String min) throws WrongValueException {
        setDynamicProperty("min", min);
    }

    /**
     * Returns the minlength of this tag.
     *
     * @since 10.0.0
     */
    public Integer getMinlength() {
        return (Integer) getDynamicProperty("minlength");
    }

    /**
     * Sets the minlength of this tag.
     *
     * @since 10.0.0
     */
    public void setMinlength(Integer minlength) throws WrongValueException {
        setDynamicProperty("minlength", minlength);
    }
    /**
     * Returns the multiple of this input tag.
     * <p>Notice that this attribute refers to the corresponding attribute of the HTML5 specification.
     * Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.
     * @since 8.0.3
     */
    public boolean isMultiple() {
        final Boolean b = (Boolean) getDynamicProperty("multiple");
        return b != null && b.booleanValue();
    }

    /**
     * Sets the multiple of this input tag
     * <p>Notice that this attribute refers to the corresponding attribute of the HTML5 specification.
     * Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.
     * @since 8.0.3
     */
    public void setMultiple(boolean multiple) throws WrongValueException {
        setDynamicProperty("multiple", multiple ? Boolean.valueOf(multiple) : null);
    }
    /**
     * Returns the name of this input tag.
     * @since 8.0.3
     */
    public String getName() {
        return (String) getDynamicProperty("name");
    }

    /**
     * Sets the name of this input tag
     * @since 8.0.3
     */
    public void setName(String name) throws WrongValueException {
        setDynamicProperty("name", name);
    }
    /**
     * Returns the pattern of this input tag.
     * <p>Notice that this attribute refers to the corresponding attribute of the HTML5 specification.
     * Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.
     * @since 8.0.3
     */
    public String getPattern() {
        return (String) getDynamicProperty("pattern");
    }

    /**
     * Sets the pattern of this input tag
     * <p>Notice that this attribute refers to the corresponding attribute of the HTML5 specification.
     * Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.
     * @since 8.0.3
     */
    public void setPattern(String pattern) throws WrongValueException {
        setDynamicProperty("pattern", pattern);
    }
    /**
     * Returns the placeholder of this input tag.
     * <p>Notice that this attribute refers to the corresponding attribute of the HTML5 specification.
     * Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.
     * @since 8.0.3
     */
    public String getPlaceholder() {
        return (String) getDynamicProperty("placeholder");
    }

    /**
     * Sets the placeholder of this input tag
     * <p>Notice that this attribute refers to the corresponding attribute of the HTML5 specification.
     * Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.
     * @since 8.0.3
     */
    public void setPlaceholder(String placeholder) throws WrongValueException {
        setDynamicProperty("placeholder", placeholder);
    }
    /**
     * Returns the readonly of this input tag.
     * <p>Notice that this attribute refers to the corresponding attribute of the HTML5 specification.
     * Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.
     * @since 8.0.3
     */
    public boolean isReadonly() {
        final Boolean b = (Boolean) getDynamicProperty("readonly");
        return b != null && b.booleanValue();
    }

    /**
     * Sets the readonly of this input tag
     * <p>Notice that this attribute refers to the corresponding attribute of the HTML5 specification.
     * Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.
     * @since 8.0.3
     */
    public void setReadonly(Boolean readonly) throws WrongValueException {
        setDynamicProperty("readonly", readonly == Boolean.TRUE ? true : null);
    }
    /**
     * Returns the required of this input tag.
     * <p>Notice that this attribute refers to the corresponding attribute of the HTML5 specification.
     * Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.
     * @since 8.0.3
     */
    public boolean isRequired() {
        final Boolean b = (Boolean) getDynamicProperty("required");
        return b != null && b;
    }

    /**
     * Sets the required of this input tag
     * <p>Notice that this attribute refers to the corresponding attribute of the HTML5 specification.
     * Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.
     * @since 8.0.3
     */
    public void setRequired(boolean required) throws WrongValueException {
        setDynamicProperty("required", required ? true : null);
    }
    /**
     * Returns the selectiondirection of this input tag.
     * <p>Notice that this attribute refers to the corresponding attribute of the HTML5 specification.
     * Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.
     * @since 8.0.3
     */
    public String getSelectiondirection() {
        return (String) getDynamicProperty("selectiondirection");
    }

    /**
     * Sets the selectiondirection of this input tag
     * <p>Notice that this attribute refers to the corresponding attribute of the HTML5 specification.
     * Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.
     * @since 8.0.3
     */
    public void setSelectiondirection(String selectiondirection) throws WrongValueException {
        setDynamicProperty("selectiondirection", selectiondirection);
    }
    /**
     * Returns the size of this input tag.
     * @since 8.0.3
     */
    public Integer getSize() {
        return (Integer) getDynamicProperty("size");
    }

    /**
     * Sets the size of this input tag
     * @since 8.0.3
     */
    public void setSize(Integer size) throws WrongValueException {
        setDynamicProperty("size", size);
    }
    /**
     * Returns the src of this input tag.
     * @since 8.0.3
     */
    public String getSrc() {
        return (String) getDynamicProperty("src");
    }

    /**
     * Sets the src of this input tag
     * @since 8.0.3
     */
    public void setSrc(String src) throws WrongValueException {
        setDynamicProperty("src", src);
    }
    /**
     * Returns the step of this input tag.
     * <p>Notice that this attribute refers to the corresponding attribute of the HTML5 specification.
     * Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.
     * @since 8.0.3
     */
    public Integer getStep() {
        return (Integer) getDynamicProperty("step");
    }

    /**
     * Sets the step of this input tag
     * <p>Notice that this attribute refers to the corresponding attribute of the HTML5 specification.
     * Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.
     * @since 8.0.3
     */
    public void setStep(Integer step) throws WrongValueException {
        setDynamicProperty("step", step);
    }
    /**
     * Returns the type of this input tag.
     * @since 8.0.3
     */
    public String getType() {
        return (String) getDynamicProperty("type");
    }

    /**
     * Sets the type of this input tag
     * @since 8.0.3
     */
    public void setType(String type) throws WrongValueException {
        setDynamicProperty("type", type);
    }
    /**
     * Returns the width of this input tag.
     * <p>Notice that this attribute refers to the corresponding attribute of the HTML5 specification.
     * Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.
     * @since 8.0.3
     */
    public String getWidth() {
        return (String) getDynamicProperty("width");
    }

    /**
     * Sets the width of this input tag
     * <p>Notice that this attribute refers to the corresponding attribute of the HTML5 specification.
     * Hence, it would still be rendered to client-side as a DOM attribute even if the browser doesn’t support it.
     * @since 8.0.3
     */
    public void setWidth(String width) throws WrongValueException {
        setDynamicProperty("width", width);
    }

    /**
     * Returns the capture of this tag.
     *
     * @since 10.0.0
     */
    public String getCapture() {
        return (String) getDynamicProperty("capture");
    }

    /**
     * Returns the form of this tag.
     * @since 10.0.0
     */
    public String getForm() {
        return (String) getDynamicProperty("form");
    }

    /**
     * Sets the form of this tag.
     * <p> The {@literal <}form{@literal >} element to associate the button with (its form owner).
     * The value of this attribute must be the id of a {@literal <}form{@literal >} in the same document.
     * (If this attribute is not set, the {@literal <}button{@literal >} is associated with its ancestor {@literal <}form{@literal >}
     * element, if any.)
     * <p>
     * This attribute lets you associate {@literal <}button{@literal >} elements to {@literal <}form{@literal >}s anywhere
     * in the document, not just inside a {@literal <}form{@literal >}. It can also override
     * an ancestor {@literal <}form{@literal >} element.
     * @since 10.0.0
     */
    public void setForm(String form) throws WrongValueException {
        setDynamicProperty("form", form);
    }

    /**
     * Returns the formaction of this tag.
     * @since 10.0.0
     */
    public String getFormaction() {
        return (String) getDynamicProperty("formaction");
    }

    /**
     * Sets the formaction of this tag.
     * <p>The URL that processes the information submitted by the button. Overrides
     * the {@code action} attribute of the button's form owner. Does nothing if there is no form owner.
     * @since 10.0.0
     */
    public void setFormaction(String formaction) throws WrongValueException {
        setDynamicProperty("formaction", formaction);
    }

    /**
     * Returns the formenctype of this tag.
     * @since 10.0.0
     */
    public String getFormenctype() {
        return (String) getDynamicProperty("formenctype");
    }

    /**
     * Set the formenctype of this tag.
     * <p>If the button is a submit button (it's inside/associated with a {@literal <}form{@literal >}
     * and doesn't have {@code type="button"}), specifies how to encode the form data that is submitted.
     * @since 10.0.0
     */
    public void setFormenctype(String formenctype) throws WrongValueException {
        setDynamicProperty("formenctype", formenctype);
    }

    /**
     * Returns the formmethod of this tag.
     *
     * @since 10.0.0
     */
    public String getFormmethod() {
        return (String) getDynamicProperty("formmethod");
    }

    /**
     * Sets the formmethod of this tag.
     * <p>If the button is a submit button (it's inside/associated with a {@literal <}form{@literal >}
     * and doesn't have {@code type="button"}), this attribute specifies the HTTP method used to submit the form.
     * @since 10.0.0
     */
    public void setFormmethod(String formmethod) throws WrongValueException {
        setDynamicProperty("formmethod", formmethod);
    }

    /**
     * Returns the formnovalidate of this tag.
     *
     * @since 10.0.0
     */
    public String getFormnovalidate() {
        return (String) getDynamicProperty("formnovalidate");
    }

    /**
     * Sets the formnovalidate of this tag.
     * <p>If the button is a submit button, this Boolean attribute specifies that
     * the form is not to be validated when it is submitted. If this attribute is
     * specified, it overrides the novalidate attribute of the button's form owner.
     *
     * @since 10.0.0
     */
    public void setFormnovalidate(String formnovalidate) throws WrongValueException {
        setDynamicProperty("formnovalidate", formnovalidate);
    }

    /**
     * Returns the formtarget of this tag.
     *
     * @since 10.0.0
     */
    public String getFormtarget() {
        return (String) getDynamicProperty("formtarget");
    }

    /**
     * Sets the formtarget of this tag.
     * <p>If the button is a submit button, this attribute is an author-defined name
     * or standardized, underscore-prefixed keyword indicating where to display
     * the response from submitting the form. This is the name of, or keyword for,
     * a browsing context (a tab, window, or {@literal <}iframe{@literal >}).
     * If this attribute is specified, it overrides the target attribute of the button's form owner.
     *
     * @since 10.0.0
     */
    public void setFormtarget(String formtarget) throws WrongValueException {
        setDynamicProperty("formtarget", formtarget);
    }

    /**
     * Sets the capture of this tag.
     *
     * @since 10.0.0
     */
    public void setCapture(String capture) throws WrongValueException {
        setDynamicProperty("capture", capture);
    }

    // -- Component --//
    /**
     * Returns the widget class, "zhtml.Input".
     * 
     * @since 8.0.0
     */
    public String getWidgetClass() {
        return "zhtml.Input";
    }

    // super//
    protected void smartUpdate(String attr, java.lang.Object value) {
        if (!_byClient)
            super.smartUpdate(attr, value);
    }

    /**
     * Processes an AU request.
     *
     * @since 5.0.0
     */
    public void service(org.zkoss.zk.au.AuRequest request, boolean everError) {
        final String cmd = request.getCommand();
        if (cmd.equals(Events.ON_CHANGE)) {
            InputEvent evt = InputEvent.getInputEvent(request, getValue());

            final String value = evt.getValue();
            _byClient = true;
            try {
                setValue(value);
            } finally {
                _byClient = false;
            }

            Events.postEvent(evt);
        } else if (cmd.equals(Events.ON_CHECK)) {
            CheckEvent evt = CheckEvent.getCheckEvent(request);

            _byClient = true;
            try {
                setChecked(evt.isChecked());
            } finally {
                _byClient = false;
            }

            Events.postEvent(evt);
        } else
            super.service(request, everError);
    }
}