Superfish menu in Drupal 7

samatech7's picture

Hello, i am quite new to javascript and jquery, but now found myself in a trap with superfish menu. I want superfish to expand my primary menu and display submenu items as well but only after selecting the appropriate menu and not to move away until another selection is made. But currently submenus are displayed onHover only.

Can some one help please? here is the superfishmenu js script.

/*
* Superfish v1.4.8 - jQuery menu widget
* Copyright (c) 2008 Joel Birch
*
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php

;(function($){
$.fn.superfish = function(op){

    var sf = $.fn.superfish,
        c = sf.c,
        $arrow = $(['<span class="',c.arrowClass,'"></span>'].join('')),
        over = function(){
            var $$ = $(this), menu = getMenu($$);
            clearTimeout(menu.sfTimer);
            $$.showSuperfishUl().siblings().hideSuperfishUl();
        },
        out = function(){
            var $$ = $(this), menu = getMenu($$), o = sf.op;
            clearTimeout(menu.sfTimer);
            menu.sfTimer=setTimeout(function(){
                o.retainPath=($.inArray($$[0],o.$path)>-1);
                $$.hideSuperfishUl();
                if (o.$path.length && $$.parents(['li.',o.hoverClass].join('')).length<1){over.call(o.$path);}
            },o.delay);
        },
        getMenu = function($menu){
            var menu = $menu.parents(['ul.',c.menuClass,':first'].join(''))[0];
            sf.op = sf.o[menu.serial];
            return menu;
        },
        addArrow = function($a){ $a.addClass(c.anchorClass).append($arrow.clone()); };

    return this.each(function() {
        var s = this.serial = sf.o.length;
        var o = $.extend({},sf.defaults,op);
        o.$path = $('li.'+o.pathClass,this).slice(0,o.pathLevels).each(function(){
            $(this).addClass([o.hoverClass,c.bcClass].join(' '))
                .filter('li:has(ul)').removeClass(o.pathClass);
        });
        sf.o[s] = sf.op = o;

        $('li:has(ul)',this)[($.fn.hoverIntent && !o.disableHI) ? 'hoverIntent' : 'hover'](over,out).each(function() {
            if (o.autoArrows) addArrow( $('>a:first-child',this) );
        })
        .not('.'+c.bcClass)
            .hideSuperfishUl();

        var $a = $('a',this);
        $a.each(function(i){
            var $li = $a.eq(i).parents('li');
            $a.eq(i).focus(function(){over.call($li);}).blur(function(){out.call($li);});
        });
        o.onInit.call(this);

    }).each(function() {
        var menuClasses = [c.menuClass];
        if (sf.op.dropShadows  && !($.browser.msie && $.browser.version < 7)) menuClasses.push(c.shadowClass);
        $(this).addClass(menuClasses.join(' '));
    });
};

var sf = $.fn.superfish;
sf.o = [];
sf.op = {};
sf.IE7fix = function(){
    var o = sf.op;
    if ($.browser.msie && $.browser.version > 6 && o.dropShadows && o.animation.opacity!=undefined)
        this.toggleClass(sf.c.shadowClass+'-off');
    };
sf.c = {
    bcClass     : 'sf-breadcrumb',
    menuClass   : 'sf-js-enabled',
    anchorClass : 'sf-with-ul',
    arrowClass  : 'sf-sub-indicator',
    shadowClass : 'sf-shadow'
};
sf.defaults = {
    hoverClass    : 'sfHover',
    pathClass    : 'overideThisToUse',
    pathLevels    : 1,
    delay        : 0,
    animation    : {opacity:'show'},
    speed        : 'normal',
    autoArrows    : true,
    dropShadows : true,
    disableHI    : false,        // true disables hoverIntent detection
    onInit        : function(){}, // callback functions
    onBeforeShow: function(){},
    onShow        : function(){},
    onHide        : function(){}
};
$.fn.extend({
    hideSuperfishUl : function(){
        var o = sf.op,
            not = (o.retainPath===true) ? o.$path : '';
        o.retainPath = false;
        var $ul = $(['li.',o.hoverClass].join(''),this).add(this).not(not).removeClass(o.hoverClass)
                .find('>ul').hide().css('visibility','hidden');
        o.onHide.call($ul);
        return this;
    },
    showSuperfishUl : function(){
        var o = sf.op,
            sh = sf.c.shadowClass+'-off',
            $ul = this.addClass(o.hoverClass)
                .find('>ul:hidden').css('visibility','visible');
        sf.IE7fix.call($ul);
        o.onBeforeShow.call($ul);
        $ul.animate(o.animation,o.speed,function(){ sf.IE7fix.call($ul); o.onShow.call($ul); });
        return this;
    }
});

})(jQuery);

AttachmentSize
Screenshot23.png17.93 KB

uganda

Group organizers

Group events

Add to calendar

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds:

Hot content this week