JAVASCRIPT 24
Superfish.js Guest on 3rd May 2021 04:47:14 AM
  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,'"> &#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.                               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);

Paste-bin is for source code and general debugging text.

Login or Register to edit, delete and keep track of your pastes and more.

Raw Paste

Login or Register to edit or fork this paste. It's free.