// Returns the number of keys (elements) in an array/dictionary. function obj_length(obj) { if (obj.length !== undefined) { return obj.length; } var count = 0; for (var element in obj) { count++; } return count; } $.fn.makeAbsolute = function(rebase) { return this.each(function() { var el = $(this); var pos = el.position(); el.css({ position: "absolute", marginLeft: 0, marginTop: 0, top: pos.top, left: pos.left, right: $(window).width() - ( pos.left + el.width() ) }); if (rebase) { el.remove().appendTo("body"); } }); }; function ensure_popup_helper() { // And the helper below the popup menus if ( $( "#popup-helper" ).length === 0 ) { $( "
" ).css( { background: 'white', opacity: 0, zIndex: 15000, position: 'absolute', top: 0, left: 0, width: '100%', height: '100%' } ).appendTo( "body" ).hide(); } } function attach_popupmenu( button_element, wrapper ) { var clean = function() { wrapper.unbind().hide(); $("#popup-helper").unbind( "click.popupmenu" ).hide(); // $(document).unbind( "click.popupmenu" ); }; var click_handler = function( e ) { // var o = $(button_element).offset(); $("#popup-helper").bind( "click.popupmenu", clean ).show(); // $(document).bind( "click.popupmenu", clean ); // Show off screen to get size right wrapper.click( clean ).css( { left: 0, top: -1000 } ).show(); // console.log( e.pageX, $(document).scrollLeft() + $(window).width(), $(menu_element).width() ); var x = e.pageX - wrapper.width() / 2 ; x = Math.min( x, $(document).scrollLeft() + $(window).width() - $(wrapper).width() - 20 ); x = Math.max( x, $(document).scrollLeft() + 20 ); // console.log( e.pageX, $(document).scrollLeft() + $(window).width(), $(menu_element).width() ); wrapper.css( { top: e.pageY - 5, left: x } ); return false; }; $(button_element).bind("click", click_handler); } function make_popupmenu( button_element, options ) { ensure_popup_helper(); // var container_element = $(button_element); // if ( container_element.parent().hasClass( "combo-button" ) ) { // container_element = container_element.parent(); // } // container_element).css( "position", "relative" ); var menu_element = $( "