Arquitetura.
O DXPR Builder tem três partes: um formatador de campo em PHP, um editor que corre no navegador, e um conjunto de rotas que o editor chama para guardar e obter dados. Esta página explica como combinam.
Formatador de campo
O conteúdo é HTML guardado num campo de texto comum do Drupal (text,
text_long ou text_with_summary). Um campo fica editável quando
a apresentação usa o formatador DXPR Builder
(dxpr_builder_text, em
src/Plugin/Field/FieldFormatter/DxprBuilderFormatter.php).
O formatador carrega o editor apenas quando tudo isto se verifica:
- o visitante é faturável: utilizador 1, ou uma conta ativa com
edit with dxpr buildernão excluída da edição do DXPR Builder; - o visitante pode atualizar a entidade;
- a conta tem um endereço eletrónico;
- os limites de utilizadores e conteúdos da licença não são excedidos;
- o site não está na lista de bloqueio do servidor de licenças, e a página não é uma página de revisões.
Os restantes recebem o HTML processado: tokens de caminho expandidos, blocos e
vistas do Drupal apresentados nos marcadores, os atributos de editor data-az*
removidos, e as bibliotecas de que o conteúdo precisa
anexadas. A saída para utilizadores com sessão iniciada não fica em cache (max-age 0),
porque traz definições por utilizador.
Editor
O editor é um conjunto de ficheiros JavaScript carregados como a
biblioteca dxpr_builder/editor.builder. Vêm da CDN da DXPR,
ou da pasta dxpr_builder/ do módulo quando tem uma
compilação local; a definição Asset source em General Settings
só aparece nessa altura. O editor analisa o HTML do campo numa árvore de
objetos de elemento e escreve-o de volta em HTML ao guardar.
Os tipos de elemento vêm de dois lugares em dxpr_builder/build/:
| Folder | Element types |
|---|---|
dxpr-builder/core-elements/ |
Container, Section, Row, Column, Tabs e os painéis de separador, interrutor e slide |
dxpr-elements/elements/ |
Elementos de conteúdo e os elementos de esquema Collapsibles, Carousel e Positioned Layers |
Cada elemento guarda as definições no próprio HTML: atributos data-azat-*,
classes e estilos em linha. O HTML guardado é o único
registo do esquema; não há armazenamento de esquema separado.
Elementos personalizados mostra o formato.
Analisar HTML existente
Marcação sem atributos do construtor mapeia-se para elementos quando o
editor a carrega. Contentores, linhas e colunas Bootstrap viram
secções, linhas e colunas. Componentes reconhecidos viram os
elementos, por exemplo botões, alertas, cartões, citações, imagens,
ícones, barras de progresso, separadores e colapsáveis. Texto, tabelas e outra
marcação em linha viram elementos Text, e um <iframe> vira um
elemento HTML. Etiquetas <script> e <style> soltas e comentários são
descartados. As regras estão em dxpr-builder/base-element/parse-html.js.
Rotas que o editor chama
O editor guarda através de /dxpr_builder/ajax, carrega ficheiros através de
/dxpr_builder/ajax/file_upload e alcança a IA através de
/dxpr_builder/ajax/ai/*. A maioria das rotas verifica a verificação de acesso de utilizador faturável
e um token CSRF; a lista completa com requisitos de acesso
está na referência de API.
Entidades de configuração
| Entity type | Config prefix | Holds |
|---|---|---|
dxpr_builder_page_template |
dxpr_builder.page_template |
Esquemas de página inteira |
dxpr_builder_user_template |
dxpr_builder.user_template |
Secções que os editores guardaram para reutilizar |
dxpr_builder_profile |
dxpr_builder.dxpr_builder_profile |
Limites por função em elementos, blocos, vistas, modelos, conjuntos de ícones e botões do editor de texto |
Verificação de licença
A chave de produto é um JWT. DxprBuilderLicenseService envia-a ao
servidor de licenças da DXPR, que devolve o estado da licença e os
limites de utilizadores e conteúdos; o resultado fica em cache. Sem chave de produto
aplica-se o plano gratuito: um utilizador e 100 conteúdos. O serviço
também mantém sincronizada a lista do servidor com os editores deste site.