aboutsummaryrefslogtreecommitdiffstats
path: root/src/js/utils.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/js/utils.js')
-rw-r--r--src/js/utils.js27
1 files changed, 21 insertions, 6 deletions
diff --git a/src/js/utils.js b/src/js/utils.js
index 25617ac8..b3ce509b 100644
--- a/src/js/utils.js
+++ b/src/js/utils.js
@@ -73,24 +73,39 @@ const utils = {
// Load an external script
loadScript(url, callback) {
- // Check script is not already referenced
- if (document.querySelectorAll(`script[src="${url}"]`).length) {
+ const current = document.querySelector(`script[src="${url}"]`);
+
+ // Check script is not already referenced, if so wait for load
+ if (current !== null) {
+ current.callbacks = current.callbacks || [];
+ current.callbacks.push(callback);
return;
}
// Build the element
const element = document.createElement('script');
- element.src = url;
- // Find first script
- const first = document.getElementsByTagName('script')[0];
+ // Callback queue
+ element.callbacks = element.callbacks || [];
+ element.callbacks.push(callback);
// Bind callback
if (utils.is.function(callback)) {
- element.addEventListener('load', event => callback.call(null, event), false);
+ element.addEventListener(
+ 'load',
+ event => {
+ element.callbacks.forEach(cb => cb.call(null, event));
+ element.callbacks = null;
+ },
+ false
+ );
}
+ // Set the URL after binding callback
+ element.src = url;
+
// Inject
+ const first = document.getElementsByTagName('script')[0];
first.parentNode.insertBefore(element, first);
},