py|md|ecma: Resources in Applications enabled again. Fixed the autoload of Scripts and Styles files from AnPScriptsLoader and documented.
This commit is contained in:
parent
d8baca9aca
commit
a2d81e2ffa
@ -666,9 +666,9 @@
|
||||
"anp_drivers_unix_domain_socket_web_server_start_permission_exception" : "Hubo una excepción en el servidor Socket de Dominio Unix '{key}' sobre '{path}' al intentar establecer los permisos del archivo común de posicionamiento en memoria.",
|
||||
"anp_drivers_unix_domain_socket_web_server_start_exception" : "Hubo una excepción en el servidor Socket de Dominio Unix '{key}' sobre '{path}' al intentar iniciar el Socket de comunicaciones.",
|
||||
"anp_drivers_unix_domain_socket_web_server_close_exception" : "Hubo una excepción al intentar cerrar el servidor Socket de Dominio Unix '{key}' sobre '{path}'.",
|
||||
"anp_drivers_unix_domain_socket_web_server_send_exception" : "Hubo una excepción al intentar enviar {length} bytes ({bytes_sent} bytes con cabeceras) de datos al servidor Socket de Dominio Unix '{key}'.",
|
||||
"anp_drivers_unix_domain_socket_web_server_send_error" : "Hubo un error con código '{code}' al intentar enviar {length} bytes ({bytes_sent} bytes con cabeceras) de datos al servidor Socket de Dominio Unix '{key}'.",
|
||||
"anp_drivers_unix_domain_socket_web_server_send_ok" : "{length} bytes ({bytes_sent} bytes con cabeceras) de datos fueron enviados al servidor Socket de Dominio Unix '{key}' correctamente.",
|
||||
"anp_drivers_unix_domain_socket_web_server_send_exception" : "Hubo una excepción al intentar enviar {length} bytes ({bytes_sent} bytes con cabeceras) de datos al servidor Socket de Dominio Unix '{key}' desde '{request}'.",
|
||||
"anp_drivers_unix_domain_socket_web_server_send_error" : "Hubo un error con código '{code}' al intentar enviar {length} bytes ({bytes_sent} bytes con cabeceras) de datos al servidor Socket de Dominio Unix '{key}' desde '{request}'.",
|
||||
"anp_drivers_unix_domain_socket_web_server_send_ok" : "{length} bytes ({bytes_sent} bytes con cabeceras) de datos fueron enviados al servidor Socket de Dominio Unix '{key}' desde '{request}' correctamente.",
|
||||
"anp_drivers_unix_domain_socket_web_server_process_request_exception" : "Hubo una excepción al intentar procesar una petición de {length} bytes desde el servidor Socket de Dominio Unix '{key}'.",
|
||||
"anp_drivers_unix_domain_socket_web_server_process_request_error" : "Hubo un error con código '{code}' al intentar procesar una petición de {length} bytes desde el servidor Socket de Dominio Unix '{key}'.",
|
||||
"anp_drivers_unix_domain_socket_web_server_process_request_ok" : "Una petición de {length} bytes desde el servidor Socket de Dominio Unix '{key}' fue procesada correctamente.",
|
||||
|
46
Public/doc/es/manual/ecma/scripts_loader.w.md
Normal file
46
Public/doc/es/manual/ecma/scripts_loader.w.md
Normal file
@ -0,0 +1,46 @@
|
||||
```wmd-options
|
||||
language = es
|
||||
title_i18n = anp_title_ecma_scripts_loader
|
||||
title_text = AnPScriptsLoader.ecma.js - Documentación - AnP
|
||||
```
|
||||
|
||||
<!-- [[wmd]] -->
|
||||
|
||||
#### [[!AnPScriptsLoader.emca.js]]
|
||||
|
||||
El **AnPScriptsLoader** es clase almacenada en la librería con el mismo nombre dentro de los Scripts ECAMScript/JavaScript que nos permite hacer una gestión controlada y dinámica de los recursos que queramos consumir para la aplicación que queremos desarrollar. Esta librería se basa en la creación dinámica de los elementos HTML que se encargan de la carga de Scripts y estilos CSS, SCRIPT y LINK consecutivamente. Una vez tiene todo cargado ejecuta el Callback que da inicio a la aplicación AnP.
|
||||
|
||||
Todo el proceso de carga de los ficheros viene siendo un proceso asíncrono gestionado mediante Callbacks, evitando que se bloquee el hilo de proceso del Script mediante la utilización de los eventos de las etiquetas HTML SCRIPT y LINK tanto de "onload" como "onerror".
|
||||
|
||||
##### Carga de Scripts
|
||||
|
||||
Los Scripts son elementos dependientes unos de otros por lo general por lo que se requiere una estructuración vertical en árbol para la carga de dichos ficheros. Un ejemplo de ésto puede ser la carga básica de las librerías dependientes de AnP:
|
||||
|
||||
1. Nivel 1
|
||||
* [[!https://errorsmanager.k3y.pw/ecma/ErrorsManager.ecma.js]]
|
||||
* [[!https://cdn.k3y.pw/data/scripts/Highlight.v11.10.0.min.js]]
|
||||
* [[!https://wmarkdown.k3y.pw/ecma/WMarkDown.ecma.js]]
|
||||
* [[!https://cdn.k3y.pw/data/scripts/Highlight.v11.10.0.min.js]]
|
||||
* [[!https://cdn.k3y.pw/data/scripts/tex-mml-chtml.v3.2.2.js]]
|
||||
* [[!https://cdn.k3y.pw/data/scripts/mermaid.v10.9.1.min.js]]
|
||||
2. Nivel 2
|
||||
* [[!/ecma/Application/AnP.ecma.js]]
|
||||
3. Nivel 3
|
||||
* [[!/ecma/Managers/Settings.ecma.js]]
|
||||
* [[!/ecma/Application/URI.ecma.js]]
|
||||
* [[!/ecma/Managers/Globals.ecma.js]]
|
||||
* [[!/ecma/Managers/I18N.ecma.js]]
|
||||
* [[!/ecma/Managers/PrintTypes.ecma.js]]
|
||||
* [[!/ecma/Managers/Threads.ecma.js]]
|
||||
* [[!/ecma/Application/Attributes.ecma.js]]
|
||||
* [[!/ecma/Application/HTMLPreload.ecma.js]]
|
||||
4. Nivel 4
|
||||
* [[!/ecma/Components/Base.ecma.js]]
|
||||
|
||||
Esto significa que hasta que no se carguen todos los ficheros del Nivel 1 no se empezará la carga de los ficheros del Nivel 2 por las posibles dependencias que éstos puedan tener sobre los del Nivel 1, y así sucesivamente, cargándose el último fichero del Nivel 4 una vez estén cargados los anteriores.
|
||||
|
||||
##### Carga de estilos
|
||||
|
||||
* *Explicar la carga de los estilos.*
|
||||
|
||||
<!-- [[wmd]] -->
|
@ -13,10 +13,12 @@
|
||||
const AnPScriptsLoader = function(inputs, callback){
|
||||
"use strict";
|
||||
|
||||
/** @type {ScriptsLoader} */
|
||||
/** @type {AnPScriptsLoader} */
|
||||
const self = this,
|
||||
/** @type {Array.<number>} */
|
||||
error = [0, 0, 0];
|
||||
error = [0, 0, 0],
|
||||
/** @type {Object.<string, number>} */
|
||||
file_tryies = {};
|
||||
|
||||
/**
|
||||
* @returns {void}
|
||||
@ -31,7 +33,12 @@ const AnPScriptsLoader = function(inputs, callback){
|
||||
else if(typeof inputs != "object")
|
||||
inputs = {allow_print : true};
|
||||
|
||||
inputs.allow_print === undefined && (inputs.allow_print = true)
|
||||
[
|
||||
["allow_print", true],
|
||||
["maximum_tryes", 5],
|
||||
["scripts", []],
|
||||
["styles", []]
|
||||
].forEach(([key, value]) => inputs[key] === undefined && (inputs[key] = value));
|
||||
|
||||
|
||||
AnPScriptsLoader.prototype.SCRIPTS = [[
|
||||
@ -59,8 +66,6 @@ const AnPScriptsLoader = function(inputs, callback){
|
||||
"Managers/Globals",
|
||||
].map(script => domain + "/ecma/" + script + ".ecma.js");
|
||||
|
||||
["scripts", "styles"].forEach(key => inputs[key] || (inputs[key] = []));
|
||||
|
||||
inputs.scripts.unshift([
|
||||
domain + "/ecma/Application/AnP.ecma.js"
|
||||
]);
|
||||
@ -95,14 +100,16 @@ const AnPScriptsLoader = function(inputs, callback){
|
||||
break;
|
||||
case "wmarkdown":
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
if(inputs.scripts || inputs.styles)
|
||||
self.load(inputs, callback);
|
||||
else
|
||||
self.execute(callback);
|
||||
|
||||
// if(inputs.scripts || inputs.styles)
|
||||
// self.load(inputs, callback);
|
||||
// else
|
||||
// self.execute(callback);
|
||||
|
||||
};
|
||||
|
||||
@ -187,10 +194,26 @@ const AnPScriptsLoader = function(inputs, callback){
|
||||
return error;
|
||||
};
|
||||
|
||||
/**º
|
||||
* @param {!(HTMLScriptElement|HTMLLinkElement)} item
|
||||
* @param {!string} file
|
||||
* @param {!default_callback} callback
|
||||
* @param {!default_callback} end
|
||||
* @returns {void}
|
||||
* @access private
|
||||
*/
|
||||
const check_tryes = (item, file, callback, end) => {
|
||||
if((file_tryies[file] = (file_tryies[file] || 0) + 1) < inputs.maximum_tryes){
|
||||
item.remove();
|
||||
callback();
|
||||
}else
|
||||
end();
|
||||
};
|
||||
|
||||
/**
|
||||
* @param {!Array.<Array.<string>>} scripts
|
||||
* @param {!number} i
|
||||
* @param {default_callback} callback
|
||||
* @param {default_callback} [callback]
|
||||
* @returns {void}
|
||||
* @access private
|
||||
*/
|
||||
@ -228,7 +251,9 @@ const AnPScriptsLoader = function(inputs, callback){
|
||||
script_item.setAttribute("src", script);
|
||||
script_item.setAttribute("data-crossorigin", "anonymous");
|
||||
script_item.setAttribute("charset", "utf-8");
|
||||
script_item.onerror = () => file_processed(script_item, "error", script, end);
|
||||
script_item.onerror = () => file_processed(script_item, "error", script, () => check_tryes(
|
||||
script_item, script, () => load_scripts([[script]], 0, end), end
|
||||
));
|
||||
script_item.onload = () => file_processed(script_item, "ok", script, end);
|
||||
|
||||
});
|
||||
@ -238,7 +263,7 @@ const AnPScriptsLoader = function(inputs, callback){
|
||||
|
||||
/**
|
||||
* @param {!Array.<string>} scripts
|
||||
* @param {default_callback} callback
|
||||
* @param {default_callback} [callback]
|
||||
* @returns {void}
|
||||
* @access private
|
||||
*/
|
||||
@ -290,7 +315,9 @@ const AnPScriptsLoader = function(inputs, callback){
|
||||
style_item.setAttribute("charset", "utf-8");
|
||||
|
||||
if("onload" in style_item){
|
||||
style_item.onerror = () => file_processed(style_item, "error", style, end);
|
||||
style_item.onerror = () => file_processed(style_item, "error", style, () => check_tryes(
|
||||
style_item, style, () => load_scripts([style], end), end
|
||||
));
|
||||
style_item.onload = () => file_processed(style_item, "ok", style, end);
|
||||
}else{
|
||||
show_file_status("unknown", style);
|
||||
|
@ -171,7 +171,7 @@ class ApplicationsAbstract(CommonAbstract):
|
||||
def _build(self, callback:Optional[Callable[[], None]] = None) -> None:
|
||||
self._removing = False
|
||||
self.__set_basics()
|
||||
# self.resources = {}
|
||||
self.resources = {}
|
||||
self.anp.execute(callback)
|
||||
|
||||
def update_settings(self) -> None:
|
||||
@ -281,11 +281,11 @@ class ApplicationsAbstract(CommonAbstract):
|
||||
}
|
||||
})
|
||||
|
||||
# for key in ("default_resources", "resources"):
|
||||
# if not self.anp.settings.get(self.key + "_" + key, self.__inputs):
|
||||
# pass
|
||||
# for subkey in []:
|
||||
# self.resources[subkey] = self.anp.settings.get(self.key + "_" + subkey)
|
||||
for key in ("default_resources", "resources"):
|
||||
if not self.anp.settings.get(self.key + "_" + key, self.__inputs):
|
||||
pass
|
||||
for subkey in []:
|
||||
self.resources[subkey] = self.anp.settings.get(self.key + "_" + subkey)
|
||||
|
||||
self.update_views()
|
||||
self.update_routes()
|
||||
|
@ -169,8 +169,9 @@ class UnixDomainSocketWebServer(ConnectionsAbstract):
|
||||
0), 6)
|
||||
|
||||
if not self.anp.errors.has(error):
|
||||
bytes_sent = len(response)
|
||||
try:
|
||||
bytes_sent = client.sendall(response)
|
||||
client.sendall(response)
|
||||
except IOError as exception:
|
||||
pass
|
||||
except Exception as exception:
|
||||
@ -197,7 +198,8 @@ class UnixDomainSocketWebServer(ConnectionsAbstract):
|
||||
"length" : 0,
|
||||
**self._print_data,
|
||||
**(response_data.get_json() if response_data else {}),
|
||||
"bytes_sent" : bytes_sent
|
||||
"bytes_sent" : bytes_sent,
|
||||
"request" : headers["request"] if "request" in headers else None
|
||||
},
|
||||
(show_errors if has_show_errors else self.__show_send_error) and "anp_drivers_unix_domain_socket_web_server_send_error",
|
||||
(show_errors if has_show_errors else True) and self.__show_send_ok and "anp_drivers_unix_domain_socket_web_server_send_ok"
|
||||
@ -225,6 +227,7 @@ class UnixDomainSocketWebServer(ConnectionsAbstract):
|
||||
break
|
||||
|
||||
request = HTTPRequestModel(self.anp, client, data)
|
||||
request.headers["host"] + request.uri_path == "anp.local/" and print("")
|
||||
|
||||
if self.anp.errors.has(request.error):
|
||||
error = self.anp.errors.set(error, 1, 1)
|
||||
@ -243,7 +246,8 @@ class UnixDomainSocketWebServer(ConnectionsAbstract):
|
||||
1 << 3 if self.anp.errors.has(self.send(client, response.data, {
|
||||
**({"mime" : response.mime} if response.mime else {}),
|
||||
**({"last_modified" : self.format_date(response.date)} if response.date else {}),
|
||||
"domain" : "local" if request.headers["host"].split(".")[-1] in ("local", "anprm") else "k3y.pw"
|
||||
"domain" : "local" if request.headers["host"].split(".")[-1] in ("local", "anprm") else "k3y.pw",
|
||||
"request" : (str(request.headers["host"]) if "host" in request.headers else "") + str(request.uri_path)
|
||||
})) else
|
||||
0), 3)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user