Los temas son una forma de personalizar el aspecto de Blockly. Puedes personalizar los colores de los bloques, los colores de las categorías y ciertos componentes a través de la clase Themes. Si deseas personalizar componentes adicionales, proporcionamos el nombre del tema como una clase en la div de inyección. Esto permite a los usuarios cambiar el aspecto de cualquier componente no compatible a través de CSS. Nuestro objetivo principal al crear temas es permitir que los desarrolladores creen experiencias de Blockly más accesibles.
Propiedades de temas
Un tema es un objeto con varias propiedades: el tema base desde el que se extiende, un objeto de estilo para bloques, categorías, componentes y fuentes, y si se deben usar sombreros para los bloques de inicio.
Estilo de bloque
Un estilo de bloque se compone de cuatro campos:
colourPrimary(obligatorio): Es el color de fondo del bloque.colourSecondary(opcional): Es el color de fondo si el bloque es un bloque de sombra.colourTertiary(opcional): Es el color del borde o del resaltado del bloque.hat(opcional): Agrega un sombrero a un bloque si el valor se establece encap. Obtén más información sobre los sombreros.
const listBlocks = {
'colourPrimary': '#4a148c',
'colourSecondary':'#AD7BE9',
'colourTertiary':'#CDB6E9',
'hat': 'cap'
}
Un tema incluirá una asignación del nombre del estilo de bloque al objeto de estilo de bloque:
const blockStyles = {
'list_blocks': {
'colourPrimary': '#4a148c',
'colourSecondary':'#AD7BE9',
'colourTertiary':'#CDB6E9'
},
'logic_blocks': {
'colourPrimary': '#01579b',
'colourSecondary':'#64C7FF',
'colourTertiary':'#C5EAFF'
}
}
Estilo de categoría
Un estilo de categoría solo contiene una propiedad de color.
- Color (obligatorio): Es el color de la categoría en la caja de herramientas. Por lo general, estos colores deben ser los mismos que
colourPrimaryen la mayoría de los bloques de la categoría. Esto facilita que los usuarios sepan qué bloques pertenecen a una categoría determinada.

const mathCategory = {
'colour':'290'
}
Un tema incluirá una asignación del nombre de la categoría al objeto de estilo de categoría:
const categoryStyles = {
'list_category': {
'colour': '#4a148c'
},
'logic_category': {
'colour': '#01579b',
}
}
Estilos de componentes
Un tema puede establecer el color o el valor de los siguientes componentes:
workspaceBackgroundColour: El color de fondo del espacio de trabajotoolboxBackgroundColour: El color de fondo de la caja de herramientastoolboxForegroundColour: El color del texto de la categoría de la caja de herramientasflyoutBackgroundColour: El color de fondo del menú desplegableflyoutForegroundColour: El color del texto de la etiqueta del menú desplegableflyoutOpacity: La opacidad del menú desplegablescrollbarColour: El color de la barra de desplazamientoscrollbarOpacity: La opacidad de la barra de desplazamientoinsertionMarkerColour: El color del marcador de inserción (no acepta nombres de colores)insertionMarkerOpacity: La opacidad del marcador de inserciónmarkerColour: El color del marcador que se muestra en el modo de navegación con tecladocursorColour: El color del cursor que se muestra en el modo de navegación con teclado
La mayoría de los demás componentes se pueden cambiar usando el nombre del tema en tu CSS. Sin embargo, si hay un componente que deseas cambiar que aún no forma parte de esta lista y no se puede cambiar con CSS, envía un problema con más información.
const componentStyle = {
'workspaceBackgroundColour': '#1e1e1e',
'toolboxBackgroundColour': '#333'
}
Estilos de fuente
Un estilo de fuente es un objeto que contiene la familia, el peso y el tamaño de una fuente.
const fontStyle = {
'family': 'Georgia, serif',
'weight': 'bold',
'size': 12
}
Sombreros de inicio
Si estableces startHats: true directamente en un objeto de tema, se agregará un sombrero a todos los bloques sin conexiones anteriores ni de salida. Si deseas tener más control sobre
qué bloques obtienen un sombrero, puedes usar la
propiedad de estilo de bloque.
Temas personalizados
Para agregar un tema a tu aplicación de Blockly, deberás hacer lo siguiente:
- Crear un tema
- Agregar nombres de estilo
- Establecer el tema en un espacio de trabajo
Crear un tema
Se puede crear un tema con el constructor o con defineTheme. El uso de defineTheme facilita la extensión de un tema preexistente y el establecimiento de todos los valores con un solo objeto. Un tema tiene un nombre y es un objeto con los estilos de bloque, los estilos de categoría y otras propiedades como se explicó anteriormente.
Un tema también puede tener un tema base, que proporcionará valores predeterminados para cualquier valor que no se especifique en el tema personalizado.
const theme = Blockly.Theme.defineTheme('themeName', {
'base': Blockly.Themes.Classic,
'blockStyles': {
'logic_blocks': {
'colourPrimary': '#4a148c'
},
'math_blocks': {...}
},
'categoryStyles': {...},
'componentStyles': {...},
'fontStyle': {...},
'startHats': true
});
Este es un
ejemplo
del uso de defineTheme.
Agregar nombres de estilo
Ahora que creamos un tema, debemos agregar el nombre de los estilos a las definiciones de bloque y categoría.
Categorías
Para usar uno de los estilos de categoría definidos en categoryStyles de tu tema, agrégalo a la definición de categoría:
JSON
{
"kind": "category",
"name": "Logic",
"categorystyle": "logic_category"
}
XML
<category name="Logic" categorystyle="logic_category"></category>
Bloques
Para usar uno de los estilos de bloque definidos en blockStyles de tu tema, agrégalo a la definición de bloque:
JSON
"style":"logic_blocks"
JavaScript
this.setStyle('logic_blocks');
Establecer el tema
También debes indicarle a Blockly qué tema usar. Si defines varios temas que usan el mismo estilo de bloque y nombres de categoría, puedes permitir que el usuario elija el tema que mejor se adapte a sus necesidades y cambiarlo de forma dinámica sin tener que cambiar las definiciones de bloque.
Tema inicial
La mejor manera de establecer un tema inicial es incluir la opción de configuración theme en la llamada a Blockly.inject. Puedes proporcionar el tema en JSON o JavaScript.
JSON
Blockly.inject('blocklyDiv', {
theme: {
"blockStyles" : {
"list_blocks": {
"colourPrimary": "#4a148c",
"colourSecondary":"#AD7BE9",
"colourTertiary":"#CDB6E9"
}
},
"categoryStyles" : {
"list_category": {
"colour": "#4a148c"
}
},
"componentStyles" : {
"workspaceBackgroundColour": "#1e1e1e"
}
},
...
});
JavaScript
Blockly.inject('blocklyDiv', {
theme: Blockly.Theme.defineTheme('themeName', {
'blockStyles': blockStyles,
'categoryStyles': categoryStyles,
'componentStyles': componentStyles
}),
...
});
Si no se proporciona ningún tema , se usará el tema clásico de forma predeterminada.
Temas dinámicos
Si deseas cambiar tu tema de forma dinámica (por ejemplo, en el caso de permitir que los usuarios elijan un tema en un menú desplegable), puedes llamar a yourWorkspace.setTheme(theme).
Crear secuencia de comandos de estilos de bloque
Blockly proporciona una secuencia de comandos que tomará un mapa de tonos o valores hexadecimales y calculará los colores secundarios y terciarios. La secuencia de comandos se puede encontrar en la carpeta scripts/themes.
Temas incorporados
Blockly proporciona varios temas para la accesibilidad, específicamente ciertos tipos de deficiencia en la percepción del color:
También tenemos lo siguiente:
- Tema clásico
- Moderno
- Modo oscuro