| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). | 2 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). |
| 3 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 3 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
| 4 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 4 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
| 5 * (C) 2001 Dirk Mueller (mueller@kde.org) | 5 * (C) 2001 Dirk Mueller (mueller@kde.org) |
| 6 * Copyright (C) 2004, 2005, 2006, 2007, 2009, 2010, 2011 Apple Inc. All rights
reserved. | 6 * Copyright (C) 2004, 2005, 2006, 2007, 2009, 2010, 2011 Apple Inc. All rights
reserved. |
| 7 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) | 7 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) |
| 8 * Copyright (C) 2010 Google Inc. All rights reserved. | 8 * Copyright (C) 2010 Google Inc. All rights reserved. |
| 9 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo
bile.com/) | 9 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo
bile.com/) |
| 10 * | 10 * |
| (...skipping 716 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 727 } | 727 } |
| 728 | 728 |
| 729 void HTMLSelectElement::recalcListItems(bool updateSelectedStates) const | 729 void HTMLSelectElement::recalcListItems(bool updateSelectedStates) const |
| 730 { | 730 { |
| 731 m_listItems.clear(); | 731 m_listItems.clear(); |
| 732 | 732 |
| 733 m_shouldRecalcListItems = false; | 733 m_shouldRecalcListItems = false; |
| 734 | 734 |
| 735 HTMLOptionElement* foundSelected = 0; | 735 HTMLOptionElement* foundSelected = 0; |
| 736 HTMLOptionElement* firstOption = 0; | 736 HTMLOptionElement* firstOption = 0; |
| 737 for (Element* currentElement = ElementTraversal::firstWithin(this); currentE
lement; ) { | 737 for (Element* currentElement = ElementTraversal::firstWithin(*this); current
Element; ) { |
| 738 if (!currentElement->isHTMLElement()) { | 738 if (!currentElement->isHTMLElement()) { |
| 739 currentElement = ElementTraversal::nextSkippingChildren(currentEleme
nt, this); | 739 currentElement = ElementTraversal::nextSkippingChildren(currentEleme
nt, this); |
| 740 continue; | 740 continue; |
| 741 } | 741 } |
| 742 HTMLElement* current = toHTMLElement(currentElement); | 742 HTMLElement& current = toHTMLElement(*currentElement); |
| 743 | 743 |
| 744 // optgroup tags may not nest. However, both FireFox and IE will | 744 // optgroup tags may not nest. However, both FireFox and IE will |
| 745 // flatten the tree automatically, so we follow suit. | 745 // flatten the tree automatically, so we follow suit. |
| 746 // (http://www.w3.org/TR/html401/interact/forms.html#h-17.6) | 746 // (http://www.w3.org/TR/html401/interact/forms.html#h-17.6) |
| 747 if (isHTMLOptGroupElement(current)) { | 747 if (isHTMLOptGroupElement(current)) { |
| 748 m_listItems.append(current); | 748 m_listItems.append(¤t); |
| 749 if (Element* nextElement = ElementTraversal::firstWithin(current)) { | 749 if (Element* nextElement = ElementTraversal::firstWithin(current)) { |
| 750 currentElement = nextElement; | 750 currentElement = nextElement; |
| 751 continue; | 751 continue; |
| 752 } | 752 } |
| 753 } | 753 } |
| 754 | 754 |
| 755 if (current->hasTagName(optionTag)) { | 755 if (current.hasTagName(optionTag)) { |
| 756 m_listItems.append(current); | 756 m_listItems.append(¤t); |
| 757 | 757 |
| 758 if (updateSelectedStates && !m_multiple) { | 758 if (updateSelectedStates && !m_multiple) { |
| 759 HTMLOptionElement* option = toHTMLOptionElement(current); | 759 HTMLOptionElement& option = toHTMLOptionElement(current); |
| 760 if (!firstOption) | 760 if (!firstOption) |
| 761 firstOption = option; | 761 firstOption = &option; |
| 762 if (option->selected()) { | 762 if (option.selected()) { |
| 763 if (foundSelected) | 763 if (foundSelected) |
| 764 foundSelected->setSelectedState(false); | 764 foundSelected->setSelectedState(false); |
| 765 foundSelected = option; | 765 foundSelected = &option; |
| 766 } else if (m_size <= 1 && !foundSelected && !option->isDisabledF
ormControl()) { | 766 } else if (m_size <= 1 && !foundSelected && !option.isDisabledFo
rmControl()) { |
| 767 foundSelected = option; | 767 foundSelected = &option; |
| 768 foundSelected->setSelectedState(true); | 768 foundSelected->setSelectedState(true); |
| 769 } | 769 } |
| 770 } | 770 } |
| 771 } | 771 } |
| 772 | 772 |
| 773 if (current->hasTagName(hrTag)) | 773 if (current.hasTagName(hrTag)) |
| 774 m_listItems.append(current); | 774 m_listItems.append(¤t); |
| 775 | 775 |
| 776 // In conforming HTML code, only <optgroup> and <option> will be found | 776 // In conforming HTML code, only <optgroup> and <option> will be found |
| 777 // within a <select>. We call NodeTraversal::nextSkippingChildren so tha
t we only step | 777 // within a <select>. We call NodeTraversal::nextSkippingChildren so tha
t we only step |
| 778 // into those tags that we choose to. For web-compat, we should cope | 778 // into those tags that we choose to. For web-compat, we should cope |
| 779 // with the case where odd tags like a <div> have been added but we | 779 // with the case where odd tags like a <div> have been added but we |
| 780 // handle this because such tags have already been removed from the | 780 // handle this because such tags have already been removed from the |
| 781 // <select>'s subtree at this point. | 781 // <select>'s subtree at this point. |
| 782 currentElement = ElementTraversal::nextSkippingChildren(currentElement,
this); | 782 currentElement = ElementTraversal::nextSkippingChildren(currentElement,
this); |
| 783 } | 783 } |
| 784 | 784 |
| (...skipping 793 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1578 remove(index); | 1578 remove(index); |
| 1579 return true; | 1579 return true; |
| 1580 } | 1580 } |
| 1581 | 1581 |
| 1582 bool HTMLSelectElement::isInteractiveContent() const | 1582 bool HTMLSelectElement::isInteractiveContent() const |
| 1583 { | 1583 { |
| 1584 return true; | 1584 return true; |
| 1585 } | 1585 } |
| 1586 | 1586 |
| 1587 } // namespace | 1587 } // namespace |
| OLD | NEW |