Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/mikeal/funky

💪🏿 Front-end view system using basic functional programming and template literals.
https://github.com/mikeal/funky

Last synced: about 2 months ago
JSON representation

💪🏿 Front-end view system using basic functional programming and template literals.

Awesome Lists containing this project

README

        

## Funky

Front-end view system using basic functional programming and template literals.

## Usage

#### `funk` | `funk.view`

```javascript
var funk = require('funky')
var docview = funk`


${item => item.text}

`

document.body.appendChild(docview({text: "Hello World!"}))
```

The `funk` and `funk.view` are function handlers for string template literals.
The return value is a function.

When called this function returns a DOM element with some properties added.
Any variables passed to the view function are passed to every function in the
template literal and the element will use the return values from those
functions.

#### `element.update()`

```javascript
var funk = require('funky')
var docview = funk`


${item => item.text}

`

document.body.appendChild(docview({text: "Hello World!", id: 'hello'}))

var element = docview({text: "Hello Second Line.", id: 'second-hello'})
document.body.appendChild(element)

// Update content 3 seconds after adding to DOM.
setTimeout(() => {
element.update({text: "Updated, Hello Second Line.", id: 'second-hello'})
document.getElementById('hello').update({text: "Updated", id: "hello"})
}, 1000 * 3)
```

DOM elements created by funky views have a method attached named `update`. This
function is used to update the element with new values as if they had been
passed to the original view creation.

Below the surface this uses
[`yo-yo.update`](https://github.com/maxogden/yo-yo#updating-events)
which uses efficient DOM diffing.

#### `funk.list`

List views are designed to operate almost exactly like regular JavaScript
Arrays except when items are removed, added, or re-ordered, new views are
rendered to the DOM.

```javascript
var simpleview = funk`


${text => text}

`
var list = funk.list(simpleview, ["Hello World!", "Hello Second Line."])
document.body.appendChild(list.node)
```

The `list.node` property is the DOM node that can be attached.

List views can also directly be passed into other views.

```javascript
var simpleview = funk`


${text => text}

`
var list = funk.list(simpleview, ["Hello World!", "Hello Second Line."])
var listContainer = funk`
id}">${list}
`('list-container')
document.body.appendChild(listContainer)
```