domnode-dom
Version:
DOMNode streams for HTMLElements
137 lines (93 loc) • 3.77 kB
Markdown
# domnode-dom
Turn DOM elements into readable / writable streams.
Designed for use with [Browserify](https://github.com/substack/browserify)
and [domnode](https://github.com/maxogden/domnode).
````javascript
var domstream = require('domstream')
, input = document.querySelector('input[type=text]')
, output = document.querySelector('div#output')
// replace the contents entirely with plain text generated
// by the <input> element!
domstream
.createReadStream(input)
.pipe(domstream.createWriteStream(output, 'text/plain'))
// grab a url and replace the body with its contents!
http
.get('/some/url')
.pipe(domstream.createAppendStream(output, 'text/html'))
// extend mimetypes:
domstream.WriteStream.prototype.constructImagePng = function(data) {
var img = document.createElement('img')
img.src = data
return img
}
// now anything you type will be used as the source for an image tag!
// or replace the contents entirely with plain text!
domstream
.createReadStream(input)
.pipe(domstream.createWriteStream(output, 'image/png'))
````
To view the example:
````shell
$ git clone git://github.com/chrisdickinson/domnode-dom.git
$ cd domnode-dom.git
$ browserify example.js > examples/main.bundle.js
$ python -m SimpleHTTPServer 9090 &; bg;
$ open http://localhost:9090/
````
## API
#### domstream = require('domstream') -> DOMStream object
### Write API
#### domstream.createWriteStream(el, mimetype) -> DOMStream.WriteStream
Creates a writable stream out of an element. Writing to this stream
will replace the contents of `el` with the incoming data (transformed
by the mimetype.)
#### domstream.createAppendStream(el, mimetype) -> DOMStream.WriteStream
As above, this will create a writable stream to an element's contents.
However, unlike the above, writes to this element will append their data
(transformed by mimetype) to the element, instead of replacing it.
> ### Mimetypes
>
> Currently only two mimetypes are supported: `text/plain`
> and `text/html`. The writable stream object dispatches based on its
> mimetype in the following fashion:
>
> > `text/html` -> `writeStream.constructTextHtml`
> > `text/plain` -> `writeStream.constructTextPlain`
> > `application/json` -> `writeStream.constructApplicationJson` (example only)
>
> `text/plain` will properly create text nodes out of incoming data, while
> `text/html` will create full DOMNodes out of the incoming data.
### Read API
#### domstream.createReadStream(el, eventName[, preventDefault=true]) -> DOMStream.ReadStream
Creates a readable stream out of `eventName` events emitted by `el`.
In most cases, the emitted event will simply be the DOM event object.
However, in the case of `submit`, `change`, `keyup` and `keydown`, the
emitted data will be the current value of the element.
In the case of form elements, the current value will be a key-value mapping
of all of their constituent inputs:
````html
<form id="form">
<input type="text" id="text" name="text" />
<input type="submit" name="submit" value="submit" />
</form>
<a href="#" id="anchor">anchor</a>
````
````javascript
var form = document.getElementById('form')
, text = document.getElementById('text')
, anchor = document.getElementById('anchor')
var domstream = require('domstream')
// will emit dom Event objects on click
domstream.createReadStream(anchor, 'click')
.on('data', function(data) { console.log(data) })
// will emit the current value of the input on keyup
domstream.createReadStream(text, 'keyup')
.on('data', function(data) { console.log(data) })
// will emit an object containing { text: <value of text input> }
// when submitted
domstream.createReadStream(form, 'submit')
.on('data', function(data) { console.log(data) })
````
## LICENSE
MIT.