LungoJS es un framework HTML5 pensado en los desarrolladores a los que también les gusta el diseño, desarrollado para que crear aplicaciones compatibles con todos los dispositivos.
-
Apps HTML5 optimizadas: Soporta los open web standards como HMTL5, CSS3 y JavaScript. Proporciona un entorno consistente basado en navegador para cualquier dispositivo movil, TVs y aplicaciones de escritorio.
-
Proyecto Open Source: Cada nueva linea de código en Lungo es bienvenida, esperamos que cualquier desarrollador con mente intrépida nos ayude a mejorar día a día Lungo.
-
Una poderos API JavaScript: Existen muchas maneras de desarrollar un app pero no todas ellas de manera optimizada. Lungo te ofrece una API robusta con la que puedes tener completo control de todo lo que suceda en tu App.
-
Soporte multiplataforma: Es sabido que desarrollar apps para cada plataforma tiene un coste alto y mas aún si se tienen en cuenta el desarrollo para tablets y SmartTVs. Lungo se ajusta a todos ellos crean una interfaz de usuario única para todos ellos.
Current version: 2.2.0
La idea de Lungo surgió en el año 2010 cuando Javi Jiménez Villar (soyjavi) se dio cuenta de que los frameworks existentes en aquella época no eran muy versátiles y no hacían uso de las principales funcionalidades de HMTL5.
Si esta documentación se te queda corta siempre te puedes suscribir a la comunidad de Lungo para compartir experiencias y conocimientos. En Inglés o Castellano, tu decides.
Este es un proyecto opensource, asi que sientete libre de hacer un fork del proyecto para ayudarnos a mejorar Lungo. Todo el código fuente está escrito en CoffeScript y Stylus, como es código limpio podrás modificarlo de manera sencilla y realizar tus aportes.
https://github.com/tapquo/lungo.js
Lungo esta bajo una licencia GPLv3 para mas información LICENSE.
Por favor no tengas ninguna duda en contactarnos si crees que puedes realizar mejoras sobre la API. Si piensas que deberíamos dar soporte a alguna nueva funcionalidad o si encuentras un bug, utiliza GitHub issues](https://github.com/tapquo/lungo.js/issues). Sientete libre de mejorar esta documentación y mandanos tus pull requests con tus mejoras.
Para contactar con nosotros o con otros desarrolladores acerca de la API de Lungo suscribete a nuestra lista de correo.
El objetivo es crear una estructura semántica en todo el proyecto, desde el lenguaje de marcado HTML, pasando por las clases CSS bien organizadas y acabando con la API JavaScript. Lungo ofrece una gran sencillez a la hora de hacer un prototipo rápido de tu aplicación, no te será necesario escribir ninguna línea de JavaScript para visualizar como debería comportarse tu aplicación. En esta documentación aprenderemos cuales son los elementos semánticos que utiliza Lungo y como se puede crear una aplicación unicamente con HTML. Así que no le demos mas vueltas y comencemos!
Estas son las dependencias de tu aplicación Lungo, como mínimo deberia contener las siguientes:
html
<link rel="stylesheet" href="components/lungo.brownie/lungo.css">
<link rel="stylesheet" href="components/lungo.icon/lungo.icon.css">
<link rel="stylesheet" href="components/lungo.brownie/lungo.theme.css">
<script src="components/quojs/quo.js"></script>
<script src="components/lungo/lungo.js"></script>
<section>
es el contenedor principal de la interfaz de usuario en tu app y <article>
se debe colocar dentro de tu section,cada section y article deberían tener un ID único.
<section id="main">
<article id="main-article">
Your content
</article>
</section>
Recuerda:La función JavaScript para inicializar el entorno de Lungo:
Lungo.init({});
Para que te sea mas sencillo crear y modificar tu app puedes crear las secciones en ficheros htmls separados y cargarlos de manerá síncrona, dejando tu fichero html principal mucho mas limpio y organizando mejor tu código.
//Cargar recurso al inicio
Lungo.init({
name: 'example',
resources: ['section_to_load.html']
});
Solo existe una manera de cargar los recursos de manera asíncrona, simplemente añade a la etiqueta <a>
el atributo data-async con el enlace a tu sección.
<section id="loader" data-transition="">
<article id="art1" class="active">
<a href="#main" data-router="section" data-async="section_to_load.html">
Go to section
</a>
</article>
</section>
Lungo utiliza el lenguaje semántico introducido en HMTL5, así que puedes añadir estos elementos utilizando las etiquetas semánticas.
Una <section>
es una vista donde se desplegará el contenido y existen muchos subelementos como <header>
, <footer>
y <article>
.
<section id="main">
<article id="main-article" class="active">
{{CONTENT}}
</article>
</section>
El contenido de una <section>
en particular esta estructurado por los <article>
. Una <section>
puede contener tantos <article>
como quieras. El artículo que tiene preferencia para visualizarse es el que tenga la `class="active" como atributo.
<section id="main_section">
<header data-title="example"></header>
<article id="main-article" class="active">
{{CONTENT}}
</article>
</section>
Cada <section>
puede contener un <header>
donde se visualizará el título de la sección en donde estés. También puedes añadirle si quieres botones para la navegación, que te muevan de una sección a otra, vuelvan a la sección anterior, cambien de artículo o simplemente abran el menu aside.
<section id="main_section">
<header data-title="example"></header>
<article id="main-article" class="active">
{{CONTENT}}
</article>
</section>
De la misma manera cada <section>
puede contener un <footer>
y añadirle botones para navegar entre artículos, secciones o incluso menus laterales (aside).
<section id="main_section">
<article id="main" class="active">
{{CONTENT}}
</article>
<footer>
<nav>
<a href="#" data-icon="menu" class="active"></a>
<a href="#" data-icon="share"></a>
<a href="#" data-icon="user"></a>
<a href="#" data-icon="users"></a>
</nav>
</footer>
</section>
El elemento <aside>
nos proporciona una area que se despliega de los laterales que podrá desplegarse o no en función del dispositivo en el que estemos. Por ejemplo un menu lateral que por defecto este oculto en móviles pero visible en tablets. La estructura es muy similar a la sección. Podemos crear un enlace que referencie un <aside>
con una id en particular utilizando el sistea de navegación de Lungo. Utilizaremos el atributo data-router (El cual veremos mas adelante). También podemos definirle la posición utilizando estilos mediante las clases. Por defecto el aside estará a la izquierda de la pantalla.
<aside id="features">
<header data-title="Options"></header>
<article class="active">
{{CONTENT}}
</article>
</aside>
En tu sección si quieres que se visualice el aside automáticamente necesitas enlazar tu aside con el atributo data-aside
, y puedes mostrarlo u ocultarlo con el atributo data-view-aside
.
<section id="main_section" data-aside="features">
<header data-title="Aside">
<nav>
<button data-view-aside="features" data-icon="menu"></button>
</nav>
</header>
<article id="main-article" class="active indented">
{{CONTENT}}
</article>
</section>
La navegación de Lungo se realiza de una manera semántica, se utiliza el elemento <a>
o <button>
y el atributo "view-*" para indicarle a Lungo a que <section>
, <article>
o <aside>
quieres ir.
El atributo data-view-*
se coloca en los <a>
o <button>
para indicar a que tipo de elemento queremos navegar (<section>
, <article>
o <aside>
) o si usamos el atributo href se debe usar un hashbang(#) mas el id del elemento destino. Lungo utiliza el href para ir dejando trazada la navegación de tu aplicación como si de una miga de pan se tratase.
<section id="main">
<article id="article_1" class="active">
<button class="button" data-view-article="article_2" data-icon="forward">To article_2</button>
</article>
<article id="article_2">
<button class="button" data-view-article="article_1" data-icon="home" data-label="To article_1"></button>
</article>
</section>
Como se ha mencionado anteriormente la Navegación de Lungo funciona como si se tratase de un rastro de migas de pan, por lo que la navegación hacia atrás entre secciones se realiza de manera sencilla utilizando data-back. Puedes poner un botón en tu header con data-back o utilizar en <a>
o <button>
un data-router="section" enlazandolo hacia detrás con href="#back".
<section id="main">
<article id="main_1" class="active">{{CONTENT}}</article>
<article id="main_2">{{CONTENT}}</article>
</section>
<section id="second">
<header data-back="home"></header>
<article id="second_1" class="active">
Same as header:
<button data-view-section="back" data-icon="left" data-label="Return to previous section"></button>
</article>
</section>
Para crear estructuras de navegación con botones ya sea en un header o en un footer se ha de usar el elemento nav. En el header la posición del elemento nav dependera de la clase que se le aplique. left
para la izquierda y right
para la derecha.
<section id="main">
<header data-title="<nav> example">
<nav class="on-left">
<button data-view-article="article_1" data-label="Home"></button>
</nav>
<nav class="on-right">
<button data-view-section="second" data-label="Section"></button>
</nav>
</header>
<article id="article_1" class="active">{{CONTENT}}</article>
<article id="article_2">{{OTHER_CONTENT}}</article>
<footer>
<nav>
<a href="#" data-view-article="article_1" data-icon="home"></a>
<a href="#" data-view-article="article_2" data-icon="user"></a>
<a href="#" data-view-section="second" data-icon="right"></a>
</nav>
</footer>
</section>
<section id="second">
<header data-back="home" data-title="example"></header>
<article id="second_1">{{CONTENT}}</article>
</section>
Lungo te da la capacidad de tener un menu especial en la parte superior de un interfaz. Para ello tienes que extender el elemento header utilizando class="extended" y crear dentro de el un elemento de navegacion nav con class="groupbar".
<section id="main">
<header data-title="groupbar" class="extended"></header>
<nav data-control="groupbar">
<a href="#" data-view-article="article_1" class="active">Art-1</a>
<a href="#" data-view-article="article_2">Art-2</a>
</nav>
<article id="article_1" class="active">{{CONTENT}}</article>
<article id="article_2">{{OTHER_CONTENT}}</article>
</section>
Además de los elementos <nav>
y
groupbar existe otra manera de que el usuario seleccione una nueva vista de tu aplicación. Desde la version 2.2 Brownie está disponible el control de menu y se utiliza poniendo el atributo
data-view-menu
:
<section id="menu" data-transition="slide">
<header data-title="data-control=menu">
<nav>
<a href="#" data-view-menu="options" data-icon="menu"></a>
</nav>
<nav class="on-right">
<a href="#" data-view-menu="options-icons" data-icon="grid"></a>
</nav>
</header>
<nav id="options" data-control="menu">
<a href="#" data-view-article="home-menu" data-icon="menu">Home</a>
<a href="#" data-view-article="explore-menu" data-icon="globe">Explore</a>
<a href="#" data-view-article="activity-menu" data-icon="comments">Activity</a>
<a href="#" data-view-article="profile-menu" data-icon="user">Profile</a>
</nav>
</section>
En el caso de que quieras dar prioridad a los iconos simplemente tienes que aplicar la clase icons
:
<nav id="options-icons" data-control="menu" class="icons">
…
</nav>
Para que se actualice automáticamente el título de una sección mediante la navegación tan solo hay que usar el atributo data-title
en tu elemento de navegación
<section id="main">
<header data-title="Default title"></header>
<article id="first" class="active">
<button data-view-article="second" data-title="Second Article"></button>
</article>
<article id="second">
<button data-view-article="first" data-title="First Article"></button>
</article>
</section>
Puedes mostrar elementos nav cuando un artículo en particular sea visible con el atributo data-article:
<section id="main">
<header data-title="Title of section">
<nav class="on-right">
<button data-article="second" data-view-article="first" data-icon="left"></button>
<button data-article="first" data-view-article="second" data-icon="right"></button>
</nav>
</header>
<article id="first" class="active">{{CONTENT}}</article>
<article id="second">{{OTHER_CONTENT}}</article>
</section>
Los formularios siempre han sido algo tedioso de manejar en los proyectos web, Lungo te ayuda a crear una base para los formularios que sea uniforme y que proporcione una experiencia de usuario similar en los distintos navegadores. Todos los controles desde los input
(todas sus variantes) a los button
están perfectamente adaptados para ser usados con dispositivos táctiles. Tan solo tienes que usar el elemento form
o la clase form
:
<div class="form">
<fieldset>
<label>Input</label>
<input type="text" placeholder="value">
<label>Input styled</label>
<input type="text" placeholder="value on right" class="text align_right error">
<label>Select</label>
<label class="select">
<select>
<option value="1">HTML5</option>
<option value="2">CSS3</option>
<option value="3">JavaScript</option>
</select>
</label>
<label>Input date</label>
<input type="date" class="align_right" placeholder="Select finish" value="10/04/1980"/>
<label class="anchor">Example of touch checkbox</label>
<input type="checkbox" class="inline right" />
</fieldset>
</div>
¿Es posible imaginar una app que no tenga listas? Nosotros no podemos imaginar tal cosa, por lo que Lungo ofrece gran variedad de componentes para crear listas que se ajusten a tus gustos y necesidades. Siempre teniendo en cuenta que todo empieza con un elemento <ul>
seguido por un elemento <li>
:
<article id="example" class="list">
<ul>
<li>
<strong>Title</strong>
<small>Description</small>
</li>
...
</ul>
</article>
Nuestro elemento <li>
puede ser construido de varias maneras, y hacerlo todo lo complejo que necesites, aquí tienes un ejemplo de un listado mas completo:
<li class="thumb big">
<img src="http://cdn.tapquo.com/lungo/icon-144.png" />
<div>
<div class="on-right text tiny">lorem ipsum</div>
<strong>Title</strong>
<span class="text tiny opacity">lorem ipsum</span>
<small>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Neque, aliquam, nisi commodi blanditiis.
</small>
</div>
</li>
Si quieres ver mas ejemplos de todos los posibles estilos que aplicar a una lista visita nuestra app de ejemplo Kitchen-Sink
Lungo dispone de varios métodos que se usan internamente en su motor. Aquí los teneís por si deseís incluir parte de su funcionalidad en vuestra aplicación.
Sistema de consola para desplegar mensajes cuando estas debuggeando. Parameters (Parámetros)
number: Severity based in (1)Log, (2)Warn, (>2)Error
string: Message to show in the console
Ejemplo
Lungo.Core.log(1, "Launched event");
Lungo.Core.log(2, "Warning!!");
Lungo.Core.log(3, "Error!!!!");
Ejecuta los callback en función de los paramentros introducidos. Parameters (Parámetros)
function: callback to execute
Ejemplo
var myFunc = function(){
//Do something
};
var myFunc2 = function(){
//Do something
};
Lungo.Core.execute(myFunc, myFunc2);
Crea una nueva función que cuando se la llama, en sí llama a esta función en el contexto del valor proporcionado, con la secuencia dada de argumentos.
Parameters (Parámetros)
object: object that 'this' can refer in the new function.
function: A function object.
Este método devuelve la funcion que realizará la acción sobre el objeto.
Ejemplo
var example = "This is ";
var addText = function(textToAdd){
text = this;
for(var i = 0, len = textToAdd.length; i < len; i++){
text += " " + textToAdd[i];
}
return text;
};
var text = ["an", "example"];
var finalText = Lungo.Core.bind(example, addText)(text);
//Result: "This is an example"
Copia cuantos objetos reciba por parámetro y los mezcla todos dentro de un nuevo objetos, la implementación es muy sencilla. simplemente itera sobre los argumentos del objeto y copia cada propiedad de cada objeto recibido por parámetro.
Parameters (Parámetros)
object: arguments to mix them all into a new object.
object: arguments to mix them all into a new object.
Este método devuelve el objeto con el mix.
Ejemplo
var CONFIG_BASE = {
name: 'lungo_db',
version: '1.0'
};
var CONFIG = {
version: '1.1';
}
var finalConfig = lng.Core.mix(CONFIG_BASE, CONFIG);
/*
Result:
{
name: 'lungo_db',
version: '1.1'
}
*/
Todos los objetos que descienden de Object heredan el método hasOwnProperty. Este método se usa para determinar si un objeto tiene una propiedad directa específica.
Parameters (Parámetros)
object: object to test for a property's existence inside itself.
string: property the name of the property to test.
Este método devuelve un boolean indicando si la propiedad existe o no.
Ejemplo
var car = {wheels:4,doors:true};
Lungo.Core.isOwnProperty(car,"wheels"); //Result: true
Lungo.Core.isOwnProperty(car,"wings"); //Result: false
Determina la [[Class]] interna JavaScript de un objeto.
Parameters (Parámetros)
object: object to get the real type of itself.
Este método devuelve un string con la [[Class]] interna de JavaScript
Ejemplo
var name = "Lungo";
Lungo.Core.toType(name); //Result: "string"
Transforma un objeto del tipo array en un objeto array de JavaScript.
Parameters (Parámetros)
object: Any object to turn into a native Array.
Este método devuelve el objeto convertido en un array plano.
Ejemplo
var execute = function() {
var args = lng.Core.toArray(arguments);
}
Determina si el entorno en el que se está ejecutando es móvil o no. Este método devuelve un objeto que ha sido mezclado con la función mix.
Ejemplo
Lungo.Core.isMobile();
Devuelve la información del entorno en el que se está ejecutando.
Ejemplo
Lungo.Core.environment();
Ordena objetos en función de sus propiedades.
Parameters (Parámetros)
list: List of objects.
string: Name of the property.
string: Type of order: asc or desc.
Este método devuelve una lista ordenada de objetos ordenada por una propiedad.
Ejemplo
var list = [
{name: 'Lungo', twitter: 'lungojs'},
{name: 'Quojs', twitter: 'quojs'},
];
var ordered_list = lng.Core.orderByProperty(list, 'name', 'asc');
Busca si existe algún objeto con la propiedad especificada por parámetro.
Parameters (Parámetros)
list: The list with objects.
string: Name of the property.
Este método devuelve una instancia del objeto si se a encontrado null si no.
Ejemplo
var list = [
{name: 'Lungo', twitter: 'lungojs'},
{name: 'Quojs', twitter: 'quojs'},
];
var user = lng.Core.findByProperty(list, 'name', 'Lungo');
Lungo implementa su propia caché. Esta caché se encarga de almacenar el valor hasta que la webapp se cierra.
Pone en el sistema de caché de Lungo un nuevo par clave/valor.
Parameters (Parámetros)
string: Key for the new value.
string: [OPTIONAL] Subkey in LungoJS Cache System.
object: Value asigned to the key.
Ejemplo
var framework = {name: "Lungo", twitter: "lungojs"};
Lungo.Cache.set("lungoFramework", framework);
Devuelve el valor en caché del par clave/valor.
Parameters (Parámetros)
string: Key in LungoJS Cache System.
string: [OPTIONAL] Subkey in LungoJS Cache System.
Este método devuelve un objeto que contiene el valor.
Example
var cachedFramework = Lungo.Cache.get("lungoFramework");
//Result: {name: "Lungo", twitter: "lungojs"}
Borra la instancia de un determinado par clave/valor alojado en la caché de Lungo.
Parameters (Parámetros)
string: Key in LungoJS Cache System.
string: [OPTIONAL] Subkey in LungoJS Cache System.
Ejemplo
Lungo.Cache.remove("lungoFramework");
Comprueba si un determinado par especificado por la clave se encuentra guardado en la caché de Lungo.
Parameters (Parámetros)
string Key in LungoJS Cache System.
Este método devuelve un boolean, true si existe false en caso contrario.
Ejemplo
Lungo.Cache.exists("lungoFramework");
Lungo utiliza la famosa libreria QuoJS para manejar el DOM de tu aplicación. Quo es una micro librería JavaScript modular y orientada a objectos que simplifica la gestión del documento HTML,la gestión de eventos y las interacciones con Ajax para el desarrolo agil de nuestras aplicaciones móviles. Te permite escribir código flexible y util para todos los navegadores.
Utilizando QuoJS, puedes encadenar varias funciones en una misma línea. Para mas información de la API de Quo.
Ejemplo
<section id="main"">
<header data-title="Dom Manipulation"></header>
<article id="main-article" class="active">
<ul>
<li class="dark">
Tap here to change the color
</li>
</ul>
</article>
</section>
Subscribe to a tap event with a callback
Lungo.dom('#main-article li').tap(function(event) {
Lungo.dom(this).toggleClass('light').toggleClass('dark');
});
Cuando las secciones o artículos se cambian se lanza un evento. El section/article destino lanzará un evento load
y la section/article origen lanzará un evento unload
. Podemos vincular ambos eventos usando QuoJS.
Ejemplo
<section id="section1">
<article id="article1">
<button data-view-section="section2" data-label="2nd Section"></button>
</article>
</section>
<section id="section2">
<article id="article2">{{CONTENT}}</article>
</section>
Lungo.dom('#section1').on('unload', function(event) {
alert("Unloaded section 1");
});
Lungo.dom('#section2').on('load', function(event){
alert("Loaded section 2");
});
Lungo dispone de un elemento carousel donde publicar el contenido y el usuario navegar con el mediante los controles del carousel.
Parameters (Parámetros)
string: Element query selector.
function: Function to execute when switching slide.
Ejemplo
<section id="carousel" data-transition="slide">
<header>
<div class="centered title">Photo: <span>1</span></div>
</header>
<article id="art" class="active block" data-control="carousel">
<div>
<div align="center">
<img src="http://lorempixel.com/320/418/food/">
</div>
<div align="center">
<img src="http://lorempixel.com/320/418/sports/">
</div>
</div>
</article>
</section>
var el = Lungo.Dom('[data-control=carousel]').first();
var example = Lungo.Element.Carousel(el, function(index, element) {
Lungo.dom("section#carousel .title span").html(index + 1);
});
Muestra la slide anterior. Ejemplo
var example = Lungo.Element.Carousel(el);
Lungo.dom('[data-direction=left]').tap(example.prev);
Muesta la slide siguiente. Ejemplo
var example = Lungo.Element.Carousel(el);
Lungo.dom('[data-direction=left]').tap(example.next);
Devuelve el índice de la slide actual. Ejemplo
var example = Lungo.Element.Carousel(el);
example.next();
alert(example.position());
Como mencionamos previamente en la parte de prototipado, puedes añadir un contador a los elementos usanto el atributo data-count. También puedes añadir este contador mediante JavaScript
Establece un contador al elemento:
Parameters (Parámetros)
string: Element query selector.
number: Value of the counter.
Ejemplo
Lungo.Element.count("#messages", 5);
Puedes definir mediante HTML un valor por defecto para el elemento contador.
Ejemplo
<section>
…
<footer>
<nav>
<a href="#" data-icon="user" data-count="12"></a>
<a href="#" data-icon="globe"></a>
<a href="#" data-icon="cog"></a>
</nav>
</footer>
</section>
También puedes crear un elemento loading para representar los momentos en los que estas realizando la carga de datos utilizando el atributo data-loading. Otra manera de mostrar la animación de carga es utilizando JavaScript.
Parameters (Parámetros)
string: Element query selector.
string: [OPTIONAL] Stylesheet.
Este método devuelve una instance del objeto.
Ejemplo
<section id="main" data-transition="">
<header data-title="loading"></header>
<article id="main-article"></article>
</section>
Lungo.Element.loading("#main-article", 1);
También es posible crear una barra de progreso utilizando el atributo data-progress. Otra manera de mostrar la animación de carga es utilizando JavaScript.
Parameters (Parámetros)
string: Element query selector.
number: The percentage value.
boolean: Boolean to show the percentage label.
Ejemplo
<section id="main" data-transition="">
<article id="main-article" class="active list indented scroll">
<form>
<div id="prg-example" class="progress">
<span class="bar">
<span class="value"></span>
</span>
</div>
</form>
</article>
</section>
Lungo.Element.progress("#prg-example", 65, true);
Para crear un elemento pull and refresh añade el atributo data-pull o hazlo mediante JavaScript.
Parameters (Parámetros)
string: Element query selector.
object: Object with the configuration.
Ejemplo
<section id="main" data-pull="normal">
<header data-title="Pull & Refresh"></header>
<article id="main-article">
<ul>
<li class="dark" data-icon="help">
<strong>
Test this featury only drag down.
</strong>
<small>This element has an associated event</small>
</li>
</ul>
</article>
</section>
var pull_example = new Lungo.Element.Pull('#main-article', {
onPull: "Pull down to refresh", //Text on pulling
onRelease: "Release to get new data",//Text on releasing
onRefresh: "Refreshing...", //Text on refreshing
callback: function() { //Action on refresh
alert("Pull & Refresh completed!");
pull_example.hide();
}
});
###.Menu
Para el comportamiento visual <data-control-menu>
Muestra un con un determinado Id
Parameters (Parámetros)
string: <data-control-menu> Id
Ejemplo
Lungo.Element.menu.show("options")
Esconde el con un Id específico
Parameters (Parámetros)
string: <data-control-menu> Id
Ejemplo
Lungo.Element.menu.hide("options")
Muestra o esconde el con id específico
Parameters (Parámetros)
string: <data-control-menu> Id
Ejemplo
Lungo.Element.menu.toggle("options")
Para mostrar notificaciones mucha gente utiliza el alert() de JavaScript. Pero así cada notificación depende del navegador donde se visualize. Lungo tiene su propio sistema de notificaciones para que se vean igual en todos los navegadores y además de manera responsive.
Parameters (Parámetros)
string: The icon, null for no icon.
string: Notification's title.
number: Seconds to show the notification, 0 for unlimited.
function: A function to execute when hiding the notification.
Si llamas a la función show() sin parametros simplemente se mostrará una animación de carga.
Ejemplo
var afterNotification = function(){
//Do something
};
Lungo.Notification.show(
"check", //Icon
"Success", //Title
3, //Seconds
afterNotification //Callback function
);
//Show loading screen
Lungo.Notification.show();
Oculta la notificación que se esté mostrando en ese momento. Ejemplo
Lungo.Notification.hide();
Muestra una notificación para indicar al usuario que la operación en cuestión se realizó con éxito.
Parameters (Parámetros)
string: Notification's title.
string: Notification's description.
string: The icon, null for no icon.
number: The time to show the notification, 0 for unlimited.
function: A function to execute when hiding the notification.
Ejemplo
var afterNotification = function(){
//Do something
};
Lungo.Notification.success(
"Success", //Title
"Successful operation", //Description
"check", //Icon
7, //Time on screen
afterNotification //Callback function
);
Muestra una notificación de error.
Parameters (Parámetros)
string: Notification's title.
string: Notification's description.
string: The icon, null for no icon.
number: The time to show the notification, 0 for unlimited.
function: A function to execute when hiding the notification.
Ejemplo
var afterNotification = function(){
//Do something
};
Lungo.Notification.error(
"Error", //Title
"Unsuccessful operation", //Description
"cancel", //Icon
7, //Time on screen
afterNotification //Callback function
);
Muestra una notificación para que el usuario confirme alguna acción.
Parameters (Parámetros)
object: An object with the notification's config.
Ejemplo
Lungo.Notification.confirm({
icon: 'user',
title: 'Title of confirm.',
description: 'Description of confirm.',
accept: {
icon: 'checkmark',
label: 'Accept',
callback: function(){ alert("Yes!"); }
},
cancel: {
icon: 'close',
label: 'Cancel',
callback: function(){ alert("No!"); }
}
});
Crea una notificación utilizando tu propio código html.
Parameters (Parámetros)
string: The html code for the notification.
string: The closing button text.
string: Specific style for notification
number: The time to show the notification, 0 for unlimited.
Ejemplo
Lungo.Notification.html('<h1>Hello World</h1>', "Close");
Muestra una notificación no obstruccione la interfaz.
Parameters (Parámetros)
string: Notification's title.
string: The icon, null for no icon.
string: Specific style for notification
Ejemplo
Lungo.Notification.html('<h1>Hello World</h1>', "Close");
Lungo.Router otorga al usuario las funciones necesarias para manejar la navegación de la aplicación mediante JavaScript. Las siguientes funciones permiten a los desarrolladores trabajar con la navegación entre secciones, artículos y asides.
Esta función navega desde una sección a otra. Se utiliza para navegar hacia delante entre secciones. Si quieres navegar hacia detrás podras utilizar la función back que se explica mas adelante.
Parameters (Parámetros)
string: The section's id.
Ejemplo
Lungo.Router.section("features");
Muestra un <article>
de una <section>
en particular.
Parameters (Parámetros)
string: The section id
string: The article's id.
Ejemplo
Lungo.Router.article("my-section", "my-article");
Si quieres navegar hacia atrás tan solo utiliza la función Lungo.Router.back.
Ejemplo
Lungo.Router.back();
El elemento <aside>
se comporta diferente dependiendo de si está en un artículo o en una sección. Por ello Lungo tiene métodos específicos para estos casos:
Muestra un elemento aside.
Parameters (Parámetros)
string: <aside> id
Ejemplo
Lungo.Aside.show("my-aside");
Oculta el elemento aside actual. Example
Lungo.Aside.hide();
Muestra o oculta el elemento aside actual.
Parameters (Parámetros)
string: <aside> id
Ejemplo
Lungo.Aside.toggle("my-aside")
Desde la versión 2.2 (Brownie) Lungo tiene un namespace reservado para e control
del elemento <article>
.
Limpia el contenido de un artículo específico.
Parameters (Parámetros)
string: <article> ID
string: Icon
string: Title
string: Description [OPTIONAL]
string: Button label [OPTIONAL]
Ejemplo
Lungo.Article.clean("my-article", "user", "Title", "Description", "Refresh")
Lungo tambien puede realizar peticiones ajax a servicios web.
Objeto que contiene la configuración para realizar llamadas ajax.
Ejemplo
Lungo.Service.Settings.async = true;
Lungo.Service.Settings.error = function(type, xhr){
//Do something
};
Lungo.Service.Settings.headers["Content-Type"] = "application/json";
Lungo.Service.Settings.crossDomain = false;
Lungo.Service.Settings.timeout = 10;
Carga los datos de un server utilizando la llamada GET de HTTP.
Parameters (Parámetros)
string: The URL to which the request is sent.
object: A map or string to to the server.
function: [OPTIONAL] Callback function. (Asynchronous)
string: [OPTIONAL] Mime-Type: json, xml, html, or text.
Ejemplo
var url = "http://localhost:8080/myService";
var data = {id: 25, length: 50};
var parseResponse = function(result){
//Do something
};
Lungo.Service.get(url, data, parseResponse, "json");
//Another example
var result = Lungo.Service.get(url, "id=25&len=50", null, "json");
Envia los datos a un server utilizando la llamada POST de HTTP.
Parameters (Parámetros)
string: The URL to which the request is sent.
object: A map or string to send to the server.
function: [OPTIONAL] Callback function. (Asynchronous)
string: [OPTIONAL] Mime-Type: json, xml, html, or text.
Ejemplo
var url = "http://localhost:8080/myService";
var data = {id: 25, length: 50};
var parseResponse = function(result){
//Do something
};
Lungo.Service.post(url, data, parseResponse, "json");
//Another example
var result = Lungo.Service.post(url, "id=25&len=50", null, "json");
Carga los datos de un server utilizando la llamada GET de HTTP y el mime-tyme JSON.
Parameters (Parámetros)
string: The URL to which the request is sent.
object: A map or string to send to the server.
function: [OPTIONAL] Callback function. (Asynchronous)
Ejemplo
var url = "http://localhost:8080/myService";
var data = {id: 25, length: 50};
var parseResponse = function(result){
//Do something
};
Lungo.Service.json(url, data, parseResponse);
//Another example
var result = Lungo.Service.json(url, "id=25&len=50");
Sistema de auto-cache con patron fecha para peticiones GET de HTTP.
Parameters (Parámetros)
string: The URL to which the request is sent.
object: A map or string to send to the server.
string: Date pattern (example: 15 minutes, 1 hour, 3 days).
function: [OPTIONAL] Callback function. (Asynchronous)
string: [OPTIONAL] Mime-Type: json, xml, html, or text.
Ejemplo
var url = "http://localhost:8080/myService";
var data = {id: 25, length: 50};
var parseResponse = function(result){
//Do something
};
Lungo.Service.cache(url, data, "2 hours", parseResponse, "json");
//Otro ejemplo
var result = Lungo.Service.cache(
url,
"id=25&len=50",
"2 hours",
null,
"json"
);