UNPKG

@dotglitch/ngx-common

Version:

Angular components and utilities that are commonly used.

55 lines 7.45 kB
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==