mirror of
https://github.com/Znote/ZnoteAAC.git
synced 2025-10-15 18:54:55 +02:00
Znote AAC rev 168 from subversion.
This commit is contained in:
129
layout/js/jquery.sooperfish.js
Normal file
129
layout/js/jquery.sooperfish.js
Normal file
@@ -0,0 +1,129 @@
|
||||
/*
|
||||
* SooperFish 0.1
|
||||
* (c) 2010 Jurriaan Roelofs - SooperThemes.com
|
||||
* Inspired by Suckerfish, Superfish and Droppy
|
||||
* Licensed GPL: http://www.gnu.org/licenses/gpl.html
|
||||
*/
|
||||
$.fn.sooperfish = function(op) {
|
||||
|
||||
var sf = $.fn.sooperfish;
|
||||
sf.o = [];
|
||||
sf.op = {};
|
||||
sf.c = {
|
||||
menuClass : 'sf-js-enabled',
|
||||
isParent : 'sf-parent',
|
||||
arrowClass : 'sf-arrow'
|
||||
};
|
||||
if ($.easing.easeOutOvershoot) { //set default easing
|
||||
sooperEasingShow = 'easeOutOvershoot';
|
||||
} else {
|
||||
sooperEasingShow = 'linear';
|
||||
};
|
||||
if ($.easing.easeInTurbo) {
|
||||
sooperEasingHide = 'easeInTurbo';
|
||||
} else {
|
||||
sooperEasingHide = 'linear';
|
||||
};
|
||||
sf.defaults = {
|
||||
multiColumn : true,
|
||||
dualColumn : 6, //if a submenu has at least this many items it will be divided in 2 columns
|
||||
tripleColumn : 12, //if a submenu has at least this many items it will be divided in 3 columns
|
||||
hoverClass : 'sfHover',
|
||||
delay : 500, //make sure menus only disappear when intended, 500ms is advised by Jacob Nielsen
|
||||
animationShow : {height:'show'},
|
||||
speedShow : 600,
|
||||
easingShow : sooperEasingShow,
|
||||
animationHide : {height:'hide',opacity:'hide'},
|
||||
speedHide : 200,
|
||||
easingHide : sooperEasingHide,
|
||||
autoArrows : true, //Adds span elements to parent li elements, projecting arrow images on these items to indicate submenus. I added an alternative image file with white arrows.
|
||||
onShow : function(){}, //callback after showing menu
|
||||
onHide : function(){} //callback after hiding menu
|
||||
};
|
||||
|
||||
|
||||
//Merge default settings with o function parameter
|
||||
var o = $.extend({},sf.defaults,op);
|
||||
if (!o.sooperfishWidth) {
|
||||
o.sooperfishWidth = $('ul:first li:first', this).width(); //if no width is set in options try to read it from DOM
|
||||
} else {
|
||||
$('ul li', this).width(o.sooperfishWidth) //if width is set in invocation make sure this width is true for all submenus
|
||||
}
|
||||
|
||||
this.each(function() {
|
||||
|
||||
//Check dom for submenus
|
||||
var parentLi = $('li:has(ul)', this);
|
||||
parentLi.each(function(){
|
||||
if (o.autoArrows) { //Add autoArrows if requested
|
||||
$('>a',this).append('<span class="'+sf.c.arrowClass+'"></span>');
|
||||
}
|
||||
$(this).addClass(sf.c.isParent);
|
||||
});
|
||||
|
||||
$('ul',this).css({left: 'auto',display: 'none'}); //The script needs to use display:none to make the hiding animation possible
|
||||
|
||||
//Divide menu in columns
|
||||
//Set width override
|
||||
if (o.multiColumn) {
|
||||
var uls = $('ul',this);
|
||||
uls.each(function(){
|
||||
var ulsize = $('>li:not(.backLava)',this).length; //Skip list items added by Lavalamp plugin
|
||||
if (ulsize >= o.dualColumn) {
|
||||
if (ulsize >= o.tripleColumn) {
|
||||
$(this).width(3*o.sooperfishWidth).addClass('multicolumn triplecolumn');
|
||||
} else {
|
||||
$(this).width(2*o.sooperfishWidth).addClass('multicolumn dualcolumn');
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
var root = this, zIndex = 1000;
|
||||
|
||||
function getSubmenu(ele) {
|
||||
if (ele.nodeName.toLowerCase() == 'li') {
|
||||
var submenu = $('> ul', ele);
|
||||
return submenu.length ? submenu[0] : null;
|
||||
} else {
|
||||
return ele;
|
||||
}
|
||||
}
|
||||
|
||||
function getActuator(ele) {
|
||||
if (ele.nodeName.toLowerCase() == 'ul') {
|
||||
return $(ele).parents('li')[0];
|
||||
} else {
|
||||
return ele;
|
||||
}
|
||||
}
|
||||
|
||||
function hideSooperfishUl() {
|
||||
var submenu = getSubmenu(this);
|
||||
if (!submenu) return;
|
||||
$.data(submenu, 'cancelHide', false);
|
||||
setTimeout(function() {
|
||||
if (!$.data(submenu, 'cancelHide')) {
|
||||
$(submenu).animate(o.animationHide,o.speedHide,o.easingHide,function(){ o.onHide.call(submenu); });
|
||||
}
|
||||
}, o.delay);
|
||||
}
|
||||
|
||||
function showSooperfishUl() {
|
||||
var submenu = getSubmenu(this);
|
||||
if (!submenu) return;
|
||||
$.data(submenu, 'cancelHide', true);
|
||||
$(submenu).css({zIndex: zIndex++}).animate(o.animationShow,o.speedShow,o.easingShow,function(){ o.onShow.call(submenu); });
|
||||
if (this.nodeName.toLowerCase() == 'ul') {
|
||||
var li = getActuator(this);
|
||||
$(li).addClass('hover');
|
||||
$('> a', li).addClass('hover');
|
||||
}
|
||||
}
|
||||
|
||||
// Bind Events. Yes it's that simple!
|
||||
$('li', this).unbind().hover(showSooperfishUl, hideSooperfishUl);
|
||||
|
||||
});
|
||||
|
||||
};
|
Reference in New Issue
Block a user