SWCore
SWCore / Componentes / Editor de texto rico

Editor de texto rico Componentes

Caixa de texto com barra de negrito, título, lista, link, cor e imagem — tipo um mini Word dentro do formulário. <textarea sw-editor name='conteudo'>.

O que é

Quando a pessoa precisa escrever um texto formatado — a descrição de um produto, um post do blog, um aviso com negrito e lista — um <textarea> comum não basta. Coloque sw-editor no textarea e ele vira um editor com barra de ferramentas: negrito, itálico, títulos (H1–H6), listas, alinhamento, cor da letra, marca-texto, link, imagem por endereço, linha divisória, ver o HTML e tela cheia. O que sai dele é HTML, pronto para salvar no banco e mostrar no site.

O JavaScript do núcleo esconde o seu <textarea> e monta o editor logo depois dele. A cada tecla, o HTML escrito é copiado para o seu próprio textarea (escondido), e é ele que o formulário envia, com o name dele (sem name, ele recebe o de sw-editor-name; sem nenhum, content). Editor sem texto envia vazio, então required funciona. Embaixo do editor aparece a contagem de caracteres e palavras, e uma alça para esticar a altura com o mouse. Funciona no tema claro e no escuro.

Quando usar

  • Painel admin: descrição de produto, texto de página "Sobre", conteúdo de post do blog.
  • Comentário ou depoimento com um pouco de formatação: use a barra reduzida (sw-editor-simple).
  • Aviso, e-mail modelo, termo que precisa de título, lista e negrito.
  • Não use para um campo de uma linha (nome, e-mail): aí é <input sw-inp>.

Comece aqui

  1. 1

    Coloque o SWCore na página: CSS no <head> e JS no fim do <body>. Os botões da barra completa são ícones — eles vêm no swcore.compl.min.css.

    <link rel="stylesheet" href="https://swcore.sanweb.com.br/dist/2.1.0/swcore.min.css">
    <link rel="stylesheet" href="https://swcore.sanweb.com.br/dist/2.1.0/swcore.compl.min.css">
    
    <!-- fim do <body> -->
    <script src="https://swcore.sanweb.com.br/dist/2.1.0/swcore.min.js"></script>
  2. 2

    Coloque sw-editor no textarea e dê um name — é com esse nome que o texto chega no servidor. Escreva, selecione uma palavra e clique em B.

    <textarea sw-editor name="conteudo" sw-editor-height="140"></textarea>

Todas as variações

Cada quadro abaixo é o componente de verdade, rodando. O código embaixo é exatamente o que está no quadro: copie e cole.

1. Barra completa ou reduzida

Sem nada, vem a barra completa: formato do bloco (P, H1…H6), negrito, itálico, sublinhado, tachado, cor da letra, marca-texto, limpar formatação, 4 alinhamentos, lista, lista numerada, linha, link, imagem, ver HTML e tela cheia. Com sw-editor-simple (ou sw-editor-mode="simple") fica só B I U S — bom para comentário.

Barra completa (padrão)
<textarea sw-editor name="conteudo" sw-editor-height="120">
  <p>Selecione este texto e teste os botões da barra.</p>
</textarea>
Barra reduzida — sw-editor-simple
<textarea sw-editor sw-editor-simple name="comentario" sw-editor-height="90">
  <p>Só negrito, itálico, sublinhado e tachado.</p>
</textarea>
Mesma coisa — sw-editor-mode="simple" <textarea sw-editor sw-editor-mode="simple" name="comentario" sw-editor-height="90"></textarea>

2. Altura

sw-editor-height é a altura inicial da área de escrever, em pixels (padrão 150). A alça embaixo estica ou encolhe com o mouse, entre sw-editor-min (padrão 100) e sw-editor-max (padrão 800). sw-editor-resizable="false" tira a alça.

Baixinho — sw-editor-height="80" <textarea sw-editor sw-editor-simple name="recado" sw-editor-height="80"></textarea>
Estica só entre 120 e 260 px
<textarea sw-editor sw-editor-simple name="resumo"
          sw-editor-height="120" sw-editor-min="120" sw-editor-max="260"></textarea>
Sem alça — sw-editor-resizable="false"
<textarea sw-editor sw-editor-simple name="obs" sw-editor-height="100"
          sw-editor-resizable="false"></textarea>

3. Começar com texto

O que estiver dentro do textarea vira o conteúdo inicial — escreva em HTML. É assim que você mostra o texto já salvo quando a pessoa abre a tela de "Editar".

Conteúdo já preenchido (tela de editar)
<textarea sw-editor name="descricao" sw-editor-height="160">
  <h3>Corte + barba</h3>
  <p>Inclui <strong>lavagem</strong>, toalha quente e finalização.</p>
  <ul>
    <li>Duração: 50 minutos</li>
    <li>Agendamento pelo WhatsApp</li>
  </ul>
</textarea>

Tabela de opções

PalavraO que fazExemplo
Ligar
sw-editorNo <textarea> que vira editor. Não leva valor.<textarea sw-editor>
Nome do campo enviado
nameO nome normal do textarea. O HTML do editor é enviado com esse nome.name="conteudo"
sw-editor-nameUsado só se o textarea não tiver name. Se faltar os dois, o nome é content.sw-editor-name="texto"
Barra
(nenhum)Barra completa (formato de bloco, 4 estilos, cores, limpar, alinhamentos, listas, linha, link, imagem, HTML, tela cheia).
sw-editor-simpleBarra reduzida: só B, I, U, S. Não leva valor.<textarea sw-editor sw-editor-simple>
sw-editor-modesimple — o mesmo que sw-editor-simple.sw-editor-mode="simple"
Altura
sw-editor-heightAltura inicial da área de escrever, em px. Padrão 150.sw-editor-height="200"
sw-editor-minMenor altura ao arrastar a alça, em px. Padrão 100.sw-editor-min="120"
sw-editor-maxMaior altura ao arrastar a alça, em px. Padrão 800.sw-editor-max="400"
sw-editor-resizablefalse tira a alça de esticar. Padrão: com alça.sw-editor-resizable="false"
Texto de ajuda
sw-editor-placeholderTexto de exemplo (também lê o placeholder normal). Aparece enquanto o editor está vazio e sem foco.sw-editor-placeholder="Escreva aqui…"
Atalhos de teclado (barra completa)
Ctrl+B / Ctrl+I / Ctrl+UNegrito, itálico, sublinhado (também na barra reduzida).
Ctrl+KCriar link (pergunta o endereço).
Ctrl+Z / Ctrl+YDesfazer / refazer.
Ctrl+0 … Ctrl+6Parágrafo (0) ou título H1…H6. Só na barra completa.

Receitas prontas — usos reais

Situações que aparecem em quase todo site. Copie a que servir.

Formulário de post do blog (painel admin) Ao vivo
<form sw-frm action="/admin/posts/salvar" method="post">
  <div sw-fld>
    <label for="titulo">Título do post</label>
    <input sw-inp id="titulo" name="titulo">
  </div>
  <div sw-fld>
    <label>Conteúdo</label>
    <textarea sw-editor name="conteudo" sw-editor-height="180"></textarea>
  </div>
  <button type="submit" sw-btn="pri">Publicar post</button>
</form>
<!-- no servidor, $_POST['conteudo'] chega com o HTML do editor -->
Caixa de comentário simples Ao vivo
<div sw-fld>
  <label>Seu comentário</label>
  <textarea sw-editor sw-editor-simple name="comentario"
            sw-editor-height="90" sw-editor-resizable="false"></textarea>
</div>
<button type="submit" sw-btn="pri p">Comentar</button>
Ler e trocar o texto por JavaScript Ao vivo
<textarea sw-editor id="descricao" name="descricao"></textarea>

<script>
  const editor = document.getElementById('descricao')._swEditor;

  editor.getValue();                          // devolve o HTML atual
  editor.setValue('<p>Novo <b>texto</b></p>');  // troca o conteúdo
</script>
Salvar por AJAX (sem recarregar) Referência
<form id="form-produto">
  <textarea sw-editor name="descricao"></textarea>
  <button sw-btn="pri">Salvar</button>
</form>

<script>
  const form = document.getElementById('form-produto');
  form.addEventListener('submit', async (e) => {
    e.preventDefault();
    // FormData já pega o campo escondido que o editor mantém atualizado
    await fetch('/produto/salvar', { method: 'POST', body: new FormData(form) });
  });
</script>

Eventos

input
Não há evento próprio do SWCore. O evento normal input do navegador sai da área de escrever e sobe pela página — escute no elemento em volta do editor para saber quando o texto mudou.

API (JavaScript)

textarea._swEditor.getValue()
Devolve o HTML atual do editor. textarea é o seu <textarea sw-editor> original — o .value dele também fica sempre igual (e dispara o evento input a cada mudança).
textarea._swEditor.setValue(html)
Troca o conteúdo do editor pelo HTML informado (e atualiza o campo enviado e a contagem).
SW.Editor.initAll(raiz)
Monta os editores [sw-editor] dentro de raiz que ainda não foram montados. O núcleo já faz sozinho.

Precisa de quê

  • swcore.min.css + swcore.min.js — o editor.
  • swcore.compl.min.css — os ícones da barra completa (a barra reduzida usa letras e funciona sem ele).

Cuidados — erros comuns

  • Esquecer o name: o texto chega no servidor como content, não com o nome que você esperava.
  • Mostrar no site o HTML salvo sem limpar: o conteúdo é escrito por pessoas. Limpe no servidor (em PHP, por exemplo, com uma lista de tags permitidas) antes de exibir.
  • Colocar dois editores com o mesmo name no mesmo formulário — os dois vão com o mesmo nome e um apaga o outro no servidor.
  • Editor dentro de uma aba ou modal fechado funciona normalmente; mas se você criar o textarea depois com innerHTML, chame SW.reinit(area).

O que ele não faz

  • Link e imagem são inseridos pelo endereço (a caixinha do navegador pergunta a URL). Ele não faz upload de imagem.
  • Não tem tabela, vídeo embutido, emoji, nem trabalho em conjunto.
  • A alça de esticar funciona com mouse; no celular a altura fica a inicial.
  • É feito para textos curtos e médios. Para um site de notícias ou livro, use um editor maior.