Espaço de trabalho redimensionável

Um bom aplicativo da Web redimensiona o Blockly para preencher o espaço disponível na tela em vez de ter um tamanho fixo. Há várias maneiras de fazer isso, incluindo o uso de um posicionamento de iframe, CSS e JavaScript. Esta página demonstra uma abordagem de sobreposição que é robusta e flexível.

Esse é um processo de três etapas. O primeiro passo é definir a área. A segunda etapa é injetar o Blockly. A terceira etapa é posicionar o Blockly sobre essa área.

1. Definir a área

Usando uma tabela HTML ou um div com CSS, crie uma área vazia que flui à medida que a página é redimensionada. Verifique se a área tem um ID (nesta página, vamos chamá-la de blocklyArea).

Veja uma demonstração ao vivo (em inglês) de uma célula de tabela que preenche a parte inferior da tela.

2. Injetar o espaço de trabalho

A injeção do Blockly é o mesmo que o processo descrito em Como injetar o Blockly de tamanho fixo. Adicione o código, o elemento blocklyDiv, uma caixa de ferramentas e uma chamada de injeção.

Agora, o Blockly deve estar em execução na página, mas não localizado onde deveria estar (provavelmente fora da tela).

3. Posicionar o espaço de trabalho

A etapa final é posicionar o elemento blocklyDiv sobre o elemento blocklyArea. Para fazer isso, remova todos os estilos height e width de blocklyDiv e adicione posicionamento absoluto:

<div id="blocklyDiv" style="position: absolute"></div>

Em seguida, substitua o script de injeção por um que também posicione "blocklyDiv" em "blocklyArea":

const blocklyArea = document.getElementById('blocklyArea');
const blocklyDiv = document.getElementById('blocklyDiv');
const workspace = Blockly.inject(blocklyDiv,
    {toolbox: document.getElementById('toolbox')});
const onresize = function(e) {
  // Compute the absolute coordinates and dimensions of blocklyArea.
  const element = blocklyArea;
  let x = 0;
  let y = 0;
  do {
    x += element.offsetLeft;
    y += element.offsetTop;
    element = element.offsetParent;
  } while (element);
  // Position blocklyDiv over blocklyArea.
  blocklyDiv.style.left = x + 'px';
  blocklyDiv.style.top = y + 'px';
  blocklyDiv.style.width = blocklyArea.offsetWidth + 'px';
  blocklyDiv.style.height = blocklyArea.offsetHeight + 'px';
  Blockly.svgResize(workspace);
};
window.addEventListener('resize', onresize, false);
onresize();

Confira uma demonstração ao vivo do Blockly que preenche a parte de baixo da tela.