Version 3.18.1
Show:

File: scrollview/js/list-plugin.js

            /**
             * Provides a plugin, which adds support for a scroll indicator to ScrollView instances
             *
             * @module scrollview-list
             */
            var getCN = Y.ClassNameManager.getClassName,
            SCROLLVIEW = 'scrollview',
            LIST_CLASS = getCN(SCROLLVIEW, 'list'),
            ITEM_CLASS = getCN(SCROLLVIEW, 'item'),
            CONTENT_BOX = "contentBox",
            HOST = "host";
            
            /**
             * ScrollView plugin that adds class names to immediate descendant "<li>" to
             *  allow for easier styling through CSS
             *
             * @class ScrollViewList
             * @namespace Plugin
             * @extends Plugin.Base
             * @constructor
             */
            function ListPlugin() {
                ListPlugin.superclass.constructor.apply(this, arguments);
            }
            
            
            /**
             * The identity of the plugin
             *
             * @property NAME
             * @type String
             * @default 'pluginList'
             * @static
             */
            ListPlugin.NAME = 'pluginList';
            
            /**
             * The namespace on which the plugin will reside.
             *
             * @property NS
             * @type String
             * @default 'list'
             * @static
             */
            ListPlugin.NS = 'list';
            
            
            /**
             * The default attribute configuration for the plugin
             *
             * @property ATTRS
             * @type Object
             * @static
             */
            ListPlugin.ATTRS = {
            
                /**
                 * Specifies whether the list elements (the immediate <ul>'s and the
                 *  immediate <li>'s inside those <ul>'s) have class names attached to
                 *  them or not
                 *
                 * @attribute isAttached
                 * @type boolean
                 * @deprecated No real use for this attribute on the public API
                 */
                isAttached: {
                    value:false,
                    validator: Y.Lang.isBoolean
                }
            };
            
            Y.namespace("Plugin").ScrollViewList = Y.extend(ListPlugin, Y.Plugin.Base, {
            
                /**
                 * Designated initializer
                 *
                 * @method initializer
                 */
                initializer: function() {
                    this._host = this.get(HOST);
                    this.afterHostEvent("render", this._addClassesToList);
                },
            
                _addClassesToList: function() {
                    if (!this.get('isAttached')) {
                        var cb = this._host.get(CONTENT_BOX),
                        ulList,
                        liList;
            
                        if (cb.hasChildNodes()) {
                            //get all direct descendants of the UL's that are directly under the content box.
                            ulList = cb.all('> ul');
                            liList = cb.all('> ul > li');
            
                            //go through the UL's and add the class
                            ulList.each(function(list) {
                                list.addClass(LIST_CLASS);
                            });
            
                            //go through LI's and add the class
                            liList.each(function(item) {
                                item.addClass(ITEM_CLASS);
                            });
            
                            this.set('isAttached', true);
            
                            // We need to call this again, since sv-list
                            //  relies on the "-vert" class, to apply padding.
                            //  [ 1st syncUI pass applies -vert, 2nd pass re-calcs dims ]
                            this._host.syncUI();
                        }
                    }
                }
            
            });