0.5.0 • Published 5 years ago

babel-plugin-transform-dom v0.5.0

Weekly downloads
2
License
MIT
Repository
github
Last release
5 years ago

babel-plugin-transform-dom

babel-plugin-transform-dom provides a dom interface while writing code that will transform to document.createElement and friends when you process through Babel.

Documentation

The method you invoke on dom will be your HTML tag, so dom.span becomes <span> and dom.fake will become <fake>.

The only exception to this dom.text which will reaturen a text node.

Arguments

The order of the arguments you pass to dom.tag doesn’t matter. Here’s a list of acceptable arguments:

  • Class name, as indicated by a string started with a period
  • ID, as indicated by a string started with a number sign
  • Text content for the tag, any string that does not start with a period or number sign
  • Child elements to add to your tag. These can be passed as top level args or in as an array of args
  • Tag attributes via the optiosns argument: { attributes: { text: "hello" } }

You can also nest dom.tag calls to create complex trees.

Alternative Invocation

Rather than calling dom.div, you can also call dom('div'). When you invoke with the tag as an argument, everything above is true except the first argument must always be the tag name. After the first argument the order of arguments do not matter.

Example

Here’s an example of creating a simple span element with a class and some text:

In

const hello = dom.div('.hello', 'Hello there!')

Out

var _div;

const hello = (_div = document.createElement('div'), _div.classList.add('hello'), _div.appendChild(document.createTextNode('Hello there!')), _div);

Here’s a more complex example:

In

const body = dom.body(
  '.page',
  dom.h1('Title', '#header'),
  dom.div(
    '.content',
    dom.p('Paragraph 1'),
    dom.p('Paragraph 2', '.small')
  ),
  dom.aside('#sidebar', {
    attributes: {
      'data-affixed': '.content'
    }
  }, dom.span('.sidebar-content .sticky', dom.p('Sidebar')))
)

Out

var _h, _div, _p, _p2, _aside, _span, _p3;

var _body = document.createElement('body');

_body.classList.add('page');

_body.appendChild((_h = document.createElement('h1'), _h.appendChild(document.createTextNode('Title')), _h.setAttribute('id', 'header'), _h));

_body.appendChild((_div = document.createElement('div'), _div.classList.add('content'), _div.appendChild((_p = document.createElement('p'), _p.appendChild(document.createTextNode('Paragraph 1')), _p)), _div.appendChild((_p2 = document.createElement('p'), _p2.appendChild(document.createTextNode('Paragraph 2')), _p2.classList.add('small'), _p2)), _div));

_body.appendChild((_aside = document.createElement('aside'), _aside.setAttribute('id', 'sidebar'), _aside.setAttribute('data-affixed', '.content'), _aside.appendChild((_span = document.createElement('span'), _span.classList.add('sidebar-content', 'sticky'), _span.appendChild((_p3 = document.createElement('p'), _p3.appendChild(document.createTextNode('Sidebar')), _p3)), _span)), _aside));

const body = _body;

JSX

You can also use babel-plugin-transform-dom to compile JSX! To enable control over JSX, just use dom.jsx as the JSX pragma and make sure to add babel-plugin-transform-dom after jsx in your plugins list:

.babelrc

{
  "plugins": [
    [ "transform-react-jsx", { "pragma": "dom.jsx" } ],
    "transform-dom"
  ]
}

Example

In

var profile = <div>
  <img src="avatar.png" class="profile" />
  <h3>{[user.firstName, user.lastName].join(' ')}</h3>
</div>;

Out

var _img, _h, _div;

var profile = (_div = document.createElement("div"), _div.appendChild((_img = document.createElement("img"), _img.setAttribute("src", "avatar.png"), _img.setAttribute("class", "profile"), _img)), _div.appendChild((_h = document.createElement("h3"), _h.appendChild(document.createTextNode([user.firstName, user.lastName].join(' '))), _h)), _div);

License

babel-plugin-transform-dom was created by Shaun Harrison and is made available under the MIT license.

0.5.0

5 years ago

0.4.0

6 years ago

0.3.2

6 years ago

0.3.1

7 years ago

0.3.0

7 years ago

0.2.0

7 years ago

0.1.0

7 years ago