Contenido

X-Tags, crea tus propios elementos HTML con funcionalidad javascript

30 jul

+ 38

<x> o X-Tags, es una librería javascript que nos permitirá definir elementos HTML propios cargados con la funcionalidad que deseemos de una forma fácil y rápida.

La idea detrás de esta librería es que el diseño simplemente tenga que conocer el elemento HTML a crear y su estructura. Además, se basa en el estandar de Web Components y los Custom Elements, que nos permite definir elementos propios contemplados en los estandares modernos. Hasta el momento, la mejor opción es usar algún elemento HTML disponible e intentar que tenga algún sentido semántico en nuestro código.

Por lo tanto, si nuestros maquetadores conocen el código HTML que hemos definido previamente, por ejemplo este acordeón:


// HTML
<x-accordion>
    <x-toggler selected="true">Toggler 1</x-toggler>
    <div>Panel 1</div>
    
    <x-toggler>Toggler 2</x-toggler>
    <div>Panel 2</div>
    
    <x-toggler>Toggler 3</x-toggler>
    <div>Panel 3</div>
</x-accordion>

Nosotros solo tendremos que registrar el elemento con las características que nosotros deseemos.


// Javascript
xtag.register('accordion', {
    onCreate: function(){
        // Se ejecutará cuando un elemento es creado o parseado
    },
    onInsert: function(){
        // Se ejecutará cuando un elemento es insertado en el DOM
    },
    events: {
        'click:delegate(x-toggler)': function(){
            // Se ejecuta cuando un toggler es ejecutado.
        }
    },
    getters: {
        'togglers': function(){
            // Devuelve todos los elementos togglers.
        }
    },
    setters: {
        // Añade Objetos DOM
    },
    methods: {
        nextToggler: function(){
            // Activa nuevo toggle
        },
        previousToggler: function(){
            // Activa el toggle previo
        }
    }
});

Y todo ello, siendo disponible para la mayoría de navegadores de escritorio y todos los móviles. Ver más ejemplos

Participa, Hay 38 Comentarios. →

Usa media queries para ocultar CSS3 a navegadores antiguos

27 jun

+ 18

Siempre tendemos a condicionar nuestro CSS pensando en los navegadores antiguos, haciendo uso de los condicionales o hacks para complementar las excepciones que navegadores como IE6,7 requieren para funcionar “correctamente”, pero … ¿y si añadieramos como excepciones las funcionalidades más modernas?

Desde 456 Berea St., recomienda usar las media queries de CSS3 para unir el CSS más moderno y solo será visible para los navegadores que las soporten, de esta forma estamos cambiando el chip y optimizar el uso de los CSS’s en los navegadores de los usuarios.

Típico CSS


.block {
	width: 100%;
	position: fixed;
       -moz-border-radius:1em; // IE no lo detecta
       -webkit-border-radius:1em; // ...
      // ...
}

Imaginemos que entramos con IE y cargamos este CSS, si seguimos el proceso de ejecución CSS secuencial deberemos evaluar cada una de las líneas aunque no las tengamos soportadas. Esto, en grandes aplicaciones con miles de líneas de CSS en navegadores antiguos pueden provocar lentitud (doy fé de ello).

Para solventar el problema y unificar el código “moderno” deberíamos cambiar el chip y unificarlo de la siguiente forma.

Usando media queries


@media only screen {
	.block {
		-moz-border-radius:1em; // IE no lo detecta
		-webkit-border-radius:1em; // ...
		// ...
	}
}

.block {
	width: 100%;
	position: fixed;
}

De esta forma, IE no reconoce la palabra “only” del @media y omite el resto del código incluido en su interior. De esta forma únicamente realizamos una sola comprobación que omitirá o no dependiendo de las capacidades del navegador.

Participa, Hay 18 Comentarios. →

jQuery se desmiembra para la versión 1.8

26 jun

+ 8

jQuery da un paso en su personal evolución hacia la modularización de su código, y en esta nueva versión podremos generar versiones personalizadas de la librería excluyendo módulos que no necesitemos.

Entre los módulos que podremos excluir para esta nueva versión tenemos (ajax, css, dimensions, effects y offset). Si no necesitas ninguno de estos módulos puedes tener una versión de jQuery de solo 21KB (gzip). De esta forma podremos convertir un cañon en el arma que realmente necesitamos para atacar el problema.

Otra mejora que nos encontraremos en esta nueva versión es la inclusión de prefijos CSS automáticamente para evitarnos tener que añadir más líneas de las necesarias, haciendo nuestro código más estandar y adaptado a las especificaciones del futuro.

Y muchas cosas más…

[Descargar]

Participa, Hay 8 Comentarios. →

StackJS, framework JS para que la orientación a objetos sea más fácil

26 jun

+ 3

StackJS es un framework más que nos ofrece las herramientas necesarias para facilitarnos la tarea implementar mediante orientación a objetos en javascript.

Además de una serie de funcionalidades que le aportan robustez a nuestras creaciones.

setters y getters automáticos

Automáticamente tendremos disponible métodos de insercción y consulta de todos los atributos de la clase, lo que nos facilitará la tarea de trabajar con ellas.


Class('Car', {
	engineSize: null,
	model: null,
	manufacturer: null,
	maxSpeed: null,
	Car: function(manufacturer) {
		this.manufacturer = manufacturer;
	}
});

var car = new Car('Toyota');
car.setModel(2007); // Setter Automático
console.log(car.getManufacturer()); // Getter Automático

Gestión de errores

La posibilidad de definir nuestras propias excepciones, condicionar funcionamientos y lanzarlas cuando detectemos un problema nos permite una mayor control de nuestro código.


Class('MyException::Exception',{
	test: null,
	MyException: function(test) {
		this.message = "Excepción lanzada";
		this.human = test;
	}	
});

Class('MiClass', {
	falla: function(){
		Throw(new MyException(this)); // Excepción
	}
});


var miKlass = new MiClass();

// Evento MyException
Catch('MyException', function(ex){
	console.log("Se ha producido una excepción controlada");
});

miKlass.falla();

Delegación de objetos

Portado de ObjectiveC podemos vincular objetos delegando eventos entre ellos.


Class("Engine",{
	size: null,
	Engine: function(size) {
		this.size = size;
	},
	start: function() {
		this.callDelegate("didBrokenPart",[this]);	
	}
});

Class("Car",{
	engine: null,
	Car: function() {
		this.engine = new Engine(1600); // Creamos un nuevo Engine
		this.engine.setDelegate(this); // Delegamos el nuevo objeto creado
	},
	drive: function() {
		console.log("start drive");
		this.engine.start();
	},
	stop: function() {
		console.log("car is stopped");
	},
	didBrokenPart: function(object) {
		this.stop();
	}
});

Y todo en solo 3kb comprimdido.
[Descargar]

Participa, Hay 3 Comentarios. →

Variables CSS, ¿como está el tema?

18 jun

+ 1

Hace ya 4 años que se vienen hablando de la inclusión de variables en nuestros CSS, pero el tema parece que está bastante parado. Al parecer la W3C en abril publicó un borrador en el que introducia una propuesta de como deberían funcionar las estas variables en nuestros CSS’s.


// Definición
:root {
  var-my-color: #fad;
}

// Uso
.thing {
  color: var(my-color);
}

Desde WebKit hace ya tiempo que podemos usarlas usando el prefijo (-webkit-).


// Definición
:root {
  -webkit-var-my-color: #fad;
}

// Uso
.thing {
  color: -webkit-var(my-color);
}

Este mes de Junio, la W3C se marca un nuevo borrador en el que prescinde de la función var() cambiándola por $ para llamar a nuestra variable.


// Definición
:root {
  var-my-color: #fad;
}

// Uso
.thing {
  color: $my-color;
}

Vamos, que la capacidad de que nuestros CSS’s dispongan de variables está más o menos igual que siempre y no parece que se vaya a solventar en un futuro cercano, por el momento deberemos seguir usando herramientas como LESS.js o SASS para disponer de esta capacidad y alguna más.

Via

Participa, Hay 1 Comentario. →

Sigma.js, dibuja gráficas usando canvas desde javascript

14 jun

+ 3

El uso de canvas de HTML5 está dando lugar a herramientas tan interesantes y sorprendente como Sigma.js, una librería que permite generar gráficas dinámicas directamente desde javascript.

sigma
(Ver Imagen)

Entre las características que hacen de Sigma.js una librería interesante están:

  • La capacidad de encadenar métodos
  • Gestión de eventos personalizados
  • Posibilidad de añadir plugins, usar ficheros GEXF, algoritmos ForceAtlas2,…
  • Api sencilla y accesible
  • Pintado personalizado del mantenimiento del gráfico
  • Insercción mediante frames

Como usarlo

Primero deberemos inicializar el objeto sigma con el contenedor DOM donde incluiremos nuestro gráfico.


var sigInst = sigma.init(domElement);

El objeto resultante, nos permitirá comenzar a trabajar con el gráfico:


sigInst.addNode('hello',{
  'label': 'Hello'
}).addNode('world',{
  'label': 'World!'
}).addEdge('hello','world');

Los ejemplos pueden ayudar a ofrecer una idea más clara de las capacidades de la librería. Descargar.

Participa, Hay 3 Comentarios. →

QUOjs, micro librería javascript para simplificar tus proyecto móviles

7 jun

+ 1

Está claro que el peso y las funcionalidades de las principales librerías javascript (jQuery, MooTools, Prototype,…) no están actualmente alineadas a las necesidades de una aplicación móvil, de ahí que no paren de salir versiones minificadas y/concentradas con funcionalidades más específicas y focalizadas a esa franja de dispositivos. QUOjs es una más, interesante por la facilidad con la que puedes gestionar los eventos más comunes realizados con los dedos sobre páginas web y por su peso, 13kb.[Descargar]

Participa, Hay 1 Comentario. →

on{X} , extiende las capacidades de tu Android con Javascript

7 jun

+ 3

Microsoft, si Microsoft, ha desarrollado una interesante idea con la que nos permite extender las capacidades de nuestro Android mediante una API Javascript.

Como se de una gestión de eventos básica se tratara on{X} nos permite definir funcionalidades interesante cuando estos eventos se cumplan.

Hola Mundo

// Cuando desbloquee el móvil 
device. screen.on("unlock", function(){
     // Muestra el mensaje "Hello world!"
     var notification = device.notifications.createNotification('Hello world!');
     notification.show();
     console.log('Hello World notification was sent to the phone');
 });

On{X} está compuesto de una aplicación para Android que debes instalar en tu dispositivo móvil y una aplicación web en la que al entrar con login de Facebook podrás ver un listado de recipientes con tus controles definidos, estos controles están continuamente sincronizados entre el móvil y la aplicación así que es posible realizar cambios y verlos en vivo directamente en tu móvil.

Para desarrollar tus propios recipientes dispones de un editor online que automáticamente almacenará el código y lo compartirá con tu dispositivo móvil.

De esta forma, planificarte tareas como “Enviar un mail a tu mujer diciéndole que estás en el supermecado y si tienes que comprar algo concreto es el momento, automáticamente cuando entras al supermercado” es posible, sencillo y lo que a mi me gusta más, te lo puedes programar tu mismo!

Ejemplos

Avisame si he de coger un paraguas en el primer desbloqueo del móvil de cada mañana si el tiempo dice que va a llover.


// Inicializamos variables

var reminder = "take an umbrella";
var weatherCondition = "rainy";

console.log('Started script: Remind me to ' + reminder + ' every day the first time I unlock my phone, if it is going to be ' + weatherCondition);

device.screen.on('unlock', function () {
	console.info('device unlocked');
	var lastDateScreenUnlocked = device.localStorage.getItem('lastDateScreenUnlocked');
	var today = new Date().toLocaleDateString();

	// Si es el primer desbloqueo
	if (!lastDateScreenUnlocked || lastDateScreenUnlocked !== today) {
		// Coger posición actual
		var locationListener = device.location.createListener('CELL', 2);
		locationListener.on('changed', function(locSignal) {
			locationListener.stop();

			// Carga el tiempo en función de la posición
			feeds.weather.get(
				{
					location: locSignal.location.latitude + ',' + locSignal.location.longitude,
					time: 0     
				},
				function onSuccess(weather, textStatus, response) {
					console.info('Got the weather forecast for today:', JSON.stringify(weather.forecasts[0]));

					// Compruemas las condiciones atmosféricas
					var forecast = weather.forecasts[0];

					if ((weatherCondition === 'rainy' && (forecast.rain > 50 || forecast.sky.toLowerCase() === 'rain')) ||      // Llueve
						(weatherCondition === 'sunny' && forecast.sky.toLowerCase() === 'clear') ||                                               // Soleada
						(weatherCondition === 'windy' && forecast.wind.speed  >= 20 && forecast.wind.speed < = 30)) {  // Viento
						// Creamos la notificación
						 var notification = device.notifications.createNotification(reminder);
						notification.on('click', function () {
							device.browser.launch(weather.forecastUrl);
						});
						// Mostramos el mensaje
						notification.show();
					} else {
						console.info('weather is not ' + weatherCondition );
					}
				},
				function onError(response, textStatus) {
					console.error('Failed to get weather: ', textStatus);
				});
		});

		locationListener.start();

		// Actualizamos el tiempo desde la última notificación
		device.localStorage.setItem('lastDateScreenUnlocked', today);
		console.info('Stored the last time the screen was unlocked: ', today);
	}
});
console.log('Completed script: Remind me to ' + reminder + ' every day the first time I unlock my phone, if it is going to be ' + weatherCondition);

Más ejemplos

Participa, Hay 3 Comentarios. →

jQuery++, personaliza tu librería jQuery

7 jun

+ 0

jQuery++ nace para solventar la problemática de cargar más javascript del estrictamente necesario en nuestras aplicaciones web. Mediante esta aplicación será posible añadir a tu jQuery una serie de herramientas con el tamaño mínimo posible.[Via]

Participa, Hay 0 Comentarios. →

Can.js, framework JS para enriquecer tus aplicaciones Web

6 jun

+ 8

Can.js, es un framework creado para facilitar la creación de aplicaciones ricas en javascript gracias a la integración de herramientas que nos permiten gestionar el código que desarrollamos.

var Todo = can.Construct({
  init: function( text ) {
    this.text = text
  },
  read: function() {
    console.log( this.text );
  }
})
  
var todo = new Todo( 'Hello World' );
todo.read()

Facilitando las herramientas por separado nos permite definir nuestro propio patrón de desarrollo o usar el típico y efectivo MVC para gestionar una gran aplicación web.

  • can.Construct – Constructor de objetos javascript
  • can.Observegestión de eventos clave – valor
  • can.Model – Modelo de datos conectado via REST JSON
  • can.view – Motor de plantillas
  • can.EJS – Lenguaje propio de plantillas con helpers
  • can.Control – Directiva de control de eventos
  • can.route – Soporte de routing

Lo mejor de Can.js, es:

  • Tamaño, en solo 8.5kb dispones de las mismas herramientas que ofrecen otros frameworks.
  • Facilidad de uso, es una de las premisas por las que crearon este framework.
  • Seguridad, no acerca herramientas muy completas para gestionar nuestros objetos y evitar que la cosa se desmadre.
  • Velocidad, comparado con otros frameworks de similares capacidades promete mejores resultados en ejecuciones cruciales de desarrollo.
  • Flexibilidad, facil de implementar tus propios plugins para añadirles funcionalidades nuevas

Además, está disponible para las principales librerías javascript:

Participa, Hay 8 Comentarios. →