0.15.2 • Published 1 month ago

htmlmodule v0.15.2

Weekly downloads
27
License
MIT
Repository
github
Last release
1 month ago

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)

0.15.2

1 month ago

0.15.1

2 months ago

0.15.0

11 months ago

0.14.5

12 months ago

0.14.3

1 year ago

0.14.4

1 year ago

0.13.0

1 year ago

0.12.1

1 year ago

0.14.0

1 year ago

0.12.2

1 year ago

0.14.1

1 year ago

0.12.3

1 year ago

0.14.2

1 year ago

0.12.0

1 year ago

0.11.0

2 years ago

0.10.0

2 years ago

0.9.0

2 years ago

0.8.1

2 years ago

0.8.0

2 years ago

0.7.1

2 years ago

0.7.0

2 years ago

0.6.2

5 years ago

0.6.1

5 years ago

0.6.0

6 years ago

0.5.22

6 years ago

0.5.21

6 years ago

0.5.20

6 years ago

0.5.19

6 years ago

0.5.18

6 years ago

0.5.17

6 years ago

0.5.16

6 years ago

0.5.15

6 years ago

0.5.14

6 years ago

0.5.13

6 years ago

0.5.12

6 years ago

0.5.11

6 years ago

0.5.10

6 years ago

0.5.9

6 years ago

0.5.8

6 years ago

0.5.7

6 years ago

0.5.6

6 years ago

0.5.5

7 years ago

0.5.4

7 years ago

0.5.3

7 years ago

0.4.3

7 years ago

0.4.2

7 years ago

0.4.1

7 years ago

0.4.0

7 years ago

0.3.0

7 years ago

0.2.0

8 years ago

0.1.5

8 years ago

0.1.4

8 years ago

0.1.3

8 years ago

0.1.2

8 years ago

0.1.1

8 years ago

0.1.0

8 years ago