Files
hub-insurance/wp-content/plugins/admin-site-enhancements/assets/js/custom-admin-menu.js
T
2026-07-02 15:54:39 -06:00

127 lines
3.9 KiB
JavaScript

(function( $ ) {
'use strict';
/**
* Get an element by ID without using CSS selector parsing.
*
* This avoids jQuery selector syntax errors when IDs contain percent-encoded
* sequences (e.g. %e3%83...) which can happen for multibyte site languages.
*
* @param {string} id Element ID (without '#').
* @return {Object} jQuery object (empty set when not found).
*/
function asenhaGetById( id ) {
var el = document.getElementById( id );
return el ? $( el ) : $();
}
// Get localized strings with fallback to empty object
var strings = (typeof amoPageVars !== 'undefined' && amoPageVars.strings) ? amoPageVars.strings : {};
$(document).ready( function() {
// ----- Menu Ordering -----
// Initialize sortable elements for parent menu items: https://api.jqueryui.com/sortable/
$('#custom-admin-menu').sortable({
items: '> li',
opacity: 0.6,
placeholder: 'sortable-placeholder',
tolerance: 'pointer',
revert: 250
});
// Get the default/current menu order
let menuOrder = $('#custom-admin-menu').sortable("toArray").toString();
// Set hidden input value for saving in options
document.getElementById('custom_menu_order').value = menuOrder;
// Save custom order into a comma-separated string, triggerred after each drag and drop of menu item
// https://api.jqueryui.com/sortable/#event-update
// https://api.jqueryui.com/sortable/#method-toArray
$('#custom-admin-menu').on( 'sortupdate', function( event, ui) {
// Get the updated menu order
let menuOrder = $('#custom-admin-menu').sortable("toArray").toString();
// Set hidden input value for saving in options
document.getElementById('custom_menu_order').value = menuOrder;
});
// ----- Parent Menu Item Hiding -----
// Prepare constant to store IDs of menu items that will be hidden
if ( document.getElementById('custom_menu_hidden') != null ) {
var hiddenMenuItems = document.getElementById('custom_menu_hidden').value.split(","); // array
} else {
var hiddenMenuItems = []; // array
}
// Detect which menu items are being checked. Ref: https://stackoverflow.com/a/3871602
Array.from(document.getElementsByClassName('parent-menu-hide-checkbox')).forEach(function(item,index,array) {
item.addEventListener('click', event => {
if (event.target.checked) {
// Add ID of menu item to array
hiddenMenuItems.push(event.target.dataset.menuItemId);
} else {
// Remove ID of menu item from array
const start = hiddenMenuItems.indexOf(event.target.dataset.menuItemId);
const deleteCount = 1;
hiddenMenuItems.splice(start, deleteCount);
}
// Set hidden input value
document.getElementById('custom_menu_hidden').value = hiddenMenuItems;
});
});
// Clicking on header save button
$('#amo-save-changes').click( function(e) {
e.preventDefault();
// Prepare variable to store ID-Title pairs of menu items
var customMenuTitles = []; // empty array
// Initialize other variables
var menuItemId = '';
var customTitle = '';
// Save default/custom title values. Ref: https://stackoverflow.com/a/3871602
Array.from(document.getElementsByClassName('menu-item-custom-title')).forEach(function(item,index,array) {
menuItemId = item.dataset.menuItemId;
customTitle = item.value;
customMenuTitles.push(menuItemId + '__' + customTitle);
});
// Set hidden input value
document.getElementById('custom_menu_titles').value = customMenuTitles;
});
}); // End of $(document).ready()
})( jQuery );