This commit is contained in:
2021-11-18 20:48:04 +03:00
parent 4e9df6c81b
commit 5e7b4c6707
22 changed files with 1160 additions and 345 deletions
+22 -16
View File
@@ -161,6 +161,7 @@ window.kit = window.kit || {};
* @return {PluginManager}
*/
__proto.load = function (pluginId, callback) {
var self = this;
//console.log('PluginManager.load: plugin ' + pluginId + ' ('+(this.plugins[pluginId]?this.plugins[pluginId].state:'0')+')');
if(typeof callback !== 'function') {
callback = function(){};
@@ -204,6 +205,7 @@ window.kit = window.kit || {};
var getModulePromise = (function () {
function loadScript(src, resolveCallback, rejectCallback) {
src = String(src).split('?')[0];
if(typeof resolveCallback !== 'function'){
resolveCallback = function(){};
}
@@ -213,16 +215,17 @@ window.kit = window.kit || {};
};
}
return new Promise(function(resolve, reject) {
var meta = document.querySelector('meta[name="'+src+'"]');
var script = document.querySelector('script[src^="'+src+'"]');
if (!script) {
if (script || meta) {
global.config.debug && console.warn(`Скрип ${src} уже загружен`);
self.__ready(resolve, [script]);
} else {
script = document.createElement('script');
script.src = '' + src + '?__pm' + (new Date()).getTime();
script.onload = () => resolve(script);
script.onerror = () => reject(new Error(`Ошибка загрузки скрипта ${src}`));
document.head.append(script);
} else {
global.config.debug && console.warn(`Скрип ${src} уже загружен`);
resolve(script);
}
}).then(resolveCallback, rejectCallback);
}
@@ -246,15 +249,16 @@ window.kit = window.kit || {};
list.forEach(function(item, i, arr){
syncPromise.then(function(){
var src = configModule.path + item;
var meta = document.querySelector('meta[name="'+src+'"]');
var script = document.querySelector('script[src^="'+src+'"]');
if (!script) {
if(meta || script){
self.__ready(resolve, [src, true]);
} else {
script = document.createElement('script');
script.src = '' + src + '?__pm' + (new Date()).getTime();
script.onload = () => checkResolve(src, true);
script.onerror = () => checkResolve(src, false);
document.head.append(script);
} else {
checkResolve(src, true);
}
});
});
@@ -262,8 +266,12 @@ window.kit = window.kit || {};
}
function loadStyle(src) {
return new Promise(function(resolve, reject) {
var meta = document.querySelector('meta[name="'+src+'"]');
var link = document.querySelector('link[href^="'+src+'"]');
if (!link) {
if(link || meta) {
global.config.debug && console.warn(`Скрип ${src} уже загружен`);
self.__ready(resolve, [src]);
} else {
link = document.createElement('link');
link.rel = 'stylesheet';
link.type = 'text/css';
@@ -271,9 +279,6 @@ window.kit = window.kit || {};
link.media = 'all';
document.head.append(link);
resolve(link);
} else {
global.config.debug && console.warn(`Скрип ${src} уже загружен`);
resolve(link);
}
});
}
@@ -563,14 +568,15 @@ window.kit = window.kit || {};
callback = deps;
deps = [];
}
this.__ready(this.exec, [deps, callback], this);
};
__proto.__ready = function(fn, args = [], context = window) {
context = context || this;
if (/complete|interactive|loaded/.test(document.readyState)) {
// In case the document has finished parsing, document's readyState will
// be one of "complete", "interactive" or (non-standard) "loaded".
this.exec(deps, callback);
fn.apply(context, args);
} else {
// The document is not ready yet, so wait for the DOMContentLoaded event
document.addEventListener("DOMContentLoaded", function () {
this.exec(deps, callback);
fn.apply(context, args);
}.bind(this));
}
};
+18
View File
@@ -183,6 +183,24 @@ __PluginManager__.registerPlugins({
type: 'loader',
deps: ['support'],
},
date: {
path: __pmConfig__.assetsPath + '/date',
module: '/date.js',
type: 'loader',
deps: [],
},
testing: {
path: __pmConfig__.assetsPath + '/testing',
module: '/testing.js',
type: 'loader',
deps: ['Logger'],
},
Logger: {
path: __pmConfig__.assetsPath + '/logger',
module: '/logger.js',
css: '/logger.css',
type: 'loader',
},
});