jcem.pro/sitemath

Interatividade declarativa para conteúdo que precisa continuar legível.

SiteMath cria campos, cálculos e reações no navegador sem executar JavaScript arbitrário. O conteúdo permanece semântico e a detecção no build só carrega o runtime quando há um bloco válido.

Ver o uso básicoVer repositório

Primeiros passos

Um bloco, um formulário acessível.

Inclua o arquivo distribuído e use o tipo HTML exato text/x-sitemath. Em Markdown, use uma cerca de código com a linguagem exata sitemath.

  1. Inclua dist/sitemath.js.
  2. Declare os campos tipados.
  3. Monte com SiteMath.mount(document).
<script src="dist/sitemath.js"></script>
<script type="text/x-sitemath">
field quantidade: number = {
  label: "Quantidade", value: 1, min: 1
};
field total: number = { label: "Total", readonly: true };
on.change([quantidade], () => { total = quantidade * 12; });
</script>
<script>SiteMath.mount(document);</script>

A linguagem

Sintaxe TypeScript-like, execução restrita.

Campos tipados

text, textarea, number, checkbox, radio, select, date e hidden. Campos visíveis exigem label.

Interface clara

placeholder só é válido em texto; tip é associado via acessibilidade e não substitui rótulos ou erros.

Fluxo previsível

Eventos on.init, on.change, on.submit e on.error; condições, for C++ e for...of limit().

SiteMath.configure({
  maxIterations: 500,
  onNotify: ({ level, message }) => console.info(level, message)
});

Segurança por construção

Sem eval, sem rede, sem acesso livre ao DOM.

Cada ação é enfileirada por instância e possui orçamento próprio de iterações. Exceder o limite interrompe apenas a ação atual e produz diagnóstico estruturado.

Integração de build

Inclua o runtime apenas onde ele é necessário.

O adaptador Node examina HTML ou Markdown sem executar os blocos. Ele aceita somente os identificadores canônicos e a estrutura sintaticamente válida.

const adapter = require("@jeancarloem/sitemath").createNodeAdapter();
const result = adapter.detectMarkdown(markdown);
if (result.valid > 0) includeRuntime();

Desenvolvimento

Verificações locais.

npm run check
Typecheck, unidade, build e matriz de targets.
npm run test:targets
HTML estático, Vite JS/TS, React, Preact e Jekyll.
npm run release:publish 1.2.3
Prepara e envia o gatilho único de release.