~widelands-dev/widelands-website/trunk

« back to all changes in this revision

Viewing changes to media/js/superfish.js

  • Committer: kaputtnik
  • Date: 2019-05-30 18:20:02 UTC
  • mto: This revision was merged to the branch mainline in revision 540.
  • Revision ID: kaputtnik-20190530182002-g7l91m1xo28clghv
adjusted README; first commit on the new server

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
 
2
 
/*
3
 
 * Superfish v1.4.8 - jQuery menu widget
4
 
 * Copyright (c) 2008 Joel Birch
5
 
 *
6
 
 * Dual licensed under the MIT and GPL licenses:
7
 
 *      http://www.opensource.org/licenses/mit-license.php
8
 
 *      http://www.gnu.org/licenses/gpl.html
9
 
 *
10
 
 * CHANGELOG: http://users.tpg.com.au/j_birch/plugins/superfish/changelog.txt
11
 
 */
12
 
 
13
 
;(function($){
14
 
        $.fn.superfish = function(op){
15
 
 
16
 
                var sf = $.fn.superfish,
17
 
                        c = sf.c,
18
 
                        $arrow = $(['<span class="',c.arrowClass,'"> &#187;</span>'].join('')),
19
 
                        over = function(){
20
 
                                var $$ = $(this), menu = getMenu($$);
21
 
                                clearTimeout(menu.sfTimer);
22
 
                                $$.showSuperfishUl().siblings().hideSuperfishUl();
23
 
                        },
24
 
                        out = function(){
25
 
                                var $$ = $(this), menu = getMenu($$), o = sf.op;
26
 
                                clearTimeout(menu.sfTimer);
27
 
                                menu.sfTimer=setTimeout(function(){
28
 
                                        o.retainPath=($.inArray($$[0],o.$path)>-1);
29
 
                                        $$.hideSuperfishUl();
30
 
                                        if (o.$path.length && $$.parents(['li.',o.hoverClass].join('')).length<1){over.call(o.$path);}
31
 
                                },o.delay);     
32
 
                        },
33
 
                        getMenu = function($menu){
34
 
                                var menu = $menu.parents(['ul.',c.menuClass,':first'].join(''))[0];
35
 
                                sf.op = sf.o[menu.serial];
36
 
                                return menu;
37
 
                        },
38
 
                        addArrow = function($a){ $a.addClass(c.anchorClass).append($arrow.clone()); };
39
 
                        
40
 
                return this.each(function() {
41
 
                        var s = this.serial = sf.o.length;
42
 
                        var o = $.extend({},sf.defaults,op);
43
 
                        o.$path = $('li.'+o.pathClass,this).slice(0,o.pathLevels).each(function(){
44
 
                                $(this).addClass([o.hoverClass,c.bcClass].join(' '))
45
 
                                        .filter('li:has(ul)').removeClass(o.pathClass);
46
 
                        });
47
 
                        sf.o[s] = sf.op = o;
48
 
                        
49
 
                        $('li:has(ul)',this)[($.fn.hoverIntent && !o.disableHI) ? 'hoverIntent' : 'hover'](over,out).each(function() {
50
 
                                if (o.autoArrows) addArrow( $('>a:first-child',this) );
51
 
                        })
52
 
                        .not('.'+c.bcClass)
53
 
                                .hideSuperfishUl();
54
 
                        
55
 
                        var $a = $('a',this);
56
 
                        $a.each(function(i){
57
 
                                var $li = $a.eq(i).parents('li');
58
 
                                $a.eq(i).focus(function(){over.call($li);}).blur(function(){out.call($li);});
59
 
                        });
60
 
                        o.onInit.call(this);
61
 
                        
62
 
                }).each(function() {
63
 
                        var menuClasses = [c.menuClass];
64
 
                        if (sf.op.dropShadows  && !($.browser.msie && $.browser.version < 7)) menuClasses.push(c.shadowClass);
65
 
                        $(this).addClass(menuClasses.join(' '));
66
 
                });
67
 
        };
68
 
 
69
 
        var sf = $.fn.superfish;
70
 
        sf.o = [];
71
 
        sf.op = {};
72
 
        sf.IE7fix = function(){
73
 
                var o = sf.op;
74
 
                if ($.browser.msie && $.browser.version > 6 && o.dropShadows && o.animation.opacity!=undefined)
75
 
                        this.toggleClass(sf.c.shadowClass+'-off');
76
 
                };
77
 
        sf.c = {
78
 
                bcClass     : 'sf-breadcrumb',
79
 
                menuClass   : 'sf-js-enabled',
80
 
                anchorClass : 'sf-with-ul',
81
 
                arrowClass  : 'sf-sub-indicator',
82
 
                shadowClass : 'sf-shadow'
83
 
        };
84
 
        sf.defaults = {
85
 
                hoverClass      : 'sfHover',
86
 
                pathClass       : 'overideThisToUse',
87
 
                pathLevels      : 1,
88
 
                delay           : 800,
89
 
                animation       : {opacity:'show'},
90
 
                speed           : 'normal',
91
 
                autoArrows      : true,
92
 
                dropShadows : true,
93
 
                disableHI       : false,                // true disables hoverIntent detection
94
 
                onInit          : function(){}, // callback functions
95
 
                onBeforeShow: function(){},
96
 
                onShow          : function(){},
97
 
                onHide          : function(){}
98
 
        };
99
 
        $.fn.extend({
100
 
                hideSuperfishUl : function(){
101
 
                        var o = sf.op,
102
 
                                not = (o.retainPath===true) ? o.$path : '';
103
 
                        o.retainPath = false;
104
 
                        var $ul = $(['li.',o.hoverClass].join(''),this).add(this).not(not).removeClass(o.hoverClass)
105
 
                                        .find('>ul').hide().css('visibility','hidden');
106
 
                        o.onHide.call($ul);
107
 
                        return this;
108
 
                },
109
 
                showSuperfishUl : function(){
110
 
                        var o = sf.op,
111
 
                                sh = sf.c.shadowClass+'-off',
112
 
                                $ul = this.addClass(o.hoverClass)
113
 
                                        .find('>ul:hidden').css('visibility','visible');
114
 
                        sf.IE7fix.call($ul);
115
 
                        o.onBeforeShow.call($ul);
116
 
                        $ul.animate(o.animation,o.speed,function(){ sf.IE7fix.call($ul); o.onShow.call($ul); });
117
 
                        return this;
118
 
                }
119
 
        });
120
 
 
121
 
})(jQuery);