diff --git a/gulpfile.js b/gulpfile.js index 40e17205..94a0e4ac 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -44,7 +44,6 @@ let types = ['all', 'radial', 'linear']; function es6concat(type = 'all', clean = false) { let bundle = [ - 'lib/polyfill.js', 'lib/vendorize.js', 'lib/EventEmitter.js', 'lib/Animation.js', diff --git a/lib/BaseGauge.js b/lib/BaseGauge.js index 144b76bb..61e4d116 100644 --- a/lib/BaseGauge.js +++ b/lib/BaseGauge.js @@ -21,7 +21,6 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -require('./polyfill'); const SmartCanvas = require('./SmartCanvas'); const Animation = require('./Animation'); diff --git a/lib/LinearGauge.js b/lib/LinearGauge.js index d77cef18..f5a5531d 100644 --- a/lib/LinearGauge.js +++ b/lib/LinearGauge.js @@ -21,7 +21,6 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -require('./polyfill'); const BaseGauge = require('./BaseGauge'); const GenericOptions = require('./GenericOptions'); diff --git a/lib/RadialGauge.js b/lib/RadialGauge.js index d1095b09..6679f8df 100644 --- a/lib/RadialGauge.js +++ b/lib/RadialGauge.js @@ -21,7 +21,6 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -require('./polyfill'); const GenericOptions = require('./GenericOptions'); const BaseGauge = require('./BaseGauge'); diff --git a/lib/polyfill.js b/lib/polyfill.js deleted file mode 100644 index b2bdd84a..00000000 --- a/lib/polyfill.js +++ /dev/null @@ -1,131 +0,0 @@ -/** - * @external {Object.assign} https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign - */ -/* istanbul ignore next */ -if (!Object.assign) { - Object.defineProperty(Object, 'assign', { - enumerable: false, - configurable: true, - writable: true, - value: function(target, firstSource) { - 'use strict'; - - if (target === undefined || target === null) { - throw new TypeError('Cannot convert first argument to object'); - } - - var to = Object(target); - var i = 1; - - for (; i < arguments.length; i++) { - var nextSource = arguments[i]; - - if (nextSource === undefined || nextSource === null) { - continue; - } - - var keysArray = Object.keys(Object(nextSource)); - var nextIndex = 0, len = keysArray.length; - - for (; nextIndex < len; nextIndex++) { - var nextKey = keysArray[nextIndex]; - var desc = Object.getOwnPropertyDescriptor( - nextSource, nextKey); - - if (desc !== undefined && desc.enumerable) { - to[nextKey] = nextSource[nextKey]; - } - } - } - - return to; - } - }); -} - -/** - * @external {Array.indexOf} https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf - */ -/* istanbul ignore next */ -if (!Array.prototype.indexOf) { - Object.defineProperty(Array.prototype, "indexOf", { - value: function(searchElement, fromIndex) { - var k; - - if (this === null) { - throw new TypeError('"this" is null or not defined'); - } - - var O = Object(this); - var len = O.length >>> 0; - - if (len === 0) { - return -1; - } - - var n = +fromIndex || 0; - - if (Math.abs(n) === Infinity) { - n = 0; - } - - if (n >= len) { - return -1; - } - - k = Math.max(n >= 0 ? n : len - Math.abs(n), 0); - - while (k < len) { - if (k in O && O[k] === searchElement) { - return k; - } - - k++; - } - - return -1; - } - }); -} - -/** - * @external {Array.fill} https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/fill - */ -/* istanbul ignore next */ -if (!Array.prototype.fill) { - Object.defineProperty(Array.prototype, "fill", { - value: function(value) { - if (this === null) { - throw new TypeError('this is null or not defined'); - } - - var O = Object(this); - var len = O.length >>> 0; - var start = arguments[1]; - var relativeStart = start >> 0; - var k = relativeStart < 0 ? - Math.max(len + relativeStart, 0) : - Math.min(relativeStart, len); - var end = arguments[2]; - var relativeEnd = end === undefined ? - len : end >> 0; - var final = relativeEnd < 0 ? - Math.max(len + relativeEnd, 0) : - Math.min(relativeEnd, len); - while (k < final) { - O[k] = value; - k++; - } - - return O; - } - }); - -} - -/** - * mocking window - */ -if (typeof window === 'undefined') { - window = typeof global === 'undefined' ? {} : global; -} diff --git a/lib/vendorize.js b/lib/vendorize.js index 13342451..3c85077b 100644 --- a/lib/vendorize.js +++ b/lib/vendorize.js @@ -39,6 +39,9 @@ * @param {HTMLElement|Window|object} [from] - default is window * @returns {*} */ + +let vendor = null; + export default function vendorize(prop, from) { /* istanbul ignore else: no reason to cover */ if (!from) { @@ -49,19 +52,22 @@ export default function vendorize(prop, from) { return from[prop]; } - let vendors = ['webkit', 'moz', 'ms', 'o']; - let i = 0; - let s = vendors.length; + if (vendor === null) { + let styles = window.getComputedStyle(document.documentElement, ''); + vendor = (Array.prototype.slice.call(styles).join('').match(/-(moz|webkit|ms)-/) || (styles.OLink === '' && ['', 'o']) || ['', ''])[1]; + } + + if (vendor === '') + return null; + let capitalized = prop.charAt(0).toUpperCase() + prop.substr(1); - for (; i < s; i++) { - let vendorProp = from[vendors[i] + capitalized]; + let vendorProp = from[vendor + capitalized]; - /* istanbul ignore if: requires very complex environment to test (specific browser version) */ - if (typeof vendorProp !== 'undefined') { - return vendorProp; - } - } + /* istanbul ignore if: requires very complex environment to test (specific browser version) */ + if (typeof vendorProp !== 'undefined') { + return vendorProp; + } return null; }