X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs-website;a=blobdiff_plain;f=vendor%2Fmehrpadin%2Fsuperfish%2Fsuperfish.js;fp=vendor%2Fmehrpadin%2Fsuperfish%2Fsuperfish.js;h=de9ee458799842c6c00df40bd1c7f5fc1a76a77e;hp=0000000000000000000000000000000000000000;hb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;hpb=57c063afa3f66b07c4bbddc2d6129a96d90f0aad diff --git a/vendor/mehrpadin/superfish/superfish.js b/vendor/mehrpadin/superfish/superfish.js new file mode 100644 index 000000000..de9ee4587 --- /dev/null +++ b/vendor/mehrpadin/superfish/superfish.js @@ -0,0 +1,122 @@ +/* + * Superfish v1.4.8 - jQuery menu widget + * Copyright (c) 2008 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 + */ +/* + * This is not the original jQuery Superfish plugin. + * Please refer to the README for more information. + */ + +(function($){ + $.fn.superfish = function(op){ + var sf = $.fn.superfish, + c = sf.c, + $arrow = $([' »'].join('')), + over = function(){ + var $$ = $(this), menu = getMenu($$); + clearTimeout(menu.sfTimer); + $$.showSuperfishUl().siblings().hideSuperfishUl(); + }, + out = function(){ + var $$ = $(this), menu = getMenu($$), o = sf.op; + clearTimeout(menu.sfTimer); + menu.sfTimer=setTimeout(function(){ + if ($$.children('.sf-clicked').length == 0){ + o.retainPath=($.inArray($$[0],o.$path)>-1); + $$.hideSuperfishUl(); + if (o.$path.length && $$.parents(['li.',o.hoverClass].join('')).length<1){over.call(o.$path);} + } + },o.delay); + }, + getMenu = function($menu){ + var menu = $menu.parents(['ul.',c.menuClass,':first'].join(''))[0]; + sf.op = sf.o[menu.serial]; + return menu; + }, + addArrow = function($a){ $a.addClass(c.anchorClass).append($arrow.clone()); }; + + return this.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), + p = o.$path; + for (var l = 0; l < p.length; l++){ + p.eq(l).addClass([o.hoverClass,c.bcClass].join(' ')).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( $(this).children('a:first-child, span.nolink:first-child') ); + }) + .not('.'+c.bcClass) + .hideSuperfishUl(); + + var $a = $('a, span.nolink',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){ + menuClasses.push(c.shadowClass); + } + $(this).addClass(menuClasses.join(' ')); + }); + }; + + var sf = $.fn.superfish; + sf.o = []; + sf.op = {}; + + sf.c = { + bcClass: 'sf-breadcrumb', + menuClass: 'sf-js-enabled', + anchorClass: 'sf-with-ul', + arrowClass: 'sf-sub-indicator', + shadowClass: 'sf-shadow' + }; + sf.defaults = { + hoverClass: 'sfHover', + pathClass: 'overideThisToUse', + pathLevels: 1, + delay: 800, + animation: {opacity:'show'}, + speed: 'fast', + autoArrows: true, + dropShadows: true, + disableHI: false, // true disables hoverIntent detection + onInit: function(){}, // callback functions + onBeforeShow: function(){}, + onShow: function(){}, + onHide: 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) + .children('ul').addClass('sf-hidden'); + o.onHide.call($ul); + return this; + }, + showSuperfishUl : function(){ + var o = sf.op, + sh = sf.c.shadowClass+'-off', + $ul = this.addClass(o.hoverClass) + .children('ul.sf-hidden').hide().removeClass('sf-hidden'); + o.onBeforeShow.call($ul); + $ul.animate(o.animation,o.speed,function(){ o.onShow.call($ul); }); + return this; + } + }); +})(jQuery); \ No newline at end of file