Skip to content

Commit 8e6d1f9

Browse files
committed
Refactoring of the code, in showSuperfishUl we also remove sf-hidden class for current ul.
1 parent df2ea70 commit 8e6d1f9

File tree

3 files changed

+122
-123
lines changed

3 files changed

+122
-123
lines changed

css/superfish.css

Lines changed: 14 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,10 @@ ul.sf-menu ol,
2323
ul.sf-menu li,
2424
ul.sf-menu a,
2525
ul.sf-menu span,
26-
ul.sf-menu div {
26+
ul.sf-menu div,
27+
ul.sf-menu.menu,
28+
ul.sf-menu.menu ul,
29+
ul.sf-menu.menu li {
2730
margin: 0;
2831
padding: 0;
2932
}
@@ -74,12 +77,6 @@ ul.sf-menu li li.sfHover > ul {
7477
left: 12em;
7578
top: 0;
7679
}
77-
ul.sf-menu.menu,
78-
ul.sf-menu.menu ul,
79-
ul.sf-menu.menu li {
80-
margin: 0;
81-
padding: 0;
82-
}
8380
/**
8481
* Arrows.
8582
*/
@@ -213,9 +210,7 @@ ul.sf-menu li.sf-multicolumn-column:nth-child(3):nth-last-child(5),
213210
ul.sf-menu li.sf-multicolumn-column:nth-child(4):nth-last-child(4),
214211
ul.sf-menu li.sf-multicolumn-column:nth-child(5):nth-last-child(3),
215212
ul.sf-menu li.sf-multicolumn-column:nth-child(6):nth-last-child(2),
216-
ul.sf-menu li.sf-multicolumn-column:nth-child(7):nth-last-child(1) {
217-
width: 14.2855%;
218-
}
213+
ul.sf-menu li.sf-multicolumn-column:nth-child(7):nth-last-child(1),
219214
ul.sf-menu li.sf-multicolumn-column:nth-child(1):nth-last-child(8),
220215
ul.sf-menu li.sf-multicolumn-column:nth-child(2):nth-last-child(7),
221216
ul.sf-menu li.sf-multicolumn-column:nth-child(3):nth-last-child(6),
@@ -343,56 +338,41 @@ ul.sf-menu.rtl,
343338
ul.sf-menu.rtl li {
344339
float: right;
345340
}
341+
ul.sf-menu.rtl ul,
346342
ul.sf-menu.rtl li:hover > ul,
347343
ul.sf-menu.rtl li.sfHover > ul {
348344
left: auto;
349345
right: 0;
350346
}
351-
ul.sf-menu.rtl li li:hover > ul,
352-
ul.sf-menu.rtl li li.sfHover > ul {
353-
left: auto;
354-
right: 12em;
355-
}
356-
ul.sf-menu.rtl ul {
357-
left: auto;
358-
right: 0;
359-
}
360347
ul.sf-menu.rtl .sf-sub-indicator {
361348
left: 0.75em;
362349
right: auto;
363350
}
364-
ul.sf-menu.rtl.sf-horizontal ul .sf-sub-indicator:after {
365-
content: "◄";
366-
}
367351
ul.sf-menu.rtl.sf-horizontal.sf-shadow ul,
368352
ul.sf-menu.rtl.sf-vertical.sf-shadow ul,
369353
ul.sf-menu.rtl.sf-navbar.sf-shadow ul ul {
370354
-webkit-box-shadow: -2px 2px 10px rgba(0,0,0,0.5);
371355
-moz-box-shadow: -2px 2px 10px rgba(0,0,0,0.5);
372356
box-shadow: -2px 2px 10px rgba(0,0,0,0.5);
373357
}
374-
ul.sf-menu.rtl li.sf-multicolumn-column {
375-
float: right;
376-
}
377-
ul.sf-menu.rtl.sf-vertical li:hover > ul,
378-
ul.sf-menu.rtl.sf-vertical li.sfHover > ul {
379-
left: auto;
380-
right: 12em;
381-
}
358+
ul.sf-menu.rtl.sf-horizontal ul .sf-sub-indicator:after,
359+
ul.sf-menu.rtl.sf-navbar ul ul .sf-sub-indicator:after,
382360
ul.sf-menu.rtl.sf-vertical .sf-sub-indicator:after {
383361
content: "◄";
384362
}
363+
ul.sf-menu.rtl li.sf-multicolumn-column,
385364
ul.sf-menu.rtl.sf-navbar li li {
386365
float: right;
387366
}
388-
ul.sf-menu.rtl.sf-navbar ul ul .sf-sub-indicator:after {
389-
content: "◄";
390-
}
391367
ul.sf-menu.rtl.sf-navbar li li:hover > ul,
392368
ul.sf-menu.rtl.sf-navbar li li.sfHover > ul {
393369
left: auto;
394370
right: 0;
395371
}
372+
ul.sf-menu.rtl li li:hover > ul,
373+
ul.sf-menu.rtl li li.sfHover > ul,
374+
ul.sf-menu.rtl.sf-vertical li:hover > ul,
375+
ul.sf-menu.rtl.sf-vertical li.sfHover > ul,
396376
ul.sf-menu.rtl.sf-navbar li li li:hover > ul,
397377
ul.sf-menu.rtl.sf-navbar li li li.sfHover > ul {
398378
left: auto;
@@ -401,4 +381,4 @@ ul.sf-menu.rtl.sf-navbar li li li.sfHover > ul {
401381
ul.sf-menu.rtl.sf-accordion.sf-expanded,
402382
ul.sf-menu.rtl.sf-accordion li.sf-expanded > ul {
403383
right: auto !important;
404-
}
384+
}

superfish.js

Lines changed: 69 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -12,77 +12,89 @@
1212
*/
1313

1414
(function($){
15-
$.fn.superfish = function(options){
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-
if ($$.children('.sf-clicked').length == 0){
29-
o.retainPath = ($.inArray($$[0],o.$path)>-1);
30-
$$.hideSuperfishUl();
31-
if (o.$path.length && $$.parents(['li.',o.hoverClass].join('')).length < 1){
32-
over.call(o.$path);
33-
}
15+
$.fn.superfish = function(superfish_options){
16+
var cssClasses = sf.cssClasses;
17+
var $arrow = $(['<span class="', cssClasses.arrowClass, '"> &#187;</span>'].join(''));
18+
19+
var over = function(){
20+
var $$ = $(this);
21+
var menu = getMenu($$);
22+
clearTimeout(menu.sfTimer);
23+
$$.showSuperfishUl().siblings().hideSuperfishUl();
24+
};
25+
26+
var out = function(){
27+
var $$ = $(this);
28+
var menu = getMenu($$);
29+
var options = sf.options;
30+
31+
clearTimeout(menu.sfTimer);
32+
menu.sfTimer = setTimeout(function(){
33+
if ($$.children('.sf-clicked').length == 0){
34+
options.retainPath = ($.inArray($$[0], options.$path) > -1);
35+
$$.hideSuperfishUl();
36+
if (options.$path.length && $$.parents(['li.', options.hoverClass].join('')).length < 1){
37+
over.call(options.$path);
3438
}
35-
},o.delay);
36-
},
37-
getMenu = function($menu){
38-
var menu = $menu.parents(['ul.',c.menuClass,':first'].join(''))[0];
39-
sf.op = sf.o[menu.serial];
40-
return menu;
41-
},
42-
addArrow = function($a){ $a.addClass(c.anchorClass).append($arrow.clone()); };
39+
}
40+
},options.delay);
41+
};
42+
43+
var getMenu = function($menu){
44+
var menu = $menu.parents(['ul.', cssClasses.menuClass, ':first'].join(''))[0];
45+
sf.options = sf.optionsList[menu.serial];
46+
return menu;
47+
};
48+
49+
var addArrow = function($a){
50+
$a.addClass(cssClasses.anchorClass).append($arrow.clone());
51+
};
4352

4453
return this.each(function() {
45-
var s = this.serial = sf.o.length;
46-
var o= $.extend({},sf.defaults,options);
47-
o.$path = $('li.' + o.pathClass,this).slice(0,o.pathLevels);
48-
var p = o.$path;
49-
for (var l = 0; l < p.length; l++){
50-
p.eq(l).addClass([o.hoverClass,c.bcClass].join(' ')).filter('li:has(ul)').removeClass(o.pathClass);
54+
var s = this.serial = sf.optionsList.length;
55+
var options = $.extend({}, sf.defaults, superfish_options);
56+
options.$path = $('li.' + options.pathClass, this).slice(0, options.pathLevels);
57+
var path = options.$path;
58+
for (var l = 0; l < path.length; l++){
59+
path.eq(l).addClass([options.hoverClass, cssClasses.bcClass].join(' ')).filter('li:has(ul)').removeClass(options.pathClass);
5160
}
52-
sf.o[s] = sf.op = o;
61+
sf.optionsList[s] = sf.options = options;
5362

54-
$('li:has(ul)',this)[($.fn.hoverIntent && !o.disableHI) ? 'hoverIntent' : 'hover'](over,out).each(function() {
55-
if (o.autoArrows) addArrow( $(this).children('a:first-child, span.nolink:first-child') );
63+
$('li:has(ul)',this)[($.fn.hoverIntent && !options.disableHI) ? 'hoverIntent' : 'hover'](over, out).each(function() {
64+
if (options.autoArrows) {
65+
addArrow( $(this).children('a:first-child, span.nolink:first-child') );
66+
}
5667
})
57-
.not('.' + c.bcClass).hideSuperfishUl();
68+
.not('.' + cssClasses.bcClass).hideSuperfishUl();
5869

5970
var $a = $('a, span.nolink',this);
6071
$a.each(function(i){
6172
var $li = $a.eq(i).parents('li');
6273
$a.eq(i).focus(function(){over.call($li);}).blur(function(){out.call($li);});
6374
});
64-
o.onInit.call(this);
75+
options.onInit.call(this);
6576

6677
}).each(function() {
67-
var menuClasses = [c.menuClass];
68-
if (sf.op.dropShadows){
69-
menuClasses.push(c.shadowClass);
78+
var menuClasses = [cssClasses.menuClass];
79+
if (sf.options.dropShadows){
80+
menuClasses.push(cssClasses.shadowClass);
7081
}
7182
$(this).addClass(menuClasses.join(' '));
7283
});
7384
};
7485

7586
var sf = $.fn.superfish;
76-
sf.o = [];
77-
sf.op = {};
87+
sf.optionsList = [];
88+
sf.options = {};
7889

79-
sf.c = {
90+
sf.cssClasses = {
8091
bcClass: 'sf-breadcrumb',
8192
menuClass: 'sf-js-enabled',
8293
anchorClass: 'sf-with-ul',
8394
arrowClass: 'sf-sub-indicator',
8495
shadowClass: 'sf-shadow'
8596
};
97+
8698
sf.defaults = {
8799
hoverClass: 'sfHover',
88100
pathClass: 'overideThisToUse',
@@ -98,23 +110,25 @@
98110
onShow: function(){},
99111
onHide: function(){}
100112
};
113+
101114
$.fn.extend({
102115
hideSuperfishUl : function(){
103-
var o = sf.op;
104-
var not = (o.retainPath === true) ? o.$path : '';
105-
o.retainPath = false;
106-
var $ul = $(['li.',o.hoverClass].join(''),this).add(this).not(not).removeClass(o.hoverClass)
116+
var options = sf.options;
117+
var not = options.retainPath === true ? options.$path : '';
118+
options.retainPath = false;
119+
var $ul = $(['li.',options.hoverClass].join(''), this).add(this).not(not).removeClass(options.hoverClass)
107120
.children('ul').addClass('sf-hidden');
108-
o.onHide.call($ul);
121+
options.onHide.call($ul);
109122
return this;
110123
},
111124
showSuperfishUl : function(){
112-
var o = sf.op,
113-
sh = sf.c.shadowClass + '-off',
114-
$ul = this.addClass(o.hoverClass).children('ul.sf-hidden').hide().removeClass('sf-hidden');
115-
o.onBeforeShow.call($ul);
116-
$ul.animate(o.animation, o.speed, function(){ o.onShow.call($ul); });
125+
this.removeClass('sf-hidden');
126+
var options = sf.options;
127+
var $ul = this.addClass(options.hoverClass).children('ul.sf-hidden').hide().removeClass('sf-hidden');
128+
options.onBeforeShow.call($ul);
129+
$ul.animate(options.animation, options.speed, function(){ options.onShow.call($ul); });
117130
return this;
118131
}
119132
});
120-
})(jQuery);
133+
134+
})(jQuery);

supposition.js

Lines changed: 39 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -15,56 +15,61 @@
1515

1616
(function($){
1717
$.fn.supposition = function(){
18-
var $w = $(window), /*do this once instead of every onBeforeShow call*/
19-
_offset = function(dir) {
18+
var $w = $(window); /*do this once instead of every onBeforeShow call*/
19+
20+
var _offset = function(dir) {
2021
return window[dir == 'y' ? 'pageYOffset' : 'pageXOffset']
21-
|| document.documentElement && document.documentElement[dir=='y' ? 'scrollTop' : 'scrollLeft']
22-
|| document.body[dir=='y' ? 'scrollTop' : 'scrollLeft'];
23-
},
24-
onHide = function(){
22+
|| document.documentElement && document.documentElement[dir == 'y' ? 'scrollTop' : 'scrollLeft']
23+
|| document.body[dir == 'y' ? 'scrollTop' : 'scrollLeft'];
24+
};
25+
26+
var onHide = function(){
2527
this.css({bottom:''});
26-
},
27-
onBeforeShow = function(){
28+
};
29+
30+
var onBeforeShow = function(){
2831
this.each(function(){
2932
var $u = $(this);
3033
$u.css('display','block');
31-
var $mul = $u.closest('.sf-menu'),
32-
level = $u.parents('ul').length,
33-
menuWidth = $u.width(),
34-
menuParentWidth = $u.closest('li').outerWidth(true),
35-
menuParentLeft = $u.closest('li').offset().left,
36-
totalRight = $w.width() + _offset('x'),
37-
menuRight = $u.offset().left + menuWidth,
38-
exactMenuWidth = (menuRight > (menuParentWidth + menuParentLeft)) ? menuWidth - (menuRight - (menuParentWidth + menuParentLeft)) : menuWidth;
34+
var $mul = $u.closest('.sf-menu');
35+
var level = $u.parents('ul').length;
36+
var menuWidth = $u.width();
37+
var menuParentWidth = $u.closest('li').outerWidth(true);
38+
var menuParentLeft = $u.closest('li').offset().left;
39+
var totalRight = $w.width() + _offset('x');
40+
var menuRight = $u.offset().left + menuWidth;
41+
var exactMenuWidth = menuRight > (menuParentWidth + menuParentLeft) ? menuWidth - (menuRight - (menuParentWidth + menuParentLeft)) : menuWidth;
42+
3943
if ($u.parents('.sf-js-enabled').hasClass('rtl')) {
4044
if (menuParentLeft < exactMenuWidth) {
41-
if (($mul.hasClass('sf-horizontal') && level == 1) || ($mul.hasClass('sf-navbar') && level == 2)){
42-
$u.css({left:0,right:'auto'});
45+
if ($mul.hasClass('sf-horizontal') && level == 1 || $mul.hasClass('sf-navbar') && level == 2){
46+
$u.css({left: 0, right: 'auto'});
4347
}
4448
else {
45-
$u.css({left:menuParentWidth + 'px',right:'auto'});
49+
$u.css({left: menuParentWidth + 'px', right: 'auto'});
4650
}
4751
$u.parent().addClass('sf-supposition-active');
4852
}
4953
}
5054
else {
5155
if (menuRight > totalRight && menuParentLeft > menuWidth) {
52-
if (($mul.hasClass('sf-horizontal') && level == 1) || ($mul.hasClass('sf-navbar') && level == 2)){
53-
$u.css({right:0,left:'auto'});
56+
if ($mul.hasClass('sf-horizontal') && level == 1 || $mul.hasClass('sf-navbar') && level == 2){
57+
$u.css({right: 0, left: 'auto'});
5458
}
5559
else {
56-
$u.css({right:menuParentWidth + 'px',left:'auto'});
60+
$u.css({right: menuParentWidth + 'px', left: 'auto'});
5761
}
5862
$u.parent().addClass('sf-supposition-active');
5963
}
6064
}
61-
var windowHeight = $w.height(),
62-
offsetTop = $u.offset().top,
63-
menuParentShadow = ($mul.hasClass('sf-shadow') && $u.css('padding-bottom').length > 0) ? parseInt($u.css('padding-bottom').slice(0,-2)) : 0,
64-
menuParentHeight = ($mul.hasClass('sf-vertical')) ? '-' + menuParentShadow : $u.parent().outerHeight(true) - menuParentShadow,
65-
menuHeight = $u.height(),
66-
baseline = windowHeight + _offset('y');
67-
var expandUp = ((offsetTop + menuHeight > baseline) && (offsetTop > menuHeight));
65+
66+
var windowHeight = $w.height();
67+
var offsetTop = $u.offset().top;
68+
var menuParentShadow = $mul.hasClass('sf-shadow') && $u.css('padding-bottom').length > 0 ? parseInt($u.css('padding-bottom').slice(0,-2)) : 0;
69+
var menuParentHeight = $mul.hasClass('sf-vertical') ? '-' + menuParentShadow : $u.parent().outerHeight(true) - menuParentShadow;
70+
var menuHeight = $u.height();
71+
var baseline = windowHeight + _offset('y');
72+
var expandUp = (offsetTop + menuHeight > baseline) && (offsetTop > menuHeight);
6873
if (expandUp) {
6974
$u.css({bottom:menuParentHeight + 'px',top:'auto'});
7075
}
@@ -73,13 +78,13 @@
7378
};
7479

7580
return this.each(function() {
76-
var o = $.fn.superfish.o[this.serial]; /* get this menu's options */
81+
var options = $.fn.superfish.optionsList[this.serial]; /* get this menu's options */
7782

7883
/* if callbacks already set, store them */
79-
var _onBeforeShow = o.onBeforeShow,
80-
_onHide = o.onHide;
84+
var _onBeforeShow = options.onBeforeShow;
85+
var _onHide = options.onHide;
8186

82-
$.extend($.fn.superfish.o[this.serial],{
87+
$.extend($.fn.superfish.optionsList[this.serial],{
8388
onBeforeShow: function() {
8489
onBeforeShow.call(this); /* fire our Supposition callback */
8590
_onBeforeShow.call(this); /* fire stored callbacks */
@@ -91,4 +96,4 @@
9196
});
9297
});
9398
};
94-
})(jQuery);
99+
})(jQuery);

0 commit comments

Comments
 (0)