jpush-ui
Version:
极光大数据前端Angular组件(^6.1.0)
147 lines • 5.34 kB
JavaScript
;
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