diff options
author | Steve Block <steveblock@google.com> | 2011-05-06 11:45:16 +0100 |
---|---|---|
committer | Steve Block <steveblock@google.com> | 2011-05-12 13:44:10 +0100 |
commit | cad810f21b803229eb11403f9209855525a25d57 (patch) | |
tree | 29a6fd0279be608e0fe9ffe9841f722f0f4e4269 /Source/WebCore/html/HTMLInputElement.h | |
parent | 121b0cf4517156d0ac5111caf9830c51b69bae8f (diff) | |
download | external_webkit-cad810f21b803229eb11403f9209855525a25d57.zip external_webkit-cad810f21b803229eb11403f9209855525a25d57.tar.gz external_webkit-cad810f21b803229eb11403f9209855525a25d57.tar.bz2 |
Merge WebKit at r75315: Initial merge by git.
Change-Id: I570314b346ce101c935ed22a626b48c2af266b84
Diffstat (limited to 'Source/WebCore/html/HTMLInputElement.h')
-rw-r--r-- | Source/WebCore/html/HTMLInputElement.h | 319 |
1 files changed, 319 insertions, 0 deletions
diff --git a/Source/WebCore/html/HTMLInputElement.h b/Source/WebCore/html/HTMLInputElement.h new file mode 100644 index 0000000..eb30de0 --- /dev/null +++ b/Source/WebCore/html/HTMLInputElement.h @@ -0,0 +1,319 @@ +/* + * Copyright (C) 1999 Lars Knoll (knoll@kde.org) + * (C) 1999 Antti Koivisto (koivisto@kde.org) + * (C) 2000 Dirk Mueller (mueller@kde.org) + * Copyright (C) 2004, 2005, 2006, 2007, 2010 Apple Inc. All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + * + */ + +#ifndef HTMLInputElement_h +#define HTMLInputElement_h + +#include "HTMLFormControlElement.h" +#include "InputElement.h" + +namespace WebCore { + +class FileList; +class HTMLDataListElement; +class HTMLOptionElement; +class InputType; +class KURL; + +class HTMLInputElement : public HTMLTextFormControlElement, public InputElement { +public: + static PassRefPtr<HTMLInputElement> create(const QualifiedName&, Document*, HTMLFormElement*); + virtual ~HTMLInputElement(); + + DEFINE_ATTRIBUTE_EVENT_LISTENER(webkitspeechchange); + + bool autoComplete() const; + + // For ValidityState + bool typeMismatch() const; + // valueMissing() ignores the specified string value for CHECKBOX and RADIO. + bool valueMissing(const String&) const; + bool patternMismatch(const String&) const; + bool tooLong(const String&, NeedsToCheckDirtyFlag) const; + bool rangeUnderflow(const String&) const; + bool rangeOverflow(const String&) const; + // Returns the minimum value for type=date, number, or range. Don't call this for other types. + double minimum() const; + // Returns the maximum value for type=date, number, or range. Don't call this for other types. + // This always returns a value which is >= minimum(). + double maximum() const; + // Sets the "allowed value step" defined in the HTML spec to the specified double pointer. + // Returns false if there is no "allowed value step." + bool getAllowedValueStep(double*) const; + bool getAllowedValueStepWithDecimalPlaces(double*, unsigned*) const; + // For ValidityState. + bool stepMismatch(const String&) const; + String minimumString() const; + String maximumString() const; + String stepBaseString() const; + String stepString() const; + String typeMismatchText() const; + String valueMissingText() const; + + // Implementations of HTMLInputElement::stepUp() and stepDown(). + void stepUp(int, ExceptionCode&); + void stepDown(int, ExceptionCode&); + void stepUp(ExceptionCode& ec) { stepUp(1, ec); } + void stepDown(ExceptionCode& ec) { stepDown(1, ec); } + // stepUp()/stepDown() for user-interaction. + void stepUpFromRenderer(int); + + bool isTextButton() const; + + virtual bool isRadioButton() const; + virtual bool isTextField() const; + virtual bool isSearchField() const; + virtual bool isInputTypeHidden() const; + virtual bool isPasswordField() const; + virtual bool isCheckbox() const; + + // FIXME: It's highly likely that any call site calling this function should instead + // be using a different one. Many input elements behave like text fields, and in addition + // any unknown input type is treated as text. Consider, for example, isTextField or + // isTextField && !isPasswordField. + bool isText() const; + + bool isEmailField() const; + bool isFileUpload() const; + bool isImageButton() const; + bool isNumberField() const; + bool isSubmitButton() const; + bool isTelephoneField() const; + bool isURLField() const; + +#if ENABLE(INPUT_SPEECH) + virtual bool isSpeechEnabled() const; +#endif + + bool checked() const { return m_isChecked; } + void setChecked(bool, bool sendChangeEvent = false); + + // 'indeterminate' is a state independent of the checked state that causes the control to draw in a way that hides the actual state. + bool indeterminate() const { return m_isIndeterminate; } + void setIndeterminate(bool); + + virtual int size() const; + + void setType(const String&); + + virtual String value() const; + virtual void setValue(const String&, bool sendChangeEvent = false); + virtual void setValueForUser(const String&); + // Checks if the specified string would be a valid value. + // We should not call this for types with no string value such as CHECKBOX and RADIO. + bool isValidValue(const String&) const; + + virtual const String& suggestedValue() const; + void setSuggestedValue(const String&); + + double valueAsDate() const; + void setValueAsDate(double, ExceptionCode&); + + double valueAsNumber() const; + void setValueAsNumber(double, ExceptionCode&); + + virtual String placeholder() const; + virtual void setPlaceholder(const String&); + + String valueWithDefault() const; + + virtual void setValueFromRenderer(const String&); + void setFileListFromRenderer(const Vector<String>&); + + bool canHaveSelection() const; + virtual void select() { HTMLTextFormControlElement::select(); } + + virtual bool rendererIsNeeded(RenderStyle*); + virtual RenderObject* createRenderer(RenderArena*, RenderStyle*); + virtual void detach(); + + // FIXME: For isActivatedSubmit and setActivatedSubmit, we should use the NVI-idiom here by making + // it private virtual in all classes and expose a public method in HTMLFormControlElement to call + // the private virtual method. + virtual bool isActivatedSubmit() const; + virtual void setActivatedSubmit(bool flag); + + String altText() const; + + int maxResults() const { return m_maxResults; } + + String defaultValue() const; + void setDefaultValue(const String&); + + void setDefaultName(const AtomicString&); + + String accept() const; + String alt() const; + + void setSize(unsigned); + + KURL src() const; + + virtual int maxLength() const; + void setMaxLength(int, ExceptionCode&); + + bool multiple() const; + + virtual bool isAutofilled() const { return m_isAutofilled; } + void setAutofilled(bool = true); + + FileList* files(); + + void addSearchResult(); + void onSearch(); + +#if ENABLE(DATALIST) + HTMLElement* list() const; + HTMLOptionElement* selectedOption() const; +#endif + +#if ENABLE(WCSS) + void setWapInputFormat(String& mask); +#endif + + // These functions are public so they can be used in InputType classes. + // Otherwise, they would be private. + CheckedRadioButtons& checkedRadioButtons() const; + void handleBeforeTextInsertedEvent(Event*); + void updateCheckedRadioButtons(); + +protected: + HTMLInputElement(const QualifiedName&, Document*, HTMLFormElement* = 0); + + virtual void defaultEventHandler(Event*); + +private: + enum AutoCompleteSetting { Uninitialized, On, Off }; + + virtual void willMoveToNewOwnerDocument(); + virtual void didMoveToNewOwnerDocument(); + + virtual bool isKeyboardFocusable(KeyboardEvent*) const; + virtual bool isMouseFocusable() const; + virtual bool isEnumeratable() const; + virtual void updateFocusAppearance(bool restorePreviousSelection); + virtual void aboutToUnload(); + virtual bool shouldUseInputMethod() const; + + virtual const AtomicString& formControlName() const; + + // isChecked is used by the rendering tree/CSS while checked() is used by JS to determine checked state + virtual bool isChecked() const; + virtual bool isIndeterminate() const { return indeterminate(); } + + virtual bool isTextFormControl() const { return isTextField(); } + + virtual bool hasSpinButton() const; + virtual bool canTriggerImplicitSubmission() const { return isTextField(); } + + virtual const AtomicString& formControlType() const; + + virtual bool searchEventsShouldBeDispatched() const; + + virtual bool saveFormControlState(String& value) const; + virtual void restoreFormControlState(const String&); + + virtual bool canStartSelection() const; + + virtual void accessKeyAction(bool sendToAnyElement); + + virtual bool mapToEntry(const QualifiedName& attrName, MappedAttributeEntry& result) const; + virtual void parseMappedAttribute(Attribute*); + + virtual void copyNonAttributeProperties(const Element* source); + + virtual void attach(); + + virtual bool appendFormData(FormDataList&, bool); + + virtual bool isSuccessfulSubmitButton() const; + + virtual void reset(); + + virtual void* preDispatchEventHandler(Event*); + virtual void postDispatchEventHandler(Event*, void* dataFromPreDispatch); + + virtual bool isURLAttribute(Attribute*) const; + + virtual void cacheSelection(int start, int end); + + virtual bool isAcceptableValue(const String&) const; + virtual String sanitizeValue(const String&) const; + virtual bool hasUnacceptableValue() const; + + virtual bool isInRange() const; + virtual bool isOutOfRange() const; + + virtual void documentDidBecomeActive(); + + virtual void addSubresourceAttributeURLs(ListHashSet<KURL>&) const; + + bool needsActivationCallback(); + void registerForActivationCallbackIfNeeded(); + void unregisterForActivationCallbackIfNeeded(); + + virtual bool supportsMaxLength() const { return isTextType(); } + bool isTextType() const; + + virtual bool supportsPlaceholder() const; + virtual bool isEmptyValue() const { return value().isEmpty(); } + virtual void handleFocusEvent(); + virtual void handleBlurEvent(); + virtual int cachedSelectionStart() const { return m_data.cachedSelectionStart(); } + virtual int cachedSelectionEnd() const { return m_data.cachedSelectionEnd(); } + + virtual bool isOptionalFormControl() const { return !isRequiredFormControl(); } + virtual bool isRequiredFormControl() const; + virtual bool recalcWillValidate() const; + + void updateType(); + + // Helper for stepUp()/stepDown(). Adds step value * count to the current value. + void applyStep(double count, ExceptionCode&); + +#if ENABLE(DATALIST) + HTMLDataListElement* dataList() const; +#endif + +#if ENABLE(WCSS) + virtual InputElementData data() const { return m_data; } +#endif + + InputElementData m_data; + short m_maxResults; + bool m_isChecked : 1; + bool m_reflectsCheckedAttribute : 1; + bool m_isIndeterminate : 1; + bool m_hasType : 1; + bool m_isActivatedSubmit : 1; + unsigned m_autocomplete : 2; // AutoCompleteSetting + bool m_isAutofilled : 1; +#if ENABLE(DATALIST) + bool m_hasNonEmptyList : 1; +#endif + OwnPtr<InputType> m_inputType; +}; + +} //namespace + +#endif |