npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

lancer-js

v0.3.0

Published

A jQuery based tool to make your life easier!

Downloads

3

Readme

Lancer

Build Status Coverage Status

Es una pequeña librería basada en jQuery que encapsula funcionalidades inspiradas en frameworks como React o AngularJS con el objetivo de facilitar actividades comunes en el desarrollo de interfaces.

¿Qué hace?

La base de esta librería son los reactores: Objetos encapsulan las siguientes funcionalidades.

1) Comunicación mediante eventos personalizados

Los reactores se comunican entre sí suscribiéndose a eventos. A diferencia de los eventos del DOM estos se definen con un nombre y pueden acompañarse por cualquier argumento. Los eventos pueden gatillarse desde cualquier lugar del código a través de un método provisto por la librería.

2) Soporte de plantillas y actualización inteligente

Los reactores pueden iniciarse con una plantilla que se traducirá en una variable jQuery que se actualizará automáticamente ante cualquier cambio en las propiedades del reactor.

3) Manejo simplificado elementos del DOM

Los reactores tienen una representación en el Dom que puede manipularse como variable jQuery o DOM Element. Esta representación puede ser eliminada, recreada o actualizada a través del reactor.

4) Componentes

Es posible crear una clase asociándole una plantilla, propiedades y handlers que serán usados por defecto en los reactores instanciados a partir de ella.

5) Flujo de datos unidireccional

A través de un sincronizador que actúa como almacén de datos para un grupo de reactores los cambios fluyen desde sus propiedades a las de los reactores actualizándolas junto a su representación en el DOM.

Instalación

Descarga la última versión de Lancer, recuerda que se basa en jQuery por lo que se necesita incluir esta librería primero para su funcionamiento. Es compatible con las versiones 1.11.* o superior de jQuery.

<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script src="lance.js"></script>

También puedes incluirla en tu proyecto Node utilizando npm.

npm install lancer-js

Para que jQuery funcione en Node se requiere el objeto window con la propiedad document. Este objeto no existe nativamente en Node sin embargo puedes simularlo a través de herramientas como jsdom.

require("jsdom").env("", function(err, window) {
    if (err) {
        console.error(err);
        return;
    }
 
    var $ = require("jquery")(window);
});

Hola Mundo!

El primer paso será crear un nuevo reactor con una plantilla y un literal con propiedades.

var helloWorld = lance.r( '<div>{text}</div>', { text: 'Hello world!' } );

El reactor ofrece una serie de métodos para manipular su representación en el DOM. El primero de ellos es get$ que permite recuperar su representación como variable jQuery generada a partir de la plantilla y el literal.

helloWorld.get$();

$('body').append(helloWorld.get$()); 

Como en el ejemplo anterior puede utilizarse para incluir la representación en el DOM.

<body>
    <div>Hello world!</div>
</body>

Documentación

Reactor

r(tmpl, props, handlers)

Instancia un nuevo reactor que opcionalmente puede recibir una plantilla para generar una representación en el DOM. También puede inicializarse con un mapa de propiedades que se usarán para la construcción de la representación y una colección de handlers.

Parámetros

| Nombre | Tipo | Descripción | | ---- | ---- | ----------- | | [tmpl] | string | Plantilla para crear la representación en el DOM del reactor. | | [props] | Object | Mapa con la definición de propiedades. | | [handlers] | Object | Mapa con la colección de eventos y sus handlers. |

Ejemplo
var Reactor = lance.r(
    '<div>{text}</div>', 
    { text: Hello World! }, 
    { 'userClick': [ 
        function() { 
            console.log('Hello!') 
        } 
    ] }
);
Retorna
  • function Constructor del Reactor.

Manipulación del DOM

Estos métodos solo estarán disponibles en el Reactor si se ha inicializado con una plantilla.

get$()

Retorna el objeto jQuery del reactor.

Retorna
  • Object Objeto jQuery que representa al reactor.

getHtml()

Retorna el Element Object asociado al objeto jQuery contenido en el reactor.

Retorna
  • Object Element Object asociado al reactor.

render(props)

A partir de un template y un grupo de propiedades (props) genera un objeto jQuery que representa el elemento descrito en la plantilla.

Parámetros

| Nombre | Tipo | Descripción | | ---- | ---- | ----------- | | props | Object | Mapa con las nuevas propiedades. |

Retorna
  • Object Objeto jQuery que representa al reactor actualizado.

set(props)

Asigna nuevos valores a las props del reactor y luego redibuja su representación en el dom actualizando los valores del template con los nuevos datos.

Parámetros

| Name | Type | Description | | ---- | ---- | ----------- | | props | Object | Objeto literal usado como mapa para asignar nuevas props. |

Ejemplos
myReactor.set({propname: value});
Retorna
  • Object Propiedades actualizadas.

remove()

Elimina la representación internamente y del DOM.

Manipulación de eventos

listen(event, handler)

Registra un handler a dispararse ante un evento en particular a través del método catch. También suscribre al reactor a ese evento en el bus.

Parámetros

| Nombre | Tipo | Descripción | | ---- | ---- | ----------- | | event | string | Evento en el que se registrará el handler. | | handler | function | Función a ejecutarse ante el evento. |

forget(event)

Método que elimina todos los handlers asociados a un evento y que desinscribe al reactor de ese evento en el bus.

Parameters

| Nombre | Tipo | Descripción | | ---- | ---- | ----------- | | event | string | Nombre bajo el que se registró el evento |

Componentes

rClass(tmpl, props, handlers)

Define al constructor para una nueva clase que a partir de una plantilla, propiedades y handlers instanciará a un nuevo Reactor que las usará como base permitiendo la creación de componentes.

Parámetros

| Nombre | Tipo | Descripción | | ---- | ---- | ----------- | | [tmpl] | string | Plantilla para crear la representación en el DOM del reactor. | | [props] | Object | Mapa con la definición de propiedades. | | [handlers] | Object | Mapa con la colección de eventos y sus handlers. |

Ejemplo
var DivReactorClass = lance.rClass(
    '<div>{text}</div>', 
    { text: Hello World! }, 
    { 'userClick': [ 
        function() { 
            console.log('Hello!') 
        } 
    ] }
);

var divInstance = new DivReactorClass();

Ejecución de eventos

fire(event, args)

Comunica al bus un evento y los argumentos que podrían usar los handlers de los reactores.

Parámetros

| Nombre | Tipo | Descripción | | ---- | ---- | ----------- | | event | string | Evento a transmitir a través del bus. | | args | array | Argumentos para los handlers. |

Sincronizador

rs([props, reactors])

Genera un sincronizador encargado de ejecutar el método 'set' en cada uno de sus reactores cada vez que reciba una actualización sobre sus propiedades.

Parámetros

| Nombre | Tipo | Descripción | | | ---- | ---- | ----------- | -------- | | props | Object | Propiedades con las que se inicializa el sincronizador. | Optional | | reactors | array | Colección de reactores con que se inicia el sincronizador. | Optional |

Retorna
  • Object Sincronizador.

balance(props)

Determina si debe actualizar o no los reactores. En tal caso ejecuta el método 'set' en cada uno de ellos.

Parámetros

| Nombre | Tipo | Descripción | | ---- | ---- | ----------- | | props | Object | Literal con las nuevas propiedades. |

Retorna
  • Object Propiedades actualizadas del sincronizador.

inc(reactor)

Agrega un reactor al dominio del sincronizador. No se puede incluir dos veces al mismo reactor. Una vez incluido es inmediatamente sincronizado.

Parámetros

| Nombre | Tipo | Descripción | | ---- | ---- | ----------- | | reactor | any | - Reactor a incluir. |

Retorna
  • Object Sincronizador.

exc(reactor)

Quita un reactor del dominio del sincronizador.

Parámetros

| Nombre | Tipo | Descripción | | ---- | ---- | ----------- | | reactor | Object | Reactor a excluir. |

Retorna
  • Object Sincronizador.

Demo

Puedes encontrar una demo de la librería Aquí

Licencia

Copyright (C) 2017 Javier Cáceres M.

Este programa es software libre: puede redistribuirlo y/o modificarlo bajo los términos de la Licencia General Pública de GNU publicada por la Free Software Foundation, ya sea la versión 3 de la Licencia, o (a su elección) cualquier versión posterior.

Este programa se distribuye con la esperanza de que sea útil pero SIN NINGUNA GARANTÍA; incluso sin la garantía implícita de MERCANTIBILIDAD o CALIFICADA PARA UN PROPÓSITO EN PARTICULAR. Vea la Licencia General Pública de GNU para más detalles en

http://www.gnu.org/licenses/