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,'"> »</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);
|
---|