listbox.js revision e808b8824ca1091c8efb5669db9129e68e5e1c14
e808b8824ca1091c8efb5669db9129e68e5e1c14Satyen DesaiY.ListBox = Y.Base.create("listbox", Y.Widget, [Y.WidgetParent, Y.WidgetChild], {
e808b8824ca1091c8efb5669db9129e68e5e1c14Satyen Desai bindUI: function() {
e808b8824ca1091c8efb5669db9129e68e5e1c14Satyen Desai if (this.isRoot()) {
e808b8824ca1091c8efb5669db9129e68e5e1c14Satyen Desai this.get("boundingBox").plug(Y.Plugin.NodeFocusManager, {
e808b8824ca1091c8efb5669db9129e68e5e1c14Satyen Desai this.get("boundingBox").on("contextmenu", function (event) {
e808b8824ca1091c8efb5669db9129e68e5e1c14Satyen Desai // Setup listener to control keyboard based single/multiple item selection
e808b8824ca1091c8efb5669db9129e68e5e1c14Satyen Desai // Setup listener to control mouse based single/multiple item selection
e808b8824ca1091c8efb5669db9129e68e5e1c14Satyen Desai // Helper Method, to find the correct next sibling, taking into account nested ListBoxes
e808b8824ca1091c8efb5669db9129e68e5e1c14Satyen Desai _selectNextSibling : function(item, direction) {
e808b8824ca1091c8efb5669db9129e68e5e1c14Satyen Desai // Only go circular for the root listbox
e808b8824ca1091c8efb5669db9129e68e5e1c14Satyen Desai // If we found a sibling, it's either an Option or a ListBox
e808b8824ca1091c8efb5669db9129e68e5e1c14Satyen Desai // If it's a ListBox, select it's first child (in the direction we're headed)
e808b8824ca1091c8efb5669db9129e68e5e1c14Satyen Desai sibling.selectChild((direction) ? 0 : sibling.size() - 1);
e808b8824ca1091c8efb5669db9129e68e5e1c14Satyen Desai // If it's an Option, select it
e808b8824ca1091c8efb5669db9129e68e5e1c14Satyen Desai // If we didn't find a sibling, we're at the last leaf in a nested ListBox
e808b8824ca1091c8efb5669db9129e68e5e1c14Satyen Desai NESTED_TEMPLATE : '<li class="{nestedOptionClassName}"><em class="{labelClassName}">{label}</em></li>',
e808b8824ca1091c8efb5669db9129e68e5e1c14Satyen Desai renderUI: function () {
e808b8824ca1091c8efb5669db9129e68e5e1c14Satyen Desai nestedOptionClassName : this.getClassName("option"),
e808b8824ca1091c8efb5669db9129e68e5e1c14Satyen Desai liHtml = Y.substitute(this.NESTED_TEMPLATE, tokens),
e808b8824ca1091c8efb5669db9129e68e5e1c14Satyen DesaiY.Option = Y.Base.create("option", Y.Widget, [Y.WidgetChild], {
e808b8824ca1091c8efb5669db9129e68e5e1c14Satyen Desai renderUI: function () {
e808b8824ca1091c8efb5669db9129e68e5e1c14Satyen Desai this.get("contentBox").setContent(this.get("label"));
e808b8824ca1091c8efb5669db9129e68e5e1c14Satyen Desai}, '3.1.0' ,{requires:['substitute', 'widget', 'widget-parent', 'widget-child', 'node-focusmanager']});