Prácticas con el DOM.
Desarrollo de Aplicaciones Telemáticas, 2024-2025
Grado en Ingeniería en Tecnologías de la Telecomunicación
Grado en Ingeniería en Sistemas de Telecomunicación
Escuela de Ingeniería de Fuenlabrada
Universidad Rey Juan Carlos


Instrucciones generales

  1. Crea un directorio ~/dat/practica04 para los ejercicios de esta práctica

  2. Crea un directorio ~/dat/practica04/images para las imágenes de esta práctica

  3. Ahora escribirás ficheros .html que utilizarán ficheros .js de la práctica 3.

Práctica 4.0. Imágenes para una aplicación de auto-pedido

En las sucesivas prácticas vas a desarrollar un sistema sencillo de autopedido (self-ordering): una aplicación donde el cliente de un establecimiento pueda ver la carta y, además, hacer su pedido.

Piensa en algún negocio de hostelería: bar, restaurante, cervecería, cocktelería, pizzería, burger, confitería, churrería, heladería...

Piensa en categorías de la carta. Y en los productos de cada carta. No lo compliques demasiado, entre 3 y 6 categorías y un total de 10, 12, 16 productos, aproximadamente.

Las categorías podrían ser :

Piensa en categorías similares pero no uses exactamente estos ejemplos.

Necesitarás:

Requisitos adicionales:

Puedes elegir las categorías y los productos como quieras, pero procura ser imaginativo, aprovecha que la IA puede generar casi cualquier cosa. Piensa en cosas exóticas, o muy especializadas, o directamente fantásticas (¿Comida para la tribu de Asterix? ¿Comida para ogros?)

Práctica 4.1. Manejadores

Escribe una página web con Bootstrap 5 y código JavaScript contemporáneo en los ficheros

~/dat/practica04/botones.html

~/dat/practica04/botones.js para probar los manejadores sobre botones y la escritura de contenido en elementos.

Ponle al menos tres botones. Escribe un párrafo, inicialmente vacío. Haz que al pulsar cada botón, apareza un texto cualquiera en el párrafo. P.e. botones con el texto Café solo, Café con leche, Chocolate. Al pulsarlos, el texto del párrafo cambirá. P.e. Seleccionado café con leche.

No uses este ejemplo, piensa cualquier otra cosa.

Práctica 4.2. Escritura y lectura de valores HTML-JavaScript

Escribe los ficheros ~/dat/practica04/unidades.html ~/dat/practica04/unidades.js en HTML 5 y JavaScript contemporáneo que contengan el interfaz de usuario del programa que escribiste en la práctica 3.6.

La distancia se supone que la indicará el servidor, por tanto, será un valor escrito en el HTML, tu programa no podrá modificarlo. Para tus pruebas, cambia este valor a mano.

Cumpliendo lo anteriormente indicado, tienes libertad para organizar el HTML como prefieras.

Práctica 4.3. Creación dinámica de elementos (1)

Escribe un programa en JavaScript contemporáneo, con interface de usuario en HTML 5 en los ficheros ~/dat/practica04/tabla.html ~/dat/practica04/tabla.js que, a partir de una lista JavaScript de elementos cualquiera, genere dinámicamente una tabla, donde cada uno de los elementos de la lista sea una fila en la tabla.

Práctica 4.4. Creación dinámica de elementos (2)

Escribe un programa en JavaScript contemporáneo, con interface de usuario en HTML 5, con Bootstrap 5, en los ficheros ~/dat/practica04/tablas.html ~/dat/practica04/tablas.js según la especificación indicada a continuación. Observa que el nombre de estos ficheros es similar a los de práctica anterior, pero en plural.

  1. El programa partirá de una lista de listas. Lo llamaremos una lista con sublistas. La lista se llamará lista_menu. Contendrán las categorías y los productos que preparaste para la práctica 4.0. Aunque de momento, solo usaremos los nombres, no las imágenes.

  2. El primer elemento de cada sublista será el nombre de la categoría. Los siguientes elementos de cada sublista serán los nombres de cada uno de los productos. La lista no podrá estar vacía. Ninguna sublista podrá estar vacía. Cada sublista debe tener al menos 2 elementos (título y 1 producto). Estos elementos serán cadena. Ejemplo:

    lista_menu = 
    [
        [ "Primeros platos", "Ensalada de la casa", "Macarrones al horno"],
        [ "Segundos platos", "Chuleta de cerdo", "Merluza a la romana"],
        [ "Postres", "Flan", "Tarta de la casa", "Arroz con leche"]
    ]
  3. El programa tendrá una función que recibirá una lista, y si el formato no es el aquí indicado, lanzará una excepción para terminar el programa.

  4. El programara generará una tabla HTML para cada categoría, donde el encabezado de la tabla será el nombre de la categoría y cada fila contendrá cada uno de los productos. Por tanto, el ejemplo anterior generaría 3 tablas distintas, con 2, 2, y 3 filas. No única tabla con tres filas.

Práctica 4.5. Selección de productos

Cuando tu práctica anterior funcione, guarda una copia por si estropeas algo, donde quieras, con nombre distinto. Modifica la práctica original de forma que:

  1. Haya nuevas tablas, tantas como categorías. El nombre de cada tabla estará compuesto de la palabra Pedidos, mas el nombre de la categoría. Ejemplo: Pedidos entrantes, Pedidos primer plato, etc

  2. Cada vez que el usuario haga clic sobre un producto de la tabla, se creará una nueva fila, con el producto, en la tabla de pedidos correspondiente.

Sugerencia: usando la rejilla de BootStrap, divide la página en dos columnas. En cada fila, la celda de la izquierda que contenga la tabla con los productos, y en la celda de la derecha, la tabla con los pedidos de esa categoría. Más adelante añadirás los iconos, pero solo a la primera celda. Por tanto, tal vez sea preferible que la primera columna sea un poco más ancha.

Práctica 4.6. Eliminar duplicados

Escribe un programa en JavaScript contemporáneo en el fichero ~/dat/practica04/duplicados.js. Tendrá una función que recibirá una lista no vacía de elementos, donde cada elemento será una cadena. Ejemplo:

["Caña", "Te", "Caña", "Agua", "Rioja", "Rioja"]

y devolverá una lista de sublistas, donde

Ejemplo de lista devuelta:

[ 
  [2, "Caña"],
  [1, "Te"],
  [1, "Agua"],
  [2, "Rioja"],
]

Práctica 4.7. Eliminar duplicados en el GUI

Cuando tus dos prácticas anteriores funcionen, guarda una copia por si estropeas algo, donde quieras, con nombre distinto. Modifica tablas para que, cada vez que se repita la petición de un producto, no se añada una fila en la tabla de pedidos, sino que cada fila incluya una primera columna con un número de unidades y una segunda columna con el producto. El número inicialmente será 1, y se incrementará por cada nuevo pedido del producto.

Práctica 4.8. Iconos

Cuando tus práctica anterior funcione, guarda una copia por si estropeas algo, donde quieras, con nombre distinto. Haz que tu práctica original incluya los iconos de las categorías y de los productos. Solamente en las tablas del menú, no en las tablas de pedidos. El usuario podrá hacer clic sobre el icono o sobre el texto del producto. Esto es, sobre la fila, en general.

Práctica 4.9. Mostrar y ocultar elementos

Añade uno o más botones en tu aplicación que permitan ocultar o mostrar ciertos productos del menú. Por ejemplo ocultar productos con gluten, ocultar productos con alcohol, mostrar solamente productos veganos, mostrar solamente productos light, etc

Este botón o botones tendrá que cambiar de texto según el estado. El botón siempre dirá qué hace, no cuál es el estado. Ejemplo: si se están viendo los productos con alcohol, el texto del botón será ocultar bebidas alcoholicas. Si se están ocultando las bebidas alcoholicas, el texto del botón será mostrar bebidas alcoholicas.

Práctica 4.10. Eliminar pedidos

Cuando tus práctica anterior funcione, guarda una copia por si estropeas algo, donde quieras, con nombre distinto. Modifica la práctica original para que en cada fila de las tablas de pedidos, aparezca un icono que represente borrar. Cuando el usuario pulse sobre este icono:

Naturalmente, tendrás que actualizar tanto la lista de sublistas en la que tu programa contabiliza internamente las unidades de cada pedido, como la tabla donde se muestra esto al usuario.

Práctica 4.11. Simulación del agotamiento de productos

Cuando tus práctica anterior funcione, guarda una copia por si estropeas algo, donde quieras, con nombre distinto. Modifica la práctica original para que se pueda simular que hay productos de la carta que se van agotando. En el programa habrá una variable global llamada simula_agotados.

  1. La variable simula_agotados deberá ser un número, positivo y sin decimales. En otro caso, el programa levantará una excepción y concluirá.

  2. Si simula_agotados vale 0, el programa se comportará como hasta ahora.

  3. Si contiene otro número n:

    1. Cada vez que el usuario pida algún artículo, el programa generará un número aleatorio entre 1 y n. Si el valor resultante es 1, el programa simulará que un artículo aleatorio de una categoría aleatoria se ha agotado. Naturalmente, un producto que ya se había agotado, no se puede volver a agotar.

    2. Cuando un producto se agote, se mostrará un mensaje en algún lugar del GUI.

    3. Cuando un producto se agote, su imagen cambiará. Lo más sencillo es que aparezca una imagen que represente producto agotado. Esta imagen será la misma para todos los productos.

    4. Práctica optativa: cuando un producto se agote, su imagen representará que se ha agotado. Pero esta imagen será distinta para cada producto, y estará basada en la imagen original. Por ejemplo puede aparecer en blanco y negro y más pálida, puede aparecer cruzada con una X grande en rojo... como prefieras.

    5. Cuando un producto se haya agotado, si el usuario hace clic sobre el producto, no sucederá nada, esto es, no se añadirá a los pedidos.

Práctica 4.12. Interface de la validación de contraseña

Escribe en los ficheros ~/dat/practica04/valida.html y ~/dat/practica04/valida.js el código necesario para ejecutar dentro del navegador tu práctica de validación de contraseñas. No repitas nada, haz llamadas al javascript de tu prática 3. Usa Bootstrap 5.

Revisión de los nombres de los ficheros

Ejecuta ~mortuno/revisa practicas dat para comprobar que los nombres de los programas son los correctos.