Discourse.SiteSettings não funciona após atualização

Seguindo o conselho aqui Afastando-se de Discourse.SiteSettings: um guia de atualização:

Quando faço isso, recebo: TypeError: undefined is not an object (evaluating 'settings.tag_style')

Isso está em um componente que criei com um script no cabeçalho (nenhuma das outras opções mencionadas por Robin funciona também).

Há mais alguma coisa que eu possa tentar? Devo continuar usando Discourse.SiteSettings?

3 curtidas

Você pode compartilhar seu código, incluir a tag de script HTML?

2 curtidas

Aqui está para você 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>

Tudo o que ele faz é alterar esta linha:

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

(Handlebars.Utils.escapeExpression(tag); também não está funcionando)

1 curtida

Aha, entendi. settings nesse caso aponta para as configurações do tema, que são muito mais comuns para temas/plugins.

Atualizei a documentação com como acessar as configurações do site. Você pode fazer assim:

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

Obrigado Robin - funciona :smiley:

Alguma ideia de como corrigir Handlebars.Utils.escapeExpression?

Você deve ser capaz de importar nosso helper:

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