AnP/Public/ecma/Application/AnP.ecma.js

191 lines
5.8 KiB
JavaScript

"use strict";
import {FilesDriver} from "../Drivers/FilesDriver.ecma.js";
import {PrintTypesManager} from "../Managers/PrintTypesManager.ecma.js";
import {SettingsManager} from "../Managers/SettingsManager.ecma.js";
import {I18NManager} from "../Managers/I18NManager.ecma.js";
import {ThreadsManager} from "../Managers/ThreadsManager.ecma.js";
import {UniqueKeysManager} from "../Managers/UniqueKeysManager.ecma.js";
import {SessionsManager} from "../Managers/SessionsManager.ecma.js";
import {ModelsManager} from "../Managers/ModelsManager.ecma.js";
import {ViewsManager} from "../Managers/ViewsManager.ecma.js";
import {RoutesManager} from "../Managers/RoutesManager.ecma.js";
import {Components} from "./Components.ecma.js";
import {Common} from "../Utils/Common.ecma.js";
import {Check} from "../Utils/Checks.ecma.js";
/**
* @class AnP
* @constructor
* @param {?(Object.<string, any|null>|Array<any|null>)} [inputs = null]
* @param {?simple_callback} [callback = null]
* @returns {void}
* @access private
* @static
*/
export const AnP = (function(){
/**
* @callback simple_callback
* @returns {void}
*/
/**
* @callback continue_callback
* @param {!boolean} ok
* @return {boolean}
*/
/**
* @constructs AnP
* @param {?(Object.<string, any|null>|Array<any|null>)} [inputs = null]
* @param {?simple_callback} [callback = null]
* @returns {void}
* @access private
* @static
*/
const AnP = function(inputs = null, callback = null){
/** @type {AnP} */
const self = this;
/** @type {boolean} */
let started = false;
/** @type {FilesDriver} */
this.files = new FilesDriver(self);
/** @type {PrintTypesManager} */
this.print_types = new PrintTypesManager(self);
/** @type {SettingsManager} */
this.settings = new SettingsManager(self, inputs);
/** @type {I18NManager} */
this.i18n = new I18NManager(self);
/** @type {ThreadsManager} */
this.threads = new ThreadsManager(self);
/** @type {UniqueKeysManager} */
this.unique_keys = new UniqueKeysManager(self);
/** @type {SessionsManager} */
this.sessions = new SessionsManager(self);
/** @type {ModelsManager} */
this.models = new ModelsManager(self);
/** @type {Components} */
this.components = new Components(self);
/** @type {ViewsManager} */
this.views = new ViewsManager(self);
/** @type {RoutesManager} */
this.routes = new RoutesManager(self);
/**
* @returns {void}
* @access private
*/
const constructor = () => {
self.settings.get("autostart", null, true) && self.start(callback);
};
/**
* @param {?continue_callback} callback
* @returns {boolean}
* @access public
*/
this.update = (callback = null) => {
Common.execute_array([
"files", "settings", "print_types", "i18n", "threads", "models", "views", "routes"
], (key, next) => {
self[key].update(next);
}, callback, true);
};
/**
* @param {?continue_callback} callback
* @returns {boolean}
* @access public
*/
this.reset = (callback = null) => {
Common.execute_array([
"files", "settings", "print_types", "i18n", "threads", "models", "views", "routes"
], (key, next) => {
self[key].reset(next);
}, callback, true);
};
/**
* @param {?continue_callback} callback
* @returns {boolean}
* @access public
*/
this.start = (callback = null) => {
/** @type {continue_callback} */
const end = ok => Common.execute(callback, ok);
if(started){
end(false);
return false;
};
started = true;
self.update(ok => {
if(ok !== false && self.settings.get("build_base_gui")){
Common.preload(self.settings.get("position"), (position, asynchronous, ok) => {
if(position){
Common.HTML(position, self.components.base.build());
end(true);
}else
end(false);
});
}else
end(ok);
});
return true;
};
/**
* @param {?continue_callback} callback
* @returns {boolean}
* @access public
*/
this.close = (callback = null) => {
/** @type {continue_callback} */
const end = ok => Common.execute(callback, ok);
if(!started){
end(false);
return false;
};
started = false;
end(true);
return true;
};
/**
* @param {!string} type
* @param {!(string|Array.<string>)} message
* @param {?(Object.<string, any|null>|Array<any|null>)} [inputs = null]
* @param {!number} [i = 0]
* @return {void}
* @access public
*/
this.print = (type, message, inputs = null, i = 0) => {};
/**
* @param {!Error} exception
* @param {!(string|Array.<string>)} message
* @param {?(Object.<string, any|null>|Array<any|null>)} [inputs = null]
* @param {!number} [i = 0]
* @return {void}
* @access public
*/
this.exception = (exception, message, inputs = null, i = 0) => {};
constructor();
};
return AnP;
})();