Hi all
I'm struggling to get a private function running in a plugin.
Here are the 2 pieces of code, first the running version then the more
elegant but broken.
Obviously there is something that I have understood wrong in the pattern.
Can somebody point me to a better way to do this ?

//fully functionning
            (function($){

                $.fn.treeview = function(o){
                    var defaults = {
                        minus:
'url(style/site/interface/public/treeview/minus.gif) 0 0 no-repeat',
                        plus:
'url(style/site/interface/public/treeview/plus.gif) 0 0 no-repeat'
                    };
                    var opt = $.extend(defaults, o);

                    var $ul = $('li ul', this);
                    var $li = $('li', this);

                    $li.each(function(o, i){
                        $sub_ul = $('ul', this);
                        if ($sub_ul.length != 0) {
                            if ($sub_ul.css('display') != 'none')
$(this).css({background: opt.minus});
                            else $(this).css({background: opt.plus});
                        }

                    });

                    return $li.toggle(
                        function(){$ul.hide('slow');},
                        function(){$ul.show('slow');}
                        );
                }
            })(jQuery);





// More elegant attempt but broken
            (function($){

                //settings
                $.fn.treeview.defaults = {
                    minus:
'url(style/site/interface/public/treeview/minus.gif) 0 0 no-repeat',
                    plus:
'url(style/site/interface/public/treeview/plus.gif) 0 0 no-repeat'
                };

                //private (but I tried also with $.fn.treeview.setBg =
function(o))
                function setBg(li){
                    $sub_ul = $('ul', li);
                    if ($sub_ul.length != 0) {
                        if ($sub_ul.css('display') != 'none')
$(li).css({background: opt.minus});
                        else $(li).css({background: opt.plus});
                    }
                }

                //constructor
                $.fn.treeview = function(o){
                    var opt = $.extend(defaults, o);

                    var $ul = $('li ul', this);
                    var $li = $('li', this);

                    $li.each(function(o, i){
                        $(o).setBg();
                    });

                    return $li.toggle(
                        function(){$ul.hide('slow');},
                        function(){$ul.show('slow');}
                        );
                }
            })(jQuery);

Reply via email to