Skip to content

Resumen ​

Esta implementación introduce una lógica no interactiva para evaluar si un elemento de la UI está funcionalmente deshabilitado. El objetivo es evitar interacciones directas (p.ej., clics que podrían disparar navegación o efectos secundarios) y, en su lugar, ejecutar una batería de chequeos pasivos que alimentan un sistema de puntuación (score). Cuando la puntuación acumulada alcanza el umbral definido, el elemento se clasifica como deshabilitado funcionalmente.

Alcance ​

  • Objetivo: Determinar el estado “deshabilitado funcional” de elementos HTML sin generar efectos colaterales.
  • Elementos objetivo: BUTTON, A, INPUT, y elementos interactivos equivalentes/role-based.
  • No hace: Clicks reales, envío de formularios, navegación o mutaciones permanentes del DOM.

Motivación ​

  • Evitar falsos positivos originados por estilos/UX que simulan deshabilitación sin atributo disabled.
  • Proveer señales cuantificables para decisiones automáticas y reporting de accesibilidad.
  • Cumplir la directriz interna del ticket #430 respecto a pruebas no intrusivas.

Flujo de Proceso ​

  1. Localización precisa del elemento por ID único (re-resolución para evitar referencias stale).
  2. Inicialización del score en 0 y de un arreglo checks[] para logging.
  3. Ejecución de chequeos atómicos (sin interacción activadora) y acumulación de puntos.
  4. Decisión final por umbral: si score ≥ 4 → Deshabilitado funcional.

Sistema de Puntuación ​

  • Chequeo 1 (3 pts): pointer-events: none → bloquea interacción con ratón. Razonamiento: Interacciones de mouse quedan anuladas.
  • Chequeo 2 (2 pts): Focusabilidad: se intenta blur() y luego focus() y se valida document.activeElement === el. Si el elemento no puede obtener foco → +2 pts. Razonamiento: Elementos deshabilitados típicamente no son focusable.
  • Chequeo 3 (1 pt): CSS cursor: not-allowed → +1 pt. Adicional: si el elemento es BUTTON o A y cursor: default → +1 pt (heurística de deshabilitación visual/UX).
  • Chequeo 4 (1 pt): Ausencia de onclick directo o atributo onclick en BUTTON/A/INPUT → +1 pt. Nota: Heurística débil; eventos pueden estar delegados.
  • Chequeo 5 (1 pt): CSS opacity en (0, 0.5) (exclusivo) → +1 pt (indicio de deshabilitación visual/UX).

Umbral de decisión: score ≥ 4 ⇒ Deshabilitado funcional.