Contenido

Añadiendo filtros a tus scripts con javascript

14 sep

+ 2

Ayer vimos la posibilidad de extender tus scripts con una adaptación de la API de plugins de WordPress en Javascript. Con esta capacidad puedes dejar tus scripts en meros nucleos que se extiendan mediante acciones que serán lanzadas en puntos definidos por ti. De esta forma personalizarlo es tan sencillo como añadir una línea con la nueva funcionalidad.

Pero, ¿y con los filtros? WordPress tambien tiene, como parte de la API para plugins un apartado de filtros que más que acciones permiten modificar un parámetro de una página. Veamos un pequeño ejemplo:

function saludarUsuario(nombre) {
	var texto = "Hola " + do_filter("saludar-usuario", nombre);
	alert(texto);
}

add_filter("saludar-usuario", function(nombre){
	if (nombre == "Andrés") return "aNieto2k";
	return nombre;
});

saludarUsuario("Juan");
// --> Hola Juan

saludarUsuario("Andrés");
// --> Hola aNieto2k

Como vemos, somos nosotros los que indicamos el parámetro que permitimos modificar y donde queremos hacerlo funcionar. Veamos las funciones que componen esta porción de API.

do_filter()

do_filter(where, param)

Esta función es la encargada de indicar donde se va a aplicar el filtro, le pasaremos el parámetro que deseemos modificar y el nombre del filtro que se le aplicará. Este nombre será usado por las siguiente funciones para añadir los filtros que deseemos.

function saludarUsuario(nombre) {
	var texto = "Hola " + do_filter("saludar-usuario", nombre);
	alert(texto);
}

add_filter()

add_filter(where, action)

Con esta función vamos añadiendo filtros(action) que se le pasarán al where que definamos. Por ejemplo:

// Reemplazamos Andrés por aNieto2k
add_filter("saludar-usuario", function(nombre){
	if (nombre == "Andrés") return "aNieto2k";
	return nombre;
});
// Mayusculas
add_filter("saludar-usuario", function(nombre){
	return nombre.toUpperCase();
});

Se aplicarán en orden de como fueron definidos.

remove_filter()

remove_filter(where, action)

Con remove_filter(), podremos eliminar filtros previamente definidos. Para ello informaremos el where con el lugar en el que se aplica el filtro y el action que se iba a ejecutar.

function Mayusculas(nombre){
	return nombre.toUpperCase();
}

add_filter("saludar-usuario", Mayusculas);
remove_filter("saludar-usuario", Mayusculas);

Ver el código

var filters = {};

function do_filter(where, param){
    if (typeof filters == 'undefined') return;
    if (typeof filters[where] == 'undefined') return;
    for (var x=0; x<filters[where].length; x++)
        param = filters[where][x](param);
    return param;
}

function add_filter(where, action) {
   if (typeof filters == 'undefined') return;
   if (typeof filters[where] == 'undefined') filters[where] = new Array();
	filters[where].push(action);
}

function remove_filter(where, action) {
	if (typeof filters[where] == 'undefined') return;
	var j = 0;
	while (j < filters[where].length) {
		if (filters[where][j] == action) { filters[where].splice(j, 1);}
		else { j++; }
		}
}

Dejo un fichero con las 6 funciones que componen toda esta API.

Comentar

#

Me reservo el derecho de eliminar y/o modificar los comentarios que contengan lenguaje inapropiado, spam u otras conductas no apropiadas en una comunidad civilizada. Si tu comentario no aparece, puede ser que akismet lo haya capturado, cada día lo reviso y lo coloco en su lugar. Siento las molestias.