summaryrefslogtreecommitdiff
path: root/lib/superfish/js
diff options
context:
space:
mode:
authorBharat Mediratta <bharat@menalto.com>2013-02-03 18:48:30 -0500
committerBharat Mediratta <bharat@menalto.com>2013-02-03 18:55:23 -0500
commit0494244e8068198707bf602199413cd216b0d515 (patch)
tree59d31d59047c85c13a8061165a453f86aa501510 /lib/superfish/js
parentdece6dc5a5880c6267431ba3299c5758b38662ee (diff)
Super first pass:
- jQuery 1.90 - jQuery UI 1.10 - Superfish 1.5.1 (minus all plugins) - jQuery Form 3.26.0-2013.01.28 Deleted all other jQuery plugins for now. - Reworked autocomplete to use the latest jQuery code. - Deleted references to $.browser.msie, no longer supported - Basic CSS support for autocomplete - lots more work needed there
Diffstat (limited to 'lib/superfish/js')
-rw-r--r--lib/superfish/js/superfish.js75
1 files changed, 40 insertions, 35 deletions
diff --git a/lib/superfish/js/superfish.js b/lib/superfish/js/superfish.js
index c6a9c7de..45d2e9a6 100644
--- a/lib/superfish/js/superfish.js
+++ b/lib/superfish/js/superfish.js
@@ -1,13 +1,12 @@
/*
- * Superfish v1.4.8 - jQuery menu widget
- * Copyright (c) 2008 Joel Birch
+ * Superfish v1.5.1 - jQuery menu widget
+ * Copyright (c) 2013 Joel Birch
*
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*
- * CHANGELOG: http://users.tpg.com.au/j_birch/plugins/superfish/changelog.txt
*/
;(function($){
@@ -15,8 +14,8 @@
var sf = $.fn.superfish,
c = sf.c,
- $arrow = $(['<span class="',c.arrowClass,'"> &#187;</span>'].join('')),
- over = function(){
+ $arrow = $('<span class="'+c.arrowClass+'"> &#187;</span>'),
+ over = function(e){
var $$ = $(this), menu = getMenu($$);
clearTimeout(menu.sfTimer);
$$.showSuperfishUl().siblings().hideSuperfishUl();
@@ -27,59 +26,67 @@
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);}
+ if (o.$path.length && $$.parents('li.'+o.hoverClass).length<1){
+ o.onIdle.call(this);
+ over.call(o.$path);
+ }
},o.delay);
},
- getMenu = function($menu){
- var menu = $menu.parents(['ul.',c.menuClass,':first'].join(''))[0];
+ getMenu = function($child){
+ if ($child.hasClass(c.menuClass)){
+ $.error('Superfish requires you to update to a version of hoverIntent that supports event-delegation, such as this one: https://github.com/joeldbirch/onHoverIntent');
+ }
+ var menu = $child.closest('.'+c.menuClass)[0];
sf.op = sf.o[menu.serial];
return menu;
},
+ applyHandlers = function($menu){
+ var targets = 'li:has(ul)';
+ if ($.fn.hoverIntent && !sf.op.disableHI){
+ $menu.hoverIntent(over, out, targets);
+ } else {
+ $menu.on('mouseenter', targets, over);
+ $menu.on('mouseleave', targets, out);
+ }
+ $menu.on('focusin', targets, over);
+ $menu.on('focusout', targets, out);
+ },
addArrow = function($a){ $a.addClass(c.anchorClass).append($arrow.clone()); };
- return this.each(function() {
+ return this.addClass(c.menuClass).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(' '))
+ var $$ = $(this);
+ o.$path = $$.find('li.'+o.pathClass).slice(0,o.pathLevels).each(function(){
+ $(this).addClass(o.hoverClass+' '+c.bcClass)
.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) );
+ applyHandlers($$);
+
+ $$.find('li:has(ul)').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'
+ arrowClass : 'sf-sub-indicator'
};
sf.defaults = {
hoverClass : 'sfHover',
@@ -89,31 +96,29 @@
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(){}
+ onHide : function(){},
+ onIdle : 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)
+ var $ul = $('li.'+o.hoverClass,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); });
+ $ul.animate(o.animation,o.speed,function(){ o.onShow.call($ul); });
return this;
}
});