Escudo de Enlace Externo – Confirmación de Salida y Control de Confianza

:information_source: Resumen Este componente de tema añade protección configurable para enlaces externos en publicaciones cocinadas. Aplica reglas basadas en el nivel de confianza, redirecciones opcionales de inicio de sesión e información, indicadores visuales para dominios de confianza y una ventana modal de confirmación de salida personalizable.
:eyeglasses: Vista Previa Theme Creator
:hammer_and_wrench: Repositorio https://github.com/VaperinaDEV/external-link-shield
:question: Guía de Instalación Cómo instalar un tema o componente de tema
:open_book: ¿Nuevo en Temas de Discourse? Guía para principiantes sobre el uso de temas de Discourse

Instalar este componente de tema

Hola :waving_hand:

Me gustaría compartir un Componente de Tema que añade control detallado sobre los enlaces externos en publicaciones cocinadas, combinando:

  • control de acceso basado en el nivel de confianza
  • protección de usuario anónimo
  • una ventana modal de confirmación de salida personalizada
  • e indicadores visuales para dominios confiables versus desconocidos

Este componente está diseñado para comunidades donde los enlaces externos pueden implicar implicaciones legales, de seguridad o de confianza.


:sparkles: Características

:gear: Reglas de nivel de confianza configurables

Todos los comportamientos basados en el nivel de confianza son totalmente configurables a través de la configuración del tema.

Puede habilitar o deshabilitar independientemente:

  • bloqueo de usuarios anónimos
  • reemplazo informativo para TL0
  • requisito de revelación manual para TL1
  • ventana modal de confirmación de salida para niveles de confianza más altos

Esto permite que el componente se adapte a políticas comunitarias muy diferentes, desde un blindaje estricto de enlaces hasta una mínima fricción para el usuario.

:locked_with_key: Enlaces externos conscientes del nivel de confianza

Los enlaces externos se comportan de manera diferente según el nivel de confianza del espectador:

  • Usuarios anónimos
    • Los enlaces externos se reemplazan con un enlace de inicio de sesión o una URL personalizada definida en la configuración.
  • TL0
    • Los enlaces se reemplazan con una redirección configurable, por ejemplo, un tema que explica los niveles de confianza o cualquier otra URL definida en la configuración.
  • TL1
    • Los enlaces requieren revelación manual (clic para ver), luego hacer clic en el enlace muestra la ventana modal de confirmación de salida.
  • TL2+
    • Los enlaces se comportan normalmente pero siempre muestran una ventana modal de confirmación de salida.

:door: Ventana modal de confirmación de salida

Antes de salir del foro, los usuarios ven una ventana modal que:

  • Indica claramente que están abandonando la comunidad
  • Muestra la URL de destino completa en etiquetas <code>
  • Respeta la preferencia del usuario external_links_in_new_tab

Esto es especialmente útil para:

  • comunidades con mucha carga de cumplimiento
  • mitigación de phishing
  • educar a usuarios con menos experiencia


:magnifying_glass_tilted_left: Comportamiento basado en el dominio a través de la configuración

El componente introduce dos configuraciones de tema:

internal_domains:
  type: list
  default: ""
  description: "Sus dominios de foro y CDN (ej. example.com|example-cdn.com). Estos NO tendrán icono NI modal."

excluded_domains:
  type: list
  default: ""
  description: "Dominios externos de confianza (ej. youtube.com|google.com). Estos mostrarán un icono de CANDADO pero omitirán el modal/blindaje."
  • Dominios internos
    • Tratados como internos → sin icono, sin modal
  • Dominios excluidos (de confianza)
    • Muestran un icono de candado :locked:
    • Omiten la verificación del nivel de confianza y el modal
  • Todos los demás enlaces externos
    • Muestran un icono de enlace externo
    • Están sujetos a verificación y/o confirmación según el nivel de confianza

:artist_palette: Indicadores visuales (SCSS)

Los iconos se añaden puramente a través de CSS:

  • Enlaces externos desconocidos → icono de enlace externo
  • Enlaces externos de confianza → icono de candado (color de éxito)

Esto mantiene el DOM limpio y evita la inyección de iconos basada en JS.

Esta captura de pantalla muestra cómo el componente distingue visualmente entre:

  • Dominios excluidos: enlaces externos de confianza (icono de candado, sin confirmación de salida),
  • Dominios internos: enlaces internos (sin icono, sin confirmación de salida),
  • enlaces externos desconocidos (icono de enlace externo con confirmación de salida).

:pushpin: Casos de uso

Este componente es útil si desea:

  • Proteger a los usuarios de enlaces externos inseguros o engañosos
  • Educar a los nuevos usuarios antes de permitirles abandonar el foro
  • Aplicar la progresión de confianza de la comunidad
  • Añadir exenciones legales/de cumplimiento sin romper la experiencia de usuario
6 Me gusta

¡Componente de Tema Fantástico!

De hecho, construimos algo similar donde también ocultamos las insignias de recuento de clics y las reemplazamos con insignias de verificado/peligro.

Lo usamos principalmente para nuestros proveedores y comerciantes verificados/de confianza con los que tenemos una asociación de afiliados.

Además, nuestra ventana emergente también muestra códigos de cupón que se gestionan a través del editor de configuración de Objetos del componente de tema.

2 Me gusta