diff options
Diffstat (limited to 'js/vendor/es6-shim/es6-sham.js')
-rw-r--r-- | js/vendor/es6-shim/es6-sham.js | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/js/vendor/es6-shim/es6-sham.js b/js/vendor/es6-shim/es6-sham.js new file mode 100644 index 000000000..32fadd25c --- /dev/null +++ b/js/vendor/es6-shim/es6-sham.js @@ -0,0 +1,106 @@ +// ES6-shim 0.18.0 (c) 2013-2014 Paul Miller (http://paulmillr.com) +// ES6-shim may be freely distributed under the MIT license. +// For more details and documentation: +// https://github.com/paulmillr/es6-shim/ + +(function (undefined) { + 'use strict'; + + /*jshint evil: true */ + var getGlobal = new Function('return this;'); + /*jshint evil: false */ + + var main = function () { + var globals = getGlobal(); + var Object = globals.Object; + + // NOTE: This versions needs object ownership + // beacuse every promoted object needs to be reassigned + // otherwise uncompatible browsers cannot work as expected + // + // NOTE: This might need es5-shim or polyfills upfront + // because it's based on ES5 API. + // (probably just an IE <= 8 problem) + // + // NOTE: nodejs is fine in version 0.8, 0.10 and future versions. + if (!Object.setPrototypeOf) (function () { + /*jshint proto: true */ + // @author Andrea Giammarchi - @WebReflection + // define into target descriptors from source + var copyDescriptors = function (target, source) { + getOwnPropertyNames(source).forEach(function (key) { + defineProperty( + target, + key, + getOwnPropertyDescriptor(source, key) + ); + }); + return target; + }; + // used as fallback when no promotion is possible + var createAndCopy = function (origin, proto) { + return copyDescriptors(create(proto), origin); + }; + var create = Object.create; + var defineProperty = Object.defineProperty; + var getPrototypeOf = Object.getPrototypeOf; + var getOwnPropertyNames = Object.getOwnPropertyNames; + var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + var proto = Object.prototype; + var set, setPrototypeOf; + + try { + // this might fail for various reasons + // ignore if Chrome cought it at runtime + set = getOwnPropertyDescriptor(proto, '__proto__').set; + set.call({}, null); + // setter not poisoned, it can promote + // Firefox, Chrome + setPrototypeOf = function (origin, proto) { + set.call(origin, proto); + return origin; + }; + } catch (e) { + // do one or more feature detections + set = {__proto__: null}; + // if proto does not work, needs to fallback + // some Opera, Rhino, ducktape + if (set instanceof Object) { + setPrototypeOf = createAndCopy; + } else { + // verify if null objects are buggy + set.__proto__ = proto; + // if null objects are buggy + // nodejs 0.8 to 0.10 + if (set instanceof Object) { + setPrototypeOf = function (origin, proto) { + // use such bug to promote + origin.__proto__ = proto; + return origin; + }; + } else { + // try to use proto or fallback + // Safari, old Firefox, many others + setPrototypeOf = function (origin, proto) { + // if proto is not null + return getPrototypeOf(origin) ? + // use __proto__ to promote + ((origin.__proto__ = proto), origin) : + // otherwise unable to promote: fallback + createAndCopy(origin, proto); + }; + } + } + } + Object.setPrototypeOf = setPrototypeOf; + }()); + + }; + + if (typeof define === 'function' && define.amd) { + define(main); // RequireJS + } else { + main(); // CommonJS and <script> + } +}()); + |