/**
* @interface ApplicationPrototype
*/
/**
* @class
* @name Instance
* @memberof ApplicationPrototype
*/
/**
* @typedef {object} BindListenerConfig - configuration for bind listeners
* @memberof ApplicationPrototype.Instance
* @property {boolean} [listenedBefore=true] allow listeners before method call
* @property {boolean} [listenedOn=true] allow listeners on method call ( is after )
* @property {boolean} [listenedAfter=true] allow listeners after method call ( is after small delay )
* @property {boolean} [allowInterruption=true]
*/
/**
* returns listener Id
* @method on
* @memberof ApplicationPrototype.Instance#
* @param {string|function} event event name of function with name
* @param {function} [callback] function that will listen data
* @param {string} [specifiedEventId] event name of function with name
* @returns {string}
*/
/**
* returns listener Id
* @method once
* @memberof ApplicationPrototype.Instance#
* @param {string|function} event event name of function with name
* @param {function} [callback] function that will listen data
* @param {string} [specifiedEventId] event name of function with name
* @returns {string}
*/
/**
* returns listener Id
* @method bind
* @memberof ApplicationPrototype.Instance#
* @param {string|function} event event name of function with name
* @param {function|ApplicationPrototype.Instance.BindListenerConfig} [callback] function that will listen data
* @param {ApplicationPrototype.Instance.BindListenerConfig|string} [listenersConfig] of lis event name of function with name
* @returns {string}
*/
/**
* emits an application event
* @method emit
* @memberof ApplicationPrototype.Instance#
* @param {string} event event name
* @param {any[]} [args] arguments passed with event
* @param {boolean} [track=false] indicate if to use tracked handler or internal
* @param {boolean} [noSkipStopReturn=false] indicate if event flow can be stopped by a `false` return
*/
/**
* remove all event listeners
* @method off
* @memberof ApplicationPrototype.Instance#
* @param {string} event event or events names separated by comma
* @param {string} [specifiedEventId] event name of function with name
* @returns {boolean}
*/
/**
* returns listener Id
* @method crudEvents
* @memberof ApplicationPrototype.Instance#
* @param {Object<string,any>} context will be used as a base for ApplicationPrototype instance that will be returned
* @param {Object<string,Function>} publicMethods list of public methods available from returned instance
* @param {Object<string,Function>} privateMethods list of private methods available only for instance's methods
* @returns {ApplicationPrototype.Instance}
*/
/**
* returns listener Id
* @callback PropertyHandler
* @memberof ApplicationPrototype.Instance
* @param {any} value is undefined when `isSetter = true`
* @param {any} lastValue
* @param {boolean} isSetter
*/
/**
* @method property
* @memberof ApplicationPrototype.Instance#
* @param {string} propertyName
* @param {ApplicationPrototype.Instance.PropertyHandler} getter
* @param {ApplicationPrototype.Instance.PropertyHandler} [setter]
* @param {object} [config]
* @param {boolean} [config.configurable=true]
* @param {boolean} [config.enumerable=true]
* @fires ApplicationPrototype.Instance.__onSet
* @fires ApplicationPrototype.Instance.__onGet
* @fires ApplicationPrototype.Instance.__afterGet
* @fires ApplicationPrototype.Instance.__afterGet
* @fires ApplicationPrototype.Instance.__onSet::propName
* @fires ApplicationPrototype.Instance.__onGet::propName
* @fires ApplicationPrototype.Instance.__afterGet::propName
* @fires ApplicationPrototype.Instance.__afterGet::propName
*//**
* @method property
* @memberof ApplicationPrototype.Instance#
* @param {ApplicationPrototype.PropertyHandler} getter function with name
* @param {ApplicationPrototype.PropertyHandler} [setter]
* @param {object} [config]
* @param {boolean} [config.configurable=true]
* @param {boolean} [config.enumerable=true]
*/
/**
* @event __onGet
* @memberof ApplicationPrototype.Instance
* @type {object}
* @property {string} propName
* @property {any} value
* @property {any} lastValue
*/
/**
* @event __onSet
* @memberof ApplicationPrototype.Instance
* @type {object}
* @property {string} propName
* @property {any} value
* @property {any} lastValue
*/
/**
* @event __afterGet
* @memberof ApplicationPrototype.Instance
* @type {object}
* @property {string} propName
* @property {any} value
* @property {any} lastValue
*/
/**
* @event __afterSet
* @memberof ApplicationPrototype.Instance
* @type {object}
* @property {string} propName
* @property {any} value
* @property {any} lastValue
*/
/**
* @event __onGet::propName
* @memberof ApplicationPrototype.Instance
* @type {object}
* @property {any} value
* @property {any} lastValue
*/
/**
* @event __onSet::propName
* @memberof ApplicationPrototype.Instance
* @type {object}
* @property {any} value
* @property {any} lastValue
*/
/**
* @event __afterGet::propName
* @memberof ApplicationPrototype.Instance
* @type {object}
* @property {any} value
* @property {any} lastValue
*/
/**
* @event __afterSet::propName
* @memberof ApplicationPrototype.Instance
* @type {object}
* @property {any} value
* @property {any} lastValue
*/
/**
* @class
* @name Builder
* @memberof ApplicationPrototype
* @augments ApplicationPrototype.Instance
*/
/**
* @method require
* @memberof ApplicationPrototype.Builder#
* @param {string|string[]} events List of Events Names or Array of Events Mapping like [ "uriLoad :: uri-load", "ePrototype :: ExtensionsPrototype" ]
* @param {function} [callback] Callback that will receive Module
* @returns {PromiseLike<any>}
*/
/**
* @class
* @name Promise
* @memberof ApplicationPrototype.Builder
* @param {function} handler
* @returns {PromiseLike<any>}
*/
/**
* @method all
* @memberof ApplicationPrototype.Builder.Promise
* @param {Promise[]} items
* @returns {PromiseLike<any[]>}
*/
/**
* @method race
* @memberof ApplicationPrototype.Builder.Promise
* @param {Promise[]} items
* @returns {PromiseLike<any[]>}
*/
/**
* @method resolve
* @memberof ApplicationPrototype.Builder.Promise
* @param {any} value
* @returns {PromiseLike<any>}
*/
/**
* @method reject
* @memberof ApplicationPrototype.Builder.Promise
* @param {any} value
* @returns {PromiseLike<Error>}
*/
/**
* @method isNode
* @memberof ApplicationPrototype.Builder#
* @returns {boolean}
*/
/**
* @method isBrowser
* @memberof ApplicationPrototype.Builder#
* @returns {boolean}
*/
/**
* @method debugEnabled
* @memberof ApplicationPrototype.Builder#
* @param {boolean} [status]
* @returns {boolean}
*/
/**
* @method runModulesInFiles
* @memberof ApplicationPrototype.Builder#
* @param {boolean} [status]
* @returns {boolean}
*/
/**
* @method consoleOptions
* @memberof ApplicationPrototype.Builder#
* @param {ApplicationPrototype.Builder.ConsoleOptions} [options]
* @returns {ApplicationPrototype.Builder.ConsoleOptions}
*/
/**
* @method modulePath
* @memberof ApplicationPrototype.Builder#
* @param {string} [path]
* @returns {string}
*/
/**
* @typedef {object} ConsoleOptions
* @memberof ApplicationPrototype.Builder
* @property {boolean} [file] enable/disable showing filename in console log. default value is `true`
* @property {boolean} [contextName] enable/disable showing context Execution info in console log. default value is `true`
* @property {boolean} [timestamp] enable/disable showing current timestamp in console log. default value is `true`
* @property {boolean} [logType] enable/disable showing log type in console log. default value is `true
*/
/**
* @typedef {object} ModuleStore
* @memberof ApplicationPrototype.Builder
* @description modules store where are indexed modules
*/
/**
* @method moduleRegister
* @memberof ApplicationPrototype.Builder#
* @param {string} path path that will be used as `Application.modulePath()`
* @param {string[]} modules list of modules names that should be registered
* @returns {ApplicationPrototype.Builder.ModuleStore}
*/
/**
* @typedef {object} ModuleMeta
* @memberof ApplicationPrototype.Builder
* @property {ApplicationPrototype.Builder.ModuleStore} store same as `module.cache()`
* @property {PromiseLike<string>} $requestQuery XMLHttpRequest used for obtaining Module's Content
* @property {string} module_path module's path
* @property {string} path module's internal path used as identifier of module
* @property {string} name module's name
* @property {string} __dirname module's dirname
*/
/**
* @callback moduleResolve
* @memberof ApplicationPrototype.Builder#
* @param {string} module module name
* @param {string} [path] module path
* @returns {ApplicationPrototype.Builder.ModuleMeta}
*/
/**
* returns interface for accessing Node Env, is defined only in node env
* @var NodeInterface
* @type {object}
* @property {function():NodeJS.Process} process
* @property {function():NodeJS.Global} global
* @property {function():NodeRequire} require
* @property {function(string):any} globalReference returns NodeJS require reference by it's name
*/
// /** @typedef {{ prop1: string, prop2: string, prop3?: number }} XXXSpecialType */
// /** @typedef {(data: string, index?: number) => boolean} XXXPredicate */
/**
* @callback ApplicationPrototypeConstructor
* @returns {ApplicationPrototype.Instance}
*/
/**
* @callback ApplicationBuilderConstructor
* @returns {ApplicationPrototype.Builder}
*/
// property {*} _i = function(i,n){return ((n + (i % n))%n); };
/**
* @var {ExtensionsPrototype.slDOM} _
* @memberof ExtensionsPrototype
*/
/**
* @var {ExtensionsPrototype.slDOMSet} __
* @memberof ExtensionsPrototype
*/
/**
* @class
* @name slDOMSet
* @memberof ExtensionsPrototype
* @param {string} [cssSelector]
*/
/**
* @method config
* @memberof ExtensionsPrototype.slDOMSet#
* @param {string} key
* @param {any} value
* @returns {ExtensionsPrototype.slDOMSet}
*/
/**
* @method config
* @memberof ExtensionsPrototype.slDOMSet#
* @param {string} key
* @returns {any}
*/
/**
* @method unique
* @memberof ExtensionsPrototype.slDOMSet#
* @returns {ExtensionsPrototype.slDOMSet}
*/
/**
* @method set
* @memberof ExtensionsPrototype.slDOMSet#
* @param {string} v css selector applied over document
* @returns {ExtensionsPrototype.slDOMSet}
*/
/**
* @method set
* @memberof ExtensionsPrototype.slDOMSet#
* @param {(NodeList|any[])} v array of Nodes or HTMLElements
* @returns {ExtensionsPrototype.slDOMSet}
*/
/**
* @method add
* @memberof ExtensionsPrototype.slDOMSet#
* @param {(NodeList|any)} ...v array of Nodes or HTMLElements
* @returns {ExtensionsPrototype.slDOMSet}
*/
/**
* @method env
* @memberof ExtensionsPrototype.slDOMSet#
* @returns {ExtensionsPrototype.slDOM_env}
*/
/**
* @method get
* @memberof ExtensionsPrototype.slDOMSet#
* @returns {(Node[])}
*/
/**
* @method get
* @memberof ExtensionsPrototype.slDOMSet#
* @param {number} index
* @returns {(Node)}
*/
/**
* @method eq
* @memberof ExtensionsPrototype.slDOMSet#
* @param {number} index
* @returns {ExtensionsPrototype.slDOMSet}
*/
/**
* @method find
* @memberof ExtensionsPrototype.slDOMSet#
* @param {string} cssSelector
* @returns {ExtensionsPrototype.slDOMSet}
*/
/**
* @callback itemHandler
* @memberof ExtensionsPrototype.slDOMSet
* @param {Node} node
* @param {number} index
* @param {ExtensionsPrototype.slDOMSet} context
* @param {ExtensionsPrototype.slDOM} p
*/
/**
* @callback itemHandlerFilter
* @memberof ExtensionsPrototype.slDOMSet
* @param {Node} node
* @param {number} index
* @param {ExtensionsPrototype.slDOMSet} context
* @param {ExtensionsPrototype.slDOM} p
* @returns {boolean}
*/
/**
* @callback itemHandlerMap
* @memberof ExtensionsPrototype.slDOMSet
* @param {Node} node
* @param {number} index
* @param {ExtensionsPrototype.slDOMSet} context
* @param {ExtensionsPrototype.slDOM} p
* @returns {Node}
*/
/**
* @method filter
* @memberof ExtensionsPrototype.slDOMSet#
* @param {ExtensionsPrototype.slDOMSet.itemHandlerFilter} filterCallback
* @returns {ExtensionsPrototype.slDOMSet}
*/
/**
* @method each
* @memberof ExtensionsPrototype.slDOMSet#
* @param {ExtensionsPrototype.slDOMSet.itemHandler} filterCallback
* @returns {ExtensionsPrototype.slDOMSet}
*/
/**
* @method map
* @memberof ExtensionsPrototype.slDOMSet#
* @param {ExtensionsPrototype.slDOMSet.itemHandlerMap} filterCallback
* @returns {ExtensionsPrototype.slDOMSet}
*/
/**
* @method attr
* @memberof ExtensionsPrototype.slDOMSet#
* @returns {NamedNodeMap}
*/
/**
* @method attr
* @memberof ExtensionsPrototype.slDOMSet#
* @param {string} attribute
* @returns {string}
*/
/**
* @method attr
* @memberof ExtensionsPrototype.slDOMSet#
* @param {string} attribute
* @param {any} value
* @returns {ExtensionsPrototype.slDOMSet}
*/
/**
* @method attr
* @memberof ExtensionsPrototype.slDOMSet#
* @param {any} ...attr_value
* @returns {ExtensionsPrototype.slDOMSet}
*/
// ["toFunction", "x" ].forEach(function (method) {
// ["sClass", "c" ].forEach(function (method) {
// [ "g_wh", "r", "pagePXY", "PXY", "eventsCache", "in_e", "i", "is_free", "is_focused", "is_inview", "is_visible" ].forEach(function (method) {
// [ "on", "off", "opacity", "a2D", "triger", "setVar", "T", "setStyle", "setStyleSPEED", "F", "f", "o", "removeFromDOM", "free", "d", "D", "clearE", "delE", "setVar", "setObjVar", "setObjProto", "V", "v", "p", "adEto", "putBfto", "putAfto", "putBf", "putAf", "Et", "Bt", "At", "pB", "pA", "addE", "addB", "addT", "e", "b", "t", "getTagsByQuery", "getTags", "s", "q", "nextTo", "backTo", "nUP", "nChild", "getParentN", "copyE", "getParentTag", "getByTag", "getByQuery", "getById", "N", "B", "U", "C", "P", "X", "p", "S", "Q", "I" ].forEach(function (method) {
/**
* @typedef slDOM_env
* @memberof ExtensionsPrototype
* @property {boolean} gecko
* @property {boolean} old_ie
* @property {boolean} ie_lt8
* @property {boolean} ie_lt9
* @property {boolean} ie_gt10
* @property {boolean} ie
* @property {boolean} webkit
* @property {boolean} qtwebkit
* @property {boolean} chrome
* @property {boolean} opera
* @property {boolean} firefox
* @property {boolean} safari
* @property {boolean} khtml
* @property {boolean} mac_geLion
* @property {boolean} mac_geMountainLion
* @property {boolean} phantom
* @property {boolean} ios
* @property {boolean} mobile
* @property {boolean} mac
* @property {boolean} windows
* @property {Array|null} opera_version
* @property {boolean} flipCtrlCmd
* @property {boolean} captureMiddleClick
* @property {boolean} android
* @property {string|false} android_version
*/
/**
* @typedef {Object<string,(string|number)>} slDOM_ObjectCSSProperties a list of proprieties mapped in a object, example: { fontSize: "10px", "white-space": "nowrap" }
* @memberof ExtensionsPrototype
*/
/**
* @typedef {Object<string,(string|number)>} slDOM_ObjectAttributes a list of proprieties mapped in a object, example: { fontSize: "10px", "white-space": "nowrap" }
* @memberof ExtensionsPrototype
*/
/**
* @typedef {object} slDOM returns a pointer that walks over DOM and applying needed operations
* @memberof ExtensionsPrototype
* @property {ExtensionsPrototype.slDOM_env} env Environment Flags
* @property {function(boolean):HTMLElement} __ if params is `true` then return document otherwise current HTMLElement
* @property {function(object):ExtensionsPrototype.slDOM} a2D apply Css Transforms on elements
* @property {function(number):ExtensionsPrototype.slDOM} opacity ( short form **o** ) change element opacity
* @property {function((HTMLElement|string)):ExtensionsPrototype.slDOM} setE ( short form **e** ) set a HTMLElement or Create Element for slDOM Pointer
* @property {function((string|string[]),string?,number?):ExtensionsPrototype.slDOM|boolean} sClass =slDOMlib.sClass;
* @property {function(...string):slDOM} setArg ( short form **A** ) set Attributes to HTMLElement, arguments order: `[ attribute, value, attribute, value ... ]`
* @property {function(HTMLElement):slDOM} adEto add current HTMLElement to other HTMLElement;
* @property {function(HTMLElement):slDOM} putBfto insert current HTMLElement before other HTMLElement
* @property {function(HTMLElement):slDOM} putAfto insert current HTMLElement after other HTMLElement
* @property {function((HTMLElement|string),string?,function?):slDOM} putBf =slDOMlib.putBf;
* @property {function(HTMLElement):slDOM} putAf =slDOMlib.putAf;
* @property {function((HTMLElement|string),string?,function?):slDOM} addE =slDOMlib.addE;
* @property {function((HTMLElement|string),string?,function?):slDOM} addB =slDOMlib.addB;
* @property {function(string):slDOM} addT ( short form **t** ) add text node to HTMLElement;
* @property {function(number):slDOM} [nextTo=1] ( short form **N** ) moving pointer forward to N neighbors
* @property {function(number):slDOM} [backTo=1] ( short form **B** ) moving pointer backward to N neighbors
* @property {function(number?):slDOM} nUP ( short form is U ) goes up on level in doom
* @property {function(number?):slDOM} nChild ( short form is **C** ) select the *N th* child element
* @property {function(number?):slDOM} getParentN ( short form is **P** ) select the *N th* parent element
* @property {function():slDOM} clearE ( short form is **d** ) remove all childObjects from node
* @property {function():slDOM} delE remove HTMLElement from its Parent
* @property {function(boolean):slDOM} copyE =slDOMlib.copyE;
* @property {function(string):slDOM} getParentTag =slDOMlib.getParentTag;
* @property {function(string,number,boolean,boolean):slDOM} getByTag =slDOMlib.getByTag;
* @property {function(string,number,boolean,boolean):slDOM} getByQuery =slDOMlib.getByQuery;
* @property {function(string):slDOM} getById =slDOMlib.getById;
* @property {function(string,boolean):Array<HTMLElement>} getTags =slDOMlib.getTags;
* @property {function(string,boolean):Array<HTMLElement>} getTagsByQuery =slDOMlib.getTagsByQuery;
* @property {function(string):slDOM} triger ( short form **T** ) trigger / emit an event on HTMLElement
* @property {function(string?):slDOM|HTMLElement|string} getE ( short form **_** ) return HTMLElement ;
* * if argument[0] is ".tag" return HTMLElement's tagname ;
* * if argument[0] is ".html" return HTML Content ;
* * if argument[0] is ".text" return Text Content ;
* * if argument[0] is "-attributeName" return HTMLElement's Attribute ;
* * if argument[0] is "!attributeName" remove HTMLElement's Attribute
* @property {function(ExtensionsPrototype.slDOM_ObjectCSSProperties): slDOM} setStyle ( short form **f** ) setting css proprieties to HTMLElement
* @property {function((ExtensionsPrototype.slDOM_ObjectAttributes | string[])): slDOM} setVar ( short form **V** ) set dot property on HTMLElement
* @property {function(...ExtensionsPrototype.slDOM_ObjectAttributes): slDOM} setObjVar ( short form **v** ) setting attributes to HTMLElement
* @property {function(ExtensionsPrototype.slDOM_ObjectCSSProperties): slDOM} setStyleSPEED ( short form **F** ) setting css proprieties to HTMLElement with normalizing values by adding units
* @property {function(): { x: number, y: number }} pagePXY ( short form **PXY** ) get element position on page
* @property {function(): Boolean} in_e check if HTMLElement is still attached to DOM ( Document Object Manager )
* @property {function(): { w: number, h: number }} g_wh returns width and height of HTMLElement
* @property {function((object | string), boolean, function, object): slDOM} getLIST =slDOMlib.getLIST;
* @property {function(function(HTMLElement, object, slDOM), object): slDOM} toFunction =slDOMlib.toFunction;
* @property {function(): slDOM} removeFromDOM ( short form **free** ) remove elements from DOM
* @property {function(number): slDOM} o ( short form **opacity** ) change element opacity
* @property {function((HTMLElement | string)): slDOM} E ( long form **setE** ) set a HTMLElement or Create Element for slDOM Pointer
* @property {*} c =slDOMlib.sClass;
* @property {function(string): Object} attrs = slDOMlib.attrs;
* @property {*} A =slDOMlib.setArg;
* @property {*} Et =slDOMlib.adEto;
* @property {*} Bt =slDOMlib.putBfto;
* @property {*} At =slDOMlib.putAfto;
* @property {*} pB =slDOMlib.putBf;
* @property {*} pA =slDOMlib.putAf;
* @property {*} e =slDOMlib.addE;
* @property {*} b =slDOMlib.addB;
* @property {*} t =slDOMlib.addT;
* @property {*} N =slDOMlib.nextTo;
* @property {*} B =slDOMlib.backTo;
* @property {*} U =slDOMlib.nUP;
* @property {*} C =slDOMlib.nChild;
* @property {*} P =slDOMlib.getParentN;
* @property {*} d =slDOMlib.clearE;
* @property {*} D =slDOMlib.delE;
* @property {*} X =slDOMlib.copyE;
* @property {*} p =slDOMlib.getParentTag;
* @property {*} S =slDOMlib.getByTag;
* @property {*} Q =slDOMlib.getByQuery;
* @property {*} I =slDOMlib.getById;
* @property {*} s =slDOMlib.getTags;
* @property {*} q =slDOMlib.getTagsByQuery;
* @property {*} T =slDOMlib.triger;
* @property {*} _ =slDOMlib.getE;
* @property {*} $ =slDOMlib.getLIST;
* @property {*} F =slDOMlib.setStyleSPEED;
* @property {*} f =slDOMlib.setStyle;
* @property {*} L =slDOMlib.getLIST;
* @property {*} V =slDOMlib.setVar;
* @property {*} v =slDOMlib.setObjVar;
* @property {*} PXY =slDOMlib.pagePosXY;
* @property {*} i =slDOMlib.in_e;
* @property {*} r =slDOMlib.g_wh;
* @property {*} x =slDOMlib.toFunction;
* @property {function(): slDOM} free = slDOMlib.removeFromDOM;
* @property {function(): Boolean} is_free = slDOMlib.is_free;
* @property {function(): Boolean} is_focused = slDOMlib.is_focused;
* @property {function(): Boolean} is_inview = slDOMlib.elementInViewport;
* @property {function(): Boolean} is_visible = slDOMlib.elementIsVisible;
* @property {*} _normalizeCssValues = slDOMlib._normalizeCssValues;
* @property {*} on = slDOMlib.on;
* @property {*} off = slDOMlib.off;
* @property {function(): Object} eventsCache = slDOMlib.eventsCache;
*/
// /** @class */
// /** @type {ApplicationPrototypeInstance} */
// function ApplicationPrototype() {
// /** @type {ApplicationPrototypeBind} */
// this.bind = function (event, callback, specifiedEventId) { return String };
// /** @type {ApplicationPrototypeListener} */
// this.on = function (event, callback, specifiedEventId) { return String };
// /** @type {ApplicationPrototypeListener} */
// this.once = function (event, callback, specifiedEventId) { return String };
// /** @type {ApplicationPrototypeListenerRemove} */
// this.off = function (event, specifiedEventId) { return String };
// /** @type {ApplicationPrototypeCrudEvents} */
// this.crudEvents = function (context, publicMethods, privateMethods) {
// return new ApplicationPrototype();
// }
// }
// /** @class */
// /** @type {ApplicationBuilderInstance} */
// function ApplicationBuilder() {
// /** @type {ApplicationPrototypeBind} */
// this.bind = function (event, callback, specifiedEventId) { return String };
// /** @type {ApplicationPrototypeListener} */
// this.on = function (event, callback, specifiedEventId) { return String };
// /** @type {ApplicationPrototypeListener} */
// this.once = function (event, callback, specifiedEventId) { return String };
// /** @type {ApplicationPrototypeListenerRemove} */
// this.off = function (event, specifiedEventId) { return String };
// /** @type {ApplicationPrototypeCrudEvents} */
// this.crudEvents = function (context, publicMethods, privateMethods) {
// return new ApplicationPrototype();
// }
// /** @type {ApplicationBuilderRequire} */
// this.require = function (events, callback) {
// return new Promise();
// }
// /** @type {Promise} */
// this.Promise;
// }
// /** @namespace */
// var Application = new ApplicationBuilder();
/**
* @typedef {string} ModuleResourceUrl
* @memberof ApplicationPrototype.Builder
* @description resources url is composed from `module's plath` + `resource path`
*/
/**
* @typedef {Object} ApplicationModule
* @memberof ApplicationPrototype.Builder
* @property {PromiseLike<XMLHttpRequest>} $request resolves module exports
* @property {function():any} exports module exports handler
* @property {number} atime unix time in milliseconds
* @property {function():ApplicationPrototype.Builder} Application returns current application
* @property {function():ApplicationPrototype.Builder.ModuleStore} cache returns module's reserved cache object
* @property {function(any):Promise} require require modules from module's folder
* @property {function(ModuleResourceUrl):string} resourceUrl returns module's resource URL
* @property {ApplicationPrototype.Builder.ModuleMeta} meta module's meta information
*/
// /** @namespace */
// /** @type {ApplicationModule} */
// var module = {
// exports : {}
// };
/**
* @typedef ApplicationBuilderExports
* @property {ApplicationPrototypeConstructor} application
* @property {ApplicationBuilderConstructor} builder
*/
/// <reference path="constructors/request.js" />
/**
* @interface String
*/
/**
* @memberof String#
* @method subs
* @param {number} index
* @param {number} [lastIndex]
* @returns {string}
*/
/**
* @memberof String#
* @method toHex
* @param {boolean} [isUtf8=true]
* @returns {string}
*/
/**
* @memberof String#
* @method fromHex
* @returns {string}
*/
/**
* encode in HTML minimal
* @memberof String#
* @method toHtmlSimple
* @returns {string}
*/
/**
* encode in HTML
* @memberof String#
* @method toHtml
* @returns {string}
*/
/**
* decode from HTML ( works in Browser )
* @memberof String#
* @method fromHtml
* @returns {string}
*/
/**
* remove risky tags from HTML Code: comments, script, iframe, style, object, noscript, frame, frameset
* @memberof String#
* @method cleanTags
* @returns {string}
*/
/**
* @memberof String#
* @method add_Class
* @param {string} newClass
* @returns {string}
*/
/**
* @memberof String#
* @method del_Class
* @param {string} newClass
* @returns {string}
*/
/**
* @memberof String#
* @method fnd_Class
* @param {string} newClass
* @returns {boolean}
*/
/**
* @memberof String#
* @method swp_case
* @returns {string}
*/
/**
* @memberof String#
* @method ucfirst
* @param {number} [length=1] how many first chars to be transformed to uppercase
* @returns {string}
*/
/**
* @memberof String#
* @method lcfirst
* @param {number} [length=1] how many first chars to be transformed to uppercase
* @returns {string}
*/
/**
* Detects if a string is unicode, and if it is, then it is transformed to UTF8
* @memberof String#
* @method utf8need
* @returns {string}
*/
/**
* @memberof String#
* @method utf8encode
* @returns {string}
*/
/**
* @memberof String#
* @method utf8decode
* @returns {string}
*/
/**
* @see {String#utf8encode}
* @memberof String#
* @method utf8
* @returns {string}
*/
/**
* @see {String#utf8decode}
* @memberof String#
* @method unicode
* @returns {string}
*/
/**
* @memberof String#
* @method encryptAes
* @param {string} password
* @param {number} [size=128]
* @returns {string}
*/
/**
* @memberof String#
* @method decryptAes
* @param {string} password
* @param {number} [size=128]
* @returns {string}
*/
/**
* @memberof String#
* @method encryptTea
* @param {string} password
* @returns {string}
*/
/**
* @memberof String#
* @method decryptTea
* @param {string} password
* @returns {string}
*/
/**
* @memberof String#
* @method base64decode
* @returns {string}
*/
/**
* @memberof String#
* @method base64encode
* @returns {string}
*/
/**
* @memberof String#
* @method base64decodeBytes
* @returns {Uint8Array}
*/
/**
* @memberof String#
* @method base64encodeBytes
* @returns {Uint8Array}
*/
/**
* @memberof String#
* @method base64decodeBytesArray
* @returns {Array<number>}
*/
/**
* @memberof String#
* @method base64encodeBytesArray
* @returns {Array<number>}
*/
/**
* @memberof String#
* @method base64encodeClean
* @returns {string}
*/
/**
* @memberof String#
* @method base64decodeClean
* @returns {string}
*/
/**
* @memberof String#
* @method encodeURI
* @returns {string}
*/
/**
* @memberof String#
* @method decodeURI
* @returns {string}
*/
/**
* @memberof String#
* @method escapeHex
* @returns {string}
*/
/**
* @memberof String#
* @method escape
* @returns {string}
*/
/**
* @memberof String#
* @method unescape
* @returns {string}
*/
/**
* @memberof String#
* @method sha1
* @param {boolean} [isUtf8=true]
* @returns {string}
*/
/**
* @memberof String#
* @method sha256
* @param {boolean} [isUtf8=true]
* @returns {string}
*/
/**
* @memberof String#
* @method subs
* @param {number} index
* @param {number} count
* @returns {string}
*/
/**
* @memberof String#
* @method md5
* @returns {string}
*/
/**
* @memberof String#
* @method markdown
* @returns {string}
*/
/**
* @memberof String#
* @method toRegexp
* @returns {RegExp}
*/
/**
* @memberof String#
* @method parseUrl
* @param {("get_vars"|boolean)} [mode]
* @returns {object}
*/
/**
* @memberof String#
* @method match_str
* @param {string} rule reg exp rule in string format
* @param {string} [flags] reg exp flags
* @returns {Array|object}
*/
/**
* Returns a list of parameters included in a string
* @example
* 'my-demo testIndex: 23 with testValue: "demo content"'.buildQuery()
* // returns
* {
* "_keys": [
* "testindex",
* "testvalue"
* ],
* "_": "my-demo",
* "testindex": "23 with",
* "testvalue": "\"demo content\""
* }
* @memberof String#
* @method buildQuery
* @returns {Object<string,(string|string[])>}
*/
/**
* Returns a list of parameters included in a string
* @example
* '"this is" "list of fragments"'.buildSearchArray()
* // returns
* [
* "this is",
* "list of fragments"
* ]
* @memberof String#
* @method buildSearchArray
* @returns {Array<string>}
*/
/**
* @memberof String#
* @method toArrayBufferFromUtf8
* @returns {ArrayBuffer}
*/