135 lines
3.6 KiB
JavaScript
135 lines
3.6 KiB
JavaScript
"use strict";
|
|
|
|
/**
|
|
* @class
|
|
* @constructor
|
|
* @param {!(Object.<string, any|null>|Array.<any|null>)} inputs
|
|
* @returns {void}
|
|
* @access public
|
|
*/
|
|
export const AnPLoader = (function(){
|
|
|
|
/**
|
|
* @constructs AnPLoader
|
|
* @param {!(Object.<string, any|null>|Array.<any|null>)} inputs
|
|
* @returns {void}
|
|
* @access private
|
|
*/
|
|
const AnPLoader = function(inputs){
|
|
|
|
/** @type {AnPLoader} */
|
|
const self = this;
|
|
|
|
/**
|
|
* @returns {void}
|
|
* @access private
|
|
*/
|
|
const constructor = () => {
|
|
|
|
/** @type {Array.<any>} */
|
|
const scripts = AnPLoader.get_list_strings(AnPLoader.get_value(["script", "scripts"], inputs)),
|
|
/** @type {Array.<any>} */
|
|
styles = AnPLoader.get_list_strings.apply(AnPLoader.get_value(["style", "styles"], inputs));
|
|
|
|
};
|
|
|
|
constructor();
|
|
|
|
};
|
|
|
|
/** @type {string} */
|
|
AnPLoader.domain = /^[^\:]+\:\/{2}[^\/]+\.([lg]ocal|anprm(\.[lg]ocal)?)\/?/i.test(window.location.href) ? "local" : "k3y.pw";
|
|
|
|
/**
|
|
* @param {?any} item
|
|
* @returns {boolean}
|
|
* @access public
|
|
* @static
|
|
*/
|
|
AnPLoader.is_string = item => typeof item == "string";
|
|
|
|
/**
|
|
* @param {?any} item
|
|
* @returns {boolean}
|
|
* @access public
|
|
* @static
|
|
*/
|
|
AnPLoader.is_key = item => item && AnPLoader.is_string(item) && /^[a-z0-9_]+$/i.test(item);
|
|
|
|
/**
|
|
* @param {?any} item
|
|
* @returns {boolean}
|
|
* @access public
|
|
* @static
|
|
*/
|
|
AnPLoader.is_array = item => item instanceof Array;
|
|
|
|
/**
|
|
* @param {?any} item
|
|
* @returns {boolean}
|
|
* @access public
|
|
* @static
|
|
*/
|
|
AnPLoader.is_dictionary = item => item && item.constructor == Object;
|
|
|
|
/**
|
|
* @param {?any} item
|
|
* @returns {Array.<any|null>}
|
|
* @access public
|
|
* @static
|
|
*/
|
|
AnPLoader.get_array = item => AnPLoader.is_array(item) ? item : [item];
|
|
|
|
/**
|
|
* @param {!(string|Array.<string>)} keys
|
|
* @returns {Array.<string>}
|
|
* @access public
|
|
* @static
|
|
*/
|
|
AnPLoader.get_keys = keys => AnPLoader.get_array(keys).filter((key, i, array) => AnPLoader.is_key(key) && array.indexOf(key) == i);
|
|
|
|
/**
|
|
* @param {!(string|Array.<string>)} keys
|
|
* @param {!(Object.<string, any|null>|Array.<any|null>)} inputs
|
|
* @param {?any} [_default = null]
|
|
* @returns {any|null|undefined}
|
|
* @access public
|
|
* @static
|
|
*/
|
|
AnPLoader.get_value = (keys, inputs, _default = null) => {
|
|
if(AnPLoader.is_array(inputs)){
|
|
for(let i = 0, l = inputs.length; i < l; i ++){
|
|
|
|
/** @type {any|null|undefined} */
|
|
const value = AnPLoader.get_value(keys, inputs[i], undefined)
|
|
|
|
if(value !== undefined)
|
|
return value;
|
|
|
|
};
|
|
}else if(Check.is_dictionary(inputs)){
|
|
for(let i = 0, l = (keys = AnPLoader.get_keys(keys)).length; i < l; i ++)
|
|
if(inputs[keys[i]] !== undefined)
|
|
return inputs[keys[i]];
|
|
};
|
|
return _default;
|
|
};
|
|
|
|
/**
|
|
* @param {!(string|Array.<any|null>)} items
|
|
* @returns {Array.<any>}
|
|
* @access public
|
|
* @static
|
|
*/
|
|
AnPLoader.get_list_strings = items => {
|
|
if(items){
|
|
if(Check.is_string(items))
|
|
return [items];
|
|
if(Check.is_array(items))
|
|
return items.filter(item => Check.is_string(item) || Check.is_array(item)).map(item => Check.is_array(item) ? AnPLoader.get_list_strings(item) : item);
|
|
};
|
|
return [];
|
|
};
|
|
|
|
return AnPLoader;
|
|
})(); |