transition-manager
Version:
Transition Manager. Framework independent transition manager to transition elements using states and actions.
61 lines (50 loc) • 1.56 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', {
value: true
});
/*jshint -W084 */
/*jshint unused:false*/
var _hasDontEnumBug, _dontEnums;
function checkDontEnum() {
_dontEnums = ['toString', 'toLocaleString', 'valueOf', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'constructor'];
_hasDontEnumBug = true;
for (var key in { 'toString': null }) {
_hasDontEnumBug = false;
}
}
/**
* Similar to Array/forEach but works over object properties and fixes Don't
* Enum bug on IE.
* based on: http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation
*/
function forIn(obj, fn, thisObj) {
var key,
i = 0;
// no need to check if argument is a real object that way we can use
// it for arrays, functions, date, etc.
//post-pone check till needed
if (_hasDontEnumBug == null) {
checkDontEnum();
}
for (key in obj) {
if (exec(fn, obj, key, thisObj) === false) {
break;
}
}
if (_hasDontEnumBug) {
while (key = _dontEnums[i++]) {
// since we aren't using hasOwn check we need to make sure the
// property was overwritten
if (obj[key] !== Object.prototype[key]) {
if (exec(fn, obj, key, thisObj) === false) {
break;
}
}
}
}
}
function exec(fn, obj, key, thisObj) {
return fn.call(thisObj, obj[key], key, obj);
}
exports['default'] = forIn;
module.exports = exports['default'];