Table of Contents

Edición de subcampos codificados

A raíz de una 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.

<?xml version="1.0" encoding="ISO-8859-1"?>
 
<fooCodes>
 
	<foo code="a" name="..." />
	<foo code="b" name="..." />
	<foo code="c" name="..." />
	<foo code="d" name="..." />
        ...
	<foo code="z" name="..." />
 
</fooCodes>

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);