Os temas são uma maneira de personalizar a aparência do Blockly. É possível personalizar as cores dos blocos, das categorias e de alguns componentes usando a classe Themes
. Se você quiser personalizar outros componentes, fornecemos o nome do tema
como uma classe na injeção div
. Isso permite que os usuários mudem a aparência de qualquer
componente sem suporte usando CSS. Nosso principal objetivo ao criar temas é capacitar os desenvolvedores a criar experiências do Blockly mais acessíveis.
Propriedades do tema
Um tema é um objeto com várias propriedades: o tema base a ser estendido, um objeto de estilo para blocos, categorias, componentes e fontes, e se é necessário usar chapéus para blocos de início.
Estilo de bloco
Um estilo de bloco é composto por quatro campos:
colourPrimary
(obrigatório): a cor de fundo do bloco.colourSecondary
(opcional): a cor de plano de fundo se o bloco for um bloco de sombra.colourTertiary
(opcional): a cor da borda ou do destaque do bloco.hat
(opcional): adiciona um chapéu a um bloco se o valor for definido comocap
. Saiba mais sobre chapéus.
const listBlocks = {
'colourPrimary': '#4a148c',
'colourSecondary':'#AD7BE9',
'colourTertiary':'#CDB6E9',
'hat': 'cap'
}
Um tema inclui um mapeamento do nome do estilo do bloco para o objeto de estilo do bloco:
const blockStyles = {
'list_blocks': {
'colourPrimary': '#4a148c',
'colourSecondary':'#AD7BE9',
'colourTertiary':'#CDB6E9'
},
'logic_blocks': {
'colourPrimary': '#01579b',
'colourSecondary':'#64C7FF',
'colourTertiary':'#C5EAFF'
}
}
Estilo de categoria
Um estilo de categoria só tem uma propriedade de cor.
- Cor (obrigatório): a cor da categoria na caixa de ferramentas. Normalmente, essas cores precisam ser as mesmas do
colourPrimary
na maioria dos blocos da categoria. Assim, os usuários podem identificar facilmente quais blocos pertencem a uma determinada categoria.
const mathCategory = {
'colour':'290'
}
Um tema inclui um mapeamento do nome da categoria para o objeto de estilo da categoria:
const categoryStyles = {
'list_category': {
'colour': '#4a148c'
},
'logic_category': {
'colour': '#01579b',
}
}
Estilos de componente
Um tema pode definir a cor ou o valor dos seguintes componentes:
workspaceBackgroundColour
: a cor do plano de fundo do espaço de trabalhotoolboxBackgroundColour
: cor do plano de fundo da caixa de ferramentastoolboxForegroundColour
: cor do texto da categoria da caixa de ferramentasflyoutBackgroundColour
: cor do plano de fundo do submenu flutuanteflyoutForegroundColour
: cor do texto do rótulo do submenuflyoutOpacity
: opacidade do submenu flutuantescrollbarColour
: cor da barra de rolagemscrollbarOpacity
: opacidade da barra de rolageminsertionMarkerColour
: a cor do marcador de inserção (não aceita nomes de cores).insertionMarkerOpacity
: a opacidade do marcador de inserção.markerColour
: a cor do marcador exibido no modo de navegação por teclado.cursorColour
: a cor do cursor exibido no modo de navegação por teclado
A maioria dos outros componentes pode ser alterada usando o nome do tema no CSS. No entanto, se houver um componente que você queira mudar e que não faça parte dessa lista e não possa ser alterado usando CSS, registre um problema com mais informações.
const componentStyle = {
'workspaceBackgroundColour': '#1e1e1e',
'toolboxBackgroundColour': '#333'
}
Estilos de fonte
Um estilo de fonte é um objeto que contém a família, o peso e o tamanho de uma fonte.
const fontStyle = {
'family': 'Georgia, serif',
'weight': 'bold',
'size': 12
}
Chapéus de início
Se você definir startHats: true
diretamente em um objeto de tema, um chapéu será adicionado a
todos os blocos sem conexões anteriores ou de saída. Se você quiser mais controle sobre
quais blocos recebem um chapéu, use a propriedade
estilo de bloco.
Temas personalizados
Para adicionar um tema ao aplicativo Blockly, faça o seguinte:
- Criar um tema
- Adicionar nomes de estilos
- Definir um tema em um espaço de trabalho
Criar um tema
É possível criar um tema usando o construtor ou defineTheme
. Usar
defineTheme
facilita a extensão de um tema preexistente e a definição de todos os valores
com um único objeto. Um tema tem um nome e é um objeto com os estilos de bloco, de categoria e outras propriedades, conforme discutido acima.
Um tema também pode ter um tema base, que fornece valores padrão para todos os valores não especificados no tema personalizado.
const theme = Blockly.Theme.defineTheme('themeName', {
'base': Blockly.Themes.Classic,
'blockStyles': {
'logic_blocks': {
'colourPrimary': '#4a148c'
},
'math_blocks': {...}
},
'categoryStyles': {...},
'componentStyles': {...},
'fontStyle': {...},
'startHats': true
});
Confira um
exemplo
de como usar defineTheme
.
Adicionar nomes de estilos
Agora que criamos um tema, precisamos adicionar o nome dos estilos às definições de bloco e categoria.
Categorias
Para usar um dos estilos de categoria definidos no categoryStyles
do tema, adicione-o à definição de categoria:
JSON
{
"kind": "category",
"name": "Logic",
"categorystyle": "logic_category"
}
XML
<category name="Logic" categorystyle="logic_category"></category>
Bloqueios
Para usar um dos estilos de bloco definidos em blockStyles
do tema, adicione-o à
definição de bloco:
JSON
"style":"logic_blocks"
JavaScript
this.setStyle('logic_blocks');
Definir o tema
Você também precisa informar ao Blockly qual tema usar. Ao definir vários temas que usam o mesmo estilo de bloco e nomes de categorias, você permite que o usuário escolha o tema mais adequado e o mude dinamicamente sem precisar alterar as definições de bloco.
Tema inicial
A melhor maneira de definir um tema inicial é incluir a opção de configuração theme
na sua chamada para Blockly.inject
. É possível fornecer o tema em JSON ou
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
}),
...
});
Se nenhum tema for fornecido, o padrão será o tema clássico.
Temas dinâmicos
Se você quiser mudar o tema de forma dinâmica (por exemplo, permitir que os usuários escolham um tema em um menu suspenso), chame yourWorkspace.setTheme(theme)
.
Criar script de estilos de bloqueio
O Blockly oferece um script que recebe um mapa de tonalidades ou valores hexadecimais e calcula as cores secundárias e terciárias para eles. O script pode ser encontrado na pasta scripts/themes.
Temas integrados
O Blockly oferece vários temas para acessibilidade, especificamente alguns tipos de daltonismo:
Também temos:
- Tema clássico
- Moderno
- Modo escuro