@dotglitch/ngx-common
Version:
Angular components and utilities that are commonly used.
55 lines • 7.45 kB
JavaScript
import { DOCUMENT } from '@angular/common';
import { Injectable, Inject } from '@angular/core';
import { sleep } from '../utils';
import * as i0 from "@angular/core";
const SCRIPT_INIT_TIMEOUT = 500; // ms
/**
* Service that installs CSS/JS dynamically
*/
export class DependencyService {
constructor(document) {
this.document = document;
}
/**
* Install a Javascript file into the webpage on-demand
* @param id Unique identifier for the JS script
* @param src URL of the script
* @param globalkey A global object the script will provide.
* Providing this will ensure a promise only resolves after the
* specified global object is provided, with a timeout of 500ms
*/
loadScript(id, src, globalkey = null) {
return new Promise((res, rej) => {
if (this.document.getElementById(id))
return res();
const script = this.document.createElement('script');
script.id = id;
script.setAttribute("async", '');
script.setAttribute("src", src);
script.onload = async () => {
if (typeof globalkey == "string") {
let i = 0;
for (; !window[globalkey] && i < SCRIPT_INIT_TIMEOUT; i += 10)
await sleep(10);
if (i >= SCRIPT_INIT_TIMEOUT) {
return rej(new Error("Timed out waiting for script to self-initialize."));
}
}
res();
};
this.document.body.appendChild(script);
});
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: DependencyService, deps: [{ token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: DependencyService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: DependencyService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: () => [{ type: Document, decorators: [{
type: Inject,
args: [DOCUMENT]
}] }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwZW5kZW5jeS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9zZXJ2aWNlcy9kZXBlbmRlbmN5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUM7O0FBRWpDLE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSztBQUV0Qzs7R0FFRztBQUlILE1BQU0sT0FBTyxpQkFBaUI7SUFFMUIsWUFDOEIsUUFBa0I7UUFBbEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtJQUM1QyxDQUFDO0lBRUw7Ozs7Ozs7T0FPRztJQUNILFVBQVUsQ0FBQyxFQUFVLEVBQUUsR0FBVyxFQUFFLFlBQW9CLElBQUk7UUFDeEQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUM1QixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztnQkFBRSxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBRW5ELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3JELE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBRWYsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDakMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFFaEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLElBQUksRUFBRTtnQkFDdkIsSUFBSSxPQUFPLFNBQVMsSUFBSSxRQUFRLEVBQUUsQ0FBQztvQkFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUVWLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLG1CQUFtQixFQUFFLENBQUMsSUFBSSxFQUFFO3dCQUN6RCxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFFcEIsSUFBSSxDQUFDLElBQUksbUJBQW1CLEVBQUUsQ0FBQzt3QkFDM0IsT0FBTyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsa0RBQWtELENBQUMsQ0FBQyxDQUFDO29CQUM5RSxDQUFDO2dCQUNMLENBQUM7Z0JBRUQsR0FBRyxFQUFFLENBQUM7WUFDVixDQUFDLENBQUE7WUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDOzhHQXpDUSxpQkFBaUIsa0JBR2QsUUFBUTtrSEFIWCxpQkFBaUIsY0FGZCxNQUFNOzsyRkFFVCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzswQkFJUSxNQUFNOzJCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5jb25zdCBTQ1JJUFRfSU5JVF9USU1FT1VUID0gNTAwOyAvLyBtc1xuXG4vKipcbiAqIFNlcnZpY2UgdGhhdCBpbnN0YWxscyBDU1MvSlMgZHluYW1pY2FsbHlcbiAqL1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBEZXBlbmRlbmN5U2VydmljZSB7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnRcbiAgICApIHsgfVxuXG4gICAgLyoqXG4gICAgICogSW5zdGFsbCBhIEphdmFzY3JpcHQgZmlsZSBpbnRvIHRoZSB3ZWJwYWdlIG9uLWRlbWFuZFxuICAgICAqIEBwYXJhbSBpZCBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIEpTIHNjcmlwdFxuICAgICAqIEBwYXJhbSBzcmMgVVJMIG9mIHRoZSBzY3JpcHRcbiAgICAgKiBAcGFyYW0gZ2xvYmFsa2V5IEEgZ2xvYmFsIG9iamVjdCB0aGUgc2NyaXB0IHdpbGwgcHJvdmlkZS5cbiAgICAgKiAgUHJvdmlkaW5nIHRoaXMgd2lsbCBlbnN1cmUgYSBwcm9taXNlIG9ubHkgcmVzb2x2ZXMgYWZ0ZXIgdGhlXG4gICAgICogIHNwZWNpZmllZCBnbG9iYWwgb2JqZWN0IGlzIHByb3ZpZGVkLCB3aXRoIGEgdGltZW91dCBvZiA1MDBtc1xuICAgICAqL1xuICAgIGxvYWRTY3JpcHQoaWQ6IHN0cmluZywgc3JjOiBzdHJpbmcsIGdsb2JhbGtleTogc3RyaW5nID0gbnVsbCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlcywgcmVqKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkpIHJldHVybiByZXMoKTtcblxuICAgICAgICAgICAgY29uc3Qgc2NyaXB0ID0gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgICAgICAgIHNjcmlwdC5pZCA9IGlkO1xuXG4gICAgICAgICAgICBzY3JpcHQuc2V0QXR0cmlidXRlKFwiYXN5bmNcIiwgJycpO1xuICAgICAgICAgICAgc2NyaXB0LnNldEF0dHJpYnV0ZShcInNyY1wiLCBzcmMpO1xuXG4gICAgICAgICAgICBzY3JpcHQub25sb2FkID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZ2xvYmFsa2V5ID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAoOyAhd2luZG93W2dsb2JhbGtleV0gJiYgaSA8IFNDUklQVF9JTklUX1RJTUVPVVQ7IGkgKz0gMTApXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBzbGVlcCgxMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPj0gU0NSSVBUX0lOSVRfVElNRU9VVCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlaihuZXcgRXJyb3IoXCJUaW1lZCBvdXQgd2FpdGluZyBmb3Igc2NyaXB0IHRvIHNlbGYtaW5pdGlhbGl6ZS5cIikpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVzKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIC8vIGxvYWRTdHlsZXNoZWV0KGlkOiBzdHJpbmcsIGhyZWY6IHN0cmluZykge1xuICAgIC8vICAgICBsZXQgdGhlbWVMaW5rID0gdGhpcy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkgYXMgSFRNTExpbmtFbGVtZW50O1xuICAgIC8vICAgICBpZiAodGhlbWVMaW5rKSB7XG4gICAgLy8gICAgICAgICB0aGVtZUxpbmsuaHJlZiA9IGhyZWY7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgICAgZWxzZSB7XG4gICAgLy8gICAgICAgICBjb25zdCBzdHlsZSA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpO1xuICAgIC8vICAgICAgICAgc3R5bGUuaWQgPSBpZDtcbiAgICAvLyAgICAgICAgIHN0eWxlLnJlbCA9ICdzdHlsZXNoZWV0JztcbiAgICAvLyAgICAgICAgIHN0eWxlLmhyZWYgPSBocmVmO1xuXG4gICAgLy8gICAgICAgICBjb25zdCBoZWFkID0gdGhpcy5kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xuXG4gICAgLy8gICAgICAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICAvLyAgICAgfVxuICAgIC8vIH1cbn1cbiJdfQ==