1var $iterators = require('./es6.array.iterator');
2var getKeys = require('./_object-keys');
3var redefine = require('./_redefine');
4var global = require('./_global');
5var hide = require('./_hide');
6var Iterators = require('./_iterators');
7var wks = require('./_wks');
8var ITERATOR = wks('iterator');
9var TO_STRING_TAG = wks('toStringTag');
10var ArrayValues = Iterators.Array;
11
12var DOMIterables = {
13  CSSRuleList: true, // TODO: Not spec compliant, should be false.
14  CSSStyleDeclaration: false,
15  CSSValueList: false,
16  ClientRectList: false,
17  DOMRectList: false,
18  DOMStringList: false,
19  DOMTokenList: true,
20  DataTransferItemList: false,
21  FileList: false,
22  HTMLAllCollection: false,
23  HTMLCollection: false,
24  HTMLFormElement: false,
25  HTMLSelectElement: false,
26  MediaList: true, // TODO: Not spec compliant, should be false.
27  MimeTypeArray: false,
28  NamedNodeMap: false,
29  NodeList: true,
30  PaintRequestList: false,
31  Plugin: false,
32  PluginArray: false,
33  SVGLengthList: false,
34  SVGNumberList: false,
35  SVGPathSegList: false,
36  SVGPointList: false,
37  SVGStringList: false,
38  SVGTransformList: false,
39  SourceBufferList: false,
40  StyleSheetList: true, // TODO: Not spec compliant, should be false.
41  TextTrackCueList: false,
42  TextTrackList: false,
43  TouchList: false
44};
45
46for (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {
47  var NAME = collections[i];
48  var explicit = DOMIterables[NAME];
49  var Collection = global[NAME];
50  var proto = Collection && Collection.prototype;
51  var key;
52  if (proto) {
53    if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);
54    if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);
55    Iterators[NAME] = ArrayValues;
56    if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);
57  }
58}
59