1/*
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.
5 *
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.
10 *
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.
15 *
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.
20 *
21 */
22
23#ifndef HTMLNameCollection_h
24#define HTMLNameCollection_h
25
26#include "HTMLCollection.h"
27
28#include <wtf/text/AtomicString.h>
29
30namespace WebCore {
31
32class Document;
33
34class HTMLNameCollection : public HTMLCollection {
35public:
36    ~HTMLNameCollection();
37
38protected:
39    HTMLNameCollection(Node*, CollectionType, const AtomicString& name);
40
41    AtomicString m_name;
42};
43
44class WindowNameCollection : public HTMLNameCollection {
45public:
46    static PassRefPtr<WindowNameCollection> create(Node* document, CollectionType type, const AtomicString& name)
47    {
48        return adoptRef(new WindowNameCollection(document, type, name));
49    }
50
51    bool nodeMatches(Element* element) const { return nodeMatches(element, m_name); }
52
53    static bool nodeMatchesIfIdAttributeMatch(Element*) { return true; }
54    static bool nodeMatchesIfNameAttributeMatch(Element*);
55    static bool nodeMatches(Element*, const AtomicString&);
56
57private:
58    WindowNameCollection(Node* document, CollectionType type, const AtomicString& name)
59        : HTMLNameCollection(document, type, name)
60    {
61        ASSERT(type == WindowNamedItems);
62    }
63};
64
65class DocumentNameCollection : public HTMLNameCollection {
66public:
67    static PassRefPtr<DocumentNameCollection> create(Node* document, CollectionType type, const AtomicString& name)
68    {
69        return adoptRef(new DocumentNameCollection(document, type, name));
70    }
71
72    static bool nodeMatchesIfIdAttributeMatch(Element*);
73    static bool nodeMatchesIfNameAttributeMatch(Element*);
74    bool nodeMatches(Element* element) const { return nodeMatches(element, m_name); }
75
76    static bool nodeMatches(Element*, const AtomicString&);
77
78private:
79    DocumentNameCollection(Node* document, CollectionType type, const AtomicString& name)
80        : HTMLNameCollection(document, type, name)
81    {
82        ASSERT(type == DocumentNamedItems);
83    }
84};
85
86}
87
88#endif
89