[[post_data {
    "author" : "KyMAN",
    "since" : 20220426,
    "version" : 20220602
}]]
# AnPBuilder

El AnPBuilder es un conjunto de librerías independientes entre sí para intentar facilitar el montaje
de un proyecto AnP. Por lo general, un proyecto AnP depende de un archivo que sea el referente de
comunicación con el servidor (Ruta/Controlador). Como filosofía del AnP, cada nivel de la
comunicación o de la información tendrá su propio lenguaje que independizará cada nivel
completamente entre sí, por lo que cada nivel tendrá su propio AnPBuilder. También ayudará a que se
generen los elementos de forma limpia y eficiente como aplicación.

# Nivel de JS/ECMA

El nivel de JS/ECMA es el nivel que se encarga de gestionar el entorno cliente.

## Funcionamiento.

Su funcionamiento es muy sencillo: básicamente se requiere de Embedar el archivo AnPBuilder, y éste
ya se hace cargo de cargar los Scripts y las hojas de estilos necesarias para la ejecución del
proyecto según se le establezca en los parámetros de entrada. Con ello ya trae un precargador
mediante Callback. Un ejemplo rápido de funcionamiento puede ser el siguiente:

```html
<!DOCTYPE html>
<html lang="en" dir="ltr">
    <head>
        <title data-i18n="anp_title">AnPBuilder - Test</title>
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
        <meta charset="utf-8" />

        <style data-type="text/css" data-language="CSS3" data-rel="stylesheet" charset="utf-8">

            html,body{
                height : 100%;
                margin : 0em;
                overflow : hidden;
            }

        </style>

        <script data-type="text/javascript" data-language="ECMAScript 2015" src="/ecma/AnPBuilder.ecma.js" charset="utf-8" data-crossorigin="anonymous"></script>

        <script data-type="text/javascript" data-language="ECMAScript 2015" charset="utf-8">

            new AnPBuilder({
                domain : window.location.href.replace(/^([^\.]+[^\/]+)(\/.*)?$/, "$1"), // https://anp.k3y.pw
                callback : () => {

                    anp = new AnP();

                }
            });

        </script>

    </head>
    <body></body>
</html>
```

Este Script de aquí cargaría de forma dinámica en la cabecera, todos los Scripts del AnP junto con
sus hojas de estilos (SASS e iconos).

Los parámetros de entrada del constructor son los siguientes:

- **[[ignore nulls]]**: Nos indica si se admiten nulos como respuesta o no a la hora de coger un parámetro de la configuración.
- **[[ignore default_value]]**: Valor por defecto en caso de no encontrarse en la configuración.
- **[[ignore autostart]]**: Verifica si se autoinicia o no.
- **[[ignore callback]]**: Método o función a ejecutar tras la carga de los Scripts.
- **[[ignore domain]]**: Dominio de la URL por defecto.
- **[[ignore scripts]]**: Listas de Scripts (Se divide por niveles).
- **[[ignore css]]**: Lista de archivos CSS.
- **[[ignore scss]]**: Lista de archivos SASS compilados.
- **[[ignore sass]]**: *Equivale a "[[ignore scss]]".*
- **[[ignore js_path]]**: Path de los JS por defecto.
- **[[ignore js_comp_path]]**: Path de los componentes JS por defecto.
- **[[ignore ecma_path]]**: Path de los ECMA por defecto.
- **[[ignore ecma_comp_path]]**: Path de los componentes ECMA por defecto.
- **[[ignore scss_path]]**: Path de los SASS compilados por defecto.
- **[[ignore sass_path]]**: *Equivale a "[[ignore scss_path]]".*
- **[[ignore url_variables]]**: Diccionario de variables para procesar las URL.
- **[[ignore default_script_type]]**: Tipo de Script por defecto (ECMA o JS).

> [[! note NOTA]]: El parámetro **[[ignore default_script_type]]** puede ser un nombre de lenguaje
con su versión o bien puede ser una opción. Las opciones actuales a éste son "js" y "ecma", cada
cual para sus tipos correspondientes.

Para poder integrar un Path o URL de un archivo JS, ECMA, CSS o SCSS se necesita una ruta URL
completa, la cual se puede autocompletar mediante variables de URL dadas en la variable
**[[ignore url_variables]]**. Dentro de ésta también se encontrarán [[ignore "domain", "js_path", "js_comp_path",
"ecma_path", "ecma_comp_path", "css_path" y "scss_path"]], y serán usadas a partir del String del Path
del fichero nombrándolas dentro del String encapsulando su nombre entre llaves. Por ejemplo:

```txt
{domain}/ecma/AnP.js
```

Para añadir campos customizados ha de añadirse la variable de entrada "url_variables".

## Carga de Scripts

Los Script se cargan por niveles por el hecho de las dependencias que puedan existir entre ellos,
como sucede con las dependencias de las claves foráneas de las bases de datos relacionales, un
Script puede hacer uso de algún componente anterior. En el caso del AnP, los componentes como las
tablas o imágenes se anidan dentro de la clase AnP.Components, lo que quiere decir que si aún no
existe AnP.Components, éstos no se pueden adjuntar aún. Para que existan ha de estar precargada la
librería de Componentes.

Al ser un sistema que se anida, se divide en niveles de dependencia donde si no hay dependencia
sería el nivel 0; si sólo tuviera una o más dependencias, pero éstas no dependen de nada, sería de
nivel 1; si las dependencias tuviera dependencias que no tuvieran dependencia a su vez, pues sería
de nivel 2, y así sucesivamente.

Para llevar a cabo este nivel de dependencias se usa un Array de Arrays donde el 0 son las librerías
independientes; el 1 serían las librerías de dependencia de nivel 1, las del 2 serían de nivel 2, y
así sucesivamente.

# Nivel servidor PHP

# FAQ

## División de CSS

¿Por qué se dividen los CSS de los SCSS?

Básicamente es porque los atributos del elemento HTML LINK son distintos entre ellos por defecto,
aunque sean dentro de un sentido simbólico al usar la cabecera "data-".

# Conclusión

Estas librerías sirven, de forma eficiente visualmente, para aquellos proyectos que se crean
manualmente, es decir, para aquellos proyectos que no pasan por el AnPRM, pues lo que son las
dependencias SCRIPT y CSS ya van compactadas en el mismo.

# Notas

Es importante destacar que los parámetros de entrada [[ignore "js_path", "js_comp_path", "ecma_path",
"ecma_comp_path", "css_path" y "scss_path"]] están en desuso actualmente y sólo pertenecen a una idea
que no se sabe si volverá.

[[html_data {
    "title" : "AnP - AnPBuilder",
    "url" : "https://anp.k3y.pw/es/dev/anpbuilder.html",
    "author" : "KyMAN",
    "since" : 20220426,
    "version" : 20220602,
    "key_words" : "anp,attach,play,attach&play,builder,anpbuilder",
    "description" : "AnPBuilder.",
    "project" : "AnPBuilder",
    "logo" : "https://anp.k3y.pw/images/anp.png",
    "language" : "es"
}]]
