react-async-script
Advanced tools
Comparing version 0.9.1 to 0.10.0
@@ -0,5 +1,12 @@ | ||
v0.10.0 - Tue, 24 Jul 2018 14:40:00 PST | ||
-------------------------------------- | ||
- Clean up use of Map to remove core-js polyfills [(#27)](github.com/dozoisch/react-async-script/pull/27) | ||
v0.9.1 - Wed, 19 Apr 2017 6:05:00 PST | ||
-------------------------------------- | ||
- Fixed issue where method was not bound properly (#19) | ||
- Fixed issue where method was not bound properly [(#19)](github.com/dozoisch/react-async-script/pull/19) | ||
@@ -11,3 +18,3 @@ | ||
- Changed updated to react >=15.5 (#18) | ||
- Changed updated to react >=15.5 [(#18)](github.com/dozoisch/react-async-script/pull/18) | ||
@@ -19,3 +26,3 @@ | ||
- Added removeOnUnmount parameter (#14) | ||
- Added removeOnUnmount parameter [(#14)](github.com/dozoisch/react-async-script/pull/14) | ||
@@ -27,3 +34,3 @@ | ||
- Updated deps to react 15 and babel 6 (#13) | ||
- Updated deps to react 15 and babel 6 [(#13)](github.com/dozoisch/react-async-script/pull/13) | ||
- Go back to manual changelogs | ||
@@ -36,3 +43,3 @@ | ||
- [0bc67b2](../../commit/0bc67b2) [fixed] typo in documentation (#9) | ||
- [0bc67b2](../../commit/0bc67b2) [fixed] typo in documentation [(#9)](github.com/dozoisch/react-async-script/pull/9) | ||
@@ -56,3 +63,3 @@ | ||
## 0.4.0 | ||
## 0.4.0 | ||
@@ -59,0 +66,0 @@ - Fixed issue with refs |
@@ -13,6 +13,2 @@ "use strict"; | ||
var _getIterator2 = require("babel-runtime/core-js/get-iterator"); | ||
var _getIterator3 = _interopRequireDefault(_getIterator2); | ||
var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); | ||
@@ -30,6 +26,2 @@ | ||
var _map = require("babel-runtime/core-js/map"); | ||
var _map2 = _interopRequireDefault(_map); | ||
exports.default = makeAsyncScript; | ||
@@ -47,3 +39,3 @@ | ||
var SCRIPT_MAP = new _map2.default(); | ||
var SCRIPT_MAP = {}; | ||
@@ -89,7 +81,7 @@ // A counter used to generate a unique id for each component that uses the function | ||
if (globalName && typeof window[globalName] !== "undefined") { | ||
SCRIPT_MAP.set(scriptURL, { loaded: true, observers: new _map2.default() }); | ||
SCRIPT_MAP[scriptURL] = { loaded: true, observers: {} }; | ||
} | ||
if (SCRIPT_MAP.has(scriptURL)) { | ||
var entry = SCRIPT_MAP.get(scriptURL); | ||
if (SCRIPT_MAP[scriptURL]) { | ||
var entry = SCRIPT_MAP[scriptURL]; | ||
if (entry && (entry.loaded || entry.errored)) { | ||
@@ -99,16 +91,16 @@ this.asyncScriptLoaderHandleLoad(entry); | ||
} | ||
entry.observers.set(key, function (entry) { | ||
entry.observers[key] = function (entry) { | ||
return _this2.asyncScriptLoaderHandleLoad(entry); | ||
}); | ||
}; | ||
return; | ||
} | ||
var observers = new _map2.default(); | ||
observers.set(key, function (entry) { | ||
var observers = {}; | ||
observers[key] = function (entry) { | ||
return _this2.asyncScriptLoaderHandleLoad(entry); | ||
}); | ||
SCRIPT_MAP.set(scriptURL, { | ||
}; | ||
SCRIPT_MAP[scriptURL] = { | ||
loaded: false, | ||
observers: observers | ||
}); | ||
}; | ||
@@ -121,25 +113,10 @@ var script = document.createElement("script"); | ||
var callObserverFuncAndRemoveObserver = function callObserverFuncAndRemoveObserver(func) { | ||
if (SCRIPT_MAP.has(scriptURL)) { | ||
var mapEntry = SCRIPT_MAP.get(scriptURL); | ||
if (SCRIPT_MAP[scriptURL]) { | ||
var mapEntry = SCRIPT_MAP[scriptURL]; | ||
var observersMap = mapEntry.observers; | ||
for (var _iterator = observersMap, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { | ||
var _ref; | ||
if (_isArray) { | ||
if (_i >= _iterator.length) break; | ||
_ref = _iterator[_i++]; | ||
} else { | ||
_i = _iterator.next(); | ||
if (_i.done) break; | ||
_ref = _i.value; | ||
for (var obsKey in observersMap) { | ||
if (func(observersMap[obsKey])) { | ||
delete observersMap[obsKey]; | ||
} | ||
var _ref2 = _ref, | ||
obsKey = _ref2[0], | ||
observer = _ref2[1]; | ||
if (func(observer)) { | ||
observersMap.delete(obsKey); | ||
} | ||
} | ||
@@ -154,3 +131,3 @@ } | ||
script.onload = function () { | ||
var mapEntry = SCRIPT_MAP.get(scriptURL); | ||
var mapEntry = SCRIPT_MAP[scriptURL]; | ||
if (mapEntry) { | ||
@@ -168,3 +145,3 @@ mapEntry.loaded = true; | ||
script.onerror = function (event) { | ||
var mapEntry = SCRIPT_MAP.get(scriptURL); | ||
var mapEntry = SCRIPT_MAP[scriptURL]; | ||
if (mapEntry) { | ||
@@ -184,3 +161,3 @@ mapEntry.errored = true; | ||
window.setTimeout(function () { | ||
var mapEntry = SCRIPT_MAP.get(scriptURL); | ||
var mapEntry = SCRIPT_MAP[scriptURL]; | ||
if (mapEntry && mapEntry.loaded !== true) { | ||
@@ -213,7 +190,7 @@ script.onload(); | ||
// Clean the observer entry | ||
var mapEntry = SCRIPT_MAP.get(scriptURL); | ||
var mapEntry = SCRIPT_MAP[scriptURL]; | ||
if (mapEntry) { | ||
mapEntry.observers.delete(this.asyncScriptLoaderGetScriptLoaderID()); | ||
delete mapEntry.observers[this.asyncScriptLoaderGetScriptLoaderID()]; | ||
if (options.removeOnUnmount === true) { | ||
SCRIPT_MAP.delete(scriptURL); | ||
delete SCRIPT_MAP[scriptURL]; | ||
} | ||
@@ -227,2 +204,3 @@ } | ||
var globalName = options.globalName; | ||
// remove asyncScriptOnLoad from childprops | ||
var _props = this.props, | ||
@@ -248,21 +226,8 @@ asyncScriptOnLoad = _props.asyncScriptOnLoad, | ||
AsyncScriptLoader.asyncScriptLoaderTriggerOnScriptLoaded = function () { | ||
var mapEntry = SCRIPT_MAP.get(scriptURL); | ||
var mapEntry = SCRIPT_MAP[scriptURL]; | ||
if (!mapEntry || !mapEntry.loaded) { | ||
throw new Error("Script is not loaded."); | ||
} | ||
for (var _iterator2 = mapEntry.observers.values(), _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) { | ||
var _ref3; | ||
if (_isArray2) { | ||
if (_i2 >= _iterator2.length) break; | ||
_ref3 = _iterator2[_i2++]; | ||
} else { | ||
_i2 = _iterator2.next(); | ||
if (_i2.done) break; | ||
_ref3 = _i2.value; | ||
} | ||
var observer = _ref3; | ||
observer(mapEntry); | ||
for (var obsKey in mapEntry.observers) { | ||
mapEntry.observers[obsKey](mapEntry); | ||
} | ||
@@ -273,15 +238,3 @@ delete window[options.callbackName]; | ||
if (options.exposeFuncs) { | ||
var _loop = function _loop() { | ||
if (_isArray3) { | ||
if (_i3 >= _iterator3.length) return "break"; | ||
_ref4 = _iterator3[_i3++]; | ||
} else { | ||
_i3 = _iterator3.next(); | ||
if (_i3.done) return "break"; | ||
_ref4 = _i3.value; | ||
} | ||
var funcToExpose = _ref4; | ||
/* eslint-disable no-loop-func */ | ||
options.exposeFuncs.forEach(function (funcToExpose) { | ||
AsyncScriptLoader.prototype[funcToExpose] = function () { | ||
@@ -292,14 +245,5 @@ var _getComponent; | ||
}; | ||
/* eslint-enable no-loop-func */ | ||
}; | ||
for (var _iterator3 = options.exposeFuncs, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : (0, _getIterator3.default)(_iterator3);;) { | ||
var _ref4; | ||
var _ret = _loop(); | ||
if (_ret === "break") break; | ||
} | ||
}); | ||
} | ||
return AsyncScriptLoader; | ||
} |
{ | ||
"name": "react-async-script", | ||
"version": "0.9.1", | ||
"version": "0.10.0", | ||
"description": "A composition mixin for loading scripts asynchronously for React", | ||
@@ -5,0 +5,0 @@ "main": "lib/async-script-loader.js", |
import React from "react"; | ||
import PropTypes from "prop-types"; | ||
let SCRIPT_MAP = new Map(); | ||
let SCRIPT_MAP = {}; | ||
@@ -34,7 +34,7 @@ // A counter used to generate a unique id for each component that uses the function | ||
if (globalName && typeof window[globalName] !== "undefined") { | ||
SCRIPT_MAP.set(scriptURL, { loaded: true, observers: new Map() }); | ||
SCRIPT_MAP[scriptURL] = { loaded: true, observers: {} }; | ||
} | ||
if (SCRIPT_MAP.has(scriptURL)) { | ||
let entry = SCRIPT_MAP.get(scriptURL); | ||
if (SCRIPT_MAP[scriptURL]) { | ||
let entry = SCRIPT_MAP[scriptURL]; | ||
if (entry && (entry.loaded || entry.errored)) { | ||
@@ -44,12 +44,12 @@ this.asyncScriptLoaderHandleLoad(entry); | ||
} | ||
entry.observers.set(key, (entry) => this.asyncScriptLoaderHandleLoad(entry)); | ||
entry.observers[key] = (entry) => this.asyncScriptLoaderHandleLoad(entry); | ||
return; | ||
} | ||
let observers = new Map(); | ||
observers.set(key, (entry) => this.asyncScriptLoaderHandleLoad(entry)); | ||
SCRIPT_MAP.set(scriptURL, { | ||
let observers = {}; | ||
observers[key] = (entry) => this.asyncScriptLoaderHandleLoad(entry); | ||
SCRIPT_MAP[scriptURL] = { | ||
loaded: false, | ||
observers: observers, | ||
}); | ||
observers, | ||
}; | ||
@@ -62,9 +62,9 @@ let script = document.createElement("script"); | ||
let callObserverFuncAndRemoveObserver = (func) => { | ||
if (SCRIPT_MAP.has(scriptURL)) { | ||
let mapEntry = SCRIPT_MAP.get(scriptURL); | ||
if (SCRIPT_MAP[scriptURL]) { | ||
let mapEntry = SCRIPT_MAP[scriptURL]; | ||
let observersMap = mapEntry.observers; | ||
for (let [obsKey, observer] of observersMap) { | ||
if (func(observer)) { | ||
observersMap.delete(obsKey); | ||
for (let obsKey in observersMap) { | ||
if (func(observersMap[obsKey])) { | ||
delete observersMap[obsKey]; | ||
} | ||
@@ -80,3 +80,3 @@ } | ||
script.onload = () => { | ||
let mapEntry = SCRIPT_MAP.get(scriptURL); | ||
let mapEntry = SCRIPT_MAP[scriptURL]; | ||
if (mapEntry) { | ||
@@ -94,3 +94,3 @@ mapEntry.loaded = true; | ||
script.onerror = (event) => { | ||
let mapEntry = SCRIPT_MAP.get(scriptURL); | ||
let mapEntry = SCRIPT_MAP[scriptURL]; | ||
if (mapEntry) { | ||
@@ -110,3 +110,3 @@ mapEntry.errored = true; | ||
window.setTimeout(() => { | ||
const mapEntry = SCRIPT_MAP.get(scriptURL); | ||
const mapEntry = SCRIPT_MAP[scriptURL]; | ||
if (mapEntry && mapEntry.loaded !== true) { | ||
@@ -139,7 +139,7 @@ script.onload(); | ||
// Clean the observer entry | ||
let mapEntry = SCRIPT_MAP.get(scriptURL); | ||
let mapEntry = SCRIPT_MAP[scriptURL]; | ||
if (mapEntry) { | ||
mapEntry.observers.delete(this.asyncScriptLoaderGetScriptLoaderID()); | ||
delete mapEntry.observers[this.asyncScriptLoaderGetScriptLoaderID()]; | ||
if (options.removeOnUnmount === true) { | ||
SCRIPT_MAP.delete(scriptURL); | ||
delete SCRIPT_MAP[scriptURL]; | ||
} | ||
@@ -151,2 +151,3 @@ } | ||
const globalName = options.globalName; | ||
// remove asyncScriptOnLoad from childprops | ||
let { asyncScriptOnLoad, ...childProps } = this.props; | ||
@@ -164,8 +165,8 @@ if (globalName && typeof window !== "undefined") { | ||
AsyncScriptLoader.asyncScriptLoaderTriggerOnScriptLoaded = function() { | ||
let mapEntry = SCRIPT_MAP.get(scriptURL); | ||
let mapEntry = SCRIPT_MAP[scriptURL]; | ||
if (!mapEntry || !mapEntry.loaded) { | ||
throw new Error("Script is not loaded."); | ||
} | ||
for (let observer of mapEntry.observers.values()) { | ||
observer(mapEntry); | ||
for (let obsKey in mapEntry.observers) { | ||
mapEntry.observers[obsKey](mapEntry); | ||
} | ||
@@ -176,11 +177,9 @@ delete window[options.callbackName]; | ||
if (options.exposeFuncs) { | ||
for (let funcToExpose of options.exposeFuncs) { | ||
/* eslint-disable no-loop-func */ | ||
options.exposeFuncs.forEach(funcToExpose => { | ||
AsyncScriptLoader.prototype[funcToExpose] = function() { | ||
return this.getComponent()[funcToExpose](...arguments); | ||
}; | ||
/* eslint-enable no-loop-func */ | ||
} | ||
}); | ||
} | ||
return AsyncScriptLoader; | ||
} |
23571
9
359