diff options
Diffstat (limited to 'rt/share/html/NoAuth/js/jquery.supposition.js')
-rw-r--r-- | rt/share/html/NoAuth/js/jquery.supposition.js | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/rt/share/html/NoAuth/js/jquery.supposition.js b/rt/share/html/NoAuth/js/jquery.supposition.js new file mode 100644 index 000000000..0ce573027 --- /dev/null +++ b/rt/share/html/NoAuth/js/jquery.supposition.js @@ -0,0 +1,83 @@ +/* This file was modified to look for superfish in $.fn.superfish instead of $.superfish */ + +/* + * Supposition v0.2 - an optional enhancer for Superfish jQuery menu widget + * + * Copyright (c) 2008 Joel Birch - based mostly on work by Jesse Klaasse and credit goes largely to him. + * Special thanks to Karl Swedberg for valuable input. + * + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + */ + +(function($){ + + $.fn.supposition = function(){ + var $w = $(window), /*do this once instead of every onBeforeShow call*/ + _offset = function(dir) { + return window[dir == 'y' ? 'pageYOffset' : 'pageXOffset'] + || document.documentElement && document.documentElement[dir=='y' ? 'scrollTop' : 'scrollLeft'] + || document.body[dir=='y' ? 'scrollTop' : 'scrollLeft']; + }, + onInit = function(){ + /* I haven't touched this bit - needs work as there are still z-index issues */ + $topNav = $('li',this); + var cZ=parseInt($topNav.css('z-index')) + $topNav.length; + $topNav.each(function() { + $(this).css({zIndex:--cZ}); + }); + }, + onHide = function(){ + this.css({marginTop:'',marginLeft:''}); + }, + onBeforeShow = function(){ + this.each(function(){ + var $u = $(this); + $u.css('display','block'); + var menuWidth = $u.width(), + parentWidth = $u.parents('ul').width(), + totalRight = $w.width() + _offset('x'), + menuRight = $u.offset().left + menuWidth; + if (menuRight > totalRight) { + $u.css('margin-left', ($u.parents('ul').length == 1 ? totalRight - menuRight : -(menuWidth + parentWidth)) + 'px'); + } + + var windowHeight = $w.height(), + offsetTop = $u.offset().top, + menuHeight = $u.height(), + baseline = windowHeight + _offset('y'); + var expandUp = (offsetTop + menuHeight > baseline); + if (expandUp) { + $u.css('margin-top',baseline - (menuHeight + offsetTop)); + } + $u.css('display','none'); + }); + }; + + return this.each(function() { + var o = $.fn.superfish.o[this.serial]; /* get this menu's options */ + + /* if callbacks already set, store them */ + var _onInit = o.onInit, + _onBeforeShow = o.onBeforeShow, + _onHide = o.onHide; + + $.extend($.fn.superfish.o[this.serial],{ + onInit : function() { + onInit.call(this); /* fire our Supposition callback */ + _onInit.call(this); /* fire stored callbacks */ + }, + onBeforeShow: function() { + onBeforeShow.call(this); /* fire our Supposition callback */ + _onBeforeShow.call(this); /* fire stored callbacks */ + }, + onHide : function() { + onHide.call(this); /* fire our Supposition callback */ + _onHide.call(this); /* fire stored callbacks */ + } + }); + }); + }; + +})(jQuery); |