Adicionar botão personalizado à barra de ferramentas do Editor de Rich Text (RTE)

Saiba como adicionar um botão personalizado à barra de ferramentas do Editor de Rich Text (RTE) no Editor de fragmento de conteúdo do AEM.

Botões personalizados podem ser adicionados à barra de ferramentas do RTE no Editor de Fragmentos de Conteúdo usando o ponto de extensão rte. Este exemplo mostra como adicionar um botão personalizado chamado Adicionar dica à barra de ferramentas do RTE e modificar o conteúdo dentro do RTE.

Usando o método getCustomButtons() do ponto de extensão rte, um ou vários botões personalizados podem ser adicionados à barra de ferramentas RTE. Também é possível adicionar ou remover botões RTE padrão como Copiar, Colar, Negrito e Itálico usando os métodos getCoreButtons() e removeButtons), respectivamente.

Este exemplo mostra como inserir uma nota ou dica realçada usando o botão personalizado da barra de ferramentas Adicionar Dica. O conteúdo realçado da nota ou dica tem uma formatação especial aplicada por meio de elementos HTML e as classes CSS associadas. O conteúdo do espaço reservado e o código HTML são inseridos usando o método de retorno de chamada onClick() de getCustomButtons().

Ponto de extensão

Este exemplo estende o ponto de extensão rte para adicionar um botão personalizado à barra de ferramentas do RTE no Editor de Fragmentos de Conteúdo.

Interface do usuário estendida do AEM
Ponto de extensão
Editor de fragmento de conteúdo
Barra de Ferramentas do Editor de Rich Text

Exemplo de extensão

O exemplo a seguir cria um botão personalizado Adicionar dica na barra de ferramentas do RTE. A ação de clicar insere o texto do espaço reservado na posição atual do cursor no RTE.

O código mostra como adicionar o botão personalizado com um ícone e registrar a função de manipulador de cliques.

Registro de extensão

ExtensionRegistration.js, mapeado para a rota index.html, é o ponto de entrada para a extensão AEM e define:

  • A definição do botão da barra de ferramentas do RTE na função getCustomButtons() com id, tooltip and icon atributos.
  • O manipulador de cliques do botão, na função onClick().
  • A função de manipulador de cliques recebe o objeto state como argumento para obter o conteúdo do RTE no formato de texto ou HTML. No entanto, neste exemplo, não é usado.
  • A função de manipulador de cliques retorna uma matriz de instruções. Esta matriz tem um objeto com atributos type e value. Para inserir o conteúdo, o trecho de código HTML dos atributos value, o atributo type usa o insertContent. Se houver um caso de uso para substituir o conteúdo, caso de uso do tipo de instrução replaceContent.

O valor insertContent é uma cadeia de caracteres HTML, <div class=\"cmp-contentfragment__element-tip\"><div>TIP</div><div>Add your tip text here...</div></div>. As classes CSS cmp-contentfragment__element-tip usadas para exibir o valor não estão definidas no widget, mas são implementadas na experiência online em que este campo Fragmento de Conteúdo é exibido.

src/aem-cf-editor-1/web-src/src/components/ExtensionRegistration.js

import React from "react";
import { Text } from "@adobe/react-spectrum";
import { register } from "@adobe/uix-guest";
import { extensionId } from "./Constants";

// This function is called when the extension is registered with the host and runs in an iframe in the Content Fragment Editor browser window.
function ExtensionRegistration() {
  const init = async () => {
    const guestConnection = await register({
      id: extensionId,
      methods: {
        rte: {
          // RTE Toolbar custom button
          getCustomButtons: () => [
            {
              id: "wknd-cf-tip", // Provide a unique ID for the custom button
              tooltip: "Add Tip", // Provide a label for the custom button
              icon: "Note", // Provide an icon for the button (see https://spectrum.adobe.com/page/icons/ for a list of available icons)
              onClick: (state) => {
                // Provide a click handler function that returns the instructions array with type and value. This example inserts the HTML snippet for TIP content.
                return [
                  {
                    type: "insertContent",
                    value:
                      '<div class="cmp-contentfragment__element-tip"><div>TIP</div><div>Add your tip text here...</div></div>',
                  },
                ];
              },
            },
          ],
        },
      },
    });
  };

  init().catch(console.error);

  return <Text>IFrame for integration with Host (AEM)...</Text>;
}

export default ExtensionRegistration;
recommendation-more-help
4859a77c-7971-4ac9-8f5c-4260823c6f69