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*"; }