DrupalcampSpain 2010: Barcelona

11 gener 2010 per Ramon Vilar Gavaldà
Logotip de la DrupalcampSpain 2010

Logotip de la DrupalcampSpain 2010

Els propers dies 26, 27 i 28 de febrer es durà a terme al Citilab de Cornellà la primera Drupalcamp de l’estat, l’esdeveniment del món drupaler més gran de la península.Durant aquests tres dies es duran a terme diverses xerrades, tallers, xerrades informals (anomenades BOFs), a més a més, de ser un lloc únic per a poder augmentar el nostre networking drupaler amb gent propera. Igualment, servirà com a lloc per a poder contactar entre diverses empreses i professionals per tal d’iniciar possibles col·laboracions o simplement, per intercanviar punts de vista i experiències.

Com no podia ser menys, jo ja m’he inscrit (els primers 50 tenien un descompte de 10€ i calia aprofitar-lo), i per tant, hi seré, a poder ser, els tres dies. Igualment, he proposat una sessió sobre com traduir Drupal de forma correcta i ordenada (actualment hi ha una mica de merder al voltant d’aquest tema). A més a més, em ronda pel cap proposar una sessió sobre integració de maquetes HTML+CSS+JS a Drupal, cosa que mai he trobat informació i exemples precisos sobre un cas pràctic.

Doncs bé, si teniu cap proposta sobre alguna cosa que us agradaria saber sobre Drupal, digueu-ho i intentarem trobar algú que ho pugui explicar en una sessió.

Comprovacions de l’existència d’una variable a JavaScript

21 desembre 2009 per Ramon Vilar Gavaldà

Quan programem amb JavaScript (o qualsevol altre llenguatge de scripting) és normal haver de fer comprovacions de l’existència d’una variable dins de l’espai de noms.

Si necessitem saber si una variable ha estat declarada però sense valor assignat, podem comparar-la amb el “valor” undefined. Així podem veure:

var x;
// x === undefined retornaria cert
x = 5;
// x === undefined retornaria fals

Però si el que de debò volem fer és comprovar si aquesta variable ha estat definida en algun punt del script, no podem fer aquesta comprovació, ja que al intentar cercar el símbol “x” a la seva taula de noms, ens donaria un error de referència. Llavors, podem fer-ho o no? La resposta és sí! Només cal comprovar el seu tipus: si no té un tipus definit, vol dir que no està definida dins la taula de noms. Total, que podem fer:

// typeof(y) === undefined retornaria cert
var y;
// typeof(y) === undefined retornaria fals

I ja per acabar amb nota: com fer per saber si certa variable està definida directament en l’àmbit global de l’script? Doncs bé, com bé sabem, qualsevol variable definida a l’espai global, està també definida com un camp de l’objecte global. Llavors, els que ens dediquem a la programació web, i per tant tenim l’objecte window com a objecte global, podem fer la comprovació:

window.z === undefined
// retornaria cert si la variable z no ha estat definida

Doncs res, aquest ha estat el truc del dia. Espero que us sigui útil!

JavaScript. The Definitive Guide

17 novembre 2009 per Ramon Vilar Gavaldà
Portada del llibre Javascript. The Definitive Guide

Portada del llibre Javascript. The Definitive Guide

Si alguna vegada esteu interessats en comprar un llibre sobre un llenguatge de programació i descobriu que un autor anomenat David Flanagan n’ha escrit un, no us ho penseu més: agafeu-lo. No tinc el plaer de conèixer-el en persona, però el que us puc ben assegurar és que aquest home, abans d’escriure res sobre un tema, ho estudia tot. I això us ho puc ben assegurar perquè no és pas el primer llibre que llegeixo d’aquest home i me n’adono de la minuciositat en que descriu un concepte o com va esfilagarsant un tema fins a deixar-lo tot explicat i ben explicat sobre paper.

El llibre que ens ocupa, JavaScript. The Definitive Guide, és per definició, el llibre de lectura obligatòria si volem intentar conèixer de debò aquest llenguatge de programació. Aquest llibre ens demostra que JavaScript no és, com la gent pensa, un llenguatge de programació només per la web i que només serveix per a validar formularis, fer menús desplegables i fer que la meva pàgina sigui més molona. No! JavaScript, i més d’un se sorprendrà al llegir això, és un dels llenguatges de programació més difícils i complexes que existeixen. Tampoc us espanteu, sinó que aquest llenguatge de programació amaga més d’una sorpresa, i fins que no llegeixes un llibre on s’explica tot amb pèls i senyals, no te n’adones de fins a on arriba el seu potencial.

Aquest llibre, com el seu nom indica, vol ser la guia definitiva de JavaScript, i sota el meu punt de vista, ho compleix sense cap tipus de dubte. La seva lectura, salvant la barrera inicial de ser un llibre de quasi bé un miler de pàgines escrites en anglès, es fa molt amena, avançant per tots els conceptes del llenguatge d’una forma natural i seguint un guió gens qüestionable, que ens durà, a través de centenars d’exemples, a comprendre parts completament desconegudes per molts.

Només mirant el llom interior del llibre, podem veure que aquest es divideix en quatre parts; encara que el llibre tracta només amb dos grans temes:

  • La primer part, anomenada Core JavaScript, tal i com el seu nom indica, explica el nucli del llenguatge amb un detall excepcional. En aquesta part podem trobar els següents capítols:
    • Lexical Structure
    • Datatypes and Values
    • Variables
    • Expressions and Operators
    • Statements
    • Objects and Arrays
    • Functions
    • Classes, Constructors, and Prototypes
    • Modules and Namespaces
    • Pattern Matching with Regular Expressions
    • Scripting Java
  • La segona part, anomenada Client-Side JavaScript, se centra més en el navegador com a plataforma de desenvolupament d’aplicacions en JavaScript. Hi podem trobar:
    • JavaScript in Web Browsers
    • Scripting Browser Windows
    • Scripting Documents
    • Cascading Style Sheets and Dynamic HTML
    • Events and Event Handling
    • Forms and Form Elements
    • Cookies and Client-Side Persistence
    • Scripting HTTP
    • JavaScript and XML
    • Scripted Client-Side Graphics
    • Scripting Java Applets and Flash Movies
  • La tercera part, anomenada Core JavaScript Reference, és una referència completa de totes les classe, objectes, mètodes, propietats i demés del nucli del llenguatge definits per JavaScript 1.5 i ECMAScript versió 3.
  • La quarta part, anomenada Client-Side JavaScript Reference, és una referència de tots els elements que podem trobar dins d’aquest tema, des de DOM (nivell 1, 2 i 3), canvas, etc.

Què, te’l compres? T’he convençut? Fes-ho, veuràs com em dones la raó de que és un llibre d’aquells que s’han de tenir sempre a mà.

Renovació de la web del W3C

20 octubre 2009 per Ramon Vilar Gavaldà

Acabo de veure que per fi s’ha llançat la nova web del W3C, encara que sembla ser que la seva estrena fou el passat 13 d’octubre. Ha estat el final del camí després que al març del 2009 es va llançar el lloc en beta obert a qualsevol tipus de contribució i comentari.

El nou lloc és força més intuïtiu, amb un disseny lleuger centrant l’atenció en el contingut i no tant en la forma de mostrar-lo. Al contrari de l’anterior lloc, sembla que en aquest s’hagin parat un moment i hagin rumiat l’arquitectura de la informació, ja que tots els continguts de la web estan categoritzats en diferents seccions de fàcil identificació i la navegació entre els diferents apartats es fa de forma força intuïtiva.

Com a nota irònica, al seu blog es comenta que el CSS usat no passa el seu validador. Segons argumenten, la majoria d’errors són per temes de hacks, regles pròpies d’alguns navegadors, etc.

Doncs res, nous aires pel W3C que ja tocava!

Protegir pàgines amb l’event onbeforeunload

9 setembre 2009 per Ramon Vilar Gavaldà

No us ha passat mai que mentre esteu acabant d’omplir un formulari, sense adonar-vos, feu clic allà on no toca i perdeu tot el que heu introduït? Doncs bé, hi ha una senzilla manera per evitar al màxim aquests errors: l’event onbeforeunload.

Cap allà als mitjans dels noranta, Internet Explorer 4.0 introduí aquest event no estàndard, però a diferència d’altres ocasions, aquest cop feu una cosa útil i els navegadors amb motor Gecko ho acabaren introduint a la versió 1.7 de Mozilla (Firefox 1.0).

Aquest event, tal i com resa el seu nom, es dispara just abans de l’event onunload, és a dir, abans que es descarregui el contingut actual de la pàgina, i per tant, ens permet executar algun tipus d’acció en aquest moment.

A diferència dels altres events, aquest funciona força diferent: per tal de mostrar un missatge a l’usuari abans de descarregar la pàgina, el que cal fer és retornar una cadena amb el missatge que es vulgui mostrar. Un exemple podria ser:


window.onbeforeunload = function(e) {
  return "No heu enviat el formulari. Si tanqueu la pàgina perdreu tots els canvis fets fins ara.";
}

Així, en cas d’abandonar la pàgina, se’ns mostraria un quadre amb el missatge:

Esteu segur que voleu sortir d’aquesta pàgina?

No heu enviat el formulari. Si tanqueu la pàgina perdreu tots els canvis fets fins ara.

Premeu D’acord per a continuar, o cancel·la per a romandre a la pàgina actual

Les frases que hi ha just abans i després de les nostres les posa el navegador (en aquest cas Firefox) i no es poden eliminar, substituir ni evitar de cap tipus de les maneres.

Val a dir que en cas que el navegador no tingui implementat aquest event, aquests simplement l’ignoraran i no mostraran pas el missatge a l’usuari.

Pàgines protegides

Recapitulem. La raó principal d’aquest article és que fa poc a la feina em varen demanar que implementés una funcionalitat per a protegir pàgines: volien poder mostrar un missatge quan un usuari intentés abandonar la pàgina enmig d’un formulari dins d’un procés amb un cert flux o bé intentés abandonar una pàgina, la construcció de la qual fos molt costosa. Un exemple ideal per a treure l’event onbeforeunload de la nostra cartera de recursos. Anem a construir-ho.

Per tal de poder marcar si una pàgina la tractem com a protegida o no, és a dir, si registrem l’event onbeforeunload per mostrar un missatge a l’usuari en cas d’abandonar la pàgina, afegirem la classe protected a l’element /body de la pàgina:

<body class="protected">

Així, si usem jQuery, podem afegir les següents línies de codi per a tenir-ho fet:

$('body.protected').each(function () {
  window.onbeforeunload = function(e){
    return "Si abandones, ho perdràs tot per sempre!";
  };
});

Però tenim un petit inconvenient: si fem clic en un enllaç o si enviem el formulari fent clic a un botó, se’ns mostrarà el missatge, cosa que volem evitar. Això es pot resoldre inhabilitant l’event en cas de fer clic a certs elements:

$('body.protected p.botons input, body.protected a.sense-onbeforeunload', context).click(function () {
  window.onbeforeunload = null;
});

I així de fàcil obtenim el que busquem. Fàcil, oi? I segur que a més d’un li sembla útil, i fins i tot, més que necessari en alguna situació quotidiana.

Recursos