Home | History | Annotate | Download | only in html
      1 /*
      2  * Copyright (C) 1999 Lars Knoll (knoll (at) kde.org)
      3  *           (C) 1999 Antti Koivisto (koivisto (at) kde.org)
      4  *           (C) 2001 Dirk Mueller (mueller (at) kde.org)
      5  * Copyright (C) 2004, 2005, 2006 Apple Computer, Inc.
      6  *           (C) 2006 Alexey Proskuryakov (ap (at) nypop.com)
      7  *
      8  * This library is free software; you can redistribute it and/or
      9  * modify it under the terms of the GNU Library General Public
     10  * License as published by the Free Software Foundation; either
     11  * version 2 of the License, or (at your option) any later version.
     12  *
     13  * This library is distributed in the hope that it will be useful,
     14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     16  * Library General Public License for more details.
     17  *
     18  * You should have received a copy of the GNU Library General Public License
     19  * along with this library; see the file COPYING.LIB.  If not, write to
     20  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
     21  * Boston, MA 02110-1301, USA.
     22  *
     23  */
     24 
     25 #include "config.h"
     26 #include "HTMLLegendElement.h"
     27 
     28 #include "HTMLNames.h"
     29 #include <wtf/StdLibExtras.h>
     30 
     31 namespace WebCore {
     32 
     33 using namespace HTMLNames;
     34 
     35 HTMLLegendElement::HTMLLegendElement(const QualifiedName& tagName, Document *doc, HTMLFormElement *f)
     36     : HTMLFormControlElement(tagName, doc, f)
     37 {
     38     ASSERT(hasTagName(legendTag));
     39 }
     40 
     41 HTMLLegendElement::~HTMLLegendElement()
     42 {
     43 }
     44 
     45 bool HTMLLegendElement::supportsFocus() const
     46 {
     47     return HTMLElement::supportsFocus();
     48 }
     49 
     50 const AtomicString& HTMLLegendElement::formControlType() const
     51 {
     52     DEFINE_STATIC_LOCAL(const AtomicString, legend, ("legend"));
     53     return legend;
     54 }
     55 
     56 String HTMLLegendElement::accessKey() const
     57 {
     58     return getAttribute(accesskeyAttr);
     59 }
     60 
     61 void HTMLLegendElement::setAccessKey(const String &value)
     62 {
     63     setAttribute(accesskeyAttr, value);
     64 }
     65 
     66 String HTMLLegendElement::align() const
     67 {
     68     return getAttribute(alignAttr);
     69 }
     70 
     71 void HTMLLegendElement::setAlign(const String &value)
     72 {
     73     setAttribute(alignAttr, value);
     74 }
     75 
     76 Element *HTMLLegendElement::formElement()
     77 {
     78     // Check if there's a fieldset belonging to this legend.
     79     Node *fieldset = parentNode();
     80     while (fieldset && !fieldset->hasTagName(fieldsetTag))
     81         fieldset = fieldset->parentNode();
     82     if (!fieldset)
     83         return 0;
     84 
     85     // Find first form element inside the fieldset.
     86     // FIXME: Should we care about tabindex?
     87     Node *node = fieldset;
     88     while ((node = node->traverseNextNode(fieldset))) {
     89         if (node->isHTMLElement()) {
     90             HTMLElement *element = static_cast<HTMLElement *>(node);
     91             if (!element->hasLocalName(legendTag) && element->isFormControlElement())
     92                 return element;
     93         }
     94     }
     95 
     96     return 0;
     97 }
     98 
     99 void HTMLLegendElement::focus(bool)
    100 {
    101     if (isFocusable())
    102         Element::focus();
    103 
    104     // to match other browsers, never restore previous selection
    105     if (Element *element = formElement())
    106         element->focus(false);
    107 }
    108 
    109 void HTMLLegendElement::accessKeyAction(bool sendToAnyElement)
    110 {
    111     if (Element *element = formElement())
    112         element->accessKeyAction(sendToAnyElement);
    113 }
    114 
    115 } // namespace
    116