glass-platform
Version:
Glass platform
59 lines (55 loc) • 2.62 kB
text/coffeescript
UiControl = require('../Control')
{isElement,isNode,createElement} = require './index'
module.exports = exports =
Control = UiControl.extend
id: 'glass.ui.html.Control'
properties:
initialize: initialize = ->
# instantiate the element if necessary
if Object.isString @element
@element = createElement @element
# make sure the element is a valid node
throw new Error "element property is required" unless isNode @element
# set the container property
@container ?= @element
# find the parent element
parentNode =
if isElement @parent.container
@parent.container
else if isElement @parent
@parent
else if global.window?
global.window.document.body
# add our element to our parent node
parentNode.appendChild @element
# finally, we call subclass initialize
@inner initialize
dispose: dispose = ->
# remove our element from the DOM now.
@element.parentNode.removeChild @element
@inner dispose
element:
description: '''
The actual DOM node or element.
This can also be set to a tag name or html element declaration.
If a string it will be converted to an element at construction.
'''
value: 'span'
container:
description: 'The element to add children to. Usually same as this.element.'
if typeof describe is 'function'
assert = require 'assert'
describe 'glass.ui.html.Control', ->
if global.window
it 'should be able to add to window', ->
control = new Control
parent: global
element: createElement '<span>Test</span>'
# check that parent is the body
assert.equal window.document.body, control.element.parentNode
# check that the last child in the body is the element
assert.equal window.document.body.lastChild, control.element
# now dispose the control
control.dispose()
# and make sure the element was actually removed
assert not control.element.parentNode?