<commit_before>Table + Angular JS
======

```html
<table grid="update" pager="articles.pager">
    <tr ng-repeat="article in articles.data">
        <td width="20">
            <input type="checkbox" ng-model="article.checked" />
        </td>
        <td sortable="title" filter="{ 'title': 'text' }" title="Title">
            <a href="#!/news/edit{[article.id]}">{[article.title]}</a>
        </td>
        <td filter="{ 'user_id': 'select' }" filter-data="users" sortable="user_id" width="140" title="Author">
            {[article.user]}
        </td>
        <td filter="{ 'created_at': 'date' }" sortable="created_at" width="140" title="Date of creation" class="text-center">
            {[article.created_at|date:'yyyy-MM-dd']}<br/>
            {[article.created_at|date:'HH:mm:ss']}
        </td>
        <td sortable="publish" width="130" title="Published">
            <input type="checkbox" ng-model="article.publish">
        </td>
        <td filter="{ 'action': 'button' }" width="95" title="Anctions" class="text-center">
            <div class="btn-group">
                <button ng-click="delete(column)" class="btn btn-danger"><span class="glyphicon glyphicon-trash glyphicon glyphicon-white"></span></button>
            </div>
        </td>
    </tr>
</table>
```

# Sorting

Just add `sorting` attribute.
```html
<td sortable="title"></td>
```

# Filtering

```html
<td filter="{ 'title': 'text' }" filter-data="users"></td>
```

* `text` - Show text input for filtering
* `select` - Show selectbox for filtering, required `filter-data` attribute with name of function. This function must return `promise` for resolving data in select box
* `date` - simple date range
* `button` - show "Filter" button<commit_msg>some description<commit_after>Table + Angular JS
======

```html
<table grid="update" pager="articles.pager">
    <tr ng-repeat="article in articles.data">
        <td width="20">
            <input type="checkbox" ng-model="article.checked" />
        </td>
        <td sortable="title" filter="{ 'title': 'text' }" title="Title">
            <a href="#!/news/edit{[article.id]}">{[article.title]}</a>
        </td>
        <td filter="{ 'user_id': 'select' }" filter-data="users" sortable="user_id" width="140" title="Author">
            {[article.user]}
        </td>
        <td filter="{ 'created_at': 'date' }" sortable="created_at" width="140" title="Date of creation" class="text-center">
            {[article.created_at|date:'yyyy-MM-dd']}<br/>
            {[article.created_at|date:'HH:mm:ss']}
        </td>
        <td sortable="publish" width="130" title="Published">
            <input type="checkbox" ng-model="article.publish">
        </td>
        <td filter="{ 'action': 'button' }" width="95" title="Anctions" class="text-center">
            <div class="btn-group">
                <button ng-click="delete(column)" class="btn btn-danger"><span class="glyphicon glyphicon-trash glyphicon glyphicon-white"></span></button>
            </div>
        </td>
    </tr>
</table>
```

Header row with titles and filters automatic generated on compilation step.

# Sorting

Just add `sorting` attribute.
```html
<td sortable="title"></td>
```

# Filtering

```html
<td filter="{ 'title': 'text' }" filter-data="users"></td>
```

* `text` - Show text input for filtering
* `select` - Show selectbox for filtering, required `filter-data` attribute with name of function. This function must return `promise` for resolving data in select box
* `date` - simple date range
* `button` - show "Filter" button
{'fraction_non_alphanumeric': 0.19059684684684686, 'fraction_numerical': 0.00731981981981982, 'mean_word_length': 3.1555555555555554, 'pattern_counts': {'":': 0, '<': 65, '<?xml version=': 0, '>': 65, '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': '4242281', 'n_tokens_mistral': 1156, 'n_tokens_neox': 1075, 'n_words': 271}