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