summaryrefslogtreecommitdiffstats
path: root/js/vendor/es6-shim/es6-sham.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/vendor/es6-shim/es6-sham.js')
-rw-r--r--js/vendor/es6-shim/es6-sham.js106
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>
+ }
+}());
+