Skip to content

Instantly share code, notes, and snippets.

@abuiles
Created April 12, 2016 22:41
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save abuiles/cf32f1ba9f579c52829fe4035c92d9fc to your computer and use it in GitHub Desktop.
Save abuiles/cf32f1ba9f579c52829fe4035c92d9fc to your computer and use it in GitHub Desktop.
import Ember from 'ember';
import config from 'garaje/config/environment';
// based on https://karl-sjogren.com/2015/08/05/lazy-loading-extra-scripts-in-ember/
const LOADING = {};
function scriptLoader(id, src, parent = 'head') {
let promise;
if (LOADING[id]) {
promise = LOADING[id];
} else {
promise = LOADING[id] = new Ember.RSVP.Promise(function(resolve, reject) {
if(!!document.getElementById(id)) {
delete LOADING[id];
return resolve(true);
}
var script = document.createElement('script');
script.async = true;
script.id = id;
script.src = src;
script.type = 'text/javascript';
script.addEventListener('load', function() {
resolve(true);
});
script.addEventListener('error', function() {
reject(`Failed to load ${id} (${src})`);
});
document.getElementsByTagName(parent)[0].appendChild(script);
}, `Loading external script resource ${id} (${src})`);
}
return promise;
}
export default scriptLoader;
export function loadGoogleMaps() {
if (config.environment === 'test') {
return Ember.RSVP.resolve();
}
let id = 'envoygmapsjs';
let src = 'https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=true&libraries=places&key=' + config.googleApiKey;
return scriptLoader(id, src);
}
export function loadHeadway() {
if (config.environment === 'test') {
return Ember.RSVP.resolve();
}
let id = 'envoyheadwayapp';
let src = 'https://cdn.headwayapp.co/widget.js';
return scriptLoader(id, src);
}
export function loadSrcDoc() {
let isIE = window.navigator.userAgent.match(/MSIE|Trident/);
if (!isIE) {
return Ember.RSVP.resolve(false);
}
let id = 'envoysrcdocspolyfill';
let src = 'https://dashboard.envoy.com/shims/srcdoc-polyfill.min.js';
return scriptLoader(id, src, 'body');
}
export function loadLiveChat() {
if (window.matchMedia('only screen and (min-width: 641px)').matches) {
window.__lc = {};
window.__lc.license = 5914591;
let src = 'https://cdn.livechatinc.com/tracking.js';
return scriptLoader('envoylc', src, 'body');
} else {
return Ember.RSVP.resolve(false);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment