Este es el manual de la sección javascript de JuncoCMS.
JuncoCMS tiene su propio framework de javascript. Esta decisión de diseño no tiene un motivo en particular, sino que ha sido consecuencia de varios años de desarrollo.
En realidad, después de varias "mudanzas" de frameworks, se optó por no tener un framework en sí, sino un conjunto de librerías, lo más independientes unas de otras. Como podrán imaginar, un objetivo así, dificilmente puede ser cumplido.
Las librerías de javascript se encuentran en la ruta cms/scripts/, todas organizadas en carpetas con el nombre de la extensión a la que pertenecen.
El directorio, puede verse similar a:

Permite agregar funcionalidades a la plantilla de Backend. Internamente, utiliza un objeto Controls.
Backend.attach('hello', (el) => { '...' });
De esta manera, al cargar la plantilla backend, buscará todos los elementos con el atributo data-tpl="hello" y, por cada uno de ellos, ejecutará la función callbak, pasándolos como parámetro.
Agrega una control.
Backend.attach( name, fn )
Un nombre único que identifique al control.
La función a ejecutar cuando encuentra un elemento.
Agrega varios controles a la vez.
Backend.attachAll( obj )
Un objeto con los pares name: fn.
Lo primero, es crear un objeto Backlist. El único parámetro será, opcionalmente, el identificador de la lista.
const _backlist = Backlist(ID);
_backlist
.url(fn)
.data({key:value})
.allowHistory()
.load();
Incluye una función para manejar internamente el constructor de urls (opcional).
Datos que serán incluidos en todas las consultas que realice la lista (opcional).
Agrega un control de "back bottom" a través del hash de la página (opcional).
Carga la lista.
Los controles permiten realizar acciones sobre la lista, sobre todo, consultas asincrónicas.
El control esta definido por una clave. El valor puede ser una función, sin embargo, se logra el mayor provecho si es un objeto.
_backlist
.url($U)
.controls({
add: {
modalOptions: {...},
},
edit: {
url: '...',
numRows: '1',
modalOptions: {...},
},
status: fn
})
.load();
Basicamente, el control recibe las opciones del objeto JsRequest.
Además, tiene las siguientes opciones propias:
| Nombre | Tipo | Predeterminado | Descripción |
|---|---|---|---|
| numRows | string | '+' | Indica el número de filas necesarias para que esté activo. Opciones: '0' = 0, '1' = 1, '+' = 1 o más, '?' = 0 o 1, '*' = 0 o más. |
| onlyRows | string|true | - | Permite ejecutar la tarea, solo si estan seleccionadas las filas que contienen una etiqueta con el nombre que se pasa como parámetro. Por ejemplo, si tenemos un administrador de archivos y queremos crear la opción de descomprimir o editar archivos, estas estarán disponibles solo si se seleccionan, respectivamente, archivos comprimidos o editables. |
| onSubmit | function | null | Agrega una comprobación, en caso de retornar false el control no realiza se detiene. |
Nota: En caso de no declarar a url, esta se genera internamente utilizando la clave.
Genera cuadros de diálogos.
Modal({
size: 'small',
title: 'Modal test',
content: 'Hello world!',
buttons:[{type:'close',caption:'Close'}]
});
| Nombre | Tipo | Predeterminado | Descripción |
|---|---|---|---|
| type | string | 'default' | Cambia la vista. |
| size | string | 'small' | Cambia el tamaño. Valores: 'x-large', 'large', 'medium', 'small' |
| title | string | ||
| content | string | ||
| footer_html | string | Agrega html al pié del modal. | |
| form | array | undefined | Crea un formulario e incluye sólo elementos ocultos. |
| buttons | array | undefined | Agrega botones. |
| target | object | document.dody | Elemento donde se inserta el modal. |
| overlay | boolean | true | El modal se crea sobre una capa que cubre la página principal. |
| draggagle | boolean | false | El modal puede arrastrarse. |
| destroy | boolean | true | Al cerrar el modal se destruye. |
| onLoad | function | null | Ejecuta la función al cargar el modal. |
| onClose | function | null | Ejecuta la función al cerrar el modal. |
JsRequest.modal({
url: 'media/docs/modal.json',
modalOptions: {
'size': 'large'
}
});En esta extensión se encuentra lo más parecido a un framewok javascript.
En realidad, se trata de un conjunto de librerías, más o menos independientes. Esta decisión se ha tomado a partir de los cambios que se han producido en el javascript, y que han ido quitando relevancia a muchos framework conocidos.
El archivo principal, contiene algunas funciones de uso común y polyfills. Aunque cada vez son menos.
Agrega eventos javascript a una página html.
Crea un elemento del DOM.
let el = JsElement('div.class-name#id-name', { text: 'Hello' });
En el ejemplo, creará un div, le agregará una clase y un identificador. Por último, le colocará un texto de contenido.
Además de las propiedades y atributos comunes, es posible utilizar:
| Atributos | Descripción |
|---|---|
| className | Agrega el atributo class. |
| text | Agrega un texto a través de textContent. |
| html | Agrega un html a través de innerHTML. |
| styles | Agrega valores al atributo style. |
| events | Agrega eventos. |
Manejador javascript de formularios.
Basicamente, es una implementación de varias librerías javascript del sistema: JsRequest, JsControl, JsFelem, JsSpinner, JsNotify.
Lo más sencillo, es pasar una cadena con la acción del formulario y una función de retorno. El formulario se enviará de forma asincrónica.
JsForm('#my-form').request('the_url', function() { alert('ok') });
Gestor javascript de consultas sincrónicas y asincrónicas.
Consulta asincrónica, envia los datos de un formulario, devuelve un texto que actualiza en el objeto DOM señalado.
JsRequest.text({
url: 'the_url',
data: '#my-form',
update: '#inner-html'
})
Consulta asincrónica, envia los datos, devuelve un json, ejecuta una función de retorno.
JsRequest.json({
url: 'the_url',
data: {'key1':value1,'key2':value2},
onSuccess: function(json) { console.log(json) }
})
Consulta sincrónica, envia los datos del formulario.
JsRequest.post({
url: 'the_url',
data: '#my-form'
})
Consulta sincrónica, envia el valor del elemento de formulario seleccionado.
JsRequest.get({
url: 'the_url',
data: '#my-form-element'
})
El parámetro «data» puede ser un formulario; un elemento de formulario; una cadena con el selector de DOM; un objeto con los pares valor, clave; un array con varias de las opciones anteriores; una función que devuelve cualquiera de las opciones anteriores y se ejecuta cuando se envía la consulta.
Crea los clásicos tooltip personalizados.
Tooltip on left | Tooltip on top | Tooltip on bottom | Tooltip on right
<a title="Tooltip" data-tooltip="left">Tooltip on left</a> |
<a title="Tooltip" data-tooltip="">Tooltip on top</a> |
<a title="Tooltip" data-tooltip="bottom">Tooltip on bottom</a> |
<a title="Tooltip" data-tooltip="right">Tooltip on right</a>