1/* 2* Supposition v0.2 - an optional enhancer for Superfish jQuery menu widget - LAST UPDATE: MARCH 23rd, 2011 3* 4* Copyright (c) 2008 Joel Birch - based mostly on work by Jesse Klaasse and credit goes largely to him. 5* Special thanks to Karl Swedberg for valuable input. 6* 7* Dec 28th, 2010 - Modified for the Superfish project for Drupal (http://drupal.org/project/superfish) 8* 9* jQuery version: 1.3.x or higher. 10* 11* Dual licensed under the MIT and GPL licenses: 12* http://www.opensource.org/licenses/mit-license.php 13* http://www.gnu.org/licenses/gpl.html 14*/ 15 16(function($){ 17 $.fn.supposition = function(){ 18 var $w = $(window), /*do this once instead of every onBeforeShow call*/ 19 _offset = function(dir) { 20 return window[dir == 'y' ? 'pageYOffset' : 'pageXOffset'] 21 || document.documentElement && document.documentElement[dir=='y' ? 'scrollTop' : 'scrollLeft'] 22 || document.body[dir=='y' ? 'scrollTop' : 'scrollLeft']; 23 }, 24 onHide = function(){ 25 this.css({Top:'',Right:'',Bottom:'',Left:''}); 26 }, 27 onBeforeShow = function(){ 28 this.each(function(){ 29 var $u = $(this); 30 $u.css('display','block'); 31 var menuWidth = $u.width(), 32 menuParentWidth = $u.closest('li').outerWidth(true), 33 menuParentLeft = $u.closest('li').offset().left, 34 totalRight = $w.width() + _offset('x'), 35 menuRight = $u.offset().left + menuWidth, 36 exactMenuWidth = (menuRight > (menuParentWidth + menuParentLeft)) ? menuWidth - (menuRight - (menuParentWidth + menuParentLeft)) : menuWidth; 37 if ($u.parents('.sf-js-enabled').hasClass('rtl')) { 38 if (menuParentLeft < exactMenuWidth) { 39 $u.css('left', menuParentWidth + 'px'); 40 $u.css('right', 'auto'); 41 } 42 } 43 else { 44 if (menuRight > totalRight && menuParentLeft > menuWidth) { 45 $u.css('right', menuParentWidth + 'px'); 46 $u.css('left', 'auto'); 47 } 48 } 49 var windowHeight = $w.height(), 50 offsetTop = $u.offset().top, 51 menuParentHeight = $u.parent().outerHeight(true), 52 menuHeight = $u.height(), 53 baseline = windowHeight + _offset('y'); 54 var expandUp = ((offsetTop + menuHeight > baseline) && (offsetTop > menuHeight)); 55 if (expandUp) { 56 $u.css('bottom', menuParentHeight + 'px'); 57 $u.css('top', 'auto'); 58 } 59 $u.css('display','none'); 60 }); 61 }; 62 63 return this.each(function() { 64 var o = $.fn.superfish.o[this.serial]; /* get this menu's options */ 65 66 /* if callbacks already set, store them */ 67 var _onBeforeShow = o.onBeforeShow, 68 _onHide = o.onHide; 69 70 $.extend($.fn.superfish.o[this.serial],{ 71 onBeforeShow: function() { 72 onBeforeShow.call(this); /* fire our Supposition callback */ 73 _onBeforeShow.call(this); /* fire stored callbacks */ 74 }, 75 onHide: function() { 76 onHide.call(this); /* fire our Supposition callback */ 77 _onHide.call(this); /* fire stored callbacks */ 78 } 79 }); 80 }); 81 }; 82})(jQuery);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.