Discourse.SiteSettings no funciona después de la actualización

Siguiendo el consejo aquí Alejándose de Discourse.SiteSettings: una guía de actualización:

Cuando lo hago, obtengo: TypeError: undefined is not an object (evaluating 'settings.tag_style')

Esto está en un componente que creé con un script en el encabezado (ninguna de las otras opciones mencionadas por Robin funciona tampoco).

¿Hay algo más que pueda intentar? ¿Debería seguir usando Discourse.SiteSettings?

3 Me gusta

¿Puedes compartir tu código, incluir la etiqueta de script HTML?

2 Me gusta

Aquí tienes Robin:

<script type="text/discourse-plugin" version="0.1">
  const getURL = require('discourse-common/lib/get-url').default;

  function customLinkTagRenderer(tag, params) {
    params = params || {};
    const visibleName = Handlebars.Utils.escapeExpression(tag);
    tag = visibleName.toLowerCase();
    const classes = ["discourse-tag"];
    const tagName = params.tagName || "a";
    let path;
    if (tagName === "a" && !params.noHref) {
      if (params.isPrivateMessage && Discourse.User.current()) {
        const username = params.tagsForUser
          ? params.tagsForUser
          : Discourse.User.current().username;
        path = `/u/${username}/messages/tags/${tag}`;
      } else {
        path = `https://site.com/${tag}`;
      }
    }
    const href = path ? ` href='${getURL(path)}' ` : "";

    if (Discourse.SiteSettings.tag_style || params.style) {
      classes.push(params.style || Discourse.SiteSettings.tag_style);
    }

	  let val =
	    "<" +
	    tagName +
	    href +
	    " data-tag-name=" +
	    tag +
	    " class='" +
	    classes.join(" ") +
	    "'>" +
	    visibleName +
	    "</" +
	    tagName +
	    ">";

    if (params.count) {
      val += " <span class='discourse-tag-count'>x" + params.count + "</span>";
    }

    return val;
  }

  api.replaceTagRenderer(customLinkTagRenderer);
</script>

Todo lo que hace es cambiar esta línea:

path = `https://site.com/${tag}`;

(Tampoco funciona Handlebars.Utils.escapeExpression(tag);)

1 me gusta

Ajá, ya veo. settings en ese caso apunta a la configuración del tema, que es mucho más común para temas/plugins.

He actualizado la documentación sobre cómo acceder a la configuración del sitio. Puedes hacerlo así:

<script type="text/discourse-plugin" version="0.1">
  let siteSettings = api.container.lookup('site-settings:main');
</script>
3 Me gusta

Gracias Robin, funciona :smiley:

¿Alguna idea de cómo arreglar Handlebars.Utils.escapeExpression?

Deberías poder importar nuestra utilidad:

const { escapeExpression } = require('discourse/lib/utilities');
3 Me gusta