File: /home/globfdxw/www/wp-content/plugins/ubermenu/admin/assets/admin.menu.js
(function ($) {
var ubermenu_admin_is_initialized = false;
//jQuery( document ).ready( function($){
jQuery(function ($) {
initialize_ubermenu_admin('document.ready');
});
//Backup
$(window).on('load', function () {
initialize_ubermenu_admin('window.load');
});
function initialize_ubermenu_admin(init_point) {
if (ubermenu_admin_is_initialized) return;
ubermenu_admin_is_initialized = true;
if ((typeof console != "undefined") && init_point == 'window.load') console.log('UberMenu admin initialized via ' + init_point);
var $current_menu_item = null;
var current_menu_item_id = ''; //menu-item-x
var $current_panel = null;
var $settingswrap = $('.ubermenu-menu-item-settings-wrapper');
var $shiftwrap = $('.shiftnav-menu-item-settings-wrapper');
var shiftnav = $shiftwrap.length > 0 ? true : false;
//remove loading notice
$('.ubermenu-js-check').remove();
//Add View in Sandbox button
//$( '.publishing-action' ).before( '<a href="#" class="button button-primary">View UberMenu in Sandbox</a>' );
if (ubermenu_meta.sandbox_url) {
$('.nav-tab-wrapper').append('<a target="_blank" href="' + ubermenu_meta.sandbox_url + '" class="nav-tab">View UberMenu in Sandbox</a>');
}
//handle adding the "Uber" button on each menu item upon first interaction
$('#menu-management').on('mouseenter touchEnd MSPointerUp pointerup', '.menu-item:not(.ubermenu-processed)', function (e) {
$(this).addClass('ubermenu-processed');
$(this).find('.item-title').append('<span class="ubermenu-settings-toggle" data-uber-toggle="' + $(this).attr('id') + '"><i class="fas fa-cog"></i> Uber <span class="ubermenu-unsaved-alert"><i class="fas fa-exclamation-triangle"></i> <span class="ubermenu-unsaved-alert-message">Unsaved</span></span></span>');
//console.log( $(this).find( '.item-title' ).text() );
});
//Close when ShiftNav is opened
if (shiftnav) {
$('#menu-management').on('click', '.shiftnav-settings-toggle', function (e) {
$settingswrap.removeClass('ubermenu-menu-item-settings-open');
$('body').removeClass('ubermenu-settings-panel-is-open');
});
}
//Don't allow clicks to propagate when clicking the toggle button, to avoid drag-starts of the menu item
$('#menu-management').on('mousedown', '.ubermenu-settings-toggle', function (e) {
e.preventDefault();
e.stopPropagation();
return false;
});
$(document).on('keyup', function (e) {
if (e.keyCode == 27) {
if ($current_panel) {
$settingswrap.toggleClass('ubermenu-menu-item-settings-open');
}
}
});
//Handle clicking the "Uber" button on each menu item - open settings
$('#menu-management').on('click', '.ubermenu-settings-toggle', function (e) {
var this_menu_item_id = $(this).attr('data-uber-toggle');
var this_menu_item_id_num = this_menu_item_id.substr(10);
$current_menu_item = $(this).parents('li.menu-item'); //closest?
//Close ShiftNav
if (shiftnav) {
$shiftwrap.removeClass('shiftnav-menu-item-settings-open');
$('body').removeClass('shiftnav-settings-panel-is-open');
}
//This is already the current item
if (this_menu_item_id == current_menu_item_id) {
$settingswrap.toggleClass('ubermenu-menu-item-settings-open');
$('body').toggleClass('ubermenu-settings-panel-is-open');
}
//Switching to a different item
else {
$settingswrap.addClass('ubermenu-menu-item-settings-open');
$('body').addClass('ubermenu-settings-panel-is-open');
//$( '.ubermenu-menu-item-tab' ).click();
//Update
$current_panel = $settingswrap.find('.ubermenu-menu-item-panel-' + this_menu_item_id);
//Create Panel if it doesn't exist
if ($current_panel.length === 0) {
$current_panel = $('.ubermenu-menu-item-panel-negative').clone();
$current_panel.removeClass('ubermenu-menu-item-panel-negative');
$current_panel.addClass('ubermenu-menu-item-panel-' + this_menu_item_id);
$current_panel.attr('data-menu-item-target-id', this_menu_item_id_num);
//If settings have loaded properly, remove the error notice
if ($current_panel.find('.ubermenu-settings-completion-marker').length) {
$current_panel.find('.ubermenu-menu-item-load-error-notice').remove();
}
var hash = '#' + this_menu_item_id;
var item_type = $current_menu_item.find('.item-type:first').text();
if ($current_menu_item.find('.item-type').length > 1 && typeof console != "undefined")
console.warn('[UberMenu Notice] Multiple menu item types defined by custom nav walker. If you are not seeing the proper settings, try enabling "Disable Custom Menus Panel Walker" in the UberMenu Control Panel > General Settings > Theme Integration');
var item_type_class = item_type.replace('[', '').replace(']', '').replace(/ /g, '_').toLowerCase();
//console.log( item_type + ' :: ' + item_type_class );
$current_panel.addClass('ubermenu-menu-item-panel-type-' + item_type_class);
var data_object_type = $current_menu_item.find('.menu-item-data-object').val();
if (data_object_type == 'ubermenu-custom') data_object_type = item_type;
// console.log( data_object_type );
// console.log( item_type );
// console.log( item_type_class );
//Get the Title from the Menu Item
var _title = $current_menu_item.find('.menu-item-title').text();
if (!_title) {
_title = $current_menu_item.find('.item-title').text();
_title = _title.substring(0, _title.indexOf(' Uber'));
}
//Set Panel's Item Title, ID link, and Type
$current_panel.find('.ubermenu-menu-item-title').html('<a href="' + hash + '"><i class="fas fa-location-arrow"></i> ' + _title + '</a>');
$current_panel.find('.ubermenu-menu-item-id').html('<a href="' + hash + '">' + hash + '</a>');
$current_panel.find('.ubermenu-menu-item-type').text(item_type);
//Remove unneeded tabs based on ubermenu_get_menu_item_panels_map
var item_panels = ubermenu_meta.item_panels['default'];
if (typeof ubermenu_meta.item_panels[data_object_type] != 'undefined') {
//item_panels = ubermenu_meta.item_panels[item_type];
item_panels = ubermenu_meta.item_panels[data_object_type];
}
//console.log( item_panels );
$current_panel.find('li.ubermenu-menu-item-tab').each(function () {
if (item_panels.indexOf($(this).data('ubermenu-tab')) == -1) {
$(this).remove();
$current_panel.find('.ubermenu-menu-item-tab-content[data-ubermenu-tab-content=' + $(this).data('ubermenu-tab') + ']').remove();
}
});
var item_data = ubermenu_menu_item_data[this_menu_item_id_num];
if (item_data) {
$current_panel.find('[data-ubermenu-setting]').each(function () {
var _data_name = $(this).data('ubermenu-setting');
//if( item_data[_data_name] ){
if (item_data.hasOwnProperty(_data_name)) {
//console.log( _data_name + ' :: ' + $(this).attr('type') );
switch ($(this).attr('type')) {
case 'checkbox':
//Multicheck
if ($(this).hasClass('ubermenu-multicheckbox')) {
//console.log( 'multicheck ' + $(this).parent('label').text() );
if ($.isArray(item_data[_data_name])) {
//console.log( 'an array' );
if (0 <= $.inArray($(this).attr('value'), item_data[_data_name])) {
//console.log( 'in array - check' );
$(this).prop('checked', true);
}
else {
//console.log( 'not in array' );
$(this).prop('checked', false);
}
}
else {
//console.log( 'not an array - uncheck' );
$(this).prop('checked', false);
}
}
//Single Check
else if (item_data[_data_name] == 'on') {
$(this).prop('checked', true);
}
else {
$(this).prop('checked', false);
}
break;
case 'radio':
if (item_data[_data_name] == $(this).val()) {
$(this).prop('checked', true);
$(this).closest('.ubermenu-menu-item-setting-input-wrap').find('.ubermenu-radio-label').removeClass('ubermenu-radio-label-selected');
$(this).closest('.ubermenu-radio-label').addClass('ubermenu-radio-label-selected');
}
break;
case 'text':
$(this).val(item_data[_data_name]); //the basics;
//Now check for specific types of settings that use text inputs
//Media
if ($(this).hasClass('ubermenu-media-id')) {
if (item_data.hasOwnProperty(_data_name + '_url')) {
//console.log( 'media: ' + _data_name );
$wrap = $(this).closest('.ubermenu-media-wrapper');
$wrap.find('.media-preview-wrap')
.html('<img src="' + item_data[_data_name + '_url'] + '" />');
$wrap.find('.ubermenu-edit-media-button').css('display', 'block')
.attr('href', item_data[_data_name + '_edit']);
}
}
//Colorpicker
else if ($(this).hasClass('ubermenu-colorpicker')) {
//console.log( item_data[_data_name] );
//$(this).attr( 'data-default-color' , item_data[_data_name] );
//console.log( 'colorpicker' );
}
else if ($(this).hasClass('ubermenu-autocomplete-setting')) {
var val = $(this).val();
if (val) {
if (!isNaN(val)) {
var txt = $(this).closest('.ubermenu-autocomplete')
.find('.ubermenu-autocomplete-op[data-val=' + val + '] .ubermenu-autocomplete-op-name')
.text();
$(this).prev('.ubermenu-autocomplete-input').val(txt);
}
}
}
break;
default:
//if( $(this).is( 'textarea' ) ){
// $(this).
//}
$(this).val(item_data[_data_name]);
}
}
switch (_data_name) {
case 'icon':
var $icon_wrap = $(this).parents('.ubermenu-icon-settings-wrap'); // Wrapper for this setting
var $selected_icon_el = $settingswrap.find('.ubermenu-icon-settings-wrap .ubermenu-icon[data-ubermenu-icon="' + item_data.icon + '"]').first();
// console.log(item_data.icon, $selected_icon_el);
$icon_wrap.find('.ubermenu-icon-selected .ubermenu-icon').replaceWith($selected_icon_el.clone());
// if (item_data.icon.includes('::')) {
// var groupandid = item_data.icon.split('::');
// var group_id = groupandid[0];
// var icon_id = groupandid[1];
// console.log(group_id, icon_id);
// switch (group_id) {
// case 'ubermenu-svg':
// break;
// default:
// }
// }
// // Old FA System
// else {
// $icon_wrap.find('.ubermenu-icon-selected i').attr('class', 'ubermenu-icon ' + item_data.icon); //This can stay as an <i> because it isn't processed into an SVG prior to this
// }
break;
}
});
//for( _setting in item_data ){
//console.log( _setting + ' :: ' + item_data[_setting] );
//}
}
//Setup Colorpickers
$current_panel.find('.ubermenu-colorpicker').wpColorPicker();
$current_panel.find('.ubermenu-menu-item-tab-content').hide();
$current_panel.on('click', '.ubermenu-menu-item-tab a', function (e) {
e.preventDefault();
e.stopPropagation();
//console.log( $(this).data('ubermenu-tab') );
//console.log( $current_panel.find( '[data-ubermenu-tab-content="'+$(this).data('ubermenu-tab') + '"]' ).length );
//
$current_panel.find('.ubermenu-menu-item-tab > a').removeClass('ubermenu-menu-item-tab-current');
$(this).addClass('ubermenu-menu-item-tab-current');
$current_panel.find('.ubermenu-menu-item-tab-content').slideUp();
$current_panel.find('[data-ubermenu-tab-content="' + $(this).data('ubermenu-tab') + '"]').slideDown();
return false;
});
$current_panel.find('.ubermenu-menu-item-tab > a').first().trigger('click');
$settingswrap.append($current_panel);
}
//Set Depth
var cmi_class = $current_menu_item.attr('class');
var substrstart = cmi_class.indexOf('menu-item-depth-') + 16;
var depth = cmi_class.substring(substrstart, substrstart + 1);
$current_panel.attr('data-depth', depth);
//Hide all other panels
$settingswrap.find('.ubermenu-menu-item-panel').hide();
$settingswrap.show();
$current_panel.fadeIn();
}
current_menu_item_id = this_menu_item_id;
return false;
});
//When a setting is changed, set the flag on the settings panel and on the menu item itself
$settingswrap.on('change', '.ubermenu-menu-item-setting-input', function (e) {
//Flag Settings Panel
var $form = $(this).parents('form.ubermenu-menu-item-settings-form');
$form.find('.ubermenu-menu-item-status').attr('class', 'ubermenu-menu-item-status ubermenu-menu-item-status-warning');
$form.find('.ubermenu-status-message').html('Settings have changed. Click <strong>Save Menu Item</strong> to preserve these changes.');
//Flag Menu Item
var item_id = $form.parents('.ubermenu-menu-item-panel').data('menu-item-target-id');
$('#menu-item-' + item_id).addClass('ubermenu-unsaved');
});
//Highlight radio selections
$settingswrap.on('click', '.ubermenu-radio-label', function () {
$(this).closest('.ubermenu-menu-item-setting-input-wrap').find('.ubermenu-radio-label').removeClass('ubermenu-radio-label-selected');
$(this).addClass('ubermenu-radio-label-selected');
});
//Save Settings Button
$settingswrap.on('click', '.ubermenu-menu-item-save-button', function (e) {
e.preventDefault();
e.stopPropagation();
var $form = $(this).parents('form.ubermenu-menu-item-settings-form');
var serialized = $form.serialize();
//console.log( 'serial: ' + serialized );
//return;
var data = {
action: 'ubermenu_save_menu_item',
settings: serialized,
menu_item_id: current_menu_item_id,
ubermenu_nonce: ubermenu_meta.nonce
};
$formStatus = $form.find('.ubermenu-menu-item-status');
$formStatusMessage = $form.find('.ubermenu-status-message');
$formStatus.attr('class', 'ubermenu-menu-item-status ubermenu-menu-item-status-working');
$formStatusMessage.text('Processing save request...');
$.post(ubermenu_meta.ajax_url, data, function (response) {
//console.log('Got this from the server: ' , response );
if (response == -1) {
$formStatus.attr('class', 'ubermenu-menu-item-status ubermenu-menu-item-status-error');
$formStatusMessage.html('<strong>Error encountered. Settings could not be saved.</strong> Your login/nonce may have expired. Please try refreshing the page.');
//console.log( response );
}
else {
//$( '.ubermenu-menu-item-panel-' + response.menu_item_id )
$formStatus.attr('class', 'ubermenu-menu-item-status ubermenu-menu-item-status-success');
$formStatusMessage.text('Settings Saved');
ubermenu_meta.nonce = response.nonce; //update nonce
//Remove flag on menu item
var item_id = $form.parents('.ubermenu-menu-item-panel').data('menu-item-target-id');
$('#menu-item-' + item_id).removeClass('ubermenu-unsaved');
}
}, 'json').fail(function (d) {
$formStatus.attr('class', 'ubermenu-menu-item-status ubermenu-menu-item-status-error');
$formStatusMessage.html('<strong>Error encountered. Settings could not be saved.</strong> Response Text: <br/><textarea>' + d.responseText + '</textarea>');
//console.log( d.responseText );
//console.log( d );
});
return false;
});
//Close Settings Button
$settingswrap.on('click', '.ubermenu-menu-item-settings-close', function (e) {
e.preventDefault();
e.stopPropagation();
$settingswrap.removeClass('ubermenu-menu-item-settings-open');
$('body').removeClass('ubermenu-settings-panel-is-open');
});
//Scroll to the menu item when the ID is clicked
$settingswrap.on('click', '.ubermenu-menu-item-id a, .ubermenu-menu-item-title a', function (e) {
var $item = $($(this).attr('href'));
//console.log( $item.offset() );
var y = $item.offset().top - 50;
$('html, body').animate({ scrollTop: y }, 'normal');
return false;
});
//Show Icon Selection panel when icon is clicked
$settingswrap.on('click', '.ubermenu-icon-selected', function (e) {
// console.log( 'clicked' );
// console.log( this );
var $icon_set = $(this).closest('.ubermenu-icon-settings-wrap');
$icon_set.find('.ubermenu-icons').fadeToggle(100);
$icon_set.find('.ubermenu-icons-search').trigger('focus');
});
//Change selected icon when clicked
$settingswrap.on('click', '.ubermenu-icon-settings-wrap .ubermenu-icon-wrap', function (e) {
$icon = $(this).find('.ubermenu-icon'); //The icon that was clicked
var $icon_set = $(this).closest('.ubermenu-icon-settings-wrap'); //The wrapper for this setting
var icon_val = $icon.data('ubermenu-icon');
// if (icon_val.includes('::')) {
// var val_split = icon_val.split('::');
// var group_id = val_split[0];
// var icon_id = val_split[1];
// console.log(group_id, icon_id);
// if( group_id )
// }
//console.log( $icon.attr( 'class' ) + ' | ' + $icon.data( 'ubermenu-icon' ) );
//$icon_set.find( '.ubermenu-icon-selected i' ).attr( 'class' , $icon.attr( 'class' ) ); //TODO
//Change the SVG's data and Font Awesome will reload it - what about non-SVG or another standard?
//$icon_set.find( '.ubermenu-icon-selected .ubermenu-icon' ).attr( 'data-prefix' , $icon.attr( 'data-prefix' ) ).attr( 'data-icon' , $icon.attr( 'data-icon' ) );
// $icon_set.find('.ubermenu-icon-selected .ubermenu-icon').replaceWith('<i class="ubermenu-icon ' + $icon.attr('data-ubermenu-icon') + '"></i>');
$icon_set.find('.ubermenu-icon-selected .ubermenu-icon').replaceWith($icon.clone());
$icon_set.find('select').val(icon_val).trigger('change');
$(this).parents('.ubermenu-icons').fadeOut();
});
/* Filter Icons */
$settingswrap.on('keyup', '.ubermenu-icons-search', function (e) {
var $icon_set = $(this).closest('.ubermenu-icon-settings-wrap').find('.ubermenu-icon-wrap');
var val = $(this).val();
if (val == '') {
$icon_set.show();
}
else {
$icon_set.filter(':not( [data-ubermenu-search-terms*="' + val + '"] )').hide();
//console.log( 'not( [data-ubermenu-search-terms*=' +$(this).val().toLowerCase()+ '] )' );
}
});
/* Filtering autocompletes */
$settingswrap.on('click', '.ubermenu-autocomplete-clear', function (e) {
var $wrap = $(this).closest('.ubermenu-autocomplete');
$wrap.find('.ubermenu-menu-item-setting-input')
.val('')
.trigger('change');
//Hide dropdown
$wrap.find('.ubermenu-autocomplete-ops').hide();
var $autocomp = $wrap.find('.ubermenu-autocomplete-input');
$autocomp.val('');
$autocomp.data('current-id', ''); //$(this).data( 'val' ) );
$autocomp.data('current-name', ''); //$(this).text() );
$autocomp.data('auto-set', 'true');
});
$settingswrap.on('click', '.ubermenu-autocomplete-toggle', function (e) {
$(this).closest('.ubermenu-autocomplete').find('.ubermenu-autocomplete-ops').toggle();
});
$settingswrap.on('focus', '.ubermenu-autocomplete-input', function (e) {
$(this).closest('.ubermenu-autocomplete').find('.ubermenu-autocomplete-ops').show();
});
$settingswrap.on('blur', '.ubermenu-autocomplete-input', function (e) {
//console.log( 'blur ' + $(this).data('auto-set' ) + ' :: ' + $(this).data( 'current-name' ) );
if ($(this).data('auto-set') == 'true') {
//$( this ).closest( '.ubermenu-autocomplete' ).find( '.ubermenu-autocomplete-ops' ).hide();
}
//If not set, revert val
else {
$(this).val($(this).data('current-name'));
}
});
$settingswrap.on('keyup', '.ubermenu-autocomplete-input', function (e) {
$(this).data('auto-set', 'false');
$opwrap = $(this).closest('.ubermenu-autocomplete').find('.ubermenu-autocomplete-ops');
$opwrap.show();
var val = $(this).val().toLowerCase();
$ops = $opwrap.find('.ubermenu-autocomplete-op');
if (val == '') {
$ops.show();
}
else {
$ops.filter('[data-opname*=' + val + ']').show();
$ops.filter(':not( [data-opname*=' + val + '] )').hide();
}
});
$settingswrap.on('click', '.ubermenu-autocomplete-op', function (e) {
//console.log( 'val = ' + $(this).data( 'val' ) );
var $wrap = $(this).closest('.ubermenu-autocomplete');
//Change actual setting val
$wrap.find('.ubermenu-menu-item-setting-input')
.val($(this).data('val'))
.trigger('change');
//Hide dropdown
$wrap.find('.ubermenu-autocomplete-ops').hide();
});
$settingswrap.on('change', '.ubermenu-autocomplete .ubermenu-menu-item-setting-input', function (e) {
var $wrap = $(this).closest('.ubermenu-autocomplete');
var id = $(this).val();
var name = '';
if (id) {
var $match = $wrap.find('.ubermenu-autocomplete-op[data-val=' + id + '] .ubermenu-autocomplete-op-name');
if ($match.length > 0) {
name = $match.text();
}
}
var $autocomp = $wrap.find('.ubermenu-autocomplete-input');
$autocomp.val(name);
$autocomp.data('current-id', id); //$(this).data( 'val' ) );
$autocomp.data('current-name', name); //$(this).text() );
$autocomp.data('auto-set', 'true');
});
/* Tooltips */
/*
$( '[data-um-tooltip]' ).each( function(){
$(this).append( '<span class="um-tooltip">' + $(this).data( 'um-tooltip' ) + '</span>' );
});
*/
/* Image Selection */
var file_frame;
var $wrap;
$settingswrap.on('click', '.ubermenu-media-wrapper .ubermenu-setting-button', function (event) {
$wrap = $(this).closest('.ubermenu-media-wrapper');
event.preventDefault();
// If the media frame already exists, reopen it.
if (file_frame) {
file_frame.open();
return;
}
// Create the media frame.
file_frame = wp.media.frames.file_frame = wp.media({
title: jQuery(this).data('uploader-title'),
button: {
text: jQuery(this).data('uploader-button-text'),
},
multiple: false // Set to true to allow multiple files to be selected
});
// When an image is selected, run a callback.
file_frame.on('select', function () {
// We set multiple to false so only get one image from the uploader
attachment = file_frame.state().get('selection').first().toJSON();
// Do something with attachment.id and/or attachment.url here
$wrap.find('.media-preview-wrap').html('<img src="' + attachment.url + '"/>');
$wrap.find('input.ubermenu-menu-item-setting-input').val(attachment.id).trigger('change');
//$wrap.find( '.ubermenu-edit-media-button' ).attr( 'href' , attachment.id );
//wp-admin/post.php?post=274&action=edit
});
// Finally, open the modal
file_frame.open();
});
$settingswrap.on('click', '.ubermenu-media-wrapper .ubermenu-remove-button', function (e) {
var $wrap = $(this).parents('.ubermenu-media-wrapper');
$wrap.find('.media-preview-wrap').html('');
$wrap.find('input.ubermenu-menu-item-setting-input').val('').trigger('change');
return false;
});
/* Reset Settings */
$settingswrap.on('click', '.ubermenu-clear-settings', function (e) {
//Find the settings panel
$item_settings = $(this).parents('.ubermenu-menu-item-panel');
//Get the menu item ID
var menu_item_id = $item_settings.data('menu-item-target-id');
//Remove the data that the panel settings are loaded from
delete ubermenu_menu_item_data[menu_item_id];
//Remove the settings panel from the DOM
$item_settings.remove();
//Close the settings panel
$settingswrap.removeClass('ubermenu-menu-item-settings-open');
$('body').removeClass('ubermenu-settings-panel-is-open');
//Reset the current menu item ID
current_menu_item_id = false;
//Re-open the settings
$('#menu-item-' + menu_item_id).find('.ubermenu-settings-toggle').click();
//Flag as unsaved
var $panel = $('.ubermenu-menu-item-panel-menu-item-' + menu_item_id);
var $form = $panel.find('form.ubermenu-menu-item-settings-form');
$form.find('.ubermenu-menu-item-status').attr('class', 'ubermenu-menu-item-status ubermenu-menu-item-status-warning');
$form.find('.ubermenu-status-message').html('Settings have been cleared. Click <strong>Save Menu Item</strong> to complete setting reset.');
//Flag Menu Item
$('#menu-item-' + menu_item_id).addClass('ubermenu-unsaved');
});
}
})(jQuery);