AnP/Public/ecma/AnPLoader.ecma.js

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;
})();