scrollview-list-debug.js revision 825536c58c25de1d66117da0ed460b52ed8f1eab
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassYUI.add('scrollview-list', function(Y) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass/**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Provides a plugin, which adds support for a scroll indicator to ScrollView instances
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @module scrollview-list
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glassvar getCN = Y.ClassNameManager.getClassName,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassSCROLLVIEW = 'scrollview',
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassLIST_CLASS = getCN(SCROLLVIEW, 'list'),
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassITEM_CLASS = getCN(SCROLLVIEW, 'item'),
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassCONTENT_BOX = "contentBox",
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassRENDERED = 'rendered',
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassRENDER_UI = 'renderUI',
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassHOST = "host";
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass/**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * ScrollView plugin that adds class names to immediate descendant "<li>" to
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * allow for easier styling through CSS
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @class ScrollViewList
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @namespace Plugin
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @extends Plugin.Base
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @constructor
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glassfunction ListPlugin() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass ListPlugin.superclass.constructor.apply(this, arguments);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass/**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * The identity of the plugin
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property NAME
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type String
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @default 'pluginList'
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @static
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassListPlugin.NAME = 'pluginList';
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass/**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * The namespace on which the plugin will reside.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property NS
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type String
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @default 'list'
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @static
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassListPlugin.NS = 'list';
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass/**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * The default attribute configuration for the plugin
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property ATTRS
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Object
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @static
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassListPlugin.ATTRS = {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * 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
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute isAttached
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type boolean
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @deprecated No real use for this attribute on the public API
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass isAttached: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass value:false,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass validator: Y.Lang.isBoolean
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass};
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassY.namespace("Plugin").ScrollViewList = Y.extend(ListPlugin, Y.Plugin.Base, {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Designated initializer
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method initializer
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass initializer: function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._host = this.get(HOST);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.afterHostEvent("render", this._addClassesToList);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _addClassesToList: function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (!this.get('isAttached')) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var cb = this._host.get(CONTENT_BOX),
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass ulList,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass liList;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (cb.hasChildNodes()) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //get all direct descendants of the UL's that are directly under the content box.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass ulList = cb.all('> ul');
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass liList = cb.all('> ul > li');
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //go through the UL's and add the class
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass ulList.each(function(list) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass list.addClass(LIST_CLASS);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass });
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //go through LI's and add the class
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass liList.each(function(item) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass item.addClass(ITEM_CLASS);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass });
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.set('isAttached', true);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // We need to call this again, since sv-list
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // relies on the "-vert" class, to apply padding.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // [ 1st syncUI pass applies -vert, 2nd pass re-calcs dims ]
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._host.syncUI();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass});
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass}, '@VERSION@' ,{requires:['plugin', 'classnamemanager'], skinnable:true});
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass