Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

@yagni-js/yagni-dom

yagni-js53Unlicense2.2.0

Yet another functional library (DOM API related)

frontend, functional, yagni, DOM

readme

yagni-dom

Yet another pure functional DOM API related frontend library built on top of yagni library.

Pure functional in this context means functional code style - library code is linted using eslint-plugin-fp and eslint-plugin-better. Javascript code of the library is purely functional.

Installation

Using npm:


$ npm install --save-dev @yagni-js/yagni-dom

Using yarn:


$ yarn add -D @yagni-js/yagni-dom

Usage

Source code is written using ES6 modules, built using rollup and distributed in two formats - as CommonJS module and as ES6 module.

CommonJS usage:


const dom = require('@yagni-js/yagni-dom');

ES6 module usage:


import * as dom from '@yagni-js/yagni-dom';
// or
import { h, hSVG, hText } from '@yagni-js/yagni-dom';

Documentation

Not yet available, please check sources.

Example

Here is an example of library usage:


import { pipe } from '@yagni-js/yagni';
import { h, hText, render, firstChild } from '@yagni-js/yagni-dom';

const doc = window.document;

const renderToBody = pipe([
  render(doc.body),
  firstChild
]);

const layout = h('div', {class: 'root'}, {}, [
  h('div', {class: 'header'}, {}, [hText('Header')]),
  h('div', {class: 'main'}, {}, [
    h('div', {class: 'sidebar'}, {}, [hText('Sidebar')]),
    h('div', {class: 'content'}, {}, [hText('Content')])
  ]),
  h('div', {class: 'footer'}, {}, [hText('Footer')])
]);

const el = renderToBody(layout);

which is an equivalent to the following raw DOM API calls:


const doc = window.document;

const root = doc.createElement('div');
const header = doc.createElement('div');
const main = doc.createElement('div');
const sidebar = doc.createElement('div');
const content = doc.createElement('div');
const footer = doc.createElement('div');

root.classList.add('root');
header.classList.add('header');
main.classList.add('main');
sidebar.classList.add('sidebar');
content.classList.add('content');
footer.classList.add('footer');

header.appendChild(doc.createTextNode('Header'));
sidebar.appendChild(doc.createTextNode('Sidebar'));
content.appendChild(doc.createTextNode('Content'));
footer.appendChild(doc.createTextNode('Footer'));

main.appendChild(sidebar);
main.appendChild(content);

root.appendChild(header);
root.appendChild(main);
root.appendChild(footer);

doc.body.appendChild(root);

License

Unlicense

changelog

Changelog

2.2.0 (2019-07-19)

2.1.0 (2019-03-23)

  • [*] updated dependencies

2.0.0 (2019-02-26)

Changes

  • [+] added hSkip() function to indicate node to skip while creating children nodes in h() and hSVG() functions
  • [*] @yagni-js/yagni-dom@1.0.0 and @yagni-js/yagni-dom@1.1.0 are deprecated in favour of @yagni-js/yagni-dom@2.0.0

1.1.0 (2019-02-22)

Changes

  • [*] fixed readme and jsdoc examples - removed hToDOM() function mentions, added hText() function to examples

1.0.0 (2019-02-21)

Breaking changes

  • [*] changed h() and hSVG() functions to return a factory function, require array of children to contain only functions to call to create child element or text node
  • [-] removed hToDOM() function

Changes

  • [+] added support for HTMLSelectElement to serializeForm() function
  • [+] added setAttrTo() function
  • [+] added setPropTo() function
  • [+] added setDataTo() function
  • [+] added removeChild() function
  • [+] added hText() function
  • [*] tuned setAttrs(), setProps() and setDatas() functions
  • [*] updated deps
  • [+] added jsdoc comments

0.3.0 (2018-03-10)

  • added prepend() and prependTo() functions

0.2.0 (2018-03-06)

  • updated @yagni-js/yagni@0.3.0 peer dependency

0.1.2 (2018-02-24)

  • @yagni-js/yagni moved to peer dependencies in package.json

0.1.1 (2018-02-18)

  • switched from MIT to Unlicense

0.1.0 (2018-02-18)

  • initial release