| | 2143 | * Initialize Edit Menu button in Nav Menu widget. |
| | 2144 | */ |
| | 2145 | $( document ).on( 'widget-added', function( event, widgetContainer ) { |
| | 2146 | var parsedWidgetId, widgetControl, navMenuSelect, editMenuButton; |
| | 2147 | parsedWidgetId = parseWidgetId( widgetContainer.find( '> .widget-inside > .form > .widget-id' ).val() ); |
| | 2148 | if ( 'nav_menu' !== parsedWidgetId.id_base ) { |
| | 2149 | return; |
| | 2150 | } |
| | 2151 | widgetControl = api.control( 'widget_nav_menu[' + String( parsedWidgetId.number ) + ']' ); |
| | 2152 | if ( ! widgetControl ) { |
| | 2153 | return; |
| | 2154 | } |
| | 2155 | navMenuSelect = widgetContainer.find( 'select[name*="nav_menu"]' ); |
| | 2156 | editMenuButton = widgetContainer.find( '.edit-selected-nav-menu > button' ); |
| | 2157 | if ( 0 === navMenuSelect.length || 0 === editMenuButton.length ) { |
| | 2158 | return; |
| | 2159 | } |
| | 2160 | navMenuSelect.on( 'change', function() { |
| | 2161 | if ( api.section.has( 'nav_menu[' + navMenuSelect.val() + ']' ) ) { |
| | 2162 | editMenuButton.parent().show(); |
| | 2163 | } else { |
| | 2164 | editMenuButton.parent().hide(); |
| | 2165 | } |
| | 2166 | }); |
| | 2167 | editMenuButton.on( 'click', function() { |
| | 2168 | var section = api.section( 'nav_menu[' + navMenuSelect.val() + ']' ); |
| | 2169 | if ( section ) { |
| | 2170 | focusConstructWithBreadcrumb( section, widgetControl ); |
| | 2171 | } |
| | 2172 | } ); |
| | 2173 | } ); |
| | 2174 | |
| | 2175 | /** |
| | 2176 | * Focus (expand) one construct and then focus on another construct after the first is collapsed. |
| | 2177 | * |
| | 2178 | * This overrides the back button to serve the purpose of breadcrumb navigation. |
| | 2179 | * |
| | 2180 | * @param {wp.customize.Section|wp.customize.Panel|wp.customize.Control} focusConstruct - The object to initially focus. |
| | 2181 | * @param {wp.customize.Section|wp.customize.Panel|wp.customize.Control} returnConstruct - The object to return focus. |
| | 2182 | */ |
| | 2183 | function focusConstructWithBreadcrumb( focusConstruct, returnConstruct ) { |
| | 2184 | focusConstruct.focus(); |
| | 2185 | function onceCollapsed( isExpanded ) { |
| | 2186 | if ( ! isExpanded ) { |
| | 2187 | focusConstruct.expanded.unbind( onceCollapsed ); |
| | 2188 | returnConstruct.focus(); |
| | 2189 | } |
| | 2190 | } |
| | 2191 | focusConstruct.expanded.bind( onceCollapsed ); |
| | 2192 | } |
| | 2193 | |
| | 2194 | /** |