htmlmodule

0.15.2 • Public • Published

htmlmodule

NPM Version Node.js CI Coverage Status NPM

HtmlModule is a library for creating user interfaces. It implements the "virtual DOM" approach and provides a convenient object-oriented API with a JavaScript-compatible syntax.

Unlike modern React, which has switched to a functional programming style and hooks, HtmlModule relies on the power of object-oriented programming and uses its advantages.

The library provides a set of components, each of which represents one of the HTML elements. These components can be extended by the developer to implement the necessary functionality.

One of the key features is the syntax for describing the component tree. It uses the "new" operator with the name of the component class. It looks natural and more convenient than JSX. No code transpiling is required.

In addition to presenting HTML elements, the library provides a set of components representing WAI-ARIA roles and attributes that help the developer create an accessible user interface.

Main Features

  • The power of OOP
  • Fast and effective DOM patching algorithm
  • No JSX, but convenient JS-compatible syntax
  • API to build your own high-level components
  • WAI-ARIA role-based components to improve accessibility
  • Automatic generation of the className based on inheritance
  • Small footprint, 17KB after gzip

Documentation

Examples

Example of a simple authorization form:

import { HtmlForm, HtmlInput, HtmlButton } from 'htmlmodule'

class LoginForm extends HtmlForm
{
  static class = 'LoginForm'

  static defaultProps = { method : 'post' }

  state = {
    login : '',
    password : '',
  }

  render() {
    return [
      new HtmlInput({
        name : 'login',
        placeholder : 'Login',
        value : this.state.login,
        oninput : e => this.setState({ login : e.target.value }),
      }),
      new HtmlInput({
        type : 'password',
        name : 'password',
        placeholder : 'Password',
        value : this.state.password,
        oninput : e => this.setState({ password : e.target.value }),
      }),
      new HtmlButton('Login'),
    ]
  }
}

LoginForm.render({ action : '/login' }, document.body)

This code creates and processes a form with the appropriate DOM structure:

<form class="LoginForm" method="post" action="/login">
  <input name="login" placeholder="Login">
  <input type="password" name="password" placeholder="Password">
  <button>Login</button>
</form>

More complex examples:

License

The MIT License (MIT)

Dependencies (0)

    Dev Dependencies (10)

    Package Sidebar

    Install

    npm i htmlmodule

    Weekly Downloads

    74

    Version

    0.15.2

    License

    MIT

    Unpacked Size

    491 kB

    Total Files

    29

    Last publish

    Collaborators

    • aristov