All files / app/services script-loader.service.ts

100% Statements 51/51
100% Branches 6/6
60% Functions 3/5
100% Lines 51/51

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 521x 1x 1x 1x 1x 1x 1x 129x 129x 129x 129x 129x 129x 129x 129x 129x 129x 129x 129x 129x 43x 43x 129x 129x 43x 43x 129x 129x 129x 129x 129x 129x 129x 1x 1x 43x 43x 43x 43x 43x 1x 1x 43x 43x 43x 43x 43x 43x 43x 43x 1x  
import { Injectable } from '@angular/core';
 
@Injectable({
	providedIn: 'root',
})
export class ScriptLoaderService {
	loadScript(
		src: string,
		async: boolean = true,
		defer: boolean = true,
		crossorigin?: string,
		nonce?: string,
	): Promise<void> {
		return new Promise((resolve, reject) => {
			const script = document.createElement('script');
			script.src = src;
			script.async = async;
			script.defer = defer;
 
			if (crossorigin) {
				script.crossOrigin = crossorigin;
			}
 
			if (nonce) {
				script.nonce = nonce;
			}
 
			script.onload = () => resolve();
			script.onerror = () => reject(new Error(`Script load error for ${src}`));
 
			document.head.appendChild(script);
		});
	}
 
	loadGoogleScripts(): Promise<void[]> {
		return Promise.all([
			this.loadScript('https://accounts.google.com/gsi/client'),
			this.loadScript('https://apis.google.com/js/platform.js'),
		]);
	}
 
	loadFacebookScript(): Promise<void> {
		return this.loadScript(
			'https://connect.facebook.net/en_GB/sdk.js#xfbml=1&version=v20.0&appId=313716855168254',
			true,
			true,
			'anonymous',
			'EryCSHqV',
		);
	}
}