From fa6b7f6b8cf01b9f8fb8d8ee71f2cf25fb48b674 Mon Sep 17 00:00:00 2001 From: Joffrey JAFFEUX Date: Wed, 25 Jul 2018 11:45:29 -0400 Subject: [PATCH] DEV: adds Object.entries and Object.assign polyfills (#6173) --- app/assets/javascripts/application.js | 1 + app/assets/javascripts/polyfills.js | 43 +++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 app/assets/javascripts/polyfills.js diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index e7e9db37b4c..ef0d72ceb6e 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -3,6 +3,7 @@ //= require ./ember-addons/macro-alias //= require ./ember-addons/ember-computed-decorators //= require ./ember-addons/fmt +//= require ./polyfills //= require_tree ./discourse-common //= require_tree ./select-kit //= require ./discourse diff --git a/app/assets/javascripts/polyfills.js b/app/assets/javascripts/polyfills.js new file mode 100644 index 00000000000..b8cc3ad8667 --- /dev/null +++ b/app/assets/javascripts/polyfills.js @@ -0,0 +1,43 @@ +// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries +if (!Object.entries) { + Object.entries = function( obj ){ + var ownProps = Object.keys( obj ), + i = ownProps.length, + resArray = new Array(i); // preallocate the Array + while (i--) + resArray[i] = [ownProps[i], obj[ownProps[i]]]; + + return resArray; + }; +} + +// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign +if (typeof Object.assign !== 'function') { + // Must be writable: true, enumerable: false, configurable: true + Object.defineProperty(Object, "assign", { + value: function assign(target) { // .length of function is 2 + 'use strict'; + if (target == null) { // TypeError if undefined or null + throw new TypeError('Cannot convert undefined or null to object'); + } + + var to = Object(target); + + for (var index = 1; index < arguments.length; index++) { + var nextSource = arguments[index]; + + if (nextSource != null) { // Skip over if undefined or null + for (var nextKey in nextSource) { + // Avoid bugs when hasOwnProperty is shadowed + if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) { + to[nextKey] = nextSource[nextKey]; + } + } + } + } + return to; + }, + writable: true, + configurable: true + }); +}