wp/wp-admin/js/nav-menu.js
author ymh <ymh.work@gmail.com>
Wed, 06 Nov 2013 03:21:17 +0000
changeset 0 d970ebf37754
child 5 5e2f62d02dcd
permissions -rw-r--r--
first import
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
 * WordPress Administration Navigation Menu
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
 * Interface JS functions
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
 * @version 2.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
 * @package WordPress
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
 * @subpackage Administration
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
var wpNavMenu;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
(function($) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
	var api = wpNavMenu = {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
		options : {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
			menuItemDepthPerLevel : 30, // Do not use directly. Use depthToPx and pxToDepth instead.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
			globalMaxDepth : 11
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
		menuList : undefined,	// Set in init.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
		targetList : undefined, // Set in init.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
		menusChanged : false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
		isRTL: !! ( 'undefined' != typeof isRtl && isRtl ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
		negateIfRTL: ( 'undefined' != typeof isRtl && isRtl ) ? -1 : 1,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
		// Functions that run on init.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
		init : function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
			api.menuList = $('#menu-to-edit');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
			api.targetList = api.menuList;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
			this.jQueryExtensions();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
			this.attachMenuEditListeners();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
			this.setupInputWithDefaultTitle();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
			this.attachQuickSearchListeners();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
			this.attachThemeLocationsListeners();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
			this.attachTabsPanelListeners();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
			this.attachUnsavedChangesListener();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
			if ( api.menuList.length )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
				this.initSortables();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
			if ( menus.oneThemeLocationNoMenus )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
				$( '#posttype-page' ).addSelectedToMenu( api.addMenuItemToBottom );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
			this.initManageLocations();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
			this.initAccessibility();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
			this.initToggles();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
		jQueryExtensions : function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
			// jQuery extensions
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
			$.fn.extend({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
				menuItemDepth : function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
					var margin = api.isRTL ? this.eq(0).css('margin-right') : this.eq(0).css('margin-left');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
					return api.pxToDepth( margin && -1 != margin.indexOf('px') ? margin.slice(0, -2) : 0 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
				},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
				updateDepthClass : function(current, prev) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
					return this.each(function(){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
						var t = $(this);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
						prev = prev || t.menuItemDepth();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
						$(this).removeClass('menu-item-depth-'+ prev )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
							.addClass('menu-item-depth-'+ current );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
					});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
				},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
				shiftDepthClass : function(change) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
					return this.each(function(){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
						var t = $(this),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
							depth = t.menuItemDepth();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
						$(this).removeClass('menu-item-depth-'+ depth )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
							.addClass('menu-item-depth-'+ (depth + change) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
					});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
				},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
				childMenuItems : function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
					var result = $();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
					this.each(function(){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
						var t = $(this), depth = t.menuItemDepth(), next = t.next();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
						while( next.length && next.menuItemDepth() > depth ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
							result = result.add( next );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
							next = next.next();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
					});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
					return result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
				},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
				shiftHorizontally : function( dir ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
					return this.each(function(){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
						var t = $(this),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
							depth = t.menuItemDepth(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
							newDepth = depth + dir;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
						// Change .menu-item-depth-n class
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
						t.moveHorizontally( newDepth, depth );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
					});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
				},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
				moveHorizontally : function( newDepth, depth ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
					return this.each(function(){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
						var t = $(this),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
							children = t.childMenuItems(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
							diff = newDepth - depth,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
							subItemText = t.find('.is-submenu');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
						// Change .menu-item-depth-n class
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
						t.updateDepthClass( newDepth, depth ).updateParentMenuItemDBId();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
						// If it has children, move those too
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
						if ( children ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
							children.each(function( index ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
								var t = $(this),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
									thisDepth = t.menuItemDepth(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
									newDepth = thisDepth + diff;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
								t.updateDepthClass(newDepth, thisDepth).updateParentMenuItemDBId();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
							});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
						// Show "Sub item" helper text
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
						if (0 === newDepth)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
							subItemText.hide();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
						else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
							subItemText.show();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
					});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
				},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
				updateParentMenuItemDBId : function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
					return this.each(function(){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
						var item = $(this),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
							input = item.find( '.menu-item-data-parent-id' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
							depth = parseInt( item.menuItemDepth() ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
							parentDepth = depth - 1,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
							parent = item.prevAll( '.menu-item-depth-' + parentDepth ).first();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
						if ( 0 == depth ) { // Item is on the top level, has no parent
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
							input.val(0);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
						} else { // Find the parent item, and retrieve its object id.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
							input.val( parent.find( '.menu-item-data-db-id' ).val() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
					});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
				},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
				hideAdvancedMenuItemFields : function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
					return this.each(function(){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
						var that = $(this);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
						$('.hide-column-tog').not(':checked').each(function(){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
							that.find('.field-' + $(this).val() ).addClass('hidden-field');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
						});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
					});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
				},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
				/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
				 * Adds selected menu items to the menu.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
				 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
				 * @param jQuery metabox The metabox jQuery object.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
				 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
				addSelectedToMenu : function(processMethod) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
					if ( 0 == $('#menu-to-edit').length ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
						return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
					return this.each(function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
						var t = $(this), menuItems = {},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
							checkboxes = ( menus.oneThemeLocationNoMenus && 0 == t.find('.tabs-panel-active .categorychecklist li input:checked').length ) ? t.find('#page-all li input[type="checkbox"]') : t.find('.tabs-panel-active .categorychecklist li input:checked'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
							re = new RegExp('menu-item\\[(\[^\\]\]*)');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
						processMethod = processMethod || api.addMenuItemToBottom;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
						// If no items are checked, bail.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
						if ( !checkboxes.length )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
							return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
						// Show the ajax spinner
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
						t.find('.spinner').show();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
						// Retrieve menu item data
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
						$(checkboxes).each(function(){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
							var t = $(this),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
								listItemDBIDMatch = re.exec( t.attr('name') ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
								listItemDBID = 'undefined' == typeof listItemDBIDMatch[1] ? 0 : parseInt(listItemDBIDMatch[1], 10);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
							if ( this.className && -1 != this.className.indexOf('add-to-top') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
								processMethod = api.addMenuItemToTop;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
							menuItems[listItemDBID] = t.closest('li').getItemData( 'add-menu-item', listItemDBID );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
						});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
						// Add the items
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
						api.addItemToMenu(menuItems, processMethod, function(){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
							// Deselect the items and hide the ajax spinner
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
							checkboxes.removeAttr('checked');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
							t.find('.spinner').hide();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
						});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
					});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
				},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
				getItemData : function( itemType, id ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
					itemType = itemType || 'menu-item';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
					var itemData = {}, i,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
					fields = [
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
						'menu-item-db-id',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
						'menu-item-object-id',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
						'menu-item-object',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
						'menu-item-parent-id',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
						'menu-item-position',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
						'menu-item-type',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
						'menu-item-title',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
						'menu-item-url',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
						'menu-item-description',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
						'menu-item-attr-title',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
						'menu-item-target',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
						'menu-item-classes',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
						'menu-item-xfn'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
					];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
					if( !id && itemType == 'menu-item' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
						id = this.find('.menu-item-data-db-id').val();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
					if( !id ) return itemData;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
					this.find('input').each(function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
						var field;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
						i = fields.length;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
						while ( i-- ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
							if( itemType == 'menu-item' )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
								field = fields[i] + '[' + id + ']';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
							else if( itemType == 'add-menu-item' )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
								field = 'menu-item[' + id + '][' + fields[i] + ']';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
							if (
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
								this.name &&
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
								field == this.name
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
							) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
								itemData[fields[i]] = this.value;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
							}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
					});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
					return itemData;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
				},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
				setItemData : function( itemData, itemType, id ) { // Can take a type, such as 'menu-item', or an id.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
					itemType = itemType || 'menu-item';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
					if( !id && itemType == 'menu-item' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
						id = $('.menu-item-data-db-id', this).val();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
					if( !id ) return this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
					this.find('input').each(function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
						var t = $(this), field;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
						$.each( itemData, function( attr, val ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
							if( itemType == 'menu-item' )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
								field = attr + '[' + id + ']';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
							else if( itemType == 'add-menu-item' )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
								field = 'menu-item[' + id + '][' + attr + ']';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
							if ( field == t.attr('name') ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
								t.val( val );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
							}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
						});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
					});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
					return this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
		countMenuItems : function( depth ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
			return $( '.menu-item-depth-' + depth ).length;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
		moveMenuItem : function( $this, dir ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
			var menuItems = $('#menu-to-edit li');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
				menuItemsCount = menuItems.length,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
				thisItem = $this.parents( 'li.menu-item' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
				thisItemChildren = thisItem.childMenuItems(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
				thisItemData = thisItem.getItemData(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
				thisItemDepth = parseInt( thisItem.menuItemDepth() ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
				thisItemPosition = parseInt( thisItem.index() ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
				nextItem = thisItem.next(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
				nextItemChildren = nextItem.childMenuItems(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
				nextItemDepth = parseInt( nextItem.menuItemDepth() ) + 1,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
				prevItem = thisItem.prev(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
				prevItemDepth = parseInt( prevItem.menuItemDepth() ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
				prevItemId = prevItem.getItemData()['menu-item-db-id'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
			switch ( dir ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
			case 'up':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
				var newItemPosition = thisItemPosition - 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
				// Already at top
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
				if ( 0 === thisItemPosition )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
				// If a sub item is moved to top, shift it to 0 depth
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
				if ( 0 === newItemPosition && 0 !== thisItemDepth )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
					thisItem.moveHorizontally( 0, thisItemDepth );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
				// If prev item is sub item, shift to match depth
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
				if ( 0 !== prevItemDepth )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
					thisItem.moveHorizontally( prevItemDepth, thisItemDepth );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
				// Does this item have sub items?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
				if ( thisItemChildren ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
					var items = thisItem.add( thisItemChildren );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
					// Move the entire block
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
					items.detach().insertBefore( menuItems.eq( newItemPosition ) ).updateParentMenuItemDBId();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
				} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
					thisItem.detach().insertBefore( menuItems.eq( newItemPosition ) ).updateParentMenuItemDBId();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   311
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   312
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
			case 'down':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   314
				// Does this item have sub items?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
				if ( thisItemChildren ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
					var items = thisItem.add( thisItemChildren ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
						nextItem = menuItems.eq( items.length + thisItemPosition ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
						nextItemChildren = 0 !== nextItem.childMenuItems().length;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   319
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   320
					if ( nextItemChildren ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
						var newDepth = parseInt( nextItem.menuItemDepth() ) + 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
						thisItem.moveHorizontally( newDepth, thisItemDepth );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
					// Have we reached the bottom?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
					if ( menuItemsCount === thisItemPosition + items.length )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   328
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
					items.detach().insertAfter( menuItems.eq( thisItemPosition + items.length ) ).updateParentMenuItemDBId();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   330
				} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
					// If next item has sub items, shift depth
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   332
					if ( 0 !== nextItemChildren.length )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
						thisItem.moveHorizontally( nextItemDepth, thisItemDepth );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   335
					// Have we reached the bottom
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
					if ( menuItemsCount === thisItemPosition + 1 )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
					thisItem.detach().insertAfter( menuItems.eq( thisItemPosition + 1 ) ).updateParentMenuItemDBId();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   340
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   341
			case 'top':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   342
				// Already at top
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   343
				if ( 0 === thisItemPosition )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   344
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   345
				// Does this item have sub items?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
				if ( thisItemChildren ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
					var items = thisItem.add( thisItemChildren );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   348
					// Move the entire block
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
					items.detach().insertBefore( menuItems.eq( 0 ) ).updateParentMenuItemDBId();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   350
				} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   351
					thisItem.detach().insertBefore( menuItems.eq( 0 ) ).updateParentMenuItemDBId();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   352
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   353
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   354
			case 'left':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   355
				// As far left as possible
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
				if ( 0 === thisItemDepth )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   357
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   358
				thisItem.shiftHorizontally( -1 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
			case 'right':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
				// Can't be sub item at top
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
				if ( 0 === thisItemPosition )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
				// Already sub item of prevItem
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
				if ( thisItemData['menu-item-parent-id'] === prevItemId )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
				thisItem.shiftHorizontally( 1 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
			$this.focus();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
			api.registerChange();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
			api.refreshKeyboardAccessibility();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   373
			api.refreshAdvancedAccessibility();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   376
		initAccessibility : function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
			api.refreshKeyboardAccessibility();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
			api.refreshAdvancedAccessibility();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   380
			// Events
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   381
			$( '.menus-move-up' ).on( 'click', function ( e ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   382
				api.moveMenuItem( $( this ).parents( 'li.menu-item' ).find( 'a.item-edit' ), 'up' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   383
				e.preventDefault();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
			$( '.menus-move-down' ).on( 'click', function ( e ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   386
				api.moveMenuItem( $( this ).parents( 'li.menu-item' ).find( 'a.item-edit' ), 'down' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
				e.preventDefault();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   388
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   389
			$( '.menus-move-top' ).on( 'click', function ( e ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   390
				api.moveMenuItem( $( this ).parents( 'li.menu-item' ).find( 'a.item-edit' ), 'top' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   391
				e.preventDefault();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   392
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   393
			$( '.menus-move-left' ).on( 'click', function ( e ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   394
				api.moveMenuItem( $( this ).parents( 'li.menu-item' ).find( 'a.item-edit' ), 'left' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   395
				e.preventDefault();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   396
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   397
			$( '.menus-move-right' ).on( 'click', function ( e ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   398
				api.moveMenuItem( $( this ).parents( 'li.menu-item' ).find( 'a.item-edit' ), 'right' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   399
				e.preventDefault();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   400
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   401
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   402
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   403
		refreshAdvancedAccessibility : function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   404
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   405
			// Hide all links by default
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   406
			$( '.menu-item-settings .field-move a' ).css( 'display', 'none' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   407
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   408
			$( '.item-edit' ).each( function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   409
				var $this = $(this),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   410
					movement = [],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   411
					availableMovement = '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   412
					menuItem = $this.closest( 'li.menu-item' ).first(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   413
					depth = menuItem.menuItemDepth(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   414
					isPrimaryMenuItem = ( 0 === depth ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   415
					itemName = $this.closest( '.menu-item-handle' ).find( '.menu-item-title' ).text(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   416
					position = parseInt( menuItem.index() ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   417
					prevItemDepth = ( isPrimaryMenuItem ) ? depth : parseInt( depth - 1 ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   418
					prevItemNameLeft = menuItem.prevAll('.menu-item-depth-' + prevItemDepth).first().find( '.menu-item-title' ).text(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   419
					prevItemNameRight = menuItem.prevAll('.menu-item-depth-' + depth).first().find( '.menu-item-title' ).text(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   420
					totalMenuItems = $('#menu-to-edit li').length,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   421
					hasSameDepthSibling = menuItem.nextAll( '.menu-item-depth-' + depth ).length;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   422
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   423
				// Where can they move this menu item?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   424
				if ( 0 !== position ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   425
					var thisLink = menuItem.find( '.menus-move-up' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   426
					thisLink.prop( 'title', menus.moveUp ).css( 'display', 'inline' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   427
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   428
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   429
				if ( 0 !== position && isPrimaryMenuItem ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   430
					var thisLink = menuItem.find( '.menus-move-top' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   431
					thisLink.prop( 'title', menus.moveToTop ).css( 'display', 'inline' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   432
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   433
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   434
				if ( position + 1 !== totalMenuItems && 0 !== position ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   435
					var thisLink = menuItem.find( '.menus-move-down' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   436
					thisLink.prop( 'title', menus.moveDown ).css( 'display', 'inline' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   437
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   438
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   439
				if ( 0 === position && 0 !== hasSameDepthSibling ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   440
					var thisLink = menuItem.find( '.menus-move-down' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   441
					thisLink.prop( 'title', menus.moveDown ).css( 'display', 'inline' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   442
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   443
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   444
				if ( ! isPrimaryMenuItem ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   445
					var thisLink = menuItem.find( '.menus-move-left' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   446
						thisLinkText = menus.outFrom.replace( '%s', prevItemNameLeft );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   447
					thisLink.prop( 'title', menus.moveOutFrom.replace( '%s', prevItemNameLeft ) ).html( thisLinkText ).css( 'display', 'inline' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   448
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   449
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   450
				if ( 0 !== position ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   451
					if ( menuItem.find( '.menu-item-data-parent-id' ).val() !== menuItem.prev().find( '.menu-item-data-db-id' ).val() ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   452
						var thisLink = menuItem.find( '.menus-move-right' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   453
							thisLinkText = menus.under.replace( '%s', prevItemNameRight );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   454
						thisLink.prop( 'title', menus.moveUnder.replace( '%s', prevItemNameRight ) ).html( thisLinkText ).css( 'display', 'inline' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   455
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   456
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   457
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   458
				if ( isPrimaryMenuItem ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   459
					var primaryItems = $( '.menu-item-depth-0' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   460
						itemPosition = primaryItems.index( menuItem ) + 1,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   461
						totalMenuItems = primaryItems.length,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   462
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   463
						// String together help text for primary menu items
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   464
						title = menus.menuFocus.replace( '%1$s', itemName ).replace( '%2$d', itemPosition ).replace( '%3$d', totalMenuItems );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   465
				} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   466
					var parentItem = menuItem.prevAll( '.menu-item-depth-' + parseInt( depth - 1 ) ).first(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   467
						parentItemId = parentItem.find( '.menu-item-data-db-id' ).val(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   468
						parentItemName = parentItem.find( '.menu-item-title' ).text(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   469
						subItems = $( '.menu-item .menu-item-data-parent-id[value="' + parentItemId + '"]' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   470
						itemPosition = $( subItems.parents('.menu-item').get().reverse() ).index( menuItem ) + 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   471
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   472
						// String together help text for sub menu items
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   473
						title = menus.subMenuFocus.replace( '%1$s', itemName ).replace( '%2$d', itemPosition ).replace( '%3$s', parentItemName );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   474
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   475
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   476
				$this.prop('title', title).html( title );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   477
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   478
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   479
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   480
		refreshKeyboardAccessibility : function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   481
			$( '.item-edit' ).off( 'focus' ).on( 'focus', function(){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   482
				$(this).off( 'keydown' ).on( 'keydown', function(e){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   483
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   484
					var $this = $(this);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   485
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   486
					// Bail if it's not an arrow key
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   487
					if ( 37 != e.which && 38 != e.which && 39 != e.which && 40 != e.which )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   488
						return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   489
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   490
					// Avoid multiple keydown events
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   491
					$this.off('keydown');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   492
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   493
					// Bail if there is only one menu item
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   494
					if ( 1 === $('#menu-to-edit li').length )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   495
						return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   496
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   497
					// If RTL, swap left/right arrows
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   498
					var arrows = { '38' : 'up', '40' : 'down', '37' : 'left', '39' : 'right' };
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   499
					if ( $('body').hasClass('rtl') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   500
						arrows = { '38' : 'up', '40' : 'down', '39' : 'left', '37' : 'right' };
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   501
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   502
					switch ( arrows[e.which] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   503
					case 'up':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   504
						api.moveMenuItem( $this, 'up' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   505
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   506
					case 'down':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   507
						api.moveMenuItem( $this, 'down' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   508
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   509
					case 'left':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   510
						api.moveMenuItem( $this, 'left' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   511
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   512
					case 'right':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   513
						api.moveMenuItem( $this, 'right' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   514
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   515
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   516
					// Put focus back on same menu item
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   517
					$( '#edit-' + thisItemData['menu-item-db-id'] ).focus();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   518
					return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   519
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   520
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   521
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   522
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   523
		initToggles : function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   524
			// init postboxes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   525
			postboxes.add_postbox_toggles('nav-menus');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   526
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   527
			// adjust columns functions for menus UI
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   528
			columns.useCheckboxesForHidden();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   529
			columns.checked = function(field) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   530
				$('.field-' + field).removeClass('hidden-field');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   531
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   532
			columns.unchecked = function(field) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   533
				$('.field-' + field).addClass('hidden-field');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   534
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   535
			// hide fields
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   536
			api.menuList.hideAdvancedMenuItemFields();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   537
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   538
			$('.hide-postbox-tog').click(function () {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   539
				var hidden = $( '.accordion-container li.accordion-section' ).filter(':hidden').map(function() { return this.id; }).get().join(',');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   540
				$.post(ajaxurl, {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   541
					action: 'closed-postboxes',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   542
					hidden: hidden,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   543
					closedpostboxesnonce: jQuery('#closedpostboxesnonce').val(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   544
					page: 'nav-menus'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   545
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   546
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   547
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   548
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   549
		initSortables : function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   550
			var currentDepth = 0, originalDepth, minDepth, maxDepth,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   551
				prev, next, prevBottom, nextThreshold, helperHeight, transport,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   552
				menuEdge = api.menuList.offset().left,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   553
				body = $('body'), maxChildDepth,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   554
				menuMaxDepth = initialMenuMaxDepth();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   555
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   556
			if( 0 != $( '#menu-to-edit li' ).length )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   557
				$( '.drag-instructions' ).show();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   558
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   559
			// Use the right edge if RTL.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   560
			menuEdge += api.isRTL ? api.menuList.width() : 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   561
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   562
			api.menuList.sortable({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   563
				handle: '.menu-item-handle',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   564
				placeholder: 'sortable-placeholder',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   565
				start: function(e, ui) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   566
					var height, width, parent, children, tempHolder;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   567
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   568
					// handle placement for rtl orientation
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   569
					if ( api.isRTL )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   570
						ui.item[0].style.right = 'auto';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   571
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   572
					transport = ui.item.children('.menu-item-transport');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   573
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   574
					// Set depths. currentDepth must be set before children are located.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   575
					originalDepth = ui.item.menuItemDepth();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   576
					updateCurrentDepth(ui, originalDepth);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   577
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   578
					// Attach child elements to parent
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   579
					// Skip the placeholder
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   580
					parent = ( ui.item.next()[0] == ui.placeholder[0] ) ? ui.item.next() : ui.item;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   581
					children = parent.childMenuItems();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   582
					transport.append( children );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   583
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   584
					// Update the height of the placeholder to match the moving item.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   585
					height = transport.outerHeight();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   586
					// If there are children, account for distance between top of children and parent
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   587
					height += ( height > 0 ) ? (ui.placeholder.css('margin-top').slice(0, -2) * 1) : 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   588
					height += ui.helper.outerHeight();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   589
					helperHeight = height;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   590
					height -= 2; // Subtract 2 for borders
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   591
					ui.placeholder.height(height);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   592
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   593
					// Update the width of the placeholder to match the moving item.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   594
					maxChildDepth = originalDepth;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   595
					children.each(function(){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   596
						var depth = $(this).menuItemDepth();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   597
						maxChildDepth = (depth > maxChildDepth) ? depth : maxChildDepth;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   598
					});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   599
					width = ui.helper.find('.menu-item-handle').outerWidth(); // Get original width
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   600
					width += api.depthToPx(maxChildDepth - originalDepth); // Account for children
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   601
					width -= 2; // Subtract 2 for borders
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   602
					ui.placeholder.width(width);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   603
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   604
					// Update the list of menu items.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   605
					tempHolder = ui.placeholder.next();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   606
					tempHolder.css( 'margin-top', helperHeight + 'px' ); // Set the margin to absorb the placeholder
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   607
					ui.placeholder.detach(); // detach or jQuery UI will think the placeholder is a menu item
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   608
					$(this).sortable( "refresh" ); // The children aren't sortable. We should let jQ UI know.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   609
					ui.item.after( ui.placeholder ); // reattach the placeholder.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   610
					tempHolder.css('margin-top', 0); // reset the margin
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   611
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   612
					// Now that the element is complete, we can update...
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   613
					updateSharedVars(ui);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   614
				},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   615
				stop: function(e, ui) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   616
					var children, depthChange = currentDepth - originalDepth;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   617
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   618
					// Return child elements to the list
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   619
					children = transport.children().insertAfter(ui.item);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   620
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   621
					// Add "sub menu" description
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   622
					var subMenuTitle = ui.item.find( '.item-title .is-submenu' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   623
					if ( 0 < currentDepth )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   624
						subMenuTitle.show();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   625
					else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   626
						subMenuTitle.hide();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   627
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   628
					// Update depth classes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   629
					if( depthChange != 0 ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   630
						ui.item.updateDepthClass( currentDepth );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   631
						children.shiftDepthClass( depthChange );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   632
						updateMenuMaxDepth( depthChange );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   633
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   634
					// Register a change
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   635
					api.registerChange();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   636
					// Update the item data.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   637
					ui.item.updateParentMenuItemDBId();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   638
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   639
					// address sortable's incorrectly-calculated top in opera
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   640
					ui.item[0].style.top = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   641
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   642
					// handle drop placement for rtl orientation
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   643
					if ( api.isRTL ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   644
						ui.item[0].style.left = 'auto';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   645
						ui.item[0].style.right = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   646
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   647
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   648
					api.refreshKeyboardAccessibility();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   649
					api.refreshAdvancedAccessibility();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   650
				},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   651
				change: function(e, ui) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   652
					// Make sure the placeholder is inside the menu.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   653
					// Otherwise fix it, or we're in trouble.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   654
					if( ! ui.placeholder.parent().hasClass('menu') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   655
						(prev.length) ? prev.after( ui.placeholder ) : api.menuList.prepend( ui.placeholder );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   656
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   657
					updateSharedVars(ui);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   658
				},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   659
				sort: function(e, ui) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   660
					var offset = ui.helper.offset(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   661
						edge = api.isRTL ? offset.left + ui.helper.width() : offset.left,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   662
						depth = api.negateIfRTL * api.pxToDepth( edge - menuEdge );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   663
					// Check and correct if depth is not within range.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   664
					// Also, if the dragged element is dragged upwards over
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   665
					// an item, shift the placeholder to a child position.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   666
					if ( depth > maxDepth || offset.top < prevBottom ) depth = maxDepth;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   667
					else if ( depth < minDepth ) depth = minDepth;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   668
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   669
					if( depth != currentDepth )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   670
						updateCurrentDepth(ui, depth);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   671
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   672
					// If we overlap the next element, manually shift downwards
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   673
					if( nextThreshold && offset.top + helperHeight > nextThreshold ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   674
						next.after( ui.placeholder );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   675
						updateSharedVars( ui );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   676
						$(this).sortable( "refreshPositions" );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   677
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   678
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   679
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   680
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   681
			function updateSharedVars(ui) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   682
				var depth;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   683
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   684
				prev = ui.placeholder.prev();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   685
				next = ui.placeholder.next();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   686
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   687
				// Make sure we don't select the moving item.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   688
				if( prev[0] == ui.item[0] ) prev = prev.prev();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   689
				if( next[0] == ui.item[0] ) next = next.next();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   690
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   691
				prevBottom = (prev.length) ? prev.offset().top + prev.height() : 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   692
				nextThreshold = (next.length) ? next.offset().top + next.height() / 3 : 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   693
				minDepth = (next.length) ? next.menuItemDepth() : 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   694
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   695
				if( prev.length )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   696
					maxDepth = ( (depth = prev.menuItemDepth() + 1) > api.options.globalMaxDepth ) ? api.options.globalMaxDepth : depth;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   697
				else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   698
					maxDepth = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   699
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   700
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   701
			function updateCurrentDepth(ui, depth) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   702
				ui.placeholder.updateDepthClass( depth, currentDepth );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   703
				currentDepth = depth;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   704
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   705
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   706
			function initialMenuMaxDepth() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   707
				if( ! body[0].className ) return 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   708
				var match = body[0].className.match(/menu-max-depth-(\d+)/);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   709
				return match && match[1] ? parseInt(match[1]) : 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   710
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   711
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   712
			function updateMenuMaxDepth( depthChange ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   713
				var depth, newDepth = menuMaxDepth;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   714
				if ( depthChange === 0 ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   715
					return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   716
				} else if ( depthChange > 0 ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   717
					depth = maxChildDepth + depthChange;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   718
					if( depth > menuMaxDepth )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   719
						newDepth = depth;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   720
				} else if ( depthChange < 0 && maxChildDepth == menuMaxDepth ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   721
					while( ! $('.menu-item-depth-' + newDepth, api.menuList).length && newDepth > 0 )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   722
						newDepth--;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   723
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   724
				// Update the depth class.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   725
				body.removeClass( 'menu-max-depth-' + menuMaxDepth ).addClass( 'menu-max-depth-' + newDepth );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   726
				menuMaxDepth = newDepth;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   727
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   728
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   729
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   730
		initManageLocations : function () {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   731
			$('#menu-locations-wrap form').submit(function(){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   732
				window.onbeforeunload = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   733
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   734
			$('.menu-location-menus select').on('change', function () {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   735
				var editLink = $(this).closest('tr').find('.locations-edit-menu-link');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   736
				if ($(this).find('option:selected').data('orig'))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   737
					editLink.show();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   738
				else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   739
					editLink.hide();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   740
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   741
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   742
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   743
		attachMenuEditListeners : function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   744
			var that = this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   745
			$('#update-nav-menu').bind('click', function(e) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   746
				if ( e.target && e.target.className ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   747
					if ( -1 != e.target.className.indexOf('item-edit') ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   748
						return that.eventOnClickEditLink(e.target);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   749
					} else if ( -1 != e.target.className.indexOf('menu-save') ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   750
						return that.eventOnClickMenuSave(e.target);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   751
					} else if ( -1 != e.target.className.indexOf('menu-delete') ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   752
						return that.eventOnClickMenuDelete(e.target);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   753
					} else if ( -1 != e.target.className.indexOf('item-delete') ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   754
						return that.eventOnClickMenuItemDelete(e.target);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   755
					} else if ( -1 != e.target.className.indexOf('item-cancel') ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   756
						return that.eventOnClickCancelLink(e.target);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   757
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   758
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   759
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   760
			$('#add-custom-links input[type="text"]').keypress(function(e){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   761
				if ( e.keyCode === 13 ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   762
					e.preventDefault();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   763
					$("#submit-customlinkdiv").click();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   764
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   765
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   766
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   767
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   768
		/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   769
		 * An interface for managing default values for input elements
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   770
		 * that is both JS and accessibility-friendly.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   771
		 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   772
		 * Input elements that add the class 'input-with-default-title'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   773
		 * will have their values set to the provided HTML title when empty.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   774
		 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   775
		setupInputWithDefaultTitle : function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   776
			var name = 'input-with-default-title';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   777
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   778
			$('.' + name).each( function(){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   779
				var $t = $(this), title = $t.attr('title'), val = $t.val();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   780
				$t.data( name, title );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   781
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   782
				if( '' == val ) $t.val( title );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   783
				else if ( title == val ) return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   784
				else $t.removeClass( name );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   785
			}).focus( function(){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   786
				var $t = $(this);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   787
				if( $t.val() == $t.data(name) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   788
					$t.val('').removeClass( name );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   789
			}).blur( function(){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   790
				var $t = $(this);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   791
				if( '' == $t.val() )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   792
					$t.addClass( name ).val( $t.data(name) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   793
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   794
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   795
			$( '.blank-slate .input-with-default-title' ).focus();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   796
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   797
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   798
		attachThemeLocationsListeners : function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   799
			var loc = $('#nav-menu-theme-locations'), params = {};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   800
			params['action'] = 'menu-locations-save';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   801
			params['menu-settings-column-nonce'] = $('#menu-settings-column-nonce').val();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   802
			loc.find('input[type="submit"]').click(function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   803
				loc.find('select').each(function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   804
					params[this.name] = $(this).val();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   805
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   806
				loc.find('.spinner').show();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   807
				$.post( ajaxurl, params, function(r) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   808
					loc.find('.spinner').hide();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   809
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   810
				return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   811
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   812
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   813
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   814
		attachQuickSearchListeners : function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   815
			var searchTimer;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   816
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   817
			$('.quick-search').keypress(function(e){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   818
				var t = $(this);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   819
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   820
				if( 13 == e.which ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   821
					api.updateQuickSearchResults( t );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   822
					return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   823
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   824
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   825
				if( searchTimer ) clearTimeout(searchTimer);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   826
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   827
				searchTimer = setTimeout(function(){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   828
					api.updateQuickSearchResults( t );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   829
				}, 400);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   830
			}).attr('autocomplete','off');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   831
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   832
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   833
		updateQuickSearchResults : function(input) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   834
			var panel, params,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   835
			minSearchLength = 2,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   836
			q = input.val();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   837
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   838
			if( q.length < minSearchLength ) return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   839
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   840
			panel = input.parents('.tabs-panel');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   841
			params = {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   842
				'action': 'menu-quick-search',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   843
				'response-format': 'markup',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   844
				'menu': $('#menu').val(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   845
				'menu-settings-column-nonce': $('#menu-settings-column-nonce').val(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   846
				'q': q,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   847
				'type': input.attr('name')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   848
			};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   849
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   850
			$('.spinner', panel).show();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   851
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   852
			$.post( ajaxurl, params, function(menuMarkup) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   853
				api.processQuickSearchQueryResponse(menuMarkup, params, panel);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   854
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   855
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   856
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   857
		addCustomLink : function( processMethod ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   858
			var url = $('#custom-menu-item-url').val(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   859
				label = $('#custom-menu-item-name').val();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   860
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   861
			processMethod = processMethod || api.addMenuItemToBottom;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   862
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   863
			if ( '' == url || 'http://' == url )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   864
				return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   865
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   866
			// Show the ajax spinner
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   867
			$('.customlinkdiv .spinner').show();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   868
			this.addLinkToMenu( url, label, processMethod, function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   869
				// Remove the ajax spinner
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   870
				$('.customlinkdiv .spinner').hide();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   871
				// Set custom link form back to defaults
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   872
				$('#custom-menu-item-name').val('').blur();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   873
				$('#custom-menu-item-url').val('http://');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   874
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   875
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   876
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   877
		addLinkToMenu : function(url, label, processMethod, callback) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   878
			processMethod = processMethod || api.addMenuItemToBottom;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   879
			callback = callback || function(){};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   880
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   881
			api.addItemToMenu({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   882
				'-1': {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   883
					'menu-item-type': 'custom',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   884
					'menu-item-url': url,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   885
					'menu-item-title': label
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   886
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   887
			}, processMethod, callback);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   888
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   889
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   890
		addItemToMenu : function(menuItem, processMethod, callback) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   891
			var menu = $('#menu').val(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   892
				nonce = $('#menu-settings-column-nonce').val();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   893
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   894
			processMethod = processMethod || function(){};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   895
			callback = callback || function(){};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   896
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   897
			params = {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   898
				'action': 'add-menu-item',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   899
				'menu': menu,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   900
				'menu-settings-column-nonce': nonce,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   901
				'menu-item': menuItem
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   902
			};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   903
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   904
			$.post( ajaxurl, params, function(menuMarkup) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   905
				var ins = $('#menu-instructions');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   906
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   907
				menuMarkup = $.trim( menuMarkup ); // Trim leading whitespaces
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   908
				processMethod(menuMarkup, params);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   909
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   910
				// Make it stand out a bit more visually, by adding a fadeIn
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   911
				$( 'li.pending' ).hide().fadeIn('slow');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   912
				$( '.drag-instructions' ).show();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   913
				if( ! ins.hasClass( 'menu-instructions-inactive' ) && ins.siblings().length )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   914
					ins.addClass( 'menu-instructions-inactive' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   915
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   916
				callback();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   917
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   918
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   919
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   920
		/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   921
		 * Process the add menu item request response into menu list item.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   922
		 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   923
		 * @param string menuMarkup The text server response of menu item markup.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   924
		 * @param object req The request arguments.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   925
		 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   926
		addMenuItemToBottom : function( menuMarkup, req ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   927
			$(menuMarkup).hideAdvancedMenuItemFields().appendTo( api.targetList );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   928
			api.refreshKeyboardAccessibility();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   929
			api.refreshAdvancedAccessibility();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   930
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   931
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   932
		addMenuItemToTop : function( menuMarkup, req ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   933
			$(menuMarkup).hideAdvancedMenuItemFields().prependTo( api.targetList );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   934
			api.refreshKeyboardAccessibility();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   935
			api.refreshAdvancedAccessibility();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   936
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   937
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   938
		attachUnsavedChangesListener : function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   939
			$('#menu-management input, #menu-management select, #menu-management, #menu-management textarea, .menu-location-menus select').change(function(){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   940
				api.registerChange();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   941
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   942
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   943
			if ( 0 != $('#menu-to-edit').length || 0 != $('.menu-location-menus select').length ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   944
				window.onbeforeunload = function(){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   945
					if ( api.menusChanged )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   946
						return navMenuL10n.saveAlert;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   947
				};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   948
			} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   949
				// Make the post boxes read-only, as they can't be used yet
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   950
				$( '#menu-settings-column' ).find( 'input,select' ).end().find( 'a' ).attr( 'href', '#' ).unbind( 'click' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   951
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   952
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   953
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   954
		registerChange : function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   955
			api.menusChanged = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   956
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   957
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   958
		attachTabsPanelListeners : function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   959
			$('#menu-settings-column').bind('click', function(e) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   960
				var selectAreaMatch, panelId, wrapper, items,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   961
					target = $(e.target);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   962
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   963
				if ( target.hasClass('nav-tab-link') ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   964
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   965
					panelId = target.data( 'type' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   966
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   967
					wrapper = target.parents('.accordion-section-content').first();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   968
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   969
					// upon changing tabs, we want to uncheck all checkboxes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   970
					$('input', wrapper).removeAttr('checked');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   971
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   972
					$('.tabs-panel-active', wrapper).removeClass('tabs-panel-active').addClass('tabs-panel-inactive');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   973
					$('#' + panelId, wrapper).removeClass('tabs-panel-inactive').addClass('tabs-panel-active');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   974
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   975
					$('.tabs', wrapper).removeClass('tabs');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   976
					target.parent().addClass('tabs');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   977
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   978
					// select the search bar
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   979
					$('.quick-search', wrapper).focus();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   980
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   981
					e.preventDefault();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   982
				} else if ( target.hasClass('select-all') ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   983
					selectAreaMatch = /#(.*)$/.exec(e.target.href);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   984
					if ( selectAreaMatch && selectAreaMatch[1] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   985
						items = $('#' + selectAreaMatch[1] + ' .tabs-panel-active .menu-item-title input');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   986
						if( items.length === items.filter(':checked').length )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   987
							items.removeAttr('checked');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   988
						else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   989
							items.prop('checked', true);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   990
						return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   991
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   992
				} else if ( target.hasClass('submit-add-to-menu') ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   993
					api.registerChange();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   994
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   995
					if ( e.target.id && 'submit-customlinkdiv' == e.target.id )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   996
						api.addCustomLink( api.addMenuItemToBottom );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   997
					else if ( e.target.id && -1 != e.target.id.indexOf('submit-') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   998
						$('#' + e.target.id.replace(/submit-/, '')).addSelectedToMenu( api.addMenuItemToBottom );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   999
					return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1000
				} else if ( target.hasClass('page-numbers') ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1001
					$.post( ajaxurl, e.target.href.replace(/.*\?/, '').replace(/action=([^&]*)/, '') + '&action=menu-get-metabox',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1002
						function( resp ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1003
							if ( -1 == resp.indexOf('replace-id') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1004
								return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1005
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1006
							var metaBoxData = $.parseJSON(resp),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1007
							toReplace = document.getElementById(metaBoxData['replace-id']),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1008
							placeholder = document.createElement('div'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1009
							wrap = document.createElement('div');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1010
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1011
							if ( ! metaBoxData['markup'] || ! toReplace )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1012
								return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1013
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1014
							wrap.innerHTML = metaBoxData['markup'] ? metaBoxData['markup'] : '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1015
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1016
							toReplace.parentNode.insertBefore( placeholder, toReplace );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1017
							placeholder.parentNode.removeChild( toReplace );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1018
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1019
							placeholder.parentNode.insertBefore( wrap, placeholder );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1020
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1021
							placeholder.parentNode.removeChild( placeholder );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1022
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1023
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1024
					);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1025
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1026
					return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1027
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1028
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1029
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1030
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1031
		eventOnClickEditLink : function(clickedEl) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1032
			var settings, item,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1033
			matchedSection = /#(.*)$/.exec(clickedEl.href);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1034
			if ( matchedSection && matchedSection[1] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1035
				settings = $('#'+matchedSection[1]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1036
				item = settings.parent();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1037
				if( 0 != item.length ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1038
					if( item.hasClass('menu-item-edit-inactive') ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1039
						if( ! settings.data('menu-item-data') ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1040
							settings.data( 'menu-item-data', settings.getItemData() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1041
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1042
						settings.slideDown('fast');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1043
						item.removeClass('menu-item-edit-inactive')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1044
							.addClass('menu-item-edit-active');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1045
					} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1046
						settings.slideUp('fast');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1047
						item.removeClass('menu-item-edit-active')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1048
							.addClass('menu-item-edit-inactive');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1049
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1050
					return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1051
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1052
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1053
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1054
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1055
		eventOnClickCancelLink : function(clickedEl) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1056
			var settings = $( clickedEl ).closest( '.menu-item-settings' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1057
				thisMenuItem = $( clickedEl ).closest( '.menu-item' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1058
			thisMenuItem.removeClass('menu-item-edit-active').addClass('menu-item-edit-inactive');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1059
			settings.setItemData( settings.data('menu-item-data') ).hide();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1060
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1061
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1062
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1063
		eventOnClickMenuSave : function(clickedEl) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1064
			var locs = '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1065
			menuName = $('#menu-name'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1066
			menuNameVal = menuName.val();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1067
			// Cancel and warn if invalid menu name
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1068
			if( !menuNameVal || menuNameVal == menuName.attr('title') || !menuNameVal.replace(/\s+/, '') ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1069
				menuName.parent().addClass('form-invalid');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1070
				return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1071
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1072
			// Copy menu theme locations
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1073
			$('#nav-menu-theme-locations select').each(function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1074
				locs += '<input type="hidden" name="' + this.name + '" value="' + $(this).val() + '" />';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1075
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1076
			$('#update-nav-menu').append( locs );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1077
			// Update menu item position data
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1078
			api.menuList.find('.menu-item-data-position').val( function(index) { return index + 1; } );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1079
			window.onbeforeunload = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1080
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1081
			return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1082
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1083
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1084
		eventOnClickMenuDelete : function(clickedEl) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1085
			// Delete warning AYS
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1086
			if ( confirm( navMenuL10n.warnDeleteMenu ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1087
				window.onbeforeunload = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1088
				return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1089
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1090
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1091
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1092
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1093
		eventOnClickMenuItemDelete : function(clickedEl) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1094
			var itemID = parseInt(clickedEl.id.replace('delete-', ''), 10);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1095
			api.removeMenuItem( $('#menu-item-' + itemID) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1096
			api.registerChange();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1097
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1098
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1099
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1100
		/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1101
		 * Process the quick search response into a search result
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1102
		 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1103
		 * @param string resp The server response to the query.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1104
		 * @param object req The request arguments.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1105
		 * @param jQuery panel The tabs panel we're searching in.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1106
		 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1107
		processQuickSearchQueryResponse : function(resp, req, panel) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1108
			var matched, newID,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1109
			takenIDs = {},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1110
			form = document.getElementById('nav-menu-meta'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1111
			pattern = new RegExp('menu-item\\[(\[^\\]\]*)', 'g'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1112
			$items = $('<div>').html(resp).find('li'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1113
			$item;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1114
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1115
			if( ! $items.length ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1116
				$('.categorychecklist', panel).html( '<li><p>' + navMenuL10n.noResultsFound + '</p></li>' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1117
				$('.spinner', panel).hide();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1118
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1119
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1120
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1121
			$items.each(function(){
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1122
				$item = $(this);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1123
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1124
				// make a unique DB ID number
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1125
				matched = pattern.exec($item.html());
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1126
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1127
				if ( matched && matched[1] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1128
					newID = matched[1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1129
					while( form.elements['menu-item[' + newID + '][menu-item-type]'] || takenIDs[ newID ] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1130
						newID--;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1131
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1132
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1133
					takenIDs[newID] = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1134
					if ( newID != matched[1] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1135
						$item.html( $item.html().replace(new RegExp(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1136
							'menu-item\\[' + matched[1] + '\\]', 'g'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1137
							'menu-item[' + newID + ']'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1138
						) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1139
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1140
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1141
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1142
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1143
			$('.categorychecklist', panel).html( $items );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1144
			$('.spinner', panel).hide();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1145
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1146
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1147
		removeMenuItem : function(el) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1148
			var children = el.childMenuItems();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1149
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1150
			el.addClass('deleting').animate({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1151
					opacity : 0,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1152
					height: 0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1153
				}, 350, function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1154
					var ins = $('#menu-instructions');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1155
					el.remove();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1156
					children.shiftDepthClass( -1 ).updateParentMenuItemDBId();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1157
					if( 0 == $( '#menu-to-edit li' ).length ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1158
						$( '.drag-instructions' ).hide();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1159
						ins.removeClass( 'menu-instructions-inactive' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1160
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1161
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1162
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1163
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1164
		depthToPx : function(depth) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1165
			return depth * api.options.menuItemDepthPerLevel;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1166
		},
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1167
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1168
		pxToDepth : function(px) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1169
			return Math.floor(px / api.options.menuItemDepthPerLevel);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1170
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1171
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1172
	};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1173
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1174
	$(document).ready(function(){ wpNavMenu.init(); });
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1175
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1176
})(jQuery);