Auto-enlazar palabras

@danekhollas

Lamentablemente, sigo teniendo el problema. Intenté cambiar el orden de las expresiones regulares en la configuración del tema, pero la entrada “más corta” sigue activándose primero.

¡Hola @jrgong! ¿Lograste realizar cargas masivas usando un archivo CSV? Estoy tratando de averiguarlo, pero no estoy muy seguro de dónde hacer clic. Por cierto, no soy desarrollador :smiley:

Estoy usando esto :slight_smile:

https://meta.discourse.org/t/discourse-linkify-google-sheets/163985/4

Nosotros también. Observo que:

discourse,https://discourse.org
discourse meta,https://meta.discourse.org
meta discourse,https://meta.discourse.org

Nos da:

discourse
discourse meta
meta discourse

El orden en que aparecen en la Configuración del Tema (y presumiblemente en la base de datos subyacente) no parece marcar diferencia. Más bien, si extiendes una palabra ya vinculada, detectará la diferencia. Si añades una palabra delante, no lo hará.

1 me gusta

Hmm, eso es un poco extraño. Tienes razón, el orden en la configuración no debería importar, ya que ordenamos las palabras por longitud:

No estoy seguro de cuánto tiempo debería invertirse en esto, ya que, por lo que sé, esta característica se está migrando al núcleo de Discourse.

4 Me gusta

Hola,

Acabo de notar que las palabras con hipervínculo no tienen el contador de clics que tienen otros enlaces (lo cual, en mi opinión, sería una buena función). ¿Es intencional o simplemente un error?

2 Me gusta

¿Se puede restringir esto a categorías o etiquetas específicas, de modo que una publicación tenga que estar en una categoría o etiquetada para generar enlaces?

1 me gusta

¿Es posible especificar un título para el enlace? ¿De modo que “ghost” se convierta en “ghost (¡ver advertencia!)”?

Posiblemente usando la sintaxis de enlaces de Markdown:

ghost,[ghost (¡ver advertencia!)](https://warning.example.com)

O especificando el título como un tercer parámetro:

ghost,https://warning.example.com,ghost (¡ver advertencia!)

@Paracelsus el contador de clics no es compatible con este tema, lo siento.

No es realmente un error; el tema es solo un código JavaScript que se ejecuta en tu navegador. No se comunica con el servidor, por lo que no hay forma de almacenar el número de clics.

2 Me gusta

Ahora, en Discourse, bajo “Reemplazar palabras”:
/admin/customize/watched_words/action/replace

Si simplemente ingresas la palabra y luego colocas la URL sin ningún formato markdown, ¡funciona! Así es como lograr que funcione sin el componente de tema autolink.

(Mientras que en el componente de tema colocas la palabra o frase, luego una coma y luego el enlace a usar, en “Reemplazar palabras vigiladas” ingresas la palabra en un campo y SOLO el enlace en otro… no intentes ingresar formato markdown en la cadena de reemplazo como lo intenté originalmente).

4 Me gusta

¡Hola, este es un gran componente! Gracias por haberlo hecho.

Pero hay un pequeño problema, parece que la creación de enlaces requiere un espacio después de la palabra específica, por lo que el componente no funciona bien en instancias de Discourse en chino y japonés (¿quizás también en coreano? No conozco ese idioma).

Soy hablante nativo de chino y también hablo japonés. En chino, sucede que la gente usa algunas palabras prestadas fijas en las letras, como Apple, Office, BB (Blackboard), DNA, etc., cuya traducción rara vez se usa en el lenguaje familiar. Y normalmente no agregamos un espacio antes/después de este tipo de palabras cuando están rodeadas de chino, en escritura informal.

Este es un ejemplo:

¿Sabes usar Office?
Do you know how to use Office suite?

Es similar en japonés.

革新に満ちたAppleの世界へようこそ。(copiado del sitio oficial de Apple Japón)
Welcome to the world of Apple, which is full of revolutions.

Soy consciente de que adaptar este componente para estos dos idiomas puede requerir mucho trabajo, ya que podría generar creaciones de enlaces no deseadas en idiomas que usan el alfabeto. Así que, solo señalo la existencia de una pequeña imperfección. Agradezco nuevamente esta gran idea de crear este componente. :smiley_cat:

2 Me gusta

Esto funciona muy bien. ¿Es posible ejecutarlo retroactivamente, o necesitas buscar todos los enlaces manualmente y cambiarlos?

Deberías poder volver a hornear esas publicaciones. Puedes hacer clic en la llave inglesa y reconstruir el HTML. Cuando veas que funciona, puedes buscar cómo volver a hornear la tarea de rake de publicaciones coincidentes.

En realidad, este tema enlaza dinámicamente las publicaciones cuando se cargan en el navegador, así que no hay nada que hacer. :slight_smile:

3 Me gusta

Oh. Muy bueno. No me había dado cuenta, pero tiene sentido.

3 Me gusta

Nuestro glosario de software de genealogía FOSS era demasiado extenso para una Publicación o Enlazado.

Si solo hubiéramos enlazado cada término del glosario, entonces cada publicación se ahogaría en un mar de enlaces azules. Es probable que los usuarios dejaran de hacer clic en los enlaces. Y queríamos un rastro de auditoría para el Glosario.

Así que enlacé “Glosario de Gramps” a ese artículo en nuestra wiki impulsada por MediaWiki. Y ahora uso una anotación como “(ver [término del glosario] en el Glosario de Gramps)”.

(Tenemos un segundo Glosario de Genealogía para terminología que es genérica para el tema de la Genealogía en lugar de específica para nuestro software).

1 me gusta

¿Se ha hecho algo para permitir tuberías?

Actualmente estoy usando esto como solución alternativa:
image


Además, ¿hay alguna forma de excluir un mundo de ser enlazado cuando está dentro de un antepasado de una clase excluida?
Estoy construyendo un foro con una categoría de Documentación y no quiero que las palabras enlazadas en ella porque sería redundante: las palabras en otras categorías se enlazarán y dirigirán a temas en esta categoría de documentación.
Además, las palabras enlazadas se abren en una nueva ventana.

Por lo tanto, esto no funcionó:
image

Aquí hay un ejemplo del problema que estoy enfrentando. Esta es la parte de un texto dentro de un tema de documentación.

Si hago clic en 22° halo, se abrirá una página que enlaza a… la misma página, en el mismo lugar.
Puedo excluir palabras en los títulos, especialmente porque contiene una tabla de contenido, pero los párrafos siguientes no tienen ninguna clase específica. Son párrafos normales.


¿Quizás la configuración de clase excluida podría aceptar selectores CSS?
Por ejemplo, d-toc-cooked > *


editar: También no entiendo por qué esto no funciona ya que mi palabra es un hijo directo de una clase excluida:

image

El “22° Halo” todavía está enlazado:

<h3 id="toc-h3-22-halo" data-d-toc="toc-h3-22-halo" class="d-toc-post-heading">
    <a name="h-22-halo-7" class="anchor" href="#h-22-halo-7"></a>
    <a href="https://discourse.canapin.com/t/ice-halos-information-and-list/28#h-22-halo-7" rel="nofollow" target="_blank" class="linkify-word no-track-link">22° Halo</a>
</h3>

¿Es porque el código HTML de la tabla de contenido podría generarse después de la “enlazado”?

1 me gusta

Sí, ese es probablemente el problema aquí, ambos son componentes de JavaScript, por lo que tienes una condición de carrera y el resultado dependerá de cuál se ejecute primero.

4 Me gusta

He agregado una clase en la lista blanca de HTML, por lo que he eludido el problema.

Sin embargo, poder excluir atributos de un botón permitiría una mayor flexibilidad para evitar que las palabras se conviertan en enlaces, utilizando el atributo HTML incorporado data-(cualquier cosa) ya que está permitido por defecto en Discourse.

Ejemplo:
<span> texto </span><span> texto </span>

¿Se aceptaría una solicitud de incorporación de cambios si logro agregar esto al componente temático?

1 me gusta

Esto, lamentablemente, impide que se creen enlaces a palabras que incluyan explícitamente alguno de estos caracteres (especialmente ., que es útil para enlazar abreviaturas como ID.1 o id2.5).

Esto quizás se arregle mejor en el núcleo, pero mientras tanto, aquí hay una PR que soluciona los problemas anteriores:

https://github.com/discourse/discourse-linkify-words/pull/21

Regla de expresión regular de ejemplo (coincidirá con id1.1 a id10.100 (incluyendo variaciones id m.n, IDm.n y ID m.n))

/(ID¦id)\\s?(([1-9]¦10)\\.([1-9]¦[1-9][0-9]¦100))/, https://example.com/id$2