====== Edición de subcampos codificados ====== A raíz de una [[http://groups.google.com/group/catalis/browse_thread/thread/4c31389fd6c6a857|consulta en el grupo Catalis]], acá va una receta para lograr que un subcampo con valores codificados se pueda editar de manera análoga al subcampo $4 de los campos 700 (relator code). Es decir, que se abra una ventanita emergente que ofrezca la lista de códigos disponibles. A modo de ejemplo consideremos un elemento ficticio denominado "Foo", almacenado en un subcampo $q del campo 999. Para clarificar el contexto dentro de cada archivo a modificar, se muestran las líneas correspondientes a los //relator codes//. (Esto fue testeado exitosamente por Evangelina y Omar, de la Biblioteca Virtual de la UNR, el 11/nov/08.) === XML === == foo.xml == Creamos el archivo. ... === HTML === == editCodes.htm == Agregamos un bloque. case "relator" : // TO-DO: pensar de qué manera se puede acotar la larga lista, en función del tipo // de documento (video, musica, libro, etc.) xmlCodes = callingWindowObject.xmlRelatorCodes; Codes = xmlCodes.selectNodes("/" + "/relator"); title = "Relator codes"; break; case "foo" : xmlCodes = callingWindowObject.xmlFooCodes; Codes = xmlCodes.selectNodes("/" + "/foo"); title = "Foo codes"; break; === JavaScript === == create-field-subfield.js == Agregamos un bloque. // Subcampos cuyos valores se toman de tablas if ( "4" == code ) { // Relator code newSubfieldBox.readOnly = true; // ATENCION: esta propiedad produce un bug al subir/bajar un subcampo $4 vacío newSubfieldBox.onclick = function() { editCodedData("relator"); } newSubfieldBox.style.fontFamily = "lucida console"; newSubfieldBox.style.fontSize = "14px"; newSubfieldBox.style.lineHeight = "17px"; } else if ( tag_code.search(/999q/) != -1 ) { // Foo code newSubfieldBox.readOnly = true; newSubfieldBox.onclick = function() { editCodedData("foo"); } newSubfieldBox.style.fontFamily = "lucida console"; newSubfieldBox.style.fontSize = "14px"; newSubfieldBox.style.lineHeight = "17px"; } == aux-windows.js == Agregamos "foo" en un par de líneas. function editCodedData(dataElement) { if ( dataElement.search(/relator|foo|f041|f044/) != -1 ) { var srcObject = event.srcElement; var activeCode = srcObject.value; // TO-DO: evt for mozilla var codeType = "single"; var dialogLeft = event.clientX - 70; var dialogTop = event.clientY - 130; var URL = URL_EDIT_CODES; } else if ( ... if ( dataElement.search(/relator|foo|f041|f044/) != -1 ) { srcObject.value = newCode.value; //displayPermanentTitle(srcObject,newCode.description.substr(6),40,0); } else { ... } == catalis.js == Agregamos dos líneas nuevas. URL_RELATOR_CODES = HTDOCS + "xml/relator.xml"; URL_FOO_CODES = HTDOCS + "xml/foo.xml"; xmlRelatorCodes = importXML(URL_RELATOR_CODES); xmlFooCodes = importXML(URL_FOO_CODES); {{tag>catalis admin}}