Home | History | Annotate | Download | only in dom

Lines Matching refs:Element

27 #include "Element.h"
73 void SelectElement::selectAll(SelectElementData& data, Element* element)
76 if (!element->renderer() || !data.multiple())
80 saveLastSelection(data, element);
83 setActiveSelectionAnchorIndex(data, element, nextSelectableListIndex(data, element, -1));
84 setActiveSelectionEndIndex(data, previousSelectableListIndex(data, element, -1));
86 updateListBoxSelection(data, element, false);
87 listBoxOnChange(data, element);
90 void SelectElement::saveLastSelection(SelectElementData& data, Element* element)
93 data.setLastOnChangeIndex(selectedIndex(data, element));
100 const Vector<Element*>& items = data.listItems(element);
107 int SelectElement::nextSelectableListIndex(SelectElementData& data, Element* element, int startIndex)
109 const Vector<Element*>& items = data.listItems(element);
118 int SelectElement::previousSelectableListIndex(SelectElementData& data, Element* element, int startIndex)
120 const Vector<Element*>& items = data.listItems(element);
131 void SelectElement::setActiveSelectionAnchorIndex(SelectElementData& data, Element* element, int index)
139 const Vector<Element*>& items = data.listItems(element);
151 void SelectElement::updateListBoxSelection(SelectElementData& data, Element* element, bool deselectOtherOptions)
153 ASSERT(element->renderer() && element->renderer()->isListBox());
160 const Vector<Element*>& items = data.listItems(element);
174 scrollToSelection(data, element);
177 void SelectElement::listBoxOnChange(SelectElementData& data, Element* element)
182 const Vector<Element*>& items = data.listItems(element);
186 element->dispatchFormControlChangeEvent();
201 element->dispatchFormControlChangeEvent();
204 void SelectElement::menuListOnChange(SelectElementData& data, Element* element)
208 int selected = selectedIndex(data, element);
212 element->dispatchFormControlChangeEvent();
216 void SelectElement::scrollToSelection(SelectElementData& data, Element* element)
221 if (RenderObject* renderer = element->renderer())
225 void SelectElement::setOptionsChangedOnRenderer(SelectElementData& data, Element* element)
227 if (RenderObject* renderer = element->renderer()) {
235 void SelectElement::setRecalcListItems(SelectElementData& data, Element* element)
239 setOptionsChangedOnRenderer(data, element);
240 element->setNeedsStyleRecalc();
243 void SelectElement::recalcListItems(SelectElementData& data, const Element* element, bool updateSelectedStates)
245 Vector<Element*>& listItems = data.rawListItems();
251 for (Node* currentNode = element->firstChild(); currentNode;) {
253 currentNode = currentNode->traverseNextSibling(element);
257 Element* current = static_cast<Element*>(currentNode);
293 currentNode = currentNode->traverseNextSibling(element);
297 int SelectElement::selectedIndex(const SelectElementData& data, const Element* element)
302 const Vector<Element*>& items = data.listItems(element);
314 void SelectElement::setSelectedIndex(SelectElementData& data, Element* element, int optionIndex, bool deselect, bool fireOnChangeNow, bool userDrivenChange)
316 const Vector<Element*>& items = data.listItems(element);
317 int listIndex = optionToListIndex(data, element, optionIndex);
321 Element* excludeElement = 0;
325 setActiveSelectionAnchorIndex(data, element, listIndex);
332 deselectItems(data, element, excludeElement);
334 // For the menu list case, this is what makes the selected element appear.
335 if (RenderObject* renderer = element->renderer())
338 scrollToSelection(data, element);
344 menuListOnChange(data, element);
345 if (RenderMenuList* menuList = toRenderMenuList(element->renderer()))
349 if (Frame* frame = element->document()->frame())
350 frame->page()->chrome()->client()->formStateDidChange(element);
353 int SelectElement::optionToListIndex(const SelectElementData& data, const Element* element, int optionIndex)
355 const Vector<Element*>& items = data.listItems(element);
372 int SelectElement::listToOptionIndex(const SelectElementData& data, const Element* element, int listIndex)
374 const Vector<Element*>& items = data.listItems(element);
387 void SelectElement::dispatchFocusEvent(SelectElementData& data, Element* element)
391 saveLastSelection(data, element);
394 void SelectElement::dispatchBlurEvent(SelectElementData& data, Element* element)
399 menuListOnChange(data, element);
402 void SelectElement::deselectItems(SelectElementData& data, Element* element, Element* excludeElement)
404 const Vector<Element*>& items = data.listItems(element);
414 bool SelectElement::saveFormControlState(const SelectElementData& data, const Element* element, String& value)
416 const Vector<Element*>& items = data.listItems(element);
431 void SelectElement::restoreFormControlState(SelectElementData& data, Element* element, const String& state)
433 recalcListItems(data, element);
435 const Vector<Element*>& items = data.listItems(element);
443 setOptionsChangedOnRenderer(data, element);
446 void SelectElement::parseMultipleAttribute(SelectElementData& data, Element* element, MappedAttribute* attribute)
450 element->attached()) {
451 element->detach();
452 element->attach();
456 bool SelectElement::appendFormData(SelectElementData& data, Element* element, FormDataList& list)
458 const AtomicString& name = element->formControlName();
463 const Vector<Element*>& items = data.listItems(element);
491 void SelectElement::reset(SelectElementData& data, Element* element)
496 const Vector<Element*>& items = data.listItems(element);
517 setOptionsChangedOnRenderer(data, element);
518 element->setNeedsStyleRecalc();
528 static int nextValidIndex(const Vector<Element*>& listItems, int listIndex, SkipDirection direction, int skip)
544 void SelectElement::menuListDefaultEventHandler(SelectElementData& data, Element* element, Event* event, HTMLFormElement* htmlForm)
551 if (!element->renderer() || !event->isKeyboardEvent())
559 element->focus();
562 saveLastSelection(data, element);
563 if (RenderMenuList* menuList = toRenderMenuList(element->renderer()))
568 const Vector<Element*>& listItems = data.listItems(element);
570 int listIndex = optionToListIndex(data, element, selectedIndex(data, element));
592 setSelectedIndex(data, element, listToOptionIndex(data, element, listIndex));
601 if (!element->renderer() || !event->isKeyboardEvent())
609 element->focus();
612 saveLastSelection(data, element);
613 if (RenderMenuList* menuList = toRenderMenuList(element->renderer()))
619 element->focus();
622 saveLastSelection(data, element);
623 if (RenderMenuList* menuList = toRenderMenuList(element->renderer()))
627 menuListOnChange(data, element);
633 int listIndex = optionToListIndex(data, element, selectedIndex(data, element));
636 setSelectedIndex(data, element, listToOptionIndex(data, element, listIndex), true, true);
645 element->focus();
646 if (element->renderer() && element->renderer()->isMenuList()) {
647 if (RenderMenuList* menuList = toRenderMenuList(element->renderer())) {
653 saveLastSelection(data, element);
662 void SelectElement::listBoxDefaultEventHandler(SelectElementData& data, Element* element, Event* event, HTMLFormElement* htmlForm)
664 const Vector<Element*>& listItems = data.listItems(element);
667 element->focus();
671 IntPoint localOffset = roundedIntPoint(element->renderer()->absoluteToLocal(mouseEvent->absoluteLocation(), false, true));
672 int listIndex = toRenderListBox(element->renderer())->listIndexAtOffset(localOffset.x(), localOffset.y());
675 saveLastSelection(data, element);
689 Element* clickedElement = listItems[listIndex];
703 deselectItems(data, element, clickedElement);
707 setActiveSelectionAnchorIndex(data, element, selectedIndex(data, element));
716 setActiveSelectionAnchorIndex(data, element, listIndex);
719 updateListBoxSelection(data, element, !multiSelect);
721 if (Frame* frame = element->document()->frame())
726 } else if (event->type() == eventNames().mouseupEvent && event->isMouseEvent() && static_cast<MouseEvent*>(event)->button() == LeftButton && element->document()->frame()->eventHandler()->autoscrollRenderer() != element->renderer())
728 listBoxOnChange(data, element);
738 endIndex = nextSelectableListIndex(data, element, lastSelectedListIndex(data, element));
740 endIndex = previousSelectableListIndex(data, element, optionToListIndex(data, element, selectedIndex(data, element)));
744 endIndex = nextSelectableListIndex(data, element, data.activeSelectionEndIndex());
746 endIndex = previousSelectableListIndex(data, element, data.activeSelectionEndIndex());
751 saveLastSelection(data, element);
761 deselectItems(data, element);
762 setActiveSelectionAnchorIndex(data, element, data.activeSelectionEndIndex());
765 toRenderListBox(element->renderer())->scrollToRevealElementAtListIndex(endIndex);
766 updateListBoxSelection(data, element, deselectOthers);
767 listBoxOnChange(data, element);
784 void SelectElement::defaultEventHandler(SelectElementData& data, Element* element, Event* event, HTMLFormElement* htmlForm)
786 if (!element->renderer())
790 menuListDefaultEventHandler(data, element, event, htmlForm);
792 listBoxDefaultEventHandler(data, element, event, htmlForm);
800 typeAheadFind(data, element, keyboardEvent);
807 int SelectElement::lastSelectedListIndex(const SelectElementData& data, const Element* element)
812 const Vector<Element*>& items = data.listItems(element);
838 void SelectElement::typeAheadFind(SelectElementData& data, Element* element, KeyboardEvent* event)
867 const Vector<Element*>& items = data.listItems(element);
872 int selected = selectedIndex(data, element);
873 int index = (optionToListIndex(data, element, selected >= 0 ? selected : 0) + searchStartOffset) % itemCount;
877 // a matching element. This code uses foldCase to work around the fact that
889 setSelectedIndex(data, element, listToOptionIndex(data, element, index));
891 listBoxOnChange(data, element);
893 setOptionsChangedOnRenderer(data, element);
894 element->setNeedsStyleRecalc();
900 void SelectElement::insertedIntoTree(SelectElementData& data, Element* element)
902 // When the element is created during document parsing, it won't have any items yet - but for innerHTML
904 recalcListItems(data, element, true);
907 void SelectElement::accessKeySetSelectedIndex(SelectElementData& data, Element* element, int index)
910 if (!element->focused())
911 element->accessKeyAction(false);
914 const Vector<Element*>& items = data.listItems(element);
915 int listIndex = optionToListIndex(data, element, index);
920 setSelectedIndex(data, element, index, false, true);
923 listBoxOnChange(data, element);
924 scrollToSelection(data, element);
927 unsigned SelectElement::optionCount(const SelectElementData& data, const Element* element)
931 const Vector<Element*>& items = data.listItems(element);
954 void SelectElementData::checkListItems(const Element* element) const
957 const Vector<Element*>& items = m_listItems;
958 SelectElement::recalcListItems(*const_cast<SelectElementData*>(this), element, false);
961 UNUSED_PARAM(element);
965 Vector<Element*>& SelectElementData::listItems(const Element* element)
968 SelectElement::recalcListItems(*this, element);
970 checkListItems(element);
975 const Vector<Element*>& SelectElementData::listItems(const Element* element) const
978 SelectElement::recalcListItems(*const_cast<SelectElementData*>(this), element);
980 checkListItems(element);
985 SelectElement* toSelectElement(Element* element)
987 if (element->isHTMLElement()) {
988 if (element->hasTagName(HTMLNames::selectTag))
989 return static_cast<HTMLSelectElement*>(element);
990 if (element->hasTagName(HTMLNames::keygenTag))
991 return static_cast<HTMLKeygenElement*>(element);
995 if (element->isWMLElement() && element->hasTagName(WMLNames::selectTag))
996 return static_cast<WMLSelectElement*>(element);