HTMLLegendElement.cpp revision 5af96e2c7b73ebc627c6894727826a7576d31758
1932648d528f333d43defdf16b3f8e84afa865cc8Zonr Chang/* 2932648d528f333d43defdf16b3f8e84afa865cc8Zonr Chang * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 3932648d528f333d43defdf16b3f8e84afa865cc8Zonr Chang * (C) 1999 Antti Koivisto (koivisto@kde.org) 4932648d528f333d43defdf16b3f8e84afa865cc8Zonr Chang * (C) 2001 Dirk Mueller (mueller@kde.org) 5932648d528f333d43defdf16b3f8e84afa865cc8Zonr Chang * Copyright (C) 2004, 2005, 2006, 2010 Apple Inc. All rights reserved. 6932648d528f333d43defdf16b3f8e84afa865cc8Zonr Chang * (C) 2006 Alexey Proskuryakov (ap@nypop.com) 7932648d528f333d43defdf16b3f8e84afa865cc8Zonr Chang * 8932648d528f333d43defdf16b3f8e84afa865cc8Zonr Chang * This library is free software; you can redistribute it and/or 9932648d528f333d43defdf16b3f8e84afa865cc8Zonr Chang * modify it under the terms of the GNU Library General Public 10932648d528f333d43defdf16b3f8e84afa865cc8Zonr Chang * License as published by the Free Software Foundation; either 11932648d528f333d43defdf16b3f8e84afa865cc8Zonr Chang * version 2 of the License, or (at your option) any later version. 12932648d528f333d43defdf16b3f8e84afa865cc8Zonr Chang * 13932648d528f333d43defdf16b3f8e84afa865cc8Zonr Chang * This library is distributed in the hope that it will be useful, 14932648d528f333d43defdf16b3f8e84afa865cc8Zonr Chang * but WITHOUT ANY WARRANTY; without even the implied warranty of 15932648d528f333d43defdf16b3f8e84afa865cc8Zonr Chang * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16932648d528f333d43defdf16b3f8e84afa865cc8Zonr Chang * Library General Public License for more details. 17105a9d2c57759532f70baa8b47b594f86a2a15a2Carl Shapiro * 18105a9d2c57759532f70baa8b47b594f86a2a15a2Carl Shapiro * You should have received a copy of the GNU Library General Public License 1977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * along with this library; see the file COPYING.LIB. If not, write to 20210a1ef6791db6d19856256346a318e8ba8b5ad9Shih-wei Liao * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 2177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * Boston, MA 02110-1301, USA. 22eac346ddd3c7cf7b4992b973e7160cb351fe1777Logan * 2394bf1c1882a5f5dbc57faa4898b10312d704857bShih-wei Liao */ 24bc5ed67ad0b0c96c3b72aefdc188fde97a7aa722Shih-wei Liao 25bc5ed67ad0b0c96c3b72aefdc188fde97a7aa722Shih-wei Liao#include "config.h" 26cd61af3513b64e6eb0cbfbb4e0182f898bae91edShih-wei Liao#include "HTMLLegendElement.h" 272c06c3ef2b23e48dcdf527c823e1debf7bc52596Ying Wang 28cd61af3513b64e6eb0cbfbb4e0182f898bae91edShih-wei Liao#include "HTMLNames.h" 29cf3e5219a81a19773bc36368876deb378ad513bfLogan#include <wtf/StdLibExtras.h> 30cf3e5219a81a19773bc36368876deb378ad513bfLogan 31f7f0ac5d3e12b2e84bd18aa32add4a11bf296dbbLogannamespace WebCore { 32a27a83f2b01b1710238d077dc9dfd7655f4513cdLogan 33cf3e5219a81a19773bc36368876deb378ad513bfLoganusing namespace HTMLNames; 34cf3e5219a81a19773bc36368876deb378ad513bfLogan 35cf3e5219a81a19773bc36368876deb378ad513bfLoganinline HTMLLegendElement::HTMLLegendElement(const QualifiedName& tagName, Document* document, HTMLFormElement* form) 36cf3e5219a81a19773bc36368876deb378ad513bfLogan : HTMLFormControlElement(tagName, document, form) 37ef9e4f7b23f110093bce85b92d8522d496676098Logan{ 38cf3e5219a81a19773bc36368876deb378ad513bfLogan ASSERT(hasTagName(legendTag)); 39cf3e5219a81a19773bc36368876deb378ad513bfLogan} 402a6dc82a465631f82fc589c6bc68c15ed264f7ebLogan 41f7f0ac5d3e12b2e84bd18aa32add4a11bf296dbbLoganPassRefPtr<HTMLLegendElement> HTMLLegendElement::create(const QualifiedName& tagName, Document* document, HTMLFormElement* form) 4275cc8a5c58b3260e530eae9f2edd502b71d25373Logan{ 43cf3e5219a81a19773bc36368876deb378ad513bfLogan return new HTMLLegendElement(tagName, document, form); 44cf3e5219a81a19773bc36368876deb378ad513bfLogan} 4552fb1e93af048acde6405038fe8bfabfd8c45a0fShih-wei Liao 4652fb1e93af048acde6405038fe8bfabfd8c45a0fShih-wei Liaobool HTMLLegendElement::supportsFocus() const 4752fb1e93af048acde6405038fe8bfabfd8c45a0fShih-wei Liao{ 4852fb1e93af048acde6405038fe8bfabfd8c45a0fShih-wei Liao return HTMLElement::supportsFocus(); 4952fb1e93af048acde6405038fe8bfabfd8c45a0fShih-wei Liao} 5052fb1e93af048acde6405038fe8bfabfd8c45a0fShih-wei Liao 5152fb1e93af048acde6405038fe8bfabfd8c45a0fShih-wei Liaoconst AtomicString& HTMLLegendElement::formControlType() const 5252fb1e93af048acde6405038fe8bfabfd8c45a0fShih-wei Liao{ 5352fb1e93af048acde6405038fe8bfabfd8c45a0fShih-wei Liao DEFINE_STATIC_LOCAL(const AtomicString, legend, ("legend")); 5452fb1e93af048acde6405038fe8bfabfd8c45a0fShih-wei Liao return legend; 5552fb1e93af048acde6405038fe8bfabfd8c45a0fShih-wei Liao} 5652fb1e93af048acde6405038fe8bfabfd8c45a0fShih-wei Liao 5752fb1e93af048acde6405038fe8bfabfd8c45a0fShih-wei LiaoString HTMLLegendElement::accessKey() const 5877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao{ 5977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao return getAttribute(accesskeyAttr); 6077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao} 6177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 6277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaovoid HTMLLegendElement::setAccessKey(const String &value) 63932648d528f333d43defdf16b3f8e84afa865cc8Zonr Chang{ 6461cb230180231bbcff0166ebc90ca8e16aba05dcLogan setAttribute(accesskeyAttr, value); 65cf3e5219a81a19773bc36368876deb378ad513bfLogan} 6661cb230180231bbcff0166ebc90ca8e16aba05dcLogan 6761cb230180231bbcff0166ebc90ca8e16aba05dcLoganString HTMLLegendElement::align() const 6861cb230180231bbcff0166ebc90ca8e16aba05dcLogan{ 6961cb230180231bbcff0166ebc90ca8e16aba05dcLogan return getAttribute(alignAttr); 7061cb230180231bbcff0166ebc90ca8e16aba05dcLogan} 7161cb230180231bbcff0166ebc90ca8e16aba05dcLogan 7261cb230180231bbcff0166ebc90ca8e16aba05dcLoganvoid HTMLLegendElement::setAlign(const String &value) 7361cb230180231bbcff0166ebc90ca8e16aba05dcLogan{ 7461cb230180231bbcff0166ebc90ca8e16aba05dcLogan setAttribute(alignAttr, value); 7561cb230180231bbcff0166ebc90ca8e16aba05dcLogan} 7661cb230180231bbcff0166ebc90ca8e16aba05dcLogan 7761cb230180231bbcff0166ebc90ca8e16aba05dcLoganHTMLFormControlElement* HTMLLegendElement::associatedControl() 7861cb230180231bbcff0166ebc90ca8e16aba05dcLogan{ 7961cb230180231bbcff0166ebc90ca8e16aba05dcLogan // Check if there's a fieldset belonging to this legend. 8061cb230180231bbcff0166ebc90ca8e16aba05dcLogan Node* fieldset = parentNode(); 8161cb230180231bbcff0166ebc90ca8e16aba05dcLogan while (fieldset && !fieldset->hasTagName(fieldsetTag)) 8261cb230180231bbcff0166ebc90ca8e16aba05dcLogan fieldset = fieldset->parentNode(); 8361cb230180231bbcff0166ebc90ca8e16aba05dcLogan if (!fieldset) 8461cb230180231bbcff0166ebc90ca8e16aba05dcLogan return 0; 8561cb230180231bbcff0166ebc90ca8e16aba05dcLogan 8661cb230180231bbcff0166ebc90ca8e16aba05dcLogan // Find first form element inside the fieldset that is not a legend element. 8761cb230180231bbcff0166ebc90ca8e16aba05dcLogan // FIXME: Should we consider tabindex? 8861cb230180231bbcff0166ebc90ca8e16aba05dcLogan Node* node = fieldset; 8961cb230180231bbcff0166ebc90ca8e16aba05dcLogan while ((node = node->traverseNextNode(fieldset))) { 9061cb230180231bbcff0166ebc90ca8e16aba05dcLogan if (node->isElementNode()) { 9161cb230180231bbcff0166ebc90ca8e16aba05dcLogan Element* element = static_cast<Element*>(node); 9261cb230180231bbcff0166ebc90ca8e16aba05dcLogan if (!element->hasLocalName(legendTag) && element->isFormControlElement()) 9361cb230180231bbcff0166ebc90ca8e16aba05dcLogan return static_cast<HTMLFormControlElement*>(element); 9461cb230180231bbcff0166ebc90ca8e16aba05dcLogan } 9561cb230180231bbcff0166ebc90ca8e16aba05dcLogan } 9661cb230180231bbcff0166ebc90ca8e16aba05dcLogan 9761cb230180231bbcff0166ebc90ca8e16aba05dcLogan return 0; 9861cb230180231bbcff0166ebc90ca8e16aba05dcLogan} 9961cb230180231bbcff0166ebc90ca8e16aba05dcLogan 10061cb230180231bbcff0166ebc90ca8e16aba05dcLoganvoid HTMLLegendElement::focus(bool) 10161cb230180231bbcff0166ebc90ca8e16aba05dcLogan{ 10261cb230180231bbcff0166ebc90ca8e16aba05dcLogan if (isFocusable()) 10361cb230180231bbcff0166ebc90ca8e16aba05dcLogan Element::focus(); 10461cb230180231bbcff0166ebc90ca8e16aba05dcLogan 10561cb230180231bbcff0166ebc90ca8e16aba05dcLogan // To match other browsers' behavior, never restore previous selection. 10661cb230180231bbcff0166ebc90ca8e16aba05dcLogan if (HTMLFormControlElement* control = associatedControl()) 10761cb230180231bbcff0166ebc90ca8e16aba05dcLogan control->focus(false); 10861cb230180231bbcff0166ebc90ca8e16aba05dcLogan} 10961cb230180231bbcff0166ebc90ca8e16aba05dcLogan 11061cb230180231bbcff0166ebc90ca8e16aba05dcLoganvoid HTMLLegendElement::accessKeyAction(bool sendToAnyElement) 11161cb230180231bbcff0166ebc90ca8e16aba05dcLogan{ 11261cb230180231bbcff0166ebc90ca8e16aba05dcLogan if (HTMLFormControlElement* control = associatedControl()) 11361cb230180231bbcff0166ebc90ca8e16aba05dcLogan control->accessKeyAction(sendToAnyElement); 11461cb230180231bbcff0166ebc90ca8e16aba05dcLogan} 11561cb230180231bbcff0166ebc90ca8e16aba05dcLogan 11661cb230180231bbcff0166ebc90ca8e16aba05dcLogan} // namespace 11761cb230180231bbcff0166ebc90ca8e16aba05dcLogan