Encierra datos de cualquier tipo para manejarse o procesarse, soporta múltiples argumentos. Se infieren los tipos de datos y sus funciones correspondientes a partir de el/los argumento(s).
Sintaxis normal:
_(cualquier_dato);
Sintaxis multiargumento:
_(cualquier_dato_1, /* ..., */ cualquier_dato_n);
Retorno:
Objeto con las siguientes propiedades y funciones:
data:Primer argumento de la función.
type:Tipo de datos primitivo del primer argumento.
count:Conteo del primer argumento.
args:Todos los argumentos de la función.
is():Función que devuelve true si los tipos de datos ingresados coinciden o false si no.
are():Alias de la función is.
...():Todas las funciones correspondientes a los tipos de datos de los argumentos.
Ejemplo:
_([], 2, { n: false }, new Date(), /[a-z]/, null);
_({ }).deep( ):Función para recorrer objetos/arrays multinivel con índices textuales.
Recorre el objeto/array del primer argumento de la función principal, ejecutando un callback para cada ítem de cada nivel. El primer argumento puede contener datos mixtos.
Sintaxis:
_(objeto).deep(FUNCION, NIVEL, INDICE);
Argumentos:
FUNCION:Callback que se ejecutará para cada ítem de cada nivel con argumentos de referencia a cada uno:
llave (arg. 0):Índice textual del ítem.
valor (arg. 1):Contenido del ítem.
indice (arg. 2):Índice numérico asignado al ítem, relativo a todo el recorrido.
nivel (arg. 3):Nivel en que se encuentra el ítem.
NIVEL:Opcional. Especifica el nivel del objeto/arrays hasta dónde se recorrerá, acepta los siguientes tipos de valores. Por defecto, recorre solo el primer nivel.
number:Especifica el número del nivel hasta el cual recorrerá. Se cuenta desde 0 (nivel 1).
true:Se recorrerán todos los niveles del objeto.
INDICE:Opcional. Número que se asignará a cada ítem y aumentará progresivamente desde el primero, para identificar su posición en orden en el objeto, independientemente del nivel donde esté. Por defecto, es 0 y se cuenta desde el ítem 0 (ítem 1).
Retorno:
Objeto con propiedad count con el número de ítems recorridos.
_([ ]).each( ):Función para recorrer arrays/nodos multinivel con índices numéricos.
Recorre el array o lista de nodos del primer argumento de la función principal, ejecutando un callback para cada ítem de cada nivel. El primer argumento puede contener datos mixtos.
Sintaxis:
_(array).each(FUNCION, OPCIONES, INDICE);
Argumentos:
FUNCION:Callback que se ejecutará para cada ítem de cada nivel con argumentos de referencia a cada uno:
indice (arg. 0):Índice numérico del ítem relativo a su nivel.
valor (arg. 1):Contenido del ítem.
indice_orden (arg. 2):Índice numérico asignado al ítem, relativo a todo el recorrido.
OPCIONES:Argumento opcional. Objeto donde se puede especificar las siguientes opciones.
simple:Si es true, solo recorre el primer nivel.
reverse:Si es true, recorre desde el último hacia el primer ítem.
INDICE:Opcional. Número que se asignará a cada ítem y aumentará progresivamente desde el primero, para identificar su posición en orden en el array o lista de nodos, independientemente del nivel donde esté. Por defecto, es 0 y se cuenta desde el ítem en que comienza (ítem 0, como ítem 1).
Retorno:
Objeto con propiedad count con el número de ítems recorridos.
is( ) are( ):Función para identificar tipos de datos.
Identifica todos los tipos de datos que corresponden al primer argumento o a los argumentos de la función (en caso de tipos multiargumentos). La función are es un alias de is. Los tipos de datos primitivos y predefinidos utilizan solo el primer argumento.
Array con los nombres en minúsculas de los tipos de datos identificados.
Ejemplo:
is(/[a-z]/);
_( ).is( ) _( ).are( ):Función para comparar/comprobar tipos de datos.
Devuelve true o false si todos los tipos de datos especificados en los argumentos del método coinciden o no, con: el primer argumento o los argumentos de la función principal (en caso de tipos multiargumentos).
nombre_tipo_datos:Nombre en minúscula del tipo de datos a comparar/comprobar. Soporta múltiples argumentos.
Retorno:
true o false.
Ejemplo:
_(/[a-z]/).is('regexp', 'defined');
_( ).run( ):Función para ejecutar todas las funciones dentro de objetos/arrays.
Ejecuta cualquier función directa o que esté dentro de un objeto/array del primer argumento de la función principal, opcionalmente, con referencia para el contexto this y para argumentos.
type( ):Función para identificar el tipo de datos primitivo.
Identifica el tipo de datos primitivo del primer argumento, no soporta múltiples argumentos.
Sintaxis:
type(cualquier_dato);
Retorno:
Uno de los siguientes string:
null:Tipo de datos nulo.
undefined:Tipo de datos indefinido.
boolean:Tipo de datos booleano.
number:Tipo de datos número.
bigint:Tipo de datos número grande.
string:Tipo de datos texto.
symbol:Tipo de datos símbolo.
function:Tipo de datos función.
object:Tipo de datos objeto.
array:Tipo de datos arreglo.
date:Tipo de datos fecha.
regexp:Tipo de datos expresión regular.
error:Tipo de datos error.
window:Tipo de datos ventana.
nodes:Tipo de datos nodos DOM.
node:Tipo de datos nodo DOM.
Ejemplo:
type(document.querySelector('a'));
assign( ):Función para extender/fusionar objetos de manera personalizada.
Extiende y fusiona de forma recursiva las propiedades de uno o más objetos o arrays fuentes en un objeto destino. Permite configurar niveles de profundidad y modos estrictos mediante el contexto.
destino (arg. 0):Objeto o array receptor que será extendido y modificado con las nuevas propiedades.
objeto_fuente (arg. 1..n):Uno o más objetos o arrays desde los cuales se copiarán las propiedades de forma recursiva.
Opciones de Contexto (vía assign.call):
level:Número que limita la profundidad máxima de recursión permitida.
strict:Si es true, no sobrescribe propiedades que ya existan en el destino.
strictValues:Si es true, no sobrescribe propiedades cuyo valor en el destino ya esté definido.
Retorno:
El objeto o arraydestino modificado.
Ejemplo:
var base = { a: 1, b: { c: 2 } };
var extra = { b: { d: 3 }, e: 4 };
assign(base, extra);
console.log(base);
count( ):Función para contar varios tipos de datos.
Calcula el tamaño, longitud o número de elementos de cualquier tipo de dato. En objetos y arrays realiza un conteo recursivo multinivel por defecto.
Sintaxis:
count(cualquier_dato, opcion);
Argumentos:
cualquier_dato:Elemento a contabilizar (nodo DOM, lista de nodos, string, número, array u objeto).
opcion:Opcional. Si se especifica un valor distinto de null/undefined (como true o 1), desactiva la recursión multinivel en colecciones, contando solo el primer nivel.
Retorno:
Número entero (number) con el total de elementos o longitud contabilizada.
type:Lista de tipos de datos genéricos disponibles.
Catálogo de tipos de datos derivados y evaluadores de rango numérico reconocidos globalmente por las funciones is(), are() y el envoltorio principal _():
native:Tipo de dato que detecta funciones nativas.
collection:Tipo de datos correspondiente a objetos y arrays.
accessible:Tipo de datos correspondiente a objetos, arrays, nodo(s), y window.
applicable:Tipo de datos correspondiente a node y window.
empty:Tipo de datos equivalente al conteo de algo que resulta en 0.
nan:Tipo de dato para valores que no son numéricos ni números.
numerical:Tipo de dato para valores que son numéricos, como representaciones de números en strings.
decimal:Tipo de dato para valores que son numéricos y contiene decimales.
amid:Tipo de dato multiargumento para determinar un número dentro del rango especificado.
char:Tipo de datos equivalente a un número entre 0 y 255.
short:Tipo de datos equivalente a un número entre 0 y 65535.
integer:Tipo de datos equivalente a un número entre 0 y 4294967295.
long:Tipo de datos equivalente a un número entre 0 y 18446744073709551615 (aunque depende del límite Number.MAX_SAFE_INTEGER del intérprete JavaScript [usualmente 9007199254740991], si necesita, use BigInt en su lugar).
signed:Tipo de dato para valores con signo de menor a 0.
signed.char:Tipo de datos equivalente a un número entre -128 y 127.
signed.short:Tipo de datos equivalente a un número entre -32768 y 32767.
signed.integer:Tipo de datos equivalente a un número entre -2147483648 y 2147483647.
signed.long:Tipo de datos equivalente a un número entre -9223372036854775808 y 9223372036854775807 (aunque depende del límite Number.MAX_SAFE_INTEGER del intérprete JavaScript [usualmente 9007199254740991], si necesita, use BigInt en su lugar).
finite:Tipo de dato para valores que son números y son finitos.
infinite:Tipo de dato para valores que son números y no son finitos.
defined:Tipo de datos para valores que no son equivalentes a null, es decir, no son: false, undefined, 0, ni string vacío.
valid:Tipo de datos para valores que son definidos y numéricos, o un string con longitud.
invalid:Tipo de datos para valores contrarios al tipo de datos valid.
type[ ]:Constructor de tipos de datos personalizados.
Permite registrar nuevos tipos de datos personalizados dentro de la estructura de Emerald. Al definir una función de reconocimiento (recognition), el nuevo tipo es integrado automáticamente en el motor de inferencia de _() e is().
Sintaxis:
type.nuevo_tipo_dato = {
prepare: function(){ /* Inicialización única */ },
before: function(){ /* Gancho previo a cada método */ },
fn: { /* Métodos autoasignables */ },
recognition: function(a, b, c){
return a == 1 && b == 2 && c == 3;
}
};
Propiedades del Objeto de Definición:
recognition:Función evaluadora que recibe los argumentos pasados a _() o is() y devuelve true si coinciden con el tipo.
fn:Objeto con métodos que se adjuntarán automáticamente a la instancia de _() cuando el tipo coincida.
before:Opcional. Función o colección de funciones que se ejecutan antes de cualquier método de fn.
prepare:Opcional. Función ejecutada una sola vez durante la instanciación de _() para preparar el contexto.
type[ ].before[ ] type[ ].fn[ ]:Funciones autoasignables para tipos de datos.
Permite asociar nuevos métodos ejecutables (fn) o interceptores previos (before) a tipos de datos existentes o personalizados. Estos métodos se vuelven accesibles mediante encadenamiento en _().
Sintaxis:
type.nombre_tipo.fn.metodo_nuevo = function(arg1, /* ..., */ argN){
// this.data: contiene el primer argumento
// this.args: contiene todos los argumentos
};
Argumentos y Contexto (this):
this.data:Referencia al dato principal (primer argumento) envuelto en _().
this.args:Lista completa con todos los argumentos pasados a _().
this.type:Nombre del tipo primitivo detectado.
this.count:Conteo inicial del dato principal.
Retorno:
El valor que retorne la función asignada, o el propio contexto para encadenamiento.
Encola una función para que sea ejecutada de forma segura una vez que el árbol DOM del documento esté completamente cargado y parseado (evento DOMContentLoaded).
Sintaxis:
$(function(){ /* Código que interactúa con el DOM */ });
Argumentos:
callback (arg. 0):Función que se ejecutará automáticamente al completarse la carga del DOM.
Retorno:
Indefinido (undefined).
Ejemplo:
$(function(){
console.log('El DOM está listo para ser manipulado por Emerald.');
});
_( ).on( ):Función para vincular un evento y un manejador con un nodo del DOM.
Vincula un manejador de eventos a un elemento del DOM o al objeto window. Admite identificadores únicos mediante puntos para su posterior remoción selectiva.
Sintaxis:
_(nodo_dom).on(ID_EVENTO, FUNCION);
Argumentos:
ID_EVENTO:Nombre del evento estándar (ej. 'click', 'mouseover') o con identificador personalizado separado por punto (ej. 'click.miBoton').
FUNCION:Callback que se ejecutará cuando ocurra el evento, recibiendo el objeto event como argumento.
Retorno:
Indefinido (undefined).
Ejemplo:
_(document.querySelector('button')).on('click.log', function(event){
console.log('Botón clickeado en coordenadas:', event.clientX, event.clientY);
});
_( ).off( ):Función para desvincular eventos y manejadores de un nodo del DOM.
Elimina uno, varios o todos los manejadores de eventos vinculados previamente mediante .on() a un elemento del DOM.
Sintaxis:
_(nodo_dom).off(); // Elimina todos los eventos del nodo
_(nodo_dom).off(ID_EVENTO); // Elimina por tipo o identificador
Argumentos:
ID_EVENTO:Opcional. Cadena con el nombre del evento (ej. 'click'), identificador de sub-evento (ej. '.miBoton') o combinación exacta (ej. 'click.miBoton'). Si se omite, elimina todos los eventos del nodo.
Retorno:
Indefinido (undefined).
Ejemplo:
var btn = document.querySelector('button');
_(btn).off('click.log');
_('>'):Tipo de dato para seleccionar nodos del DOM.
Selector de elementos integrado que utiliza querySelectorAll internamente. Se activa automáticamente cuando el primer argumento es una cadena que comienza con el caracter >.
Sintaxis:
_('>selector_css', contexto_opcional);
Argumentos:
selector_css:Cadena de texto con selector CSS estándar antecedido por el caracter > (ej. '>div.card', '>#logo', '>a[href]').
contexto_opcional:Opcional. Elemento del DOM que actuará como raíz de búsqueda (por defecto es document).
Retorno:
Objeto Emerald con propiedad found (NodeList de elementos encontrados) y propiedad count con el total de nodos.
Ejemplo:
var enlaces = _('>nav a');
console.log('Enlaces encontrados:', enlaces.count);
_('>').on( ):Función para vincular eventos y manejadores con nodos seleccionados del DOM.
Vincula un manejador de eventos a todos los nodos coincidentes con la consulta del selector CSS.
Sintaxis:
_('>selector_css').on(ID_EVENTO, FUNCION);
Argumentos:
ID_EVENTO:Nombre del evento nativo o con identificador (ej. 'click', 'mouseenter.tooltip').
FUNCION:Callback que se ejecutará al activarse el evento en cualquiera de los elementos seleccionados.