# Adicionar tags de citação em Markdown personalizadas com BBCode

**URL:** <https://meta.discourse.org/t/add-custom-markdown-quote-bbcode-tags/345910>\
**Category:** Development\
**Tags:** plugin-api\
**Created:** [7 Janeiro , 2025 01:28 UTC](https://meta.discourse.org/t/add-custom-markdown-quote-bbcode-tags/345910 "2025-01-07T01:28:13Z")\
**Posts on this page:** 1\
**Showing post:** 4

<div class="post-metadata">

**Author:** ![ego-lay\_atman-bay](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ego-lay_atman-bay/32/255458_2.png) [@ego-lay\_atman-bay](https://meta.discourse.org/u/ego-lay_atman-bay)\
**Post date:** [8 Janeiro , 2025 02:16 UTC](https://meta.discourse.org/t/add-custom-markdown-quote-bbcode-tags/345910/4 "2025-01-08T02:16:06Z")

</div>

Consegui fazer funcionar mantendo o texto original em um atributo no HTML e, na função de callback `addTagDecorateCallback()`, apenas o retorno para obter o texto original.

Aqui está um trecho de código para quem quiser saber o que fiz.

Em `assets/javascripts/lib/discourse-markdown/snapblocks-discourse.js`, onde ele inicializa as tags bbcode, fiz com que ele armazene o texto original dentro de um atributo `snapblocks-source` para que eu possa recuperá-lo mais tarde.

No arquivo `assets\\javascripts\\discourse\\initializers\\snapblocks-discourse.js`, adiciono o código para lidar com as citações.

```js
// assets\\javascripts\\discourse\\initializers\\snapblocks-discourse.js

import {
  addBlockDecorateCallback, // block bbcode tags
  addTagDecorateCallback, // inline bbcode tags
} from "discourse/lib/to-markdown";

function initializeSnapblocks(api, siteSettings) {
  addTagDecorateCallback(function () {
    // this.element não é um elemento HTML
    // mas inclui todos os atributos HTML
    const { attributes } = this.element;

    // Normalmente você verificaria se a "classe" é a sua classe
    // mas tudo que preciso aqui é "snapblocks-source"
    if (attributes["snapblocks-source"]) {
      let prefix = "[sb";

      // Adicionando atributos à tag bbcode (que também são armazenados
      // no elemento como atributos).
      const attrs = [
        "blockstyle",
        "wrap",
        "wrapsize",
        "zebra",
        "showspaces",
        "santa",
      ];
      for (const attr of attrs) {
        if (attributes[attr]) {
          prefix += ` ${attr}=${attributes[attr]}`;
        }
      }

      prefix += "]";

      this.prefix = prefix;
      this.suffix = "[/sb]";
      // se você retornar texto, ele será usado em vez do texto selecionado
      return attributes["snapblocks-source"];
    }
  });
}

```

Isso é o mesmo para as tags bbcode de bloco, você só precisa usar `addBlockDecorateCallback()` em vez disso.

Agora, infelizmente, terei que refazer as postagens se quiser que trechos antigos de snapblocks sejam citáveis. Isso também não lida com a seleção de texto no SVG, funciona apenas se você selecionar algum texto antes e/ou depois, bem como pelo menos parte do texto do SVG.

---

_[View the full topic](https://meta.discourse.org/t/add-custom-markdown-quote-bbcode-tags/345910)._
