| 1716 | | var button = options['button']; |
| 1717 | | var menu; |
| 1718 | | if (typeof(options[menu]) != "undefined") |
| 1719 | | { |
| 1720 | | menu = options['menu']; |
| 1721 | | } |
| 1722 | | else |
| 1723 | | { |
| 1724 | | menu = $(button).parent(); |
| 1725 | | } |
| 1726 | | var classname = options['classname']; |
| 1727 | | var overlay = options['overlay']; |
| 1728 | | |
| 1729 | | if (typeof(button) == "undefined") { |
| 1730 | | apostrophe.log('apostrophe.menuToggle -- Button is undefined'); |
| 1731 | | } |
| 1732 | | else |
| 1733 | | { |
| 1734 | | if (typeof button == "string") { button = $(button); } /* button that toggles the menu open & closed */ |
| 1735 | | if (typeof classname == "undefined" || classname == '') { classname = "show-options"; } /* optional classname override to use for toggle & styling */ |
| 1736 | | if (typeof overlay != "undefined" && overlay) { overlay = $('.a-page-overlay'); } /* optional full overlay */ |
| 1737 | | |
| 1738 | | if (typeof(menu) == "object") { |
| 1739 | | _menuToggle(button, menu, classname, overlay, options['beforeOpen'], options['afterClosed'], options['afterOpen'], options['beforeClosed'], options['focus'], options['debug']); |
| 1740 | | } |
| 1741 | | } |
| | 1646 | var button = options.button || null; |
| | 1647 | var menu = options.menu || null; |
| | 1648 | var classname = options.classname || null; |
| | 1649 | var overlay = options.overlay || null; |
| | 1650 | |
| | 1651 | if (button) |
| | 1652 | { |
| | 1653 | button = $(options.button); |
| | 1654 | } |
| | 1655 | else |
| | 1656 | { |
| | 1657 | return; |
| | 1658 | } |
| | 1659 | |
| | 1660 | if (menu) |
| | 1661 | { |
| | 1662 | menu = $(options.menu); |
| | 1663 | } |
| | 1664 | else |
| | 1665 | { |
| | 1666 | menu = $(button).parent(); |
| | 1667 | } |
| | 1668 | |
| | 1669 | if (!classname) |
| | 1670 | { |
| | 1671 | classname = 'show-options'; |
| | 1672 | } |
| | 1673 | |
| | 1674 | if (overlay) |
| | 1675 | { |
| | 1676 | overlay = $(overlay); |
| | 1677 | } |
| | 1678 | |
| | 1679 | _menuToggle(button, menu, classname, overlay, options.beforeOpen, options.afterClosed, options.afterOpen, options.beforeClosed, options.focus, options.debug); |
| | 1680 | |
| 2965 | | // Menu must have an ID. |
| 2966 | | // If the menu doesn't have one, we create it by appending 'menu' to the Button ID |
| 2967 | | if (menu.attr('id') == '') |
| 2968 | | { |
| 2969 | | var newID = button.attr('id')+'-menu'; |
| 2970 | | menu.attr('id', newID).addClass('a-options-container'); |
| 2971 | | } |
| 2972 | | |
| 2973 | | // Menu listens for ESCAPE key if it's open |
| 2974 | | $(document).unbind('keyup.' + menu.attr('id')).bind('keyup.' + menu.attr('id'), function(event) { |
| 2975 | | if (event.keyCode === 27) { |
| 2976 | | // Hey you pressed escape |
| 2977 | | apostrophe.log('apostrophe.menuToggle -- ESC') |
| 2978 | | // Does the menu have the open class when you're pressing escape? |
| 2979 | | if (menu.hasClass(classname)) |
| 2980 | | { |
| 2981 | | // Close that menu |
| 2982 | | apostrophe.log('apostrophe.menuToggle -- ESC Pressed: keyup.' + menu.attr('id')) |
| 2983 | | menu.trigger('toggleClosed'); |
| 2984 | | return false; |
| 2985 | | } |
| 2986 | | } |
| 2987 | | }); |
| 2988 | | |
| 2989 | | // Button Toggle |
| 2990 | | button.unbind('click.menuToggle').bind('click.menuToggle', function(event){ |
| 2991 | | event.preventDefault(); |
| 2992 | | if (!button.hasClass('aActiveMenu')) |
| 2993 | | { |
| 2994 | | menu.trigger('toggleOpen'); |
| 2995 | | } |
| 2996 | | else |
| 2997 | | { |
| 2998 | | menu.trigger('toggleClosed'); |
| 2999 | | } |
| 3000 | | }).addClass('a-options-button'); |
| 3001 | | |
| 3002 | | if (beforeOpen) { menu.bind('beforeOpen', beforeOpen); } |
| 3003 | | if (afterClosed) { menu.bind('afterClosed', afterClosed); } |
| 3004 | | if (afterOpen) { menu.bind('afterOpen', afterOpen); } |
| 3005 | | if (beforeClosed) { menu.bind('beforeClosed', beforeClosed); } |
| 3006 | | |
| 3007 | | var clickHandler = function(event){ |
| 3008 | | var target = $(event.target); |
| 3009 | | if (target.hasClass('a-page-overlay') || target.hasClass('a-cancel') || (!target.parents().is('#'+menu.attr('id')) && !target.parents().hasClass('ui-widget')) && target.parents('html').length) |
| 3010 | | { |
| 3011 | | menu.trigger('toggleClosed'); |
| 3012 | | } |
| 3013 | | } |
| 3014 | | |
| 3015 | | // Open Menu, Create Listener |
| 3016 | | menu.unbind('toggleOpen').bind('toggleOpen', function(){ |
| 3017 | | menu.trigger('beforeOpen'); |
| 3018 | | button.addClass('aActiveMenu'); |
| 3019 | | menu.parents().addClass('ie-z-index-fix'); |
| 3020 | | button.closest('.a-controls').addClass('aActiveMenu'); |
| 3021 | | menu.addClass(classname); |
| 3022 | | if (overlay) { overlay.fadeIn(); } |
| 3023 | | $(document).bind('click.menuToggleClickHandler', clickHandler); |
| 3024 | | if (focus) { $(focus).focus(); }; |
| 3025 | | menu.trigger('afterOpen'); |
| 3026 | | }); |
| 3027 | | |
| 3028 | | // Close Menu, Destroy Listener |
| 3029 | | menu.unbind('toggleClosed').bind('toggleClosed', function(){ |
| 3030 | | menu.trigger('beforeClosed'); |
| 3031 | | button.removeClass('aActiveMenu'); |
| 3032 | | menu.parents().removeClass('ie-z-index-fix'); |
| 3033 | | button.closest('.a-controls').removeClass('aActiveMenu'); |
| 3034 | | menu.removeClass(classname); |
| 3035 | | if (overlay) { overlay.hide(); }; |
| 3036 | | $(document).unbind('click.menuToggleClickHandler'); // Clear out click event |
| 3037 | | menu.trigger('afterClosed'); |
| 3038 | | }); |
| 3039 | | |
| 3040 | | // Any .a-cancel buttos in the menu itself close it |
| 3041 | | $('#' + menu.attr('id') + ' .a-cancel').die('click.aMenuToggle').live('click.aMenuToggle',function(e){ |
| 3042 | | e.preventDefault(); |
| 3043 | | menu.trigger('toggleClosed'); |
| 3044 | | return false; |
| 3045 | | }); |
| | 2904 | // Menu must have an ID. |
| | 2905 | // If the menu doesn't have one, we create it by appending 'menu' to the Button ID |
| | 2906 | if (menu.attr('id') == '') |
| | 2907 | { |
| | 2908 | var newID = button.attr('id')+'-menu'; |
| | 2909 | menu.attr('id', newID).addClass('a-options-container'); |
| | 2910 | } |
| | 2911 | |
| | 2912 | // Menu listens for ESCAPE key if it's open |
| | 2913 | $(document).unbind('keyup.' + menu.attr('id')).bind('keyup.' + menu.attr('id'), function(event) { |
| | 2914 | if (event.keyCode === 27) { |
| | 2915 | // Hey you pressed escape |
| | 2916 | apostrophe.log('apostrophe.menuToggle -- ESC') |
| | 2917 | // Does the menu have the open class when you're pressing escape? |
| | 2918 | if (menu.hasClass(classname)) |
| | 2919 | { |
| | 2920 | // Close that menu |
| | 2921 | apostrophe.log('apostrophe.menuToggle -- ESC Pressed: keyup.' + menu.attr('id')) |
| | 2922 | menu.trigger('toggleClosed'); |
| | 2923 | return false; |
| | 2924 | } |
| | 2925 | } |
| | 2926 | }); |
| | 2927 | |
| | 2928 | // Button Toggle |
| | 2929 | button.unbind('click.menuToggle').bind('click.menuToggle', function(event){ |
| | 2930 | event.preventDefault(); |
| | 2931 | if (!button.hasClass('aActiveMenu')) |
| | 2932 | { |
| | 2933 | menu.trigger('toggleOpen'); |
| | 2934 | } |
| | 2935 | else |
| | 2936 | { |
| | 2937 | menu.trigger('toggleClosed'); |
| | 2938 | } |
| | 2939 | }); |
| | 2940 | button.addClass('a-options-button'); |
| | 2941 | |
| | 2942 | if (beforeOpen) { menu.bind('beforeOpen', beforeOpen); } |
| | 2943 | if (afterClosed) { menu.bind('afterClosed', afterClosed); } |
| | 2944 | if (afterOpen) { menu.bind('afterOpen', afterOpen); } |
| | 2945 | if (beforeClosed) { menu.bind('beforeClosed', beforeClosed); } |
| | 2946 | |
| | 2947 | var clickHandler = function(event){ |
| | 2948 | var target = $(event.target); |
| | 2949 | |
| | 2950 | if ((target.closest(button.selector).length == 0)) |
| | 2951 | { |
| | 2952 | menu.trigger('toggleClosed'); |
| | 2953 | } |
| | 2954 | |
| | 2955 | if (target.closest(overlay.selector).length) |
| | 2956 | { |
| | 2957 | menu.trigger('toggleClosed'); |
| | 2958 | } |
| | 2959 | |
| | 2960 | if (target.closest('.a-cancel').length) |
| | 2961 | { |
| | 2962 | menu.trigger('toggleClosed'); |
| | 2963 | } |
| | 2964 | |
| | 2965 | } |
| | 2966 | |
| | 2967 | // Open Menu, Create Listener |
| | 2968 | menu.unbind('toggleOpen').bind('toggleOpen', function(){ |
| | 2969 | menu.trigger('beforeOpen'); |
| | 2970 | button.addClass('aActiveMenu'); |
| | 2971 | menu.parents().addClass('ie-z-index-fix'); |
| | 2972 | button.closest('.a-controls').addClass('aActiveMenu'); |
| | 2973 | menu.addClass(classname); |
| | 2974 | if (overlay) { overlay.fadeIn(); } |
| | 2975 | $(document).bind('click.menuToggleClickHandler', clickHandler); |
| | 2976 | if (focus) { $(focus).focus(); }; |
| | 2977 | menu.trigger('afterOpen'); |
| | 2978 | }); |
| | 2979 | |
| | 2980 | // Close Menu, Destroy Listener |
| | 2981 | menu.unbind('toggleClosed').bind('toggleClosed', function(){ |
| | 2982 | menu.trigger('beforeClosed'); |
| | 2983 | button.removeClass('aActiveMenu'); |
| | 2984 | menu.parents().removeClass('ie-z-index-fix'); |
| | 2985 | button.closest('.a-controls').removeClass('aActiveMenu'); |
| | 2986 | menu.removeClass(classname); |
| | 2987 | if (overlay) { overlay.hide(); }; |
| | 2988 | $(document).unbind('click.menuToggleClickHandler'); // Clear out click event |
| | 2989 | menu.trigger('afterClosed'); |
| | 2990 | }); |
| | 2991 | |
| | 2992 | // Any .a-cancel buttos in the menu itself close it |
| | 2993 | $('#' + menu.attr('id') + ' .a-cancel').die('click.aMenuToggle').live('click.aMenuToggle',function(e){ |
| | 2994 | e.preventDefault(); |
| | 2995 | menu.trigger('toggleClosed'); |
| | 2996 | return false; |
| | 2997 | }); |