https://bugs.webkit.org/show_bug.cgi?id=84009
Reviewed by Hajime Morita.
This change adds a framework to support fixed placeholder string for
textfield-like <input> without the palceholder attribute support. This
doesn't change any behavior of input types which support the
'placeholder' attribute.
According to the standard, <input type=date> doesn't support the
'placeholder' attribute. However it is a kind of text field in WebKit
platforms with ENABLE_CALENDAR_PICKER, and we may show something useful
information as the default placeholder.
No new tests because of no behavior changes.
* html/HTMLTextFormControlElement.h:
(HTMLTextFormControlElement): Make isPlaceholderEmpty() virtual.
* html/HTMLInputElement.h:
(HTMLInputElement): Overrides isPlaceholderEmpty().
* html/HTMLInputElement.cpp:
(WebCore::HTMLInputElement::isPlaceholderEmpty):
Check InputType::defaultPlaceholder() if InputType::usesFixedPlaceholder().
* html/InputType.cpp:
(WebCore::InputType::usesFixedPlaceholder): Added. Returns false.
(WebCore::InputType::fixedPlaceholder): Added. Returns a null string.
* html/InputType.h:
(InputType): Add usesFixedPlaceholder() and fixedPlaceholder().
* html/TextFieldInputType.cpp:
(WebCore::TextFieldInputType::updatePlaceholderText):
Uses fixedPlaceholder() instead of strippedPlaceholder() if usesFixedPlaceholder().
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@114360
268f45cc-cd09-0410-ab3c-
d52691b4dbfc
2012-04-17 Kent Tamura <tkent@chromium.org>
+ Introduce an internal feature for a fixed placeholder
+ https://bugs.webkit.org/show_bug.cgi?id=84009
+
+ Reviewed by Hajime Morita.
+
+ This change adds a framework to support fixed placeholder string for
+ textfield-like <input> without the palceholder attribute support. This
+ doesn't change any behavior of input types which support the
+ 'placeholder' attribute.
+
+ According to the standard, <input type=date> doesn't support the
+ 'placeholder' attribute. However it is a kind of text field in WebKit
+ platforms with ENABLE_CALENDAR_PICKER, and we may show something useful
+ information as the default placeholder.
+
+ No new tests because of no behavior changes.
+
+ * html/HTMLTextFormControlElement.h:
+ (HTMLTextFormControlElement): Make isPlaceholderEmpty() virtual.
+ * html/HTMLInputElement.h:
+ (HTMLInputElement): Overrides isPlaceholderEmpty().
+ * html/HTMLInputElement.cpp:
+ (WebCore::HTMLInputElement::isPlaceholderEmpty):
+ Check InputType::defaultPlaceholder() if InputType::usesFixedPlaceholder().
+ * html/InputType.cpp:
+ (WebCore::InputType::usesFixedPlaceholder): Added. Returns false.
+ (WebCore::InputType::fixedPlaceholder): Added. Returns a null string.
+ * html/InputType.h:
+ (InputType): Add usesFixedPlaceholder() and fixedPlaceholder().
+ * html/TextFieldInputType.cpp:
+ (WebCore::TextFieldInputType::updatePlaceholderText):
+ Uses fixedPlaceholder() instead of strippedPlaceholder() if usesFixedPlaceholder().
+
+2012-04-17 Kent Tamura <tkent@chromium.org>
+
Move some code of LocalizedNumberICU.cpp to ICULocale.cpp
https://bugs.webkit.org/show_bug.cgi?id=84128
return m_inputType->supportsPlaceholder();
}
+bool HTMLInputElement::isPlaceholderEmpty() const
+{
+ if (m_inputType->usesFixedPlaceholder())
+ return m_inputType->fixedPlaceholder().isEmpty();
+ return HTMLTextFormControlElement::isPlaceholderEmpty();
+}
+
void HTMLInputElement::updatePlaceholderText()
{
return m_inputType->updatePlaceholderText();
bool isTextType() const;
virtual bool supportsPlaceholder() const;
+ virtual bool isPlaceholderEmpty() const OVERRIDE;
virtual void updatePlaceholderText();
virtual bool isEmptyValue() const OVERRIDE { return innerTextValue().isEmpty(); }
virtual bool isEmptySuggestedValue() const { return suggestedValue().isEmpty(); }
protected:
HTMLTextFormControlElement(const QualifiedName&, Document*, HTMLFormElement*);
+ virtual bool isPlaceholderEmpty() const;
virtual void updatePlaceholderText() = 0;
virtual void parseAttribute(Attribute*) OVERRIDE;
virtual void dispatchBlurEvent(PassRefPtr<Node> newFocusedNode);
virtual bool childShouldCreateRenderer(const NodeRenderingContext&) const OVERRIDE;
- bool isPlaceholderEmpty() const;
-
// Returns true if user-editable value is empty. Used to check placeholder visibility.
virtual bool isEmptyValue() const = 0;
// Returns true if suggested value is empty. Used to check placeholder visibility.
return false;
}
+bool InputType::usesFixedPlaceholder() const
+{
+ return false;
+}
+
+String InputType::fixedPlaceholder()
+{
+ return String();
+}
+
void InputType::updatePlaceholderText()
{
}
virtual bool isCheckable();
virtual bool isSteppable() const;
virtual bool shouldRespectHeightAndWidthAttributes();
+ // If supportsPlaceholder() && !usesFixedPlaceholder(), it means a type
+ // supports the 'placeholder' attribute.
+ // If supportsPlaceholder() && usesFixedPlaceholder(), it means a type
+ // doesn't support the 'placeholder' attribute, but shows
+ // fixedPlaceholder() string as a placeholder.
virtual bool supportsPlaceholder() const;
+ virtual bool usesFixedPlaceholder() const;
+ virtual String fixedPlaceholder();
virtual void updatePlaceholderText();
virtual void multipleAttributeChanged();
virtual void disabledAttributeChanged();
if (!supportsPlaceholder())
return;
ExceptionCode ec = 0;
- String placeholderText = element()->strippedPlaceholder();
+ String placeholderText = usesFixedPlaceholder() ? fixedPlaceholder() : element()->strippedPlaceholder();
if (placeholderText.isEmpty()) {
if (m_placeholder) {
m_placeholder->parentNode()->removeChild(m_placeholder.get(), ec);