function DOMElement(node, options) {
    if (!node) throw new Error('DOMElement must be instantiated on a node');

    this._changeQueue = [];

    this._requestingUpdate = false;
    this._renderSized = false;
    this._requestRenderSize = false;

    this._UIEvents = node.getUIEvents().slice(0);
    this._classes = ['famous-dom-element'];
    this._requestingEventListeners = [];
    this._styles = {};

    this._attributes = {};
    this._content = '';

    this._tagName = options && options.tagName ? options.tagName : 'div';
    this._renderSize = [0, 0, 0];

    this._node = node;

    if (node) node.addComponent(this);

    this._callbacks = new CallbackStore();

    this.setProperty('display', node.isShown() ? 'block' : 'none');
    this.onOpacityChange(node.getOpacity());

    if (!options) return;

    var i;
    var key;

    if (options.classes)
        for (i = 0; i < options.classes.length; i++)
            this.addClass(options.classes[i]);

    if (options.attributes)
        for (key in options.attributes)
            this.setAttribute(key, options.attributes[key]);

    if (options.properties)
        for (key in options.properties)
            this.setProperty(key, options.properties[key]);

    if (options.id) this.setId(options.id);
    if (options.content) this.setContent(options.content);
    if (options.cutout === false) this.setCutoutState(options.cutout);
}
A DOMElement is a component that can be added to a Node with the
purpose of sending draw commands to the renderer. Renderables send draw commands
to through their Nodes to the Compositor where they are acted upon.

@class DOMElement

@param {Node} node                   The Node to which the `DOMElement`
                                     renderable should be attached to.
@param {Object} options              Initial options used for instantiating
                                     the Node.
@param {Object} options.properties   CSS properties that should be added to
                                     the actual DOMElement on the initial draw.
@param {Object} options.attributes   Element attributes that should be added to
                                     the actual DOMElement.
@param {String} options.id           String to be applied as 'id' of the actual
                                     DOMElement.
@param {String} options.content      String to be applied as the content of the
                                     actual DOMElement.
@param {Boolean} options.cutout      Specifies the presence of a 'cutout' in the
                                     WebGL canvas over this element which allows
                                     for DOM and WebGL layering.  On by default.