0.1.0 • Published 10 years ago

domicile v0.1.0

Weekly downloads
1
License
BSD
Repository
github
Last release
10 years ago

domicile

Programmatic creation of DOM elements.

Vaguely similar to React's DOM bits.

Example:

var D = require('domicile').D

var todo = [
    {id: 3, done: false, task: "Buy milk"},
    {id: 6, done: false, task: "Pick up glasses"},
    {id: 4, done: true, task: "Write code"}
]
var item,
    current

var list = D.ol({class: 'todo_list'})

for(var i = 0, len = todo.length; i < len; i++) {
    current = todo[i]
    item = D.li({id: 'item-' + current.id, class: 'incomplete'}, current.task)

    if(todo[i].done) {
        item.attr('class', 'complete')
    }

    list.append(item)
}

// Rendering time!
list.render_html() // -> Gives an HTML string suitable for ``.innerHTML``
// ...or...
list.render_dom() // -> Gives a DOM elements suitable for ``.appendChild``

License

BSD

API

domicile.D

A pre-built instance of domicile.Dom. A convenient shortcut.

Like all instances of domicile.Dom, this has a method per-HTML-tag available (85 tags currently) on it, for easy creation of tags.

Example:

var D = require('domicile').D

// Create a simple div.
var div_1 = D.div(null, "Hello, world!")

// Now with some attributes.
var div_2 = D.div({class: 'greeting', 'id': 'welcome_msg'}, "Hello!")

domicile.Dom([tag_list], [delay_setup=false])

Handles automatically setting up a variety of methods, one per-HTML-tag.

(Optionally) Accepts tag_list, an array of strings of tag names. By default, if nothing is provided, the default list of all HTML5 tags is used.

(Optionally) Accepts delay_setup, a boolean. By default, this is considered false, meaning setup is run immediately when creating a new instance. Delaying setup is useful if you either want to conserve memory or avoid automatically setting up all the various instance methods.

Example:

var Dom = require('domicile').Dom

// Default params, all tags present as methods.
// Note: You must use ``new`` here to instantiate the class.
var dom_1 = new Dom()
var ul = dom_1.ul()
var li = dom_1.li({class: 'complete'}, "Done, son.")

// You can check what tags are available.
console.log(dom_1.AVAILABLE_TAGS)
// Returns: ['div', 'span', ...]

// Overridden tags.
var dom_2 = new Dom(['p', 'a'])
// Only ``dom_2.p`` & ``dom_2.a`` are available as methods.

domicile.Element(tag_name, [attributes], [children_or_content])

The main class of Domicile, this handles creating HTML elements. The same class handles all different forms of tags.

Requires a tag_name argument, which should be a string of the tag name. Ex. 'div', 'ul', 'a', etc.

(Optionally) Accepts an attributes argument, which should be either null (no custom attributes) or an object with keys as the attribute names & values as the attribute values.

(Optionally) Accepts a children_or_content argument. If provided, two things are accepted. If a plain string is provided, that string will become the text in the element. Alternatively, you can provide 1-N Element objects, which become the child elements.

Example:

var Element = require('domicile').Element

// The simplest form, an empty div: ``<div></div>``
var just_a_div = new Element('div')

// A plain paragraph: ``<p>Hello!</p>``
var plain_para = new Element('p', null, 'Hello!')

// A complex form element: ``<input type="text" name="username" class="big login">``
var username = new Element('input', {type: 'text', name: 'username', class: 'big login'})

// A ordered list with several elements: <ol rel="todo"><li data-complete="true">Buy milk</li><li data-complete="false">Write docs</li></ol>
var todo = new Element('ol', {rel: 'todo'}
  , new Element('li', {'data-complete': 'true'}, 'Buy milk')
  , new Element('li', {'data-complete': 'false'}, 'Write docs')
)

Element Methods

Element.append(el)

Appends an Element to the end of the children on an element.

Example:

var Element = require('domicile').Element
var div = new Element('div')

var welcome = new Element('span', {class: 'welcome'}, 'Welcome, ' + username + '!')
div.append(welcome)
Element.insert(el, offset)

Inserts an Element at a given position within the children on an element.

Example:

var Element = require('domicile').Element
var ul = new Element('ul', null
  , new Element('li', null, 'First')
  , new Element('li', null, 'Third')
)

var second = new Element('li', null, 'Second')
ul.insert(second, 1)
Element.remove(offset)

Removes a specific child Element on an element.

Example:

var Element = require('domicile').Element
var ul = new Element('ul', null
  , new Element('li', null, 'First')
  , new Element('li', null, 'Third')
)

ul.remove(1)
Element.clear()

Clears all children & content on an element.

Example:

var Element = require('domicile').Element
var ul = new Element('ul', null
  , new Element('li', null, 'First')
  , new Element('li', null, 'Third')
)

ul.clear()
// Now equivalent to ``new Element('ul')``
Element.attr(key, value)

Adds/updates an attribute on an element.

Example:

var Element = require('domicile').Element
var div = new Element('div')

div.attr('id', 'test')
div.attr('class', 'yup')

// Manually set the content after the fact.
div.content = 'Test message'
Element.render_dom()

Renders an element as a native DomElement(s).

Example:

var Element = require('domicile').Element
var ul = new Element('ul', null
  , new Element('li', null, 'First')
  , new Element('li', null, 'Third')
)

var el = ul.render_dom()

// Now you can append elsewhere...
var parent = document.getElementById('something')
parent.appendChild(el)
Element.render_html()

Renders an element as HTML text, suitable for .innerHTML.

Example:

var Element = require('domicile').Element
var ul = new Element('ul', null
  , new Element('li', null, 'First')
  , new Element('li', null, 'Third')
)

var html = ul.render_html()
console.log(html)
// Returns: "<ul><li>First</li><li>Third</li></ul>"

// Now you can insert it elsewhere...
var parent = document.getElementById('something')
parent.innerHTML = html