Saltar al contenido

Incrustar un Cooking Chart

Un script y una etiqueta. La receta se dibuja en el navegador de quien la lee, en el idioma en que está escrita, sin cookies ni seguimiento. Funciona en cualquier web, blog estático o CMS que permita HTML.

En una línea

Carga el script una vez y escribe la receta en CCL dentro de <cooking-chart>. La sangría da igual.

<script src="https://cookingchart.org/embed.js" defer></script>

<cooking-chart>
  receta "Tostada con tomate"
  ingredientes
    pan     1 rebanada
    tomate  1 ud
    aceite  1 cda
  tostada = tostar(pan) 3min desatendido
  rallado = rallar(tomate) 2min
  plato   = montar(tostada, rallado, aceite) 1min
  servir plato
</cooking-chart>

Resultado

receta "Tostada con tomate" ingredientes pan 1 rebanada tomate 1 ud aceite 1 cda tostada = tostar(pan) 3min desatendido rallado = rallar(tomate) 2min plato = montar(tostada, rallado, aceite) 1min servir plato

Desde un fichero .ccl

Si tus recetas viven en ficheros, apunta a ellos con src. Con controls el lector puede alternar entre lo antes posible y justo a tiempo.

Los ficheros de tu propia web funcionan siempre; los de otro dominio necesitan que ese servidor permita CORS.

<cooking-chart src="/recetas/pan_casero.ccl" controls></cooking-chart>

Resultado

Gráfico, plan y modo de elaboración

Además del gráfico, el componente puede mostrar la receta como texto: el modo de elaboración, con frases en el orden en que se cocina, y el plan de trabajo, paso a paso con sus minutos. Elige cuáles con view; si son varias, salen en pestañas en ese orden.

Con schema, la receta se publica también como datos estructurados de schema.org, los que usan los buscadores para mostrar recetas.

<cooking-chart src="/recetas/tacos_pollo.ccl" view="method chart plan" schema></cooking-chart>

Resultado

En Markdown

Si tu blog es estático (Hugo, Astro, Jekyll, Eleventy…), no hace falta HTML: cualquier bloque de código marcado como ccl se convierte solo en un gráfico.

<!-- Una sola vez, en la plantilla de tu blog -->
<script src="https://cookingchart.org/embed.js" defer></script>

<!-- En cualquier artículo .md -->
```ccl
receta "Huevo pasado por agua"
ingredientes
  huevo 1 ud
  agua  500 ml
agua_hirviendo = hervir(agua) 5min
huevo_cocido   = cocer(huevo, agua_hirviendo) 6min sin espera
servir huevo_cocido
```

Opciones

Atributos de <cooking-chart>. Todos son opcionales.

AtributoValoresQué hace
srcURLCarga la receta de un fichero .ccl en lugar del texto de la etiqueta.
modeasap · jitLo antes posible o justo a tiempo. Por defecto, el plan que declare la receta.
langes · enFuerza el idioma de los textos del gráfico. Por defecto, el de la receta.
controls—Muestra el selector de planificación.
variantsignatureMiniatura sin texto: la firma visual de la receta.
viewchart · method · plan · allQué mostrar: gráfico, modo de elaboración o plan de trabajo. Varias separadas por espacios salen en pestañas. Por defecto, chart.
schema—Publica la receta como JSON-LD de schema.org/Recipe en la página.

Con un iframe

Para plataformas que no dejan añadir scripts pero sí iframes. El editor genera el código con el botón Incrustar. La receta viaja en el hash de la URL (lo que va detrás de #), que el navegador nunca envía al servidor.

<iframe src="https://cookingchart.org/e#ccl=cmVjZXRhICJ4Ii…"
        width="100%" height="420" style="border:0"
        loading="lazy" title="Lasaña boloñesa"></iframe>

Como imagen

Si la plataforma no admite ni scripts ni iframes (redes sociales, algunos gestores de newsletters), usa Descargar SVG en el editor. Pierdes la interactividad, pero el dibujo es idéntico y escala sin perder calidad.

JavaScript

El script expone window.CookingChart y cada <cooking-chart> tiene una pequeña API.

<cooking-chart id="mi-receta"></cooking-chart>

<script>
  const el = document.getElementById('mi-receta');

  // Cambiar la receta: se vuelve a dibujar
  el.source = textoDeLaReceta;

  // Saber cuándo se ha dibujado (y si había errores)
  el.addEventListener('cooking-chart:render', e => {
    const { recipe, diagnostics, ok } = e.detail;
  });

  // Validar sin dibujar
  const { ok, diagnostics } = CookingChart.parse(texto, { locale: 'es' });
</script>
APIQué hace
el.source = textoCambia la receta del elemento y la vuelve a dibujar.
cooking-chart:renderEvento tras cada dibujo; detail trae la receta, los diagnósticos y si es válida.
CookingChart.parse(texto, opciones)Analiza una receta sin dibujarla. { locale: "es" } para mensajes en español.
CookingChart.prepare(receta, modo)Planifica una receta analizada: horarios, holguras, carriles.
CookingChart.method(planificada)El modo de elaboración como datos: ingredientes, utensilios y frases por momento.
CookingChart.schema(planificada)El objeto schema.org/Recipe, para publicarlo como prefieras.
CookingChart.upgrade(raíz)Convierte bloques ccl añadidos después de cargar la página.
CookingChart.registerPack(paquete)Registra un paquete de vocabulario (ver más abajo).

Estilo

El gráfico va dentro de un Shadow DOM: los estilos de tu web no lo rompen y los suyos no tocan tu web. Ocupa el ancho de su contenedor; para limitarlo, dale estilo a la etiqueta. La tarjeta interior se expone como ::part(card).

Los colores de los pasos forman parte del estándar y no se cambian: así cualquier lector reconoce un Cooking Chart en cualquier web.

cooking-chart { max-width: 960px; margin: 2rem auto; }

/* La tarjeta interior se puede retocar desde fuera */
cooking-chart::part(card) { border-radius: 0; border-color: #ddd; }

Vocabulario propio

Si tus recetas usan verbos que no están en el vocabulario base (una marca de robot de cocina, técnicas de pastelería…), registra un paquete y actívalo en la receta con usa "nombre". Para algo puntual basta con un verbo con prefijo x- y @tipo:.

<script src="https://cookingchart.org/embed.js"></script>
<script>
  CookingChart.registerPack({
    id: 'thermomix', version: '0.1',
    names: { es: 'thermomix', en: 'thermomix' },
    verbs: [
      // [id, tipo, atención, formas en español, formas en inglés]
      ['varoma', 'heat', 'passive', 'cocer_al_vapor', 'steam'],
      ['turbo',  'prep', 'active',  'turbo',          'turbo']
    ]
  });
</script>
<!-- y en la receta:  usa "thermomix" -->

Privacidad

El script no usa cookies, no rastrea y no envía tus recetas a ningún sitio: todo el análisis y el dibujo ocurren en el navegador del lector. Solo descarga la librería de dibujo (d3) de un CDN público si tu página no la tiene ya.