2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * Copyright (C) 2003, 2004, 2005, 2006, 2007 Apple Inc. All rights reserved.
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Library General Public
8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Library General Public License for more details.
16 * You should have received a copy of the GNU Library General Public License
17 * along with this library; see the file COPYING.LIB. If not, write to
18 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19 * Boston, MA 02110-1301, USA.
24 #include "HTMLNameCollection.h"
27 #include "HTMLDocument.h"
28 #include "HTMLNames.h"
29 #include "HTMLObjectElement.h"
33 using namespace HTMLNames
;
35 HTMLNameCollection::HTMLNameCollection(PassRefPtr
<Document
> document
, CollectionType type
, const String
& name
)
36 : HTMLCollection(document
.get(), type
, document
->nameCollectionInfo(type
, name
))
41 Element
* HTMLNameCollection::itemAfter(Element
* previous
) const
43 ASSERT(previous
!= base());
47 current
= base()->firstChild();
49 current
= previous
->traverseNextNode(base());
51 for (; current
; current
= current
->traverseNextNode(base())) {
52 if (!current
->isElementNode())
54 Element
* e
= static_cast<Element
*>(current
);
56 case WindowNamedItems
:
57 // find only images, forms, applets, embeds and objects by name,
59 if (e
->hasTagName(imgTag
) ||
60 e
->hasTagName(formTag
) ||
61 e
->hasTagName(appletTag
) ||
62 e
->hasTagName(embedTag
) ||
63 e
->hasTagName(objectTag
))
64 if (e
->getAttribute(nameAttr
) == m_name
)
66 if (e
->getAttribute(idAttr
) == m_name
)
69 case DocumentNamedItems
:
70 // find images, forms, applets, embeds, objects and iframes by name,
71 // applets and object by id, and images by id but only if they have
72 // a name attribute (this very strange rule matches IE)
73 if (e
->hasTagName(formTag
) || e
->hasTagName(embedTag
) || e
->hasTagName(iframeTag
)) {
74 if (e
->getAttribute(nameAttr
) == m_name
)
76 } else if (e
->hasTagName(appletTag
)) {
77 if (e
->getAttribute(nameAttr
) == m_name
|| e
->getAttribute(idAttr
) == m_name
)
79 } else if (e
->hasTagName(objectTag
)) {
80 if ((e
->getAttribute(nameAttr
) == m_name
|| e
->getAttribute(idAttr
) == m_name
)
81 && static_cast<HTMLObjectElement
*>(e
)->isDocNamedItem())
83 } else if (e
->hasTagName(imgTag
)) {
84 if (e
->getAttribute(nameAttr
) == m_name
|| (e
->getAttribute(idAttr
) == m_name
&& e
->hasAttribute(nameAttr
)))