1 | // $Id: superfish.js,v 1.1 2010/07/19 22:25:16 danprobo Exp $ |
---|
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); |
---|