NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name Mejoras Editor Wiki Fiuba
// @namespace http://localhost
// @description Importación automatica de templates, asistente de links a páginas nuevas
// @include http://wiki.foros-fiuba.com.ar/*
// @version 1.3
// @grant GM_addStyle
// @grant GM_openInTab
// ==/UserScript==
// Modo de depuración
DEBUGMODE = false;
//////////
var addLog = function(str){
return DEBUGMODE?console.log(str):0;
}
var parseDate = function(str){
myRegex = /(\d+)\/(\d+)\/(\d+)/ig;
matches = myRegex.exec(str);
if (matches)
return new Date(matches[3], matches[2]-1, matches[1]);
else
return new Date();
}
var getUrlData = function(){
// Veo si estoy en una página de parcial / final
var data = document.URL;
var urlRegEx = /(?:http:\/\/wiki\.foros\-fiuba\.com\.ar\/materias):(\d+):(\d+):(final|parcial|parcialito)_([0-9]{4})([0-9]{2})([0-9]{2})_?(\d)?/ig;
var match = urlRegEx.exec(data);
if (match){
return {
"codigoMateria": ""+match[1]+"."+match[2],
"tipoExamen": match[3].toLowerCase(),
"fecha": new Date(match[4],+match[5]-1,match[6]),
"nombreMateria": getNombreMateria(""+match[1]+"."+match[2]),
"tema": match[7],
"nroOportunidad": 1
};
}else{
// Pruebo si estoy en una página de materia
urlRegEx = /(?:http:\/\/wiki\.foros\-fiuba\.com\.ar\/materias):(\d+):(\d+)/ig;
match = urlRegEx.exec(data);
if (match){
return {
"codigoMateria": ""+match[1]+"."+match[2],
"tipoExamen": "",
"fecha": null,
"nombreMateria": getNombreMateria(""+match[1]+"."+match[2]),
"tema": "",
"nroOportunidad": 1 //Ver el tema de esto. Mejorar
};
}else{
// Ni idea de nada
return {
"codigoMateria": "XX.XX",
"tipoExamen": "final",
"fecha": new Date(),
"nombreMateria": "*Nombre de la materia*",
"tema": "",
"nroOportunidad": 1
};
}
}
}
var printFecha = function(date){
// Devuelve un string con la fecha como la escribimos nosotros: dd/mm/aaaa
var str = (date.getDate()<10?"0":"") + date.getDate() + '/' + ((date.getMonth()+1)<10?"0":"")+String(date.getMonth()+1) + '/' + date.getFullYear();
return str;
}
var printCardinal = function(x){
addLog("printCardinal: "+x);
// Devuelve un string con "primera", "segunda", etc en lugar de 1, 2, etc.
x=parseInt(x);
x=Math.round(x);
var cardinales = ["Primera","Segunda","Tercer","Cuarta","Quinta", "Sexta", "Séptima"];
if (x > 0 && x <= 7){
return cardinales[x-1];
}else
return x+"º";
}
var getPeriodo = function(data){
// Devuelve [1º Cuatrimestre|2º Cuatrimestre|Verano|Invierno] segun corresponda
if (!data) return;
switch(data.tipoExamen){
case "final":
if (data.fecha.getMonth()<3 || data.fecha.getMonth()>10){
//De noviembre a diciembre y de enero a marzo es verano
return "Verano";
}else{
return "Invierno";
}
break;
case "parcial":
if (data.fecha.getMonth()<6)
return "1º Cuatrimestre";
else
return "2º Cuatrimestre";
break;
}
// Algo raro, no digo nada
return "[1º Cuatrimestre|2º Cuatrimestre|Verano|Invierno]";
}
var printTemplate = function(data){
addLog("printTemplate");
//Reemplaza los campos del template con la información de data
var template = "====== Examen TIPO_EXAMEN - CODIGO_MATERIA. NOMBRE_MATERIA - FECHA ======\n\n**Cátedra:** CATEDRA\\\\ \n**Fecha:** NRO_OPORTUNIDAD Oportunidad - PERIODO AÑO\\\\ \n**Día:** FECHA\n\n<note important>\nEsta página está incompleta; podés ayudar completando el material.\n</note>\n\n===== Enunciado =====\n\n<!-- ==== Punto I ==== ... -->\n\n===== Resolución =====\n\n<!-- ==== Punto I ==== ... -->\n\n===== Discusión =====\n\n<note warning>\nSi ves algo que te parece incorrecto en la resolución y no te animás a cambiarlo, dejá tu comentario acá.\n</note>"
var reemplazos=new Array();
reemplazos["TIPO_EXAMEN"]=data.tipoExamen;
reemplazos["CODIGO_MATERIA"]=data.codigoMateria;
reemplazos["NOMBRE_MATERIA"]=data.nombreMateria;
reemplazos["FECHA"]=printFecha(data.fecha);
reemplazos["CATEDRA"]=data.catedra;
reemplazos["NRO_OPORTUNIDAD"]=printCardinal(data.nroOportunidad);
reemplazos["PERIODO"]=getPeriodo(data);
reemplazos["AÑO"]=data.fecha.getFullYear();
reemplazos["TEMA"]=data.tema; //El tema no está contemplado en el template.
for (var i in reemplazos){
template = template.replace(eval("/"+i+"/g"),reemplazos[i]);
}
return template;
}
// Inyección de HTML y eso
var isEditPage = function(){
//Verifica si estoy en modo de edición, y por ende, si hay que correr este script.
return Boolean(document.getElementById("tool__bar"));
}
var isNewPage = function(){
// Verifica si es una pagina que no existe aún
return Boolean(document.getElementById("este_tema_no_existe_todavia"));
}
/////////////////////////////////////////////////////
main = function(){
addLog("main() Mejoras_Editor_Wiki_Fiuba");
if(!isEditPage()){
if (isNewPage()){
//Veamos si tengo que auto-crearla
if(document.URL.indexOf("autocreate=1")==-1)
return; //:(
//Sí, tengo que crear la página
if(document.getElementsByClassName("button btn_create")[0])
document.getElementsByClassName("button btn_create")[0].submit();
}
}
addLog("Es una página de edición");
//Agrego estilos CSS
addCSS();
//Agrego el botón para el asistente de links a páginas nuevas
var my_btn = document.createElement("input"); //usar button, clase toolbutton y una imagen en lugar de texto
my_btn.type="button";
my_btn.className="button";
my_btn.onclick = linkWiz.start;//newPageWiz.open;
my_btn.value="Link a página nueva";
document.getElementById("tool__bar").appendChild(my_btn);
//Agrego los links al editor de templates
var my_btn = document.createElement("input"); //usar button, clase toolbutton y una imagen en lugar de texto
my_btn.type="button";
my_btn.className="button";
my_btn.onclick = templateWiz.start;
my_btn.value="Asistente de Plantillas para exámenes";
document.getElementById("tool__bar").appendChild(my_btn);
}
window.addEventListener('load', main);
addLog("Script Wiki corriendo");
/****** Otras funciones ******/
var addCSS = function() {
addLog("Entrando a función addCSS()");
GM_addStyle('\
.myWindow label{\
width: 100px;\
display: block;\
float:left;\
padding:2px;\
margin:2px;\
cursor:pointer;\
text-align: left;\
}\
\
.myWindow form{\
display:block;\
padding:2px;\
}\
\
.myWindow fieldset{\
display: block;\
}\
\
.formPair{\
overflow:auto;\
}\
\
.myWindow input[type=text], select{\
width:180px;\
display:block;\
float: none;\
}\
\
.myWindow{\
z-index: 100001;\
position:absolute;\
display:block;\
z-index:99;\
width:300px;\
height:250px;\
padding:0;\
margin:0;\
border:1px solid #8cacbb;\
background-color:#f5f5f5;\
text-align:center;\
}\
\
.myWindow_content{\
display:block;\
background-color:#f5f5f5;\
text-align:center;\
}\
\
.myWindow_header{\
background-color:#dee7ec;\
height:16px;\
margin-bottom:5px;\
}\
\
.myWindow_close{\
cursor:pointer;\
margin:0;\
}\
\
\
.myWindow_fondo{\
display:block;\
z-index: 100000;\
position: absolute;\
height: 300%;\
width: 100%;\
top: 0px;\
left: 0px;\
background-color:#101010;\
opacity: 0.7;\
}\
');
addLog("Saliendo de función addCSS()");
}
// Linkwiz
var linkWiz = {
data: null
};
linkWiz.injectLinkForm = function(){
addLog("Entrando a función injectLinkForm()");
var my_div = document.createElement('div');
my_div.innerHTML = '\
<div id="linkWiz_fondo">\
<div class="myWindow_fondo"></div>\
<div id="linkWiz" class="dokuwiki picker myWindow" style="top: 113px; left: 275px; margin-left: 0px; margin-top: 0px; position: absolute; width: auto; height:auto; z-index:9999999">\
<div class="myWindow_header" id="linkWiz_header">\
<img src="/lib/images/close.png" alt="" class="myWindow_close" id="linkWiz_close" height="16" align="right" width="16"/>\
Insertar link a nuevo Exámen\
</div>\
<div id="linkWiz_addTemplateDiv" class="myWindow_content">\
<form id="linkWiz_addTemplateForm" method="post" action="">\
<fieldset>\
<legend>Datos del Examen</legend>\
<div class="formPair">\
<label for="linkWiz_examen">Tipo</label> \
<select name="linkWiz_examen" id="linkWiz_examen" value="1">\
<option value="1">Final</option>\
<option value="2">Parcial</option>\
<option value="3">Parcialito</option>\
<option value="0">Otro (especificar)</option>\
</select></div>\
<div id="linkWiz_examen2Container" class="formPair" style="display:none">\
<label for="linkWiz_examen2">Especifique</label> \
<input name="linkWiz_examen2" type="text" id="linkWiz_examen2" value="Especifique tipo de examen" /></div>\
<div class="formPair">\
<label for="linkWiz_fecha">Fecha</label> \
<input name="linkWiz_fecha" type="text" id="linkWiz_fecha" value="dd/mm/aaaa" /></div>\
<div class="formPair">\
<label for="linkWiz_tema">Tema</label> \
<input type="text" name="linkWiz_tema" id="linkWiz_tema" value="1" /></div>\
</fieldset>\
<fieldset>\
<legend>Datos de la Materia</legend>\
<div class="formPair">\
<label for="linkWiz_codigo">Código</label> \
<input type="text" name="linkWiz_codigo" id="linkWiz_codigo" value="XX.XX" /></div>\
</fieldset>\
<div class="formPair">\
<label for="linkWiz_open">Abrir link</label> \
<input type="checkbox" name="linkWiz_open" id="linkWiz_open" checked/></div>\
<input type="button" class="button" value="Insertar Link" id="linkWiz_submit" /> \
<input type="button" class="button" value="Cancelar" id="linkWiz_cancel" /> \
</div>\
</div>\
</div>\
';
document.body.appendChild(my_div);
//Campo "Especifique" que aparece solo cuando se selecciona "Otros" en la lista desplegable
document.getElementById('linkWiz_examen').addEventListener('change',linkWiz.refreshDisplay, false);
linkWiz.refreshDisplay(); //Ejecuto esto para que se configure
//Funcionalidad del botón X para cerrar
document.getElementById('linkWiz_close').addEventListener('click', linkWiz.close, false);
//Funcionalidad de los botones
document.getElementById('linkWiz_submit').addEventListener('click', linkWiz.submit, false);
document.getElementById('linkWiz_cancel').addEventListener('click', linkWiz.close, false);
addLog("Saliendo de función injectLinkForm()");
return my_div;
}
linkWiz.refreshDisplay = function(){
document.getElementById('linkWiz_examen2Container').style.display=(+document.getElementById("linkWiz_examen").value==0)?'block':'none';
document.getElementById('linkWiz_examen2').value="**Especifique**";
}
linkWiz.close = function(){
document.getElementById("linkWiz_fondo").style.display="none";
addLog("cerrado");
}
linkWiz.open = function(){
document.getElementById("linkWiz_fecha").value="dd/mm/aaaa";
document.getElementById("linkWiz_fondo").style.display="block";
document.getElementById("linkWiz_fecha").focus();
}
linkWiz.start = function(){
if (!document.getElementById("linkWiz"))
// Si no se inyectó el HTML, lo hago ahora
linkWiz.injectLinkForm();
if(!linkWiz.data){
linkWiz.data = getUrlData();
}
//Defino este coso
var $ = function(str){ //Ay, soy re cabeza :P
return document.getElementById(str);
}
// Configuro cada campo
var noUndefined = function(x){
return (x)?x:"";
}
$("linkWiz_codigo").value = noUndefined(linkWiz.data.codigoMateria);
linkWiz.refreshDisplay();
linkWiz.open();
}
linkWiz.submit = function(){
addLog("submit lnkWiz");
//Acá pasa todo
var $ = function(str){
return document.getElementById(str);
}
//Recuperamos los valores que el usuario ingresó
var tipos_examen = ["Final","Parcial","Parcialito"];
if( +$("linkWiz_examen").value == 0){
linkWiz.data.tipoExamen=$("linkWiz_examen2").value;
}else{
linkWiz.data.tipoExamen=tipos_examen[+$("linkWiz_examen").value-1];
}
linkWiz.data.fecha = parseDate($("linkWiz_fecha").value);
linkWiz.data.codigoMateria=$("linkWiz_codigo").value;
//Parseo el tema
linkWiz.data.tema = ($("linkWiz_tema").value==="")?"1":$("linkWiz_tema").value;
var date = linkWiz.data.fecha;
var fecha_str = ""+date.getFullYear() + "" + ((date.getMonth()+1)<10?"0":"")+String(date.getMonth()+1) + "" +(date.getDate()<10?"0":"") + date.getDate();
var myRegEx_codigo = /(\d+).(\d+)/ig;
var match = myRegEx_codigo.exec(linkWiz.data.codigoMateria);
if(match){
var numero_materia = match[2];
}else{
linkWiz.close();
alert('Error');
return 0;
}
console.log(numero_materia);
var text="[[."+numero_materia+":"+linkWiz.data.tipoExamen.toLowerCase()+"_"+fecha_str+"_"+linkWiz.data.tema+"|"+linkWiz.data.tipoExamen+" del "+printFecha(linkWiz.data.fecha)+", Tema "+linkWiz.data.tema+"]]";
console.log(text);
//Imprimimos
unsafeWindow.pasteText(unsafeWindow.getSelection($("wiki__text")), text, 0);
addLog("Teminamos de imprimir");
//Salimos
linkWiz.close();
if($("linkWiz_open").checked)
GM_openInTab(document.URL+":"+linkWiz.data.tipoExamen.toLowerCase()+"_"+fecha_str+"_"+linkWiz.data.tema+"?autocreate=1");
}
//TemplateWiz
var templateWiz = {
data: null
};
templateWiz.injectTemplateForm = function(){
addLog("Entrando a función injectTemplateForm()");
var my_div = document.createElement('div');
my_div.innerHTML = '\
<div id="templateWiz_fondo">\
<div class="myWindow_fondo"></div>\
<div id="templateWiz" class="dokuwiki picker myWindow" style="top: 113px; left: 275px; margin-left: 0px; margin-top: 0px; position: absolute; width: auto; height:auto; z-index:9999999">\
<div class="myWindow_header" id="templateWiz_header">\
<img src="/lib/images/close.png" alt="" class="myWindow_close" id="templateWiz_close" height="16" align="right" width="16"/>\
Insertar plantilla de Exámen\
</div>\
<div id="templateWiz_addTemplateDiv" class="myWindow_content">\
<form id="templateWiz_addTemplateForm" method="post" action="">\
<fieldset>\
<legend>Datos del Examen</legend>\
<div class="formPair">\
<label for="templateWiz_examen">Tipo</label> \
<select name="templateWiz_examen" id="templateWiz_examen" value="1">\
<option value="1">Final</option>\
<option value="2">Parcial</option>\
<option value="3">Parcialito</option>\
<option value="0">Otro (especificar)</option>\
</select></div>\
<div id="templateWiz_examen2Container" class="formPair" style="display:none">\
<label for="templateWiz_examen2">Especifique</label> \
<input name="templateWiz_examen2" type="text" id="templateWiz_examen2" value="Especifique tipo de examen" /></div>\
<div class="formPair">\
<label for="templateWiz_fecha">Fecha</label> \
<input name="templateWiz_fecha" type="text" id="templateWiz_fecha" value="dd/mm/aaaa" /></div>\
<div class="formPair">\
<label for="templateWiz_oportunidad">Oportunidad</label> \
<input type="text" name="templateWiz_oportunidad" id="templateWiz_oportunidad" value="1" /></div>\
<div class="formPair">\
<label for="templateWiz_tema">Tema</label> \
<input type="text" name="templateWiz_tema" id="templateWiz_tema" value="1" /></div>\
</fieldset>\
<fieldset>\
<legend>Datos de la Materia</legend>\
<div class="formPair">\
<label for="templateWiz_codigo">Código</label> \
<input type="text" name="templateWiz_codigo" id="templateWiz_codigo" value="XX.XX" /></div>\
<div class="formPair">\
<label for="templateWiz_nombreMateria">Nombre</label> \
<input type="text" name="templateWiz_nombreMateria" id="templateWiz_nombreMateria" /></div>\
<div class="formPair">\
<label for="templateWiz_catedra">Cátedra</label> \
<input type="text" name="templateWiz_catedra" id="templateWiz_catedra" value="Todas" /></div>\
</fieldset>\
<input type="button" class="button" value="Insertar Plantilla" id="templateWiz_submit" /> \
<input type="button" class="button" value="Cancelar" id="templateWiz_cancel" /> \
</div>\
</div>\
</div>\
';
document.body.appendChild(my_div);
//Campo "Especifique" que aparece solo cuando se selecciona "Otros" en la lista desplegable
document.getElementById('templateWiz_examen').addEventListener('change',templateWiz.refreshDisplay, false);
templateWiz.refreshDisplay(); //Ejecuto esto para que se configure
//Funcionalidad del botón X para cerrar
document.getElementById('templateWiz_close').addEventListener('click', templateWiz.close, false);
//Funcionalidad de los botones
document.getElementById('templateWiz_submit').addEventListener('click', templateWiz.submit, false);
document.getElementById('templateWiz_cancel').addEventListener('click', templateWiz.close, false);
addLog("Saliendo de función injectTemplateForm()");
return my_div;
}
templateWiz.refreshDisplay = function(){
document.getElementById('templateWiz_examen2Container').style.display=(+document.getElementById("templateWiz_examen").value==0)?'block':'none';
document.getElementById('templateWiz_examen2').value="**Especifique**";
}
templateWiz.close = function(){
document.getElementById("templateWiz_fondo").style.display="none";
addLog("cerrado");
}
templateWiz.open = function(){
document.getElementById("templateWiz_fondo").style.display="block";
}
templateWiz.start = function(){
if (!document.getElementById("templateWiz"))
// Si no se inyectó el HTML, lo hago ahora
templateWiz.injectTemplateForm();
if(!templateWiz.data){
templateWiz.data = getUrlData();
}
//Defino este coso
var $ = function(str){ //Ay, soy re cabeza :P
return document.getElementById(str);
}
// Configuro cada campo
var indice = ["final","parcial","parcialito"].indexOf(templateWiz.data.tipoExamen)+1; //salvo el tema del -1
$("templateWiz_examen").value = indice;
$("templateWiz_examen2").value = templateWiz.data.tipoExamen;
var noUndefined = function(x){
return (x)?x:"";
}
$("templateWiz_fecha").value = printFecha(templateWiz.data.fecha);
$("templateWiz_oportunidad").value = templateWiz.data.nroOportunidad;
$("templateWiz_tema").value = noUndefined(templateWiz.data.tema);
$("templateWiz_codigo").value = noUndefined(templateWiz.data.codigoMateria);
$("templateWiz_nombreMateria").value = noUndefined(templateWiz.data.nombreMateria);
$("templateWiz_catedra").value = noUndefined(templateWiz.data.catedra);
templateWiz.refreshDisplay();
templateWiz.open();
}
templateWiz.submit = function(){
addLog("submit");
//Acá pasa todo
var $ = function(str){
return document.getElementById(str);
}
//Recuperamos los valores que el usuario ingresó
if( +$("templateWiz_examen").value == 0){
templateWiz.data.tipoExamen=$("templateWiz_examen2").value;
}else{
var tipos_examen = ["final","parcial","parcialito"];
templateWiz.data.tipoExamen=tipos_examen[+$("templateWiz_examen").value-1];
}
templateWiz.data.fecha = parseDate($("templateWiz_fecha").value);
templateWiz.data.nroOportunidad=parseInt($("templateWiz_oportunidad").value);
templateWiz.data.tema=$("templateWiz_tema").value;
templateWiz.data.codigoMateria=$("templateWiz_codigo").value;
templateWiz.data.nombreMateria=$("templateWiz_nombreMateria").value;
templateWiz.data.catedra=$("templateWiz_catedra").value;
addLog(printTemplate(templateWiz.data));
//Imprimimos
$("wiki__text").value = printTemplate(templateWiz.data) + "\n" + $("wiki__text").value;
addLog("Teminamos de imprimir");
//Salimos
templateWiz.close();
}
// Nombres materias
var getNombreMateria = function(codigo){
var materias = {
'70.07':'Cálculo de Compensación',
'70.18':'Catastro y Valuaciones',
'70.31':'Información Rural',
'75.00':'Tesis de Grado en Ingenieria Informática',
'75.01':'Computación',
'75.02':'Algoritmos y Programación I',
'75.03':'Organización del Computador',
'75.04':'Algoritmos y Programación II',
'75.06':'Organización de Datos',
'75.07':'Algoritmos y Programación III',
'75.08':'Sistemas Operativos',
'75.10':'Técnicas de Diseño',
'75.12':'Análisis Numérico I',
'75.15':'Base de Datos',
'75.18':'Proyectos Informáticos',
'75.26':'Simulación',
'75.29':'Teoría de Algoritmos I',
'75.33':'Redes y Teleprocesamiento I',
'75.38':'Análisis Numérico II',
'75.40':'Algoritmos y Programación I',
'75.41':'Algoritmos y Programación II',
'75.42':'Taller de Programación I',
'75.43':'Introducción a los Sistemas Distribuidos',
'75.44':'Administración y Control de Proyectos Informáticos',
'75.46':'Administración y Control de Proyectos Informáticos II',
'75.47':'Taller de Desarrollo de Proyectos II',
'75.48':'Calidad en el Desarrollo de Sistema',
'75.50':'Introducción a los Sistemas Inteligentes',
'75.51':'Técnicas de Producción de Software I',
'75.52':'Taller de Programación 2',
'75.53':'Técnicas de Producción de Software II',
'75.54':'Técnicas de Producción de Software III',
'75.58':'Evaluación de Proyectos y Manejo de Riesgos',
'75.59':'Técnicas de Programación Concurrente I',
'75.60':'Sistemas Distribuidos I',
'75.61':'Taller de Programación III',
'75.62':'Técnicas de Programación Concurrente II',
'75.63':'Sistemas Distribuidos II',
'75.65':'Manufactura Integrada por Computador I',
'75.66':'Manufactura Integrada Por Computador II',
'75.67':'Sistemas Automáticos de Diagnóstico y Detección de Fallas I',
'75.68':'Sistemas de Soporte para Celdas de Produccion Flexible',
'75.69':'Sistemas Automáticos de Diagostico y Deteccion de Fallas II',
'75.70':'Sistemas de Programacion no Convencional de Robots',
'75.73':'Arquitectura de Software',
'75.74':'Sistemas Distribuidos',
'74.01':'Hormigón I',
'74.03':'Arquitectura y Planificación',
'74.04':'Construcciones',
'74.05':'Hormigón II',
'74.07':'Instalaciones de Edificios',
'74.08':'Presas',
'74.09':'Maquinarias de la Construcción',
'74.10':'Urbanismo',
'74.11':'Cimentaciones',
'74.12':'Estructuras Metálicas I',
'74.13':'Estructuras Metálicas II',
'74.14':'Tecnología del Hormigón',
'74.15':'Patología de la Construcción',
'74.16':'Estructuras de Madera',
'74.17':'Sistemas Constructivos',
'74.18':'Sistemas Estructurales',
'74.19':'Diseño Estructural',
'74.21':'Inspección y Ejecución de Estructuras de Hormigón',
'74.99':'Trabajo Profesional de Ingeniería Civil',
'66.00':'Tesis de Ingeniería Electrónica',
'66.01':'Técnica Digital',
'66.02':'Laboratorio',
'66.03':'Electrónica General',
'66.04':'Electrónica I',
'66.05':'Electrónica II',
'66.06':'Análisis de Circuitos',
'66.08':'Circuitos Electrónicos I',
'66.09':'Laboratorio de Microcomputadoras',
'66.10':'Circuitos Electrónicos II',
'66.12':'Introducción a Proyectos',
'66.17':'Sistemas Digitales',
'66.18':'Teoría de Control I',
'66.19':'Circuitos de Pulsos',
'66.20':'Organización de Computadoras',
'66.21':'Comunicación de Datos',
'66.24':'Teoría de la Información y Codificación',
'66.25':'Dispositivos Semiconductores',
'66.26':'Arquitecturas Paralelas',
'66.27':'Electrónica de Potencia',
'66.28':'Teoría de Control II',
'66.29':'Control Industrial Distribuído',
'66.30':'Control no lineal',
'66.31':'Identificación y Control Adaptativo',
'66.32':'Robótica',
'66.33':'Laboratorio de Sistemas Digitales',
'66.38':'Procesamiento de Señales I',
'66.39':'Procesamiento de Señales II',
'66.42':'Comunicaciones Digitales II',
'66.43':'Ingeniería Biomédica',
'66.44':'Instrumentos Electrónicos',
'66.45':'Laboratorio de Mediciones',
'66.46':'Reconocimiento del Habla',
'66.47':'Procesamiento de Imágenes',
'66.48':'Seminario de Ing. Electrónica I',
'66.66':'Seminario de Ing. Electrónica II',
'66.49':'Sistemas Biológicos',
'66.50':'Tecnología de Componentes',
'66.51':'Teoría de Detección y Estimación',
'66.53':'Instrumentación y Control de Procesos',
'66.55':'Simulación de Sistemas de Control',
'66.56':'Control Óptimo',
'66.57':'Optoelectrónica',
'66.61':'Tecnología de Circuitos Integrados',
'66.62':'Redes de Computadoras',
'66.63':'Redes Neuronales',
'66.64':'Control Robusto',
'66.67':'Acústica',
'66.68':'Electroacústica',
'66.69':'Criptografía y Seguridad Informática',
'66.70':'Estructuras del Computador',
'66.71':'Sistemas Gráficos',
'66.72':'Señales e Imágenes en Biomedicina',
'66.73':'Instalaciónes e Instrumentación Biomédica',
'66.74':'Señales y Sistemas',
'66.75':'Procesos Estocásticos',
'66.76':'Transmisión y Recepción de Comunicaciones',
'66.77':'Sistemas de Comunicaciones',
'66.78':'Comunicaciones Digitales y Analógicas',
'66.79':'Laboratorio de Comunicaciones',
'66.80':'Sistemas Inalámbricos',
'66.81':'Televisión, Video y Redes de Cable',
'66.82':'Propagación y Sistemas Irradiantes',
'66.83':'Infraestructura de Redes',
'66.99':'Trabajo Profesional de Ingeniería Electrónica',
'65.03':'Electrotécnia General "A"',
'65.05':'Electrotécnia General "C"',
'65.09':'Teoría de Circuitos',
'65.10':'Teoría de Campos',
'65.11':'Tecnología de los materiales I',
'65.12':'Tecnología de los materiales II',
'65.17':'Centrales Eléctricas',
'65.25':'Construcciones Electromecánicas',
'65.28':'Control de Procesos Industriales',
'65.30':'Electrotécnia General "D"',
'65.33':'Economía de la Energía Eléctrica',
'65.37':'Energías Renovables',
'65.45':'Regulación de Servicios Públicos',
'65.46':'Energía Eólica, Hidráulica y Marina',
'65.48':'Ingeniería de las Instalaciones Eléctricas',
'64.01':'Estabilidad I A',
'64.02':'Estabilidad II A',
'64.08':'Mecánica de Suelos',
'64.10':'Estabilidad IV',
'64.13':'Estabilidad IIIB',
'64.18':'Dinámica de las Estructuras I',
'64.19':'Dinámica de las Estructuras II',
'62.01':'Física I',
'62.03':'Física II',
'62.05':'Física III "A"',
'62.08':'Electromagnetismo "A"',
'62.09':'Electromagnetismo "B"',
'62.10':'Física del Estado Sólido',
'62.11':'Mecanica Racional',
'62.13':'Fisica III "C"',
'62.15':'Física III "D"',
'71.03':'Estadística Técnica',
'71.05':'Organización Industrial II',
'71.06':'Estructura Económica Argentina',
'71.08':'Organización Industrial III',
'71.14':'Modelos y Optimización I',
'71.17':'Derecho Informático',
'71.18':'Estructura Económica Argentina',
'71.22':'Legislación y Ejercicio Profesional de la Ingeniería Industrial',
'71.27':'Legislación y Ejercicio Profesional de la Ingeniería Electrónica',
'71.31':'Organización de la Producción',
'71.32':'Investigación Operativa Superior',
'71.35':'Estadística Técnica Superior',
'71.36':'Gestión de la Calidad',
'71.40':'Legislación y Ejercicio Profesional de la Ingeniería Informática',
'71.41':'Análisis y Resolución de Problemas',
'71.50':'Ingeniería Económica I',
'71.51':'Ingeniería Económica II',
'71.53':'Evaluación de Proyectos de Plantas Quimicas',
'71.58':'Análisis y Resolución de Problemas de Sistemas',
'71.59':'Emprendimientos en Ingeniería',
'69.02':'Ingenieria Sanitaria',
'69.03':'Mecánica de los Fluidos "A"',
'69.05':'Centrales Hidráulicas',
'69.11':'Gestión Ambiental de los Recursos Hídricos',
'78.01':'Idioma Inglés',
'78.02':'Idioma Alemán',
'78.03':'Idioma Francés',
'78.04':'Idioma Italiano',
'78.05':'Idioma Portugués',
'67.03':'Medios de Representación',
'67.11':'Mecanismos "A"',
'67.12':'Mecanismos "B"',
'67.13':'Conocimiento de Materiales I',
'67.15':'Tecnología Mecánica I',
'67.16':'Ensayos Industriales',
'67.17':'Taller',
'67.18':'Mecánica de Fluídos "B"',
'67.19':'Máquinas Alternativas',
'67.20':'Turbomáquinas',
'67.21':'Mediciones Físicas y Mecánicas',
'67.22':'Sistemas de Control',
'67.23':'Conversión de Energía',
'67.27':'Tecnología Mecánica II',
'67.29':'Proyecto de Maquinas',
'67.30':'Combustión',
'67.31':'Transferencia de Calor y Masa',
'67.32':'Tecnología del Frío',
'67.37':'Máquinas Energéticas',
'67.49':'Metalúrgica Física',
'67.50':'Materiales Ferrosos y sus Aplicaciones',
'67.51':'Máquinas Térmicas',
'67.52':'Termodinamica "B"',
'67.56':'Técnicas Energéticas',
'67.58':'Introducción al Método de los Elementos Finitos',
'67.59':'Introducción a la Mecánica del Continuo',
'67.60':'Introducción al Análisis Tensorial',
'73.01':'Arquitectura Naval I',
'73.02':'Construcción Naval I',
'73.03':'Arquitectura Naval II',
'73.04':'Estructura de Buques',
'73.05':'Introducción a Máquinas Marinas',
'73.40':'Prácticas en Astilleros I',
'73.06':'Vibraciones de Estructuras',
'73.07':'Construcción Naval II',
'73.09':'Proyecto de Buques I',
'73.10':'Proyecto de Buques II',
'73.11':'Máquinas Marinas I',
'73.12':'Máquinas Marinas II',
'73.41':'Prácticas en Astilleros II',
'73.00':'Tesis de Ingeniería Naval',
'73.99':'Trabajo Profesional de Ing. Naval y Mec',
'73.14':'Navegación',
'73.15':'Máquinas Marinas III',
'73.16':'Construcción Naval III',
'76.45':'Termodinámica de los Procesos',
'76.46':'Introducción a la Ingeniería Química',
'76.47':'Fenómenos de Transporte',
'76.48':'Evaluación de Propiedades Físicas',
'76.49':'Operaciones Unitarias de Transferencia de Cantidad de Movimiento y Energía',
'76.52':'Operaciones Unitarias de Transferencia de Materia',
'76.53':'Diseño de Reactores',
'76.54':'Instalaciones de Plantas de Procesos',
'76.55':'Microbiología Industrial',
'76.56':'Instrumentación y Control de Plantas Químicas',
'76.57':'Diseño de Procesos',
'76.58':'Emisiones de Contaminantes Químicos y Biológicos',
'76.59':'Trabajo Profesional de la Ing. Química I',
'76.60':'Laboratorio de Operaciones y Procesos',
'76.61':'Bioingeniería',
'76.62':'Trabajo Profesional de la Ing. Química II',
'76.16':'Electroquímica',
'76.17':'Procesos Electroquímicos',
'76.18':'Fisicoquímica Especial',
'76.22':'Fundamentos de la Ing. de Reservorios',
'76.23':'Recuperación Asistida de Petróleo',
'76.24':'Fundamentos de la Simulación Numérica de Reservorios',
'76.25':'Explotación de Yacimientos',
'76.27':'Control Estadístico de Procesos',
'76.28':'Gestión de Recursos en la Industria de Procesos',
'76.29':'Industria de Procesos',
'76.30':'Industrias Alimenticias',
'76.51':'Introducción a la Planificación Interactiva',
'76.63':'Diseño Avanzado de Reactores',
'76.03':'Operaciones I',
'76.04':'Operaciones Unitarias II',
'76.05':'Operaciones Unitarias III',
'76.08':'Ingeniería de las Reacciones Químicas',
'76.12':'Microbiología Industrial',
'76.40':'Introducción a la Bioquímica',
'76.41':'Biotegnología',
'76.42':'Ingeniería de las Instalaciones II B',
'76.43':'Instrumentación y Control',
'76.44':'Practica Profesional',
'76.90':'Tesis de Grado de Ingeniería en Alimentos',
'61.03':'Análisis Matemático II "A"',
'61.04':'Análisis Matemático II "B"',
'61.06':'Probabilidad y Estadistica "A"',
'61.07':'Matemática Discreta',
'61.08':'Algebra II "A"',
'61.09':'Probabilidad y Estadistica "B"',
'61.10':'Análisis Matemático III',
'61.11':'Algebra II "B"',
'61.12':'Análisis Matemático III "B"',
'61.13':'Análisis Matemático III "C"',
'61.14':'Matemática especial para Ingeniería Química',
'61.15':'Matemática aplicada a la agrimensura',
'61.16':'Matemática para Ingenieros',
'61.17':'Teoría de Grafos',
'61.18':'Ecuaciones Diferenciales Ordinarias',
'61.19':'Análisis funcional',
'63.01':'Química B',
'63.02':'Química I',
'63.04':'Química III',
'63.05':'Química Analítica',
'63.06':'Química Física I',
'63.07':'Química Física II',
'63.08':'Análisis Instrumental',
'63.09':'Química Orgánica Especial',
'63.10':'Termodinámica Estadística',
'63.11':'Química Aplicada A',
'63.13':'Química Inorgánica',
'77.01':'Higiene y Seguridad en el Trabajo',
'72.01':'Materiales Industriales I',
'72.02':'Industrias I',
'72.04':'Industrias de Procesos de Conformación',
'72.06':'Automatización Industrial',
'72.11':'Industrias Petroquímicas',
'72.12':'Industrias Textiles',
'72.13':'Materiales Industriales II',
'72.14':'Diseño de Productos',
'72.18':'Industrias II',
'72.99':'Trabajo Profesional de Ingenieria Industrial',
'68.01':'Construcción de Carreteras',
'68.02':'Diseño y Operación de Caminos',
'68.03':'Puertos y Vías Navegables',
'68.04':'Ferrocarriles',
'68.05':'Aeropuertos',
'68.07':'Ingeniería del Transporte',
'68.08':'Planeamiento del Transporte',
'68.99':'Trabajo Profesional de Ingeniería Civil'
};
nombre = materias[codigo];
return nombre?nombre:"*Nombre de la materia*";
}