| var $iterators = require('./es6.array.iterator'); |
| var getKeys = require('./_object-keys'); |
| var redefine = require('./_redefine'); |
| var global = require('./_global'); |
| var hide = require('./_hide'); |
| var Iterators = require('./_iterators'); |
| var wks = require('./_wks'); |
| var ITERATOR = wks('iterator'); |
| var TO_STRING_TAG = wks('toStringTag'); |
| var ArrayValues = Iterators.Array; |
| |
| var DOMIterables = { |
| CSSRuleList: true, // TODO: Not spec compliant, should be false. |
| CSSStyleDeclaration: false, |
| CSSValueList: false, |
| ClientRectList: false, |
| DOMRectList: false, |
| DOMStringList: false, |
| DOMTokenList: true, |
| DataTransferItemList: false, |
| FileList: false, |
| HTMLAllCollection: false, |
| HTMLCollection: false, |
| HTMLFormElement: false, |
| HTMLSelectElement: false, |
| MediaList: true, // TODO: Not spec compliant, should be false. |
| MimeTypeArray: false, |
| NamedNodeMap: false, |
| NodeList: true, |
| PaintRequestList: false, |
| Plugin: false, |
| PluginArray: false, |
| SVGLengthList: false, |
| SVGNumberList: false, |
| SVGPathSegList: false, |
| SVGPointList: false, |
| SVGStringList: false, |
| SVGTransformList: false, |
| SourceBufferList: false, |
| StyleSheetList: true, // TODO: Not spec compliant, should be false. |
| TextTrackCueList: false, |
| TextTrackList: false, |
| TouchList: false |
| }; |
| |
| for (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) { |
| var NAME = collections[i]; |
| var explicit = DOMIterables[NAME]; |
| var Collection = global[NAME]; |
| var proto = Collection && Collection.prototype; |
| var key; |
| if (proto) { |
| if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues); |
| if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME); |
| Iterators[NAME] = ArrayValues; |
| if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true); |
| } |
| } |