Saltar al contenido
Moodle Design Systemby Didactika
Moodle 5.3 LTS
v0.1
ES

API: iconos y marca

Los ids de iconos de Moodle con el nombre de Font Awesome con que cada versión los dibuja, y los colores y el logo del tema de Didactika.

Iconos

/api/icons.json relaciona cada id de icono que conoce Moodle con el nombre de Font Awesome con que lo dibuja cada versión. Moodle 5.x y 4.5 usan Font Awesome 6; 4.1 usa Font Awesome 4.7, así que un mismo id puede tener otro nombre (circle-plus o file-o).

{
  "versions": [{"id": "v53", "family": "fa6"}, {"id": "v45", "family": "fa6"}, {"id": "v41", "family": "fa4"}],
  "icons": {
    "a/add_file": {"v53": "circle-plus", "v45": "circle-plus", "v41": "file-o"}
  }
}

Un id de icono es <grupo>/<nombre>: t/ para los iconos de herramientas, i/ para los de elementos, a/ para acciones, e/ para el editor. En una plantilla de Moodle se escribe {{#pix}}t/add, core{{/pix}}; en PHP, $OUTPUT->pix_icon('t/add', get_string('add')).

const root = 'https://moodle-design.didactika.org';
const {versions, icons} = await (await fetch(root + '/api/icons.json')).json();

const family = Object.fromEntries(versions.map((v) => [v.id, v.family]));
const name = icons['t/edit'].v41;                       // un nombre de Font Awesome 4.7
const html = family.v41 === 'fa4' ? `<i class="fa fa-${name}"></i>` : `<i class="fa-solid fa-${name}"></i>`;

Un nombre que empieza por regular o brands ya lleva su familia. Un id sin entrada para una versión no tiene icono ahí: no se dibuja uno a mano. La regla es la misma en todo este sistema: los iconos vienen de Moodle, nunca se dibujan para un plugin. Si un plugin necesita un icono que Moodle no tiene, lleva un SVG en pix/ y lo llama con pix_icon de su propio componente.

Marca

/api/brand.json guarda la paleta del tema de Didactika y sus recursos:

Campo Significado
name Didactika
logo El color del logo
teal La escala de 50 a 950 del color de marca
extra Los pocos neutros y acentos que se usan además
roles El color de cada rol de Bootstrap (primary, secondary, success, info, warning, danger, light, dark) con el tema de Didactika activo
assets.logo, assets.icon, assets.share El logo, el icono y la imagen que se usa al compartir una página
const brand = await (await fetch(root + '/api/brand.json')).json();
console.log(brand.roles.primary, brand.assets.logo);

Los roles son lo que aplica el interruptor “Tema de Didactika” de la cabecera; para recolorear con otra cosa se cambian las variables de Bootstrap, nunca los componentes. Cada rol llega a 4,5:1 con texto blanco (el rol claro es la excepción: lleva texto oscuro).