codenautas/js-to-html

View on GitHub
README.md

Summary

Maintainability
Test Coverage
# js-to-html


Create HTML text from JS object


![extending](https://img.shields.io/badge/stability-extending-orange.svg)
[![npm-version](https://img.shields.io/npm/v/js-to-html.svg)](https://npmjs.org/package/js-to-html)
[![downloads](https://img.shields.io/npm/dm/js-to-html.svg)](https://npmjs.org/package/js-to-html)
[![build](https://img.shields.io/travis/codenautas/js-to-html/master.svg)](https://travis-ci.org/codenautas/js-to-html)
[![coverage](https://img.shields.io/coveralls/codenautas/js-to-html/master.svg)](https://coveralls.io/r/codenautas/js-to-html)
[![climate](https://img.shields.io/codeclimate/github/codenautas/js-to-html.svg)](https://codeclimate.com/github/codenautas/js-to-html)
[![dependencies](https://img.shields.io/david/codenautas/js-to-html.svg)](https://david-dm.org/codenautas/js-to-html)
[![qa-control](http://codenautas.com/github/codenautas/js-to-html.svg)](http://codenautas.com/github/codenautas/js-to-html)


language: ![English](https://raw.githubusercontent.com/codenautas/multilang/master/img/lang-en.png)
also available in:
[![Spanish](https://raw.githubusercontent.com/codenautas/multilang/master/img/lang-es.png)](LEEME.md)

## Install


```sh
$ npm install js-to-html
```

## API

### html.TAGNAME([attributes, ]content)
Returns an Html object with TAGNAME, attributes and content.


**content** could be
 * a string expression
 * an array of children. Each child could be
   * a string expression
   * an Html object


**attributes** must be a plain object. Each property of the object will be an html attribute (example: `{colspan:3, id:"abc"}`).
Some attributes names are reserved words, you can use them with the same name (example: `{class:'examples'}`).
Some attributes (like **class**) could contain lists (example: `{class:['examples', 'lists']}`).

### Html.toHtmlText(opts)

Returns an Html Text

opt    |value
-------|-------
pretty | returns a pretty and indented text

## Example

```js
var html = require('js-to-html').html;

console.log(
    html.div(
        {'class':'the_class', id:'47'},
        [
            html.p('First paragraph'),
            html.p('Second paragraph'),
        ]
    ).toHtmlText({pretty:true})
)

/* logs:
<div class=the_class id=47>
  <p>First paragraph</p>
  <p>Second paragraph</p>
</div>
*/
```

### Html.toHtmlDoc(opts)

Same as `Html.toHtmlText(opts)` but returns `doctype` in the first line and completes with con HTML, HEAD, BODY and TITLE elements:


```html
var html = require("js-to-html").html;

console.log(
    html.img({src:'photo.png'}).toHtmlDoc({title:"my photo", pretty:true})
)

/*
<!doctype html>
<html>
  <head>
    <title>my photo</title>
  </head>
  <body>
    <img src=photo.png>
  </body>
</html>
*/
```

opt        |value
-----------|-------
pretty     | returns a pretty and indented text
incomplete | do not complete with  html, head y body tags
title      | text title

## Using with DOM in client-side

All html objects have a `create` method that build a DOM Element ready to append to a existing one.
`create` builds the element and inside elements too.

```js
var html = jsToHtml.html;

document.body.appendChild(
    html.div([
        html.h1('Log in'),
        html.div([
            html.input({name: 'user', placeholder:'user'}),
            html.input({name: 'pass', type: 'password'})
        ])
    ]).create()
);

```

## Special behavior

type      |name           |use
----------|---------------|--------------
function  | html._text    | simple text (like `createTextNode`)
function  | html._comment | html comment (like `< !-- ... -- >`)
attribute | classList     | for a class name list (this module rejects class with spaces like {"class": "una otra separada por espacio"} )

## Insecure mode


```js
html.insecureModeEnabled = true;
console.log(html.div({id:'this'}, html.includeHtml('<svg xml:....> </svg>')));
```

## Notes
 * In the future it will be smart to handle **style** attribute like `{style:{color: "blue", background: "none"}}`

## Tests with real devices


NPM version |Device                 |OS             |nav                      |obs
------------|-----------------------|---------------|-------------------------|----
0.9.1       | Samsung Galaxy Note 4 | Android 6.0.1 | Chrome Mobile 44.0.2403 |
0.9.1       | Blue Vivo Air LTE     | Android 5.0.2 | Chrome Mobile 50.0.2661 |
0.9.1       | Samsung Galaxy S3     | Android 4.3.0 | Android 4.3.0           |
0.9.1       | HTC Desire            | Android 2.2.2 | Android 2.2.2           | polyfill:classList
0.9.1       | iPad mini Retina      | iOS 8.4.0     | Mobile Safari 8.0.0     |
0.9.1       | VMWare                | WinXP         | IE 8.0.0                | polyfill:many

## License


[MIT](LICENSE)