Create your first PRESENTA Block plugin

Posted on March 5, 2021 in
2 min read

I've updated the documentation of PRESENTA Lib adding the plugin development section few days ago.

This was the first step to lowering the barriers for those who want to develop their own plugin.

The next step, no doubt, is tutorials. Here the first one:

Let's create our first Block!

A Block is the minimal content unit in a PRESENTA scene responsible to render a content in a specific way.

Here the GOAL:

Render an SVG circle in the middle of the block area.

Furthermore, let the user choose the color.

Here the code with some comments between the lines:

function aCircle(blockElement, blockConfig){

  // check the options
  const color = blockConfig.color || 'black'
  
  // create the SVG fragment
  const str = `<svg style="width:100%;height:100%;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
        <circle fill="${color}" r="20" cx="50" cy="50"></circle>
    </svg>`
    
  // convert to a proper DOM fragment
  const parser = new DOMParser()
  const frag = parser.parseFromString(str, 'text/html').body.childNodes[0]
  
  // append it to the block container
  blockElement.append(frag)
}

// register the plugin with a unique namespace
Presenta.addBlock('aCircle', aCircle)

Keep in mind that blockElement is the block container DOM element where to append your content and blockConfig is the config object defined by the user.

This block has been registered with the name aCircle, thus, here how to use it in a PRESENTA Lib config:

const config = {
  scenes:[{
    blocks:[{
      type: 'aCircle',
      color: 'blue'
    }]
  }]
}

new Presenta('#app', config)

You can play with this plugin in Playground tool or check its source code here.

Want to interact? Reach me out on Twitter
Spotted a typo? Send a patch