UNPKG

jpush-ui

Version:

极光大数据前端Angular组件(^6.1.0)

147 lines 5.34 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var core_1 = require("@angular/core"); var Observable_1 = require("rxjs/Observable"); require("rxjs/add/observable/of"); require("rxjs/add/observable/combineLatest"); require("rxjs/add/observable/fromEvent"); require("rxjs/add/operator/map"); require("rxjs/add/operator/merge"); require("rxjs/add/operator/concat"); require("rxjs/add/observable/empty"); exports.ScriptStore = [{ name: 'jquery', src: 'https://o8ci6tgz8.qnssl.com/assets/libs/jquery.min.js' }, { name: 'aaa' }, { name: 'bbb' }, { name: 'ccc' }]; var ScriptService = /** @class */ (function () { function ScriptService() { this.scripts = {}; this.initScriptData(); } ScriptService.prototype.setScripts = function (scripts) { scripts.forEach(function (script) { return exports.ScriptStore.push(script); }); this.initScriptData(); }; ScriptService.prototype.addScript = function (script) { exports.ScriptStore.push(script); this.scripts[script.name] = { loaded: false, src: script.src }; }; ScriptService.prototype.load = function () { var _this = this; var scripts = []; for (var _i = 0; _i < arguments.length; _i++) { scripts[_i] = arguments[_i]; } var observers = []; this.observer = Observable_1.Observable.of({ status: 'init' }); scripts.forEach(function (item) { if (!item) { return; } if (typeof item === 'string') { var name_1 = item; var newObs = _this.loadScript(name_1); observers.push(newObs); _this.merge(newObs); } else if (item.length > 0) { item.forEach(function (name, index) { var tmpObs = index ? observers[observers.length - 1] : null; var newObs = _this.loadScript(name, tmpObs); observers.push(newObs); _this.concat(newObs); }); } }); this.observer.subscribe(function (d) { // this.scriptLoaded(d); // console.log('[subscribe]', d); }); return Observable_1.Observable.combineLatest(observers); }; ScriptService.prototype.merge = function (newObs) { this.observer = this.observer.merge(newObs); }; ScriptService.prototype.concat = function (newObs) { this.observer = this.observer.concat(newObs); }; ScriptService.prototype.loadScript = function (name, lastObserver // 当concat的时候必须带上 ) { var _this = this; var script = this.scripts[name]; if (script) { if (script.loaded) { return Observable_1.Observable.of({ script: name, loaded: true }); } else { // to load scripts var scriptDom_1 = document.createElement('script'); scriptDom_1.type = 'text/javascript'; scriptDom_1.src = script.src; // console.log('parsing script...', name); var result_1 = { name: name, status: 'loaded', }; var observer = Observable_1.Observable.fromEvent(scriptDom_1, 'load') .map(function (d) { return result_1; }); observer.subscribe(function (d) { _this.scriptLoaded(d); }); if (lastObserver) { lastObserver.subscribe(function (data) { // console.log('[do]', name); // console.log('[do]', name); _this.appendToBody(scriptDom_1); // this.scriptLoaded(data); }); } else { this.appendToBody(scriptDom_1); } return observer; } } else { return Observable_1.Observable.empty(); } }; ScriptService.prototype.appendToBody = function (dom) { // console.log('[append] dom', dom.src); document.getElementsByTagName('head')[0] .appendChild(dom); }; ScriptService.prototype.scriptLoaded = function (data) { if (data.status === 'init') { return; } // console.log(++this.loadedCnt, observers.length); var script = this.scripts[data.name]; if (script) { script.loaded = true; console.log('[loaded]', data); } }; ScriptService.prototype.initScriptData = function () { var _this = this; exports.ScriptStore.forEach(function (script) { _this.scripts[script.name] = { loaded: false, src: script.src }; }); }; ScriptService.decorators = [ { type: core_1.Injectable }, ]; /** @nocollapse */ ScriptService.ctorParameters = function () { return []; }; return ScriptService; }()); exports.ScriptService = ScriptService; //# sourceMappingURL=script.service.js.map