X-Git-Url: http://www.aleph1.co.uk/gitweb/?a=blobdiff_plain;ds=sidebyside;f=vendor%2Fmehrpadin%2Fsuperfish%2Fsupposition.js;fp=vendor%2Fmehrpadin%2Fsuperfish%2Fsupposition.js;h=163d7273a1dcf0fc11d19bd80ea4849073817aba;hb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;hp=0000000000000000000000000000000000000000;hpb=57c063afa3f66b07c4bbddc2d6129a96d90f0aad;p=yaffs-website diff --git a/vendor/mehrpadin/superfish/supposition.js b/vendor/mehrpadin/superfish/supposition.js new file mode 100644 index 000000000..163d7273a --- /dev/null +++ b/vendor/mehrpadin/superfish/supposition.js @@ -0,0 +1,92 @@ +/* + * 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 + */ +/* + * This is not the original jQuery Supposition plugin. + * Please refer to the README for more information. + */ + +(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']; + }, + onHide = function(){ + this.css({bottom:''}); + }, + onBeforeShow = function(){ + this.each(function(){ + var $u = $(this); + $u.css('display','block'); + var $mul = $u.closest('.sf-menu'), + level = $u.parents('ul').length, + menuWidth = $u.width(), + menuParentWidth = $u.closest('li').outerWidth(true), + menuParentLeft = $u.closest('li').offset().left, + totalRight = $w.width() + _offset('x'), + menuRight = $u.offset().left + menuWidth, + exactMenuWidth = (menuRight > (menuParentWidth + menuParentLeft)) ? menuWidth - (menuRight - (menuParentWidth + menuParentLeft)) : menuWidth; + if ($u.parents('.sf-js-enabled').hasClass('rtl')) { + if (menuParentLeft < exactMenuWidth) { + if (($mul.hasClass('sf-horizontal') && level == 1) || ($mul.hasClass('sf-navbar') && level == 2)){ + $u.css({left:0,right:'auto'}); + } + else { + $u.css({left:menuParentWidth + 'px',right:'auto'}); + } + } + } + else { + if (menuRight > totalRight && menuParentLeft > menuWidth) { + if (($mul.hasClass('sf-horizontal') && level == 1) || ($mul.hasClass('sf-navbar') && level == 2)){ + $u.css({right:0,left:'auto'}); + } + else { + $u.css({right:menuParentWidth + 'px',left:'auto'}); + } + } + } + var windowHeight = $w.height(), + offsetTop = $u.offset().top, + menuParentShadow = ($mul.hasClass('sf-shadow') && $u.css('padding-bottom').length > 0) ? parseInt($u.css('padding-bottom').slice(0,-2)) : 0, + menuParentHeight = ($mul.hasClass('sf-vertical')) ? '-' + menuParentShadow : $u.parent().outerHeight(true) - menuParentShadow, + menuHeight = $u.height(), + baseline = windowHeight + _offset('y'); + var expandUp = ((offsetTop + menuHeight > baseline) && (offsetTop > menuHeight)); + if (expandUp) { + $u.css({bottom:menuParentHeight + 'px',top:'auto'}); + } + $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 _onBeforeShow = o.onBeforeShow, + _onHide = o.onHide; + + $.extend($.fn.superfish.o[this.serial],{ + 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); \ No newline at end of file