miércoles, 15 de abril de 2009

Práctica 3: Uso de GreaseMonkey

Este script añade funcionalidad a la página del correo de la ugr. Permite distinguir emails según el emisor, añade un botón al que tras pasar una asignatura devuelve cierta información del profesorado y al final incluye una tabla de porcentajes de emails.




// ==UserScript==

// @name Mejoras-Correo
// @namespace http://geneura.org/projects/greasemonkey
// @description Permite añadirle ciertas mejoras al correo de la universidad tales como la distinción
// de emails dependiendo del que lo envió, búsqueda rápida del email de profesores,
// tabla con porcentajes
// @include https://correo*.ugr.es/*
// @include http://correo*.ugr.es/*

// ==/UserScript==


//Variables
//Array que contiene todos los correos
var correos = new Array();
//Array para los titulos de los mensajes de entrada
var titulos = new Array();
//Correos de tipo [infoalumnos]
var mensajesInfo = 0;
//Correos de profesores
var mensajesProf = 0;


//Simplemente voy llamando a cada una de las funciones creadas:
//-----------------------------------------------------------------------------------------//
//1-buscarEmails()
//Esta funcion busca los emails en la bandeja de entrada
buscarEmails();
//-----------------------------------------------------------------------------------------//
//2-pintarInfo()
//Colorea el fondo de los mensajes de [infoalumnos]
pintarInfo();
//-----------------------------------------------------------------------------------------//
//3-pintarProfesores()
//Colorea el fondo de los mensajes de profesores
pintarProfesores();
//-----------------------------------------------------------------------------------------//
//4-botonComienzo
//Creo un boton al inicio de la bandeja de entrada para buscar emails de profesores
botonComienzo();
//-----------------------------------------------------------------------------------------//
//5-parteFinal()
//Añade una tabla al final de la bandeja de entrada con el recuento de correos
parteFinal();
//-----------------------------------------------------------------------------------------//



function buscarEmails(){
if (document.getElementsByTagName('tbody')[7] != null) {

//Primero obtengo todos los elementos tr dentro del cuerpo de las tablas
//(si no ponemos tbody toma todos los de la pagina y podría salirse de la bandeja de entrada)
//De ellos obtenemos las filas, es decir los tr
var tr = document.getElementsByTagName('tbody')[7].getElementsByTagName('tr');

//Almaceno todos los tr que corresponden a correos en un array
//Esto es, cuando haya dos tr seguidos, hay un correo
for (var i = 2; i <>
//Lo añado al final
correos.push(tr[i]);
}

//Mostramos el numero de mensajes
GM_log('Numero de emails encontrados: ' + correos.length);
}
}//Fin de la funcion buscarEmails()


//Vamos a colorear los emails que vengan de "infoalumnos"
function pintarInfo(){

//Recorremos la bandeja de entrada
for(var t=0 ; t <>

//Almaceno las etiquetas td de cada correo (que son 6)
var td=correos[t].getElementsByTagName('td');

//Sacamos el titulo del correo que se encuentra en la etiqueta "a" dentro del cuarto "td"
var aCorreo=td[4].getElementsByTagName('a')[0];
//Y lo añadimos al vector
titulos[t]=aCorreo.textContent;

//Pintamos su fondo de naranja
//Nos basta comprobar que las primeras letras son las de [infoalumnos]
if(titulos[t][0]=='[' && titulos[t][1]=='i' && titulos[t][2]=='n' && titulos[t][3]=='f'){
mensajesInfo++;
for (var i = 0; i <>
td[i].setAttribute('bgcolor', '#F7BE81');
}
}

//Mostramos el titulo de los correos
GM_log('Correo: ' + (t+1) + titulos[t]);
}
//Mostramos el numero de mensajes [infoalumnos] encontrados
GM_log('Numero de mensajes "infoalumnos" recibidos: ' + mensajesInfo);

}//Fin de la funcion pintarInfo()



//Funcion para pintar los emails de los profesores
function pintarProfesores(){

//Recorro los correos de la bandeja de entrada
for (var i = 0; i <>

//Almaceno las etiquetas td de cada correo (que son 6)
var ttd = correos[i].getElementsByTagName('td');

//Obtengo el titulo del correo que está en el segundo td
var dir = ttd[1].getAttribute('title');

//Buscamos a ver si es de algun profesor de 4º curso
switch (dir) {
case "atv@ugr.es":
mensajesProf++;
for (var j = 0; j <>
ttd[j].setAttribute('bgcolor', '#AAFFAA');
}
//Mostramos su correo
GM_log('email: ' + i + dir);
break;
case "isanchez@ugr.es.com":
mensajesProf++;
for (var j = 0; j <>
ttd[j].setAttribute('bgcolor', '#AAFFAA');
}
//Mostramos su correo
GM_log('email: ' + i + dir);
break;
case "jjmerelo@gmail.com":
mensajesProf++;
for (var j = 0; j <>
ttd[j].setAttribute('bgcolor', '#AAFFAA');
}
//Mostramos su correo
GM_log('email: ' + i + dir);
break;
case "pameigeiras@ugr.es":
mensajesProf++;
for (var j = 0; j <>
ttd[j].setAttribute('bgcolor', '#AAFFAA');
}
//Mostramos su correo
GM_log('email: ' + i + dir);
break;
case "jfv@decsai.ugr.es":
mensajesProf++;
for (var j = 0; j <>
ttd[j].setAttribute('bgcolor', '#AAFFAA');
}
//Mostramos su correo
GM_log('email: ' + i + dir);
break;
case "noel@ugr.es":
mensajesProf++;
for (var j = 0; j <>
ttd[j].setAttribute('bgcolor', '#AAFFAA');
}
//Mostramos su correo
GM_log('email: ' + i + dir);
break;
case "aruizmoya@ugr.es":
mensajesProf++;
for (var j = 0; j <>
ttd[j].setAttribute('bgcolor', '#AAFFAA');
}
//Mostramos su correo
GM_log('email: ' + i + dir);
break;
case "fgamiz@ugr.es":
mensajesProf++;
for (var j = 0; j <>
ttd[j].setAttribute('bgcolor', '#AAFFAA');
}
//Mostramos su correo
GM_log('email: ' + i + dir);
break;
}
}
//Mostramos el numero de mensajes de profesores que llevamos
GM_log('Numero de emails de profesores: ' + mensajesProf);

}//Fin de la función pintarProfesores()




//Actualizamos la pagina con los resultados obtenidos
function botonComienzo(){

//Crearemos un boton para buscar informacion básica de las asignaturas de 4ºcurso
var centro = document.createElement('center');
var boton = document.createElement("input");
boton.setAttribute("type", "button");
boton.setAttribute("value", "Informacion Asignaturas");
boton.addEventListener("click", buscarAsignatura, true);
centro.appendChild(boton);
//Añadimos el texto al comienzo de la tabla 5 que ya de por si contiene otros botones
var ttr2 = document.getElementsByTagName('tbody')[5].getElementsByTagName('tr');
ttr2[0].parentNode.insertBefore(centro, ttr2[0]);

}//Fin de la funcion botonComienzo()



function hacerTabla(){

//Numero de filas y columnas
var fila1 = new Array;
fila1[0] = "";
fila1[1] = "Mensajes [infoalumnos]";
fila1[2] = "Mensajes de profesores"
var fila2 = new Array;
fila2[0] = "Numero de mensajes";
fila2[1] = mensajesInfo;
fila2[2] = mensajesProf;
var fila3 = new Array;
fila3[0] = "Porcentaje";
//Para los porcentajes mostraremos solo dos cifras decimales
var resulInfo = ((mensajesInfo) / (mensajesInfo + mensajesProf)) * 100;
fila3[1]=Math.round(resulInfo*100)/100 ;
var resulProf = ((mensajesProf) / (mensajesInfo + mensajesProf)) * 100;
fila3[2]=Math.round(resulProf*100)/100 ;

//Comenzamos a crear la tabla
var tab = document.createElement('table');
var tabBody = document.createElement('tbody');

//Fila 1
//Creamos una nueva columna con un color de fondo azul
var row = document.createElement('tr');
row.setAttribute("bgcolor", "#81BEF7");

//La vamos recorriendo y escribiendo en ella los titulos
for (j = 0; j <>
var texto = document.createTextNode(fila1[j]);
var celdaTitulo = document.createElement('th');
celdaTitulo.appendChild(texto);
row.appendChild(celdaTitulo);
tabBody.appendChild(row);
}

//Fila 2
var row1 = document.createElement('tr');
row1.setAttribute("bgcolor", "#F5F6CE");

for (j = 0; j <>
var texto = document.createTextNode(fila2[j]);
var celda = document.createElement('td');
celda.appendChild(texto);
row1.appendChild(celda);
}

tabBody.appendChild(row1);


//Fila 3
var row2 = document.createElement('tr');
row2.setAttribute("bgcolor", "#F5F6CE");

for (j = 0; j <>
var texto = document.createTextNode(fila3[j] + " %");
var celda = document.createElement('td');

celda.appendChild(texto);
row2.appendChild(celda);
}
tabBody.appendChild(row2);


//Añadimos mas estilos a la tabla
tab.appendChild(tabBody);
tab.setAttribute("border", "2");
tab.setAttribute("align", "right");
tab.setAttribute("cellspacing", "8");
tab.setAttribute("cellpadding", "8");
tab.setAttribute("bgcolor", "#FFFFFF");

//Añadimos el texto al final de la pagina
var tr2 = document.getElementsByTagName('table');
var salto3 = document.createElement('br');
tr2[tr2.length - 1].parentNode.insertBefore(salto3, tr2[tr2.length - 1]);
tr2[tr2.length - 1].parentNode.insertBefore(tab, tr2[tr2.length - 1]);

}//Fin de la funcion hacerTabla()


function buscarAsignatura()
{
var asignatura=prompt("Escribe las siglas en mayusculas de una asignatura de 4º curso para obtener informacion");
GM_log(asignatura);

switch (asignatura) {
case "SRD":
cadena = "Asignatura: Sistemas de RadioComunicación \n";
cadena += "Profesor: Angel de la Torre Vega \n"
cadena += "Email: atv@ugr.es";
break;
case "AP":
cadena = "Asignatura: Antenas y Propagacion \n";
cadena += "Profesor: Ignacio Sánchez García \n"
cadena += "Email: isanchez@ugr.es";
break;
case "AAP":
cadena = "Asignatura: Arquitecturas de Altas Prestaciones \n";
cadena += "Profesor: Su magestad Juan Julián Merelo xD\n"
cadena += "Email: jjmerelo@gmail.com";
break;
case "SCO":
cadena = "Asignatura: Sistemas de Conmutación \n";
cadena += "Profesor: Pablo Ameigeiras Gutiérrez \n"
cadena += "Email: pameigeiras@ugr.es";
break;
case "PDI":
cadena = "Asignatura: Procesamiento Digital de Imágenes \n";
cadena += "Profesor: Joaquín Fernández Valdivia \n"
cadena += "Email: jfv@decsai.ugr.es";
break;
case "TSF":
cadena = "Transmisión por Soporte Físico\n";
cadena += "Profesor: Noel Rodríguez Santiago \n"
cadena += "Email: noel@ugr.es";
break;
case "SRC":
cadena = "Seguridad en Redes de Comunicación\n";
cadena += "Profesor: Antonio Ruiz Moya \n"
cadena += "Email:aruizmoya@ugr.es";
break;
case "CIC":
cadena = "Diseño de Circuitos y Sistemas Electrónicos\n";
cadena += "Profesor: Francisco Gámiz Pérez \n"
cadena += "Email:fgamiz@ugr.es";
break;
default:
cadena = "No ha escrito nada así que no hay información";
break;
}

//Y muestro la información por pantalla
alert(cadena);

}//Fin de la funcion buscarAsignatura()



//Abajo añadimos anotaciones sobre los colores y un boton de busqueda de información
function parteFinal(){

//Letra en cursiva
var i1 = document.createElement('i');
var i2 = document.createElement('i');
i1.setAttribute('style', 'color: #F7BE81');
i2.setAttribute('style', 'color: #A1F5AF');
var txt = document.createTextNode(" * Correo de [infoalumno]");
var txt2 = document.createTextNode(" * Correo de profesores");
//Añadimos el texto
i1.appendChild(txt);
i2.appendChild(txt2);
//Añadimos el texto al final de la pagina
var tr2 = document.getElementsByTagName('table');
tr2[tr2.length - 1].parentNode.insertBefore(i1, tr2[tr2.length - 1]);
tr2[tr2.length - 1].parentNode.insertBefore(i2, tr2[tr2.length - 1]);


//Por ultimo creamos una tabla con los porcentajes
hacerTabla();

}//Fin de la funcion parteFinal()

No hay comentarios: