//*@public
/**
    The base class for all controllers in enyo. The _enyo.Controller_
    is a delegate/component that is designed to be a proxy of information.
    Rarely will it be necessary or useful to use this base-kind of controller
    and far more likely to need _enyo.ArrayController_ or subclasses.
*/
enyo.kind({
    //*@public
    name: "enyo.Controller",
    //*@protected
    // we inherit from component because we need to be able to use the bubble
    // and waterfall systems
    kind: "enyo.Component",
    //*@protected
    mixins: ["enyo.MultipleDispatchSupport"],
    //*@public
    /**
        For all _enyo.Controller_s and subkinds the default source of information
        is the _data_ property. In some cases this is a computed property for
        easier overloading. Can be any type of data.
    */
    data: null,
    //*@protected
    create: function () {
        this.inherited(arguments);
        // make sure we have some type of id
        this.id = this.makeId();
    },
    //*@protected
    ownerChanged: function () {
        this.refreshBindings();
    },
    //*@protected
    /**
        Typically controllers don't wish to bubble (component-owned controllers)
        but controllers with multiple event targets might.
    */
    _controller_bubble_target: null,
    //*@public
    /**
        The preferred retreival mechanism for the _bubbleTargeT_ for
        events.
    */
    bubbleTarget: enyo.Computed(function () {
        return this.get("_controller_bubble_target");
    }, "_controller_bubble_target")
});

@@ -324,264 +324,170 @@
     
-//*@public%0A    name: %22enyo.Controller%22,%0A    //*@protected%0A    // we inherit from component because we need to be able to use the bubble%0A    // and waterfall systems%0A    kind: %22enyo.Component%22,%0A    //*@protected%0A    mixins: %5B%22enyo.MultipleDispatchSupport%22%5D,
+%0A    // ...........................%0A    // PUBLIC PROPERTIES%0A    %0A    //*@public%0A    name: %22enyo.Controller%22,%0A    %0A    //*@public%0A    kind: %22enyo.Component%22,%0A    
 %0A   
@@ -750,167 +750,76 @@
     
-//*@protected%0A    create: function () %7B%0A        this.inherited(arguments);%0A        // make sure we have some type of id%0A        this.id = this.makeId();
+%0A    // ...........................%0A    // PROTECTED PROPERTIES
 %0A    
-%7D,
 %0A   
@@ -841,74 +841,50 @@
     
-ownerChanged: function () %7B%0A        this.refreshBindings();%0A    %7D,
+mixins: %5B%22enyo.MultipleDispatchSupport%22%5D,%0A
 %0A   
@@ -1086,24 +1086,96 @@
 rget: null,%0A
+    %0A    // ...........................%0A    // COMPUTED PROPERTIES%0A    %0A
     //*@publ
@@ -1412,13 +1412,461 @@
 target%22)
+,%0A    %0A    // ...........................%0A    // PUBLIC METHODS%0A    %0A    // ...........................%0A    // PROTECTED METHODS%0A    %0A    //*@protected%0A    create: function () %7B%0A        this.inherited(arguments);%0A        // make sure we have some type of id%0A        this.id = this.makeId();%0A    %7D,%0A    %0A    //*@protected%0A    ownerChanged: function () %7B%0A        this.refreshBindings();%0A    %7D%0A    %0A    // ...........................%0A    // OBSERVERS%0A
 %0A%7D);%0A

restructure source