<commit_before>## JS Data binding

## Usage

### HTML
```html
<input type="text" id="first"/>
<input type="text" id="second"/>
<input type="text" id="third"/>
```

### JS
```javascript
import { dom, val } from './bind';

let model = val('TEST ').bind(
    dom('#first'),
    dom('#second'),
    dom('#third')
);

let time = 0;
setInterval(_ => model.append(`${ time++ } `), 500);
```<commit_msg>Readme update<commit_after>## JS Data binding

## Examples

### Simple

#### HTML
```html
<input type="text" id="first"/>
<input type="text" id="second"/>
<input type="text" id="third"/>
```

#### JS
```javascript
import { dom, val } from './bind';

let model = val('TEST ').bind(
    dom('#first'),
    dom('#second'),
    dom('#third')
);

let time = 0;
setInterval(_ => model.append(`${ time++ } `), 500);
```

### Cyclical bindings
```html
<input id="foo"/>
<input id="bar"/>
<input id="moo"/>
```

#### JS
```javascript
let model = obj({
    foo: {
        bar: 'hello',
        baz: 'world'
    },
    moo: 666
});

model.foo.bar.bind(dom('#foo'));
model.moo.bind(dom('#moo'), model.foo.baz);
model.foo.baz.bind(dom('#bar'));
```
{'fraction_non_alphanumeric': 0.268141592920354, 'fraction_numerical': 0.009734513274336283, 'mean_word_length': 3.960526315789474, 'pattern_counts': {'":': 0, '<': 12, '<?xml version=': 0, '>': 14, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1906371', 'n_tokens_mistral': 427, 'n_tokens_neox': 398, 'n_words': 101}