OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
4 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2011, 2012 Apple Inc. All r
ights reserved. | 4 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2011, 2012 Apple Inc. All r
ights reserved. |
5 * Copyright (C) 2014 Samsung Electronics. All rights reserved. | 5 * Copyright (C) 2014 Samsung Electronics. All rights reserved. |
6 * | 6 * |
7 * This library is free software; you can redistribute it and/or | 7 * This library is free software; you can redistribute it and/or |
8 * modify it under the terms of the GNU Library General Public | 8 * modify it under the terms of the GNU Library General Public |
9 * License as published by the Free Software Foundation; either | 9 * License as published by the Free Software Foundation; either |
10 * version 2 of the License, or (at your option) any later version. | 10 * version 2 of the License, or (at your option) any later version. |
(...skipping 482 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
493 { | 493 { |
494 return namedItem(name); | 494 return namedItem(name); |
495 } | 495 } |
496 | 496 |
497 void HTMLCollection::supportedPropertyNames(Vector<String>& names) | 497 void HTMLCollection::supportedPropertyNames(Vector<String>& names) |
498 { | 498 { |
499 // As per the specification (http://dom.spec.whatwg.org/#htmlcollection): | 499 // As per the specification (http://dom.spec.whatwg.org/#htmlcollection): |
500 // The supported property names are the values from the list returned by the
se steps: | 500 // The supported property names are the values from the list returned by the
se steps: |
501 // 1. Let result be an empty list. | 501 // 1. Let result be an empty list. |
502 // 2. For each element represented by the collection, in tree order, run the
se substeps: | 502 // 2. For each element represented by the collection, in tree order, run the
se substeps: |
503 // 1. If element is in the HTML namespace and has a name attribute whose v
alue is neither the empty string | 503 // 1. If element has an ID which is neither the empty string nor is in res
ult, append element's ID to result. |
| 504 // 2. If element is in the HTML namespace and has a name attribute whose v
alue is neither the empty string |
504 // nor is in result, append element's name attribute value to result. | 505 // nor is in result, append element's name attribute value to result. |
505 // 2. If element has an ID which is neither the empty string nor is in res
ult, append element's ID to result. | |
506 // 3. Return result. | 506 // 3. Return result. |
507 HashSet<AtomicString> existingNames; | 507 HashSet<AtomicString> existingNames; |
508 ContainerNode& root = rootNode(); | 508 ContainerNode& root = rootNode(); |
509 for (Element* element = traverseToFirstElement(root); element; element = tra
verseNextElement(*element, root)) { | 509 for (Element* element = traverseToFirstElement(root); element; element = tra
verseNextElement(*element, root)) { |
510 if (element->isHTMLElement()) { | |
511 const AtomicString& nameAttribute = element->getNameAttribute(); | |
512 if (!nameAttribute.isEmpty()) { | |
513 HashSet<AtomicString>::AddResult addResult = existingNames.add(n
ameAttribute); | |
514 if (addResult.isNewEntry) | |
515 names.append(nameAttribute); | |
516 } | |
517 } | |
518 const AtomicString& idAttribute = element->getIdAttribute(); | 510 const AtomicString& idAttribute = element->getIdAttribute(); |
519 if (!idAttribute.isEmpty()) { | 511 if (!idAttribute.isEmpty()) { |
520 HashSet<AtomicString>::AddResult addResult = existingNames.add(idAtt
ribute); | 512 HashSet<AtomicString>::AddResult addResult = existingNames.add(idAtt
ribute); |
521 if (addResult.isNewEntry) | 513 if (addResult.isNewEntry) |
522 names.append(idAttribute); | 514 names.append(idAttribute); |
523 } | 515 } |
| 516 if (!element->isHTMLElement()) |
| 517 continue; |
| 518 const AtomicString& nameAttribute = element->getNameAttribute(); |
| 519 if (!nameAttribute.isEmpty()) { |
| 520 HashSet<AtomicString>::AddResult addResult = existingNames.add(nameA
ttribute); |
| 521 if (addResult.isNewEntry) |
| 522 names.append(nameAttribute); |
| 523 } |
524 } | 524 } |
525 } | 525 } |
526 | 526 |
527 void HTMLCollection::namedPropertyEnumerator(Vector<String>& names, ExceptionSta
te&) | 527 void HTMLCollection::namedPropertyEnumerator(Vector<String>& names, ExceptionSta
te&) |
528 { | 528 { |
529 supportedPropertyNames(names); | 529 supportedPropertyNames(names); |
530 } | 530 } |
531 | 531 |
532 void HTMLCollection::updateNameCache() const | 532 void HTMLCollection::updateNameCache() const |
533 { | 533 { |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
569 | 569 |
570 void HTMLCollection::append(NodeCacheMap& map, const AtomicString& key, Element*
element) | 570 void HTMLCollection::append(NodeCacheMap& map, const AtomicString& key, Element*
element) |
571 { | 571 { |
572 OwnPtr<Vector<Element*> >& vector = map.add(key.impl(), nullptr).iterator->v
alue; | 572 OwnPtr<Vector<Element*> >& vector = map.add(key.impl(), nullptr).iterator->v
alue; |
573 if (!vector) | 573 if (!vector) |
574 vector = adoptPtr(new Vector<Element*>); | 574 vector = adoptPtr(new Vector<Element*>); |
575 vector->append(element); | 575 vector->append(element); |
576 } | 576 } |
577 | 577 |
578 } // namespace WebCore | 578 } // namespace WebCore |
OLD | NEW |