src/cm/media/js/lib/yui/yui_3.10.3/build/view/view-debug.js
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 525 89ef5ed3c48b
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
525
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     1
/*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     2
YUI 3.10.3 (build 2fb5187)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     3
Copyright 2013 Yahoo! Inc. All rights reserved.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     4
Licensed under the BSD License.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     5
http://yuilibrary.com/license/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     6
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     7
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     8
YUI.add('view', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     9
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    10
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    11
Represents a logical piece of an application's user interface, and provides a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    12
lightweight, overridable API for rendering content and handling delegated DOM
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    13
events on a container element.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    14
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    15
@module app
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    16
@submodule view
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    17
@since 3.4.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    18
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    19
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    20
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    21
Represents a logical piece of an application's user interface, and provides a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    22
lightweight, overridable API for rendering content and handling delegated DOM
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    23
events on a container element.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    24
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    25
The View class imposes little structure and provides only minimal functionality
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    26
of its own: it's basically just an overridable API interface that helps you
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    27
implement custom views.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    28
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    29
As of YUI 3.5.0, View allows ad-hoc attributes to be specified at instantiation
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    30
time, so you don't need to subclass `Y.View` to add custom attributes. Just pass
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    31
them to the constructor:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    32
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    33
    var view = new Y.View({foo: 'bar'});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    34
    view.get('foo'); // => "bar"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    35
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    36
@class View
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    37
@constructor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    38
@extends Base
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    39
@since 3.4.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    40
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    41
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    42
function View() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    43
    View.superclass.constructor.apply(this, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    44
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    45
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    46
Y.View = Y.extend(View, Y.Base, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    47
    // -- Public Properties ----------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    48
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    49
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    50
    Template for this view's container.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    51
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    52
    @property containerTemplate
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    53
    @type String
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    54
    @default "<div/>"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    55
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    56
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    57
    containerTemplate: '<div/>',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    58
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    59
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    60
    Hash of CSS selectors mapped to events to delegate to elements matching
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    61
    those selectors.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    62
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    63
    CSS selectors are relative to the `container` element. Events are attached
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    64
    to the container, and delegation is used so that subscribers are only
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    65
    notified of events that occur on elements inside the container that match
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    66
    the specified selectors. This allows the container's contents to be re-
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    67
    rendered as needed without losing event subscriptions.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    68
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    69
    Event handlers can be specified either as functions or as strings that map
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    70
    to function names on this view instance or its prototype.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    71
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    72
    The `this` object in event handlers will refer to this view instance. If
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    73
    you'd prefer `this` to be something else, use `Y.bind()` to bind a custom
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    74
    `this` object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    75
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    76
    @example
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    77
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    78
        var view = new Y.View({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    79
            events: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    80
                // Call `this.toggle()` whenever the element with the id
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    81
                // "toggle-button" is clicked.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    82
                '#toggle-button': {click: 'toggle'},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    83
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    84
                // Call `this.hoverOn()` when the mouse moves over any element
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    85
                // with the "hoverable" class, and `this.hoverOff()` when the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    86
                // mouse moves out of any element with the "hoverable" class.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    87
                '.hoverable': {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    88
                    mouseover: 'hoverOn',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    89
                    mouseout : 'hoverOff'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    90
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    91
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    92
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    93
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    94
    @property events
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    95
    @type Object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    96
    @default {}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    97
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    98
    events: {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    99
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   100
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   101
    Template for this view's contents.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   102
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   103
    This is a convenience property that has no default behavior of its own.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   104
    It's only provided as a convention to allow you to store whatever you
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   105
    consider to be a template, whether that's an HTML string, a `Y.Node`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   106
    instance, a Mustache template, or anything else your little heart
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   107
    desires.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   108
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   109
    How this template gets used is entirely up to you and your custom
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   110
    `render()` method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   111
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   112
    @property template
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   113
    @type mixed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   114
    @default ''
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   115
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   116
    template: '',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   117
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   118
    // -- Protected Properties -------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   119
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   120
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   121
    This tells `Y.Base` that it should create ad-hoc attributes for config
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   122
    properties passed to View's constructor. This makes it possible to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   123
    instantiate a view and set a bunch of attributes without having to subclass
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   124
    `Y.View` and declare all those attributes first.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   125
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   126
    @property _allowAdHocAttrs
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   127
    @type Boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   128
    @default true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   129
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   130
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   131
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   132
    _allowAdHocAttrs: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   133
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   134
    // -- Lifecycle Methods ----------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   135
    initializer: function (config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   136
        config || (config = {});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   137
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   138
        // Set instance properties specified in the config.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   139
        config.containerTemplate &&
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   140
            (this.containerTemplate = config.containerTemplate);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   141
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   142
        config.template && (this.template = config.template);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   143
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   144
        // Merge events from the config into events in `this.events`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   145
        this.events = config.events ? Y.merge(this.events, config.events) :
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   146
            this.events;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   147
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   148
        // When the container node changes (or when it's set for the first
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   149
        // time), we'll attach events to it, but not until then. This allows the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   150
        // container to be created lazily the first time it's accessed rather
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   151
        // than always on init.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   152
        this.after('containerChange', this._afterContainerChange);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   153
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   154
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   155
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   156
    Destroys this View, detaching any DOM events and optionally also destroying
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   157
    its container node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   158
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   159
    By default, the container node will not be destroyed. Pass an _options_
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   160
    object with a truthy `remove` property to destroy the container as well.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   161
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   162
    @method destroy
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   163
    @param {Object} [options] Options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   164
        @param {Boolean} [options.remove=false] If `true`, this View's container
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   165
            will be removed from the DOM and destroyed as well.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   166
    @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   167
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   168
    destroy: function (options) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   169
        // We also accept `delete` as a synonym for `remove`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   170
        if (options && (options.remove || options['delete'])) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   171
            // Attaching an event handler here because the `destroy` event is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   172
            // preventable. If we destroyed the container before calling the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   173
            // superclass's `destroy()` method and the event was prevented, the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   174
            // class would end up in a broken state.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   175
            this.onceAfter('destroy', function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   176
                this._destroyContainer();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   177
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   178
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   179
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   180
        return View.superclass.destroy.call(this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   181
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   182
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   183
    destructor: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   184
        this.detachEvents();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   185
        delete this._container;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   186
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   187
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   188
    // -- Public Methods -------------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   189
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   190
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   191
    Attaches delegated event handlers to this view's container element. This
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   192
    method is called internally to subscribe to events configured in the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   193
    `events` attribute when the view is initialized.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   194
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   195
    You may override this method to customize the event attaching logic.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   196
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   197
    @method attachEvents
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   198
    @param {Object} [events] Hash of events to attach. See the docs for the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   199
        `events` attribute for details on the format. If not specified, this
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   200
        view's `events` property will be used.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   201
    @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   202
    @see detachEvents
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   203
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   204
    attachEvents: function (events) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   205
        var container = this.get('container'),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   206
            owns      = Y.Object.owns,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   207
            handler, handlers, name, selector;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   208
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   209
        this.detachEvents();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   210
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   211
        events || (events = this.events);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   212
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   213
        for (selector in events) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   214
            if (!owns(events, selector)) { continue; }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   215
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   216
            handlers = events[selector];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   217
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   218
            for (name in handlers) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   219
                if (!owns(handlers, name)) { continue; }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   220
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   221
                handler = handlers[name];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   222
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   223
                // TODO: Make this more robust by using lazy-binding:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   224
                // `handler = Y.bind(handler, this);`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   225
                if (typeof handler === 'string') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   226
                    handler = this[handler];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   227
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   228
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   229
                if (!handler) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   230
                    Y.log('Missing handler for ' + selector + ' ' + name + ' event.', 'warn', 'View');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   231
                    continue;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   232
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   233
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   234
                this._attachedViewEvents.push(
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   235
                    container.delegate(name, handler, selector, this));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   236
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   237
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   238
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   239
        return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   240
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   241
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   242
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   243
    Creates and returns a container node for this view.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   244
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   245
    By default, the container is created from the HTML template specified in the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   246
    `containerTemplate` property, and is _not_ added to the DOM automatically.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   247
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   248
    You may override this method to customize how the container node is created
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   249
    (such as by rendering it from a custom template format). Your method must
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   250
    return a `Y.Node` instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   251
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   252
    @method create
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   253
    @param {HTMLElement|Node|String} [container] Selector string, `Y.Node`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   254
        instance, or DOM element to use at the container node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   255
    @return {Node} Node instance of the created container node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   256
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   257
    create: function (container) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   258
        return container ? Y.one(container) :
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   259
                Y.Node.create(this.containerTemplate);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   260
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   261
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   262
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   263
    Detaches DOM events that have previously been attached to the container by
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   264
    `attachEvents()`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   265
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   266
    @method detachEvents
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   267
    @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   268
    @see attachEvents
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   269
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   270
    detachEvents: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   271
        Y.Array.each(this._attachedViewEvents, function (handle) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   272
            if (handle) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   273
                handle.detach();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   274
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   275
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   276
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   277
        this._attachedViewEvents = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   278
        return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   279
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   280
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   281
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   282
    Removes this view's container element from the DOM (if it's in the DOM),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   283
    but doesn't destroy it or any event listeners attached to it.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   284
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   285
    @method remove
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   286
    @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   287
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   288
    remove: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   289
        var container = this.get('container');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   290
        container && container.remove();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   291
        return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   292
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   293
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   294
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   295
    Renders this view.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   296
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   297
    This method is a noop by default. Override it to provide a custom
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   298
    implementation that renders this view's content and appends it to the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   299
    container element. Ideally your `render` method should also return `this` as
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   300
    the end to allow chaining, but that's up to you.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   301
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   302
    Since there's no default renderer, you're free to render your view however
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   303
    you see fit, whether that means manipulating the DOM directly, dumping
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   304
    strings into `innerHTML`, or using a template language of some kind.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   305
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   306
    For basic templating needs, `Y.Node.create()` and `Y.Lang.sub()` may
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   307
    suffice, but there are no restrictions on what tools or techniques you can
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   308
    use to render your view. All you need to do is append something to the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   309
    container element at some point, and optionally append the container
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   310
    to the DOM if it's not there already.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   311
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   312
    @method render
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   313
    @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   314
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   315
    render: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   316
        return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   317
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   318
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   319
    // -- Protected Methods ----------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   320
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   321
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   322
    Removes the `container` from the DOM and purges all its event listeners.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   323
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   324
    @method _destroyContainer
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   325
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   326
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   327
    _destroyContainer: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   328
        var container = this.get('container');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   329
        container && container.remove(true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   330
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   331
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   332
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   333
    Getter for the `container` attribute.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   334
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   335
    @method _getContainer
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   336
    @param {Node|null} value Current attribute value.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   337
    @return {Node} Container node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   338
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   339
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   340
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   341
    _getContainer: function (value) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   342
        // This wackiness is necessary to enable fully lazy creation of the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   343
        // container node both when no container is specified and when one is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   344
        // specified via a valueFn.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   345
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   346
        if (!this._container) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   347
            if (value) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   348
                // Attach events to the container when it's specified via a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   349
                // valueFn, which won't fire the containerChange event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   350
                this._container = value;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   351
                this.attachEvents();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   352
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   353
                // Create a default container and set that as the new attribute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   354
                // value. The `this._container` property prevents infinite
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   355
                // recursion.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   356
                value = this._container = this.create();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   357
                this._set('container', value);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   358
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   359
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   360
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   361
        return value;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   362
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   363
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   364
    // -- Protected Event Handlers ---------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   365
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   366
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   367
    Handles `containerChange` events. Detaches event handlers from the old
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   368
    container (if any) and attaches them to the new container.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   369
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   370
    Right now the `container` attr is initOnly so this event should only ever
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   371
    fire the first time the container is created, but in the future (once Y.App
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   372
    can handle it) we may allow runtime container changes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   373
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   374
    @method _afterContainerChange
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   375
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   376
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   377
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   378
    _afterContainerChange: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   379
        this.attachEvents(this.events);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   380
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   381
}, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   382
    NAME: 'view',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   383
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   384
    ATTRS: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   385
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   386
        Container node into which this view's content will be rendered.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   387
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   388
        The container node serves as the host for all DOM events attached by the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   389
        view. Delegation is used to handle events on children of the container,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   390
        allowing the container's contents to be re-rendered at any time without
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   391
        losing event subscriptions.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   392
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   393
        The default container is a `<div>` Node, but you can override this in
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   394
        a subclass, or by passing in a custom `container` config value at
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   395
        instantiation time. If you override the default container in a subclass
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   396
        using `ATTRS`, you must use the `valueFn` property. The view's constructor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   397
        will ignore any assignments using `value`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   398
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   399
        When `container` is overridden by a subclass or passed as a config
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   400
        option at instantiation time, you can provide it as a selector string, a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   401
        DOM element, a `Y.Node` instance, or (if you are subclassing and modifying
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   402
        the attribute), a `valueFn` function that returns a `Y.Node` instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   403
        The value will be converted into a `Y.Node` instance if it isn't one
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   404
        already.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   405
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   406
        The container is not added to the page automatically. This allows you to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   407
        have full control over how and when your view is actually rendered to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   408
        the page.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   409
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   410
        @attribute container
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   411
        @type HTMLElement|Node|String
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   412
        @default Y.Node.create(this.containerTemplate)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   413
        @writeOnce
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   414
        **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   415
        container: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   416
            getter   : '_getContainer',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   417
            setter   : Y.one,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   418
            writeOnce: true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   419
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   420
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   421
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   422
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   423
    Properties that shouldn't be turned into ad-hoc attributes when passed to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   424
    View's constructor.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   425
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   426
    @property _NON_ATTRS_CFG
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   427
    @type Array
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   428
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   429
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   430
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   431
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   432
    _NON_ATTRS_CFG: [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   433
        'containerTemplate',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   434
        'events',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   435
        'template'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   436
    ]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   437
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   438
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   439
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   440
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   441
}, '3.10.3', {"requires": ["base-build", "node-event-delegate"]});