lunes, julio 11, 2011

Ordenar Alfabéticamente Dropdowns con Javascript

Mediante el uso de Prototype se pueden ordenar alfabéticamente los combos de forma sencilla, para ello usemos el evento onload del body html:

... <body onload="sortAllSelects()"> ...

Definimos la función sortAllSelects:

    function sortAllSelects(){
        $$('select').each(function(e){sortCombo(e);});   
    }

Ahora el one-liner para ordenar el combo:

    function sortCombo(combo){
        $A(combo.options).sort(function(a,b){ return (a.text.toLowerCase() < b.text.toLowerCase() ) ? -1 : 1; }).each(function(e, i){combo.options[i] = new Option(e.text, e.value, false, e.selected);});       
    }

Esto funciona tanto en Firefox como en IE.







lunes, junio 27, 2011

Usando Prototype para confirmar borrado múltiple con checkbox

Este framework JavaScript llamado Prototype agiliza bastante el desarrollo de tareas comunes con el html dom, en este ejemplo mi objetivo es el pedir confirmación del usuario mostrándole los nombres de los registros que se van a borrar. Mediante checkboxes el usuario selecciona los registros a eliminar y luego presiona el botón 'Eliminar'. Usaremos como shortcut el id de cada checkbox, el cual contendrá el nombre del registro a mostrar en el mensaje de confirmación.

Los checkbox deben tener la forma general siguiente:

<input id="checkbox<NombreRegistro>" type="checkbox" />

Por ejemplo:

<input id="checkboxRamiro" type="checkbox" />
<input id="checkboxAlejandro" type="checkbox" />
<input id="checkboxRaul" type="checkbox" />
<input id="checkboxAlberto" type="checkbox" />
<input id="checkboxJuan" type="checkbox" />

Agregamos al final de la forma un botón que mande llamar a la función javascript.

<input onclick="javascript:alertDelete()" type="button" value="Eliminar" />

La función JavaScript es la siguiente:

function alertDelete(){
  var users = '';  // la variable en la que acumularemos los nombres de registros
       
  $$('input').each(function(e){  if(e.type == 'checkbox' && e.checked) users += $(e).id; });
       
  users = users.gsub('checkbox',' ').replace(/^\s+|\s+$/g, '').gsub(' ',', '); 
       
  if(users != ''){ confirm("Estas seguro de que quieres borrar los siguientes registros: "+users); }
}


Como ven el framework nos permite encontrar de forma bastante ágil los checkboxes que se encuentran seleccionados y al mismo tiempo recuperar el nombre de los registros a borrar, en una sola línea:

$$('input').each(function(e){  if(e.type == 'checkbox' && e.checked) users += $(e).id; });

Después simplemente le damos formato agregando comas para separar cada nombre:

users = users.gsub('checkbox',' ').replace(/^\s+|\s+$/g, '').gsub(' ',', ');

Primero sustituyo la palabra checkbox por un espacio en blanco, de esta manera quedarán solo los nombres de los usuarios separados por dichos espacios. Para eliminar espacios al inicio y final de la cadena utilizo el método replace de Javascript con una expresión regular:  /^\s+|\s+$/g donde el /g indica que lo hará en toda la cadena. Finalmente sustituyo los espacios restantes por comas.

Y lo mostramos como una ventana de confirmación al usuario:

confirm("Estas seguro de que quieres borrar los siguientes registros: "+users);

Si seleccionas los checkboxes 1, 3 y 5 deberá mostrar un mensaje como el siguiente:

Estas seguro de que quieres borrar los siguientes registros: Ramiro, Raul, Juan

miércoles, junio 22, 2011

Convertir de String a Map con Groovy

La idea es poder evaluar Strings del tipo: "a1:b1,a2:b2,..." a Mapas en Groovy, donde ai, bi son Strings que no contengan ',' ni ':'.

Primero hay que agregar el método al operador leftShift de la metaclase del mapa, para que podamos usar el operador leftShift:

LinkedHashMap.metaClass.leftShift << {
String it -> def p = it.split(','); p.each { putAt(*it.split(':')) }
}

Ahora podremos usar el operador para generar mapas a partir de Strings:

String mapa = "a:b,number:123456,hello:good bye" // el string a convertir
def m = [:] // mapa vacío
m << mapa // agregamos el string al mapa
assert m == [a:'b',number:'123456',hello:'good bye'] // probamos que se generó bien

Así de simple es Groovy :)

sábado, julio 17, 2010

Ya más encanchados

Viernes 16 Julio 2010

Por fin llega el fin de semana, mi primero desde que asisto de manera presencial a mi nueva empresa, por fin los sábados libres después de 2 años en la anterior empresa.

Algo de mi itinerario hoy fue:

-Junta a las 9, se habló de kick off del proyecto
-Instalación de springsource tool suite
-Estudiando un poco de Maven, SCRUM, MyBatis.

En la tarde tuvimos una junta de team members de presentación de los integrantes, fue bastante divertida sobre todo porque hablamos de nuestras aficiones y pasatiempos. Creo que hubo bastantes coincidencias. La mitad de los presentes estaba vía remota desde MA pero usamos herramientas para meeting bastante interesantes que nos permitieron aprovechar bien la junta.

El proyecto tiene stakeholders ubicados en 5 paises: USA, México, Canada, Irlanda, India así que veremos como se comporta esta metodología ágil SCRUM en condiciones de trabajo remoto nearshore y offshore.

Ah ya tengo máquina


Pues después del aburridísmo día anterior, decidí llevar mi laptop a la empresa. GRAVE ERROR, está prohibidísimo, tan pronto y ya rompiendo reglas.

Bueno lo importante es que ya no estuve sin hacer nada, después de pasar milagrosamente las vallas de seguridad me dispuse a sacar a blanki (así se llama mi lap). En cuanto el jefe la vió me comentó sobre las reglas y todo el show, le comenté sobre mi desconocimiento de las mismas. Salió algo bueno de ello ya que el jefe consiguió que me prestaran una desktop que un compañero no está usando así que ya tengo máquina, al menos provisionalmente.

Ah también es importante comentar que de mi grupo de ranas ya hay una nueva integrante a la que llamaré Softi. Las otras dos: Bleach y Bet están aun tristes porque dejaron a su otra hermana Arwen en la anterior empresa con el padawan Beto, espero que se vuelvan a encontrar.

Una semana después ya tengo lugar

Martes 13 de Julio, después de una semana de trabajar desde casa regreso a las instalaciones de la empresa, ya me asignaron lugar pero no tengo máquina todavía.

Bueno este día ha sido probablemente el más aburrido de mi vida laboral, estar sentado sin hacer nada. Ya se que sienten algunos burócratas, bueno pues a jugar con el cel, mandar mensajes, hacer una pequeña rana de papel.

Lo único divertido fue la comida, ah comemos a las 12 que más bien parece almuerzo, es que llevamos el horario americano. Les decía que la comida fue divertida pues platicamos mucho con los compañeros sobre las experiencias en la escuela, las aficiones y las chambas anteriores. También un poco de las aventuras de los que han estado asignados en EU con los clientes.

Primer día en la nueva chamba


Escribo esto varios días después ya que no había tenido oportunidad de hacerlo.

El martes 6 de julio, finalmente se me hizo entrar a las instalaciones de mi nuevo trabajo. Están bien, es mucho más grande que la empresa donde trabajaba son más de 600 personas en la oficina de Monterrey, ya contando todas las oficinas a nivel mundial son como 6000 empleados, lo cual es una cifra muy respetable tratándose de empresas de TI mexicanas.

Todavía se ven los rastros del huracán que ha azotado a Monterrey.

El cerro de las Mitras no se veía por las nubes tan bajas.


Lamentablemente no pude ver todavía el lugar que me asignarán para trabajar pues por culpa del huracán todo estaba hecho un caos, por ejemplo en algunas oficinas se metió el agua y se echaron a perder las alfombras. Por lo que me regresaron a chambear desde casa.

Como es común en el loby suelen poner los reconocimientos y certificaciones.

De hecho este día mucha gente no fue al trabajo debido a lo difícil del acceso.


Otra cosa que me gustó mucho fueron los baños jeje, ya que en mis anteriores empleos casi siempre estaban en mal estado, están aceptablemente limpios.

Ahora solo a esperar a que me asignen mi lugar y empezar a trabajar, pues ya se me está olvidando lo poco que sabía de Java jajaja.