Index: Source/core/html/HTMLSelectElement.cpp |
diff --git a/Source/core/html/HTMLSelectElement.cpp b/Source/core/html/HTMLSelectElement.cpp |
index 6be5c079cccbc348acd6f9a648b0a4354870d240..94351623c2b9673a55e968554c2b2ed36ed519af 100644 |
--- a/Source/core/html/HTMLSelectElement.cpp |
+++ b/Source/core/html/HTMLSelectElement.cpp |
@@ -253,6 +253,40 @@ void HTMLSelectElement::setValue(const String &value) |
setSelectedIndex(-1); |
} |
+String HTMLSelectElement::suggestedValue() const |
+{ |
+ const Vector<HTMLElement*>& items = listItems(); |
+ for (unsigned i = 0; i < items.size(); ++i) { |
+ if (items[i]->hasLocalName(optionTag) && m_suggestedIndex >= 0) { |
Inactive
2014/03/16 23:49:43
isHTMLOptionElement()
ziran.sun
2014/03/17 16:41:10
Done.
|
+ if (i == (unsigned)m_suggestedIndex) |
tkent
2014/03/16 23:34:04
We don't use C-style cast.
static_cast<unsigned>(m
ziran.sun
2014/03/17 16:41:10
Done.
|
+ return toHTMLOptionElement(items[i])->value(); |
+ } |
+ } |
+ return ""; |
+} |
+ |
+void HTMLSelectElement::setSuggestedValue(const String& value) |
+{ |
+ if (value.isNull()) { |
+ setSuggestedIndex(-1); |
+ return; |
+ } |
+ |
+ const Vector<HTMLElement*>& items = listItems(); |
+ unsigned optionIndex = 0; |
+ for (unsigned i = 0; i < items.size(); ++i) { |
+ if (items[i]->hasLocalName(optionTag)) { |
Inactive
2014/03/16 23:49:43
Ditto
ziran.sun
2014/03/17 16:41:10
Done.
|
+ if (toHTMLOptionElement(items[i])->value() == value) { |
+ setSuggestedIndex(optionIndex); |
+ return; |
+ } |
+ optionIndex++; |
+ } |
+ } |
+ |
+ setSuggestedIndex(-1); |
+} |
+ |
bool HTMLSelectElement::isPresentationAttribute(const QualifiedName& name) const |
{ |
if (name == alignAttr) { |
@@ -795,6 +829,22 @@ void HTMLSelectElement::setSelectedIndex(int index) |
selectOption(index, DeselectOtherOptions); |
} |
+int HTMLSelectElement::suggestedIndex() const |
+{ |
+ return m_suggestedIndex; |
+} |
+ |
+void HTMLSelectElement::setSuggestedIndex(int suggestedIndex) |
+{ |
+ m_suggestedIndex = suggestedIndex; |
+ |
+ if (RenderObject* renderer = this->renderer()) { |
+ renderer->updateFromElement(); |
+ if (renderer->isListBox()) |
+ toRenderListBox(renderer)->scrollToRevealElementAtListIndex(suggestedIndex); |
+ } |
+} |
+ |
void HTMLSelectElement::optionSelectionStateChanged(HTMLOptionElement* option, bool optionIsSelected) |
{ |
ASSERT(option->ownerSelectElement() == this); |