feat: initial ACRIB WordPress deployment
- WordPress 6.9.4 (es_ES) with Kadence theme - Homepage: Hero, La Asociación, Pilares, Beneficios, Eventos, Miembros, Hazte Miembro, Contacto - Brand identity: #13294b navy, #a12932 burgundy, #c69c48 gold - Fonts: Raleway (headings) + Source Sans 3 (body) + Lato (UI) - Plugins: Kadence Blocks, Polylang, Contact Form 7 - Custom CSS with full brand styling and responsive layout - HTTPS enforced via wp-config.php proxy detection
This commit is contained in:
220
wp-content/plugins/polylang/js/build/nav-menu.js
Normal file
220
wp-content/plugins/polylang/js/build/nav-menu.js
Normal file
@@ -0,0 +1,220 @@
|
||||
/**
|
||||
* Handles the options in the language switcher nav menu metabox.
|
||||
*
|
||||
* @package Polylang
|
||||
*/
|
||||
|
||||
const pllNavMenu = {
|
||||
/**
|
||||
* The element wrapping the menu elements.
|
||||
*
|
||||
* @member {HTMLElement|null}
|
||||
*/
|
||||
wrapper: null,
|
||||
|
||||
/**
|
||||
* Init.
|
||||
*/
|
||||
init: () => {
|
||||
if ( document.readyState !== 'loading' ) {
|
||||
pllNavMenu.ready();
|
||||
} else {
|
||||
document.addEventListener( 'DOMContentLoaded', pllNavMenu.ready );
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Called when the DOM is ready. Attaches the events to the wrapper.
|
||||
*/
|
||||
ready: () => {
|
||||
pllNavMenu.wrapper = document.getElementById( 'menu-to-edit' );
|
||||
|
||||
if ( ! pllNavMenu.wrapper ) {
|
||||
return;
|
||||
}
|
||||
|
||||
pllNavMenu.wrapper.addEventListener( 'click', pllNavMenu.printMetabox );
|
||||
pllNavMenu.wrapper.addEventListener( 'change', pllNavMenu.ensureContent );
|
||||
pllNavMenu.wrapper.addEventListener( 'change', pllNavMenu.showHideRows );
|
||||
},
|
||||
|
||||
printMetabox: {
|
||||
/**
|
||||
* Event callback that prints our checkboxes in the language switcher.
|
||||
*
|
||||
* @param {Event} event The event.
|
||||
*/
|
||||
handleEvent: ( event ) => {
|
||||
if ( ! event.target.classList.contains( 'item-edit' ) ) {
|
||||
// Not clicking on a Edit arrow button.
|
||||
return;
|
||||
}
|
||||
|
||||
const metabox = event.target.closest( '.menu-item' ).querySelector( '.menu-item-settings' );
|
||||
|
||||
if ( ! metabox?.id ) {
|
||||
// Should not happen.
|
||||
return;
|
||||
}
|
||||
|
||||
if ( ! metabox.querySelectorAll( 'input[value="#pll_switcher"][type=text]' ).length ) {
|
||||
// Not our metabox, or already replaced.
|
||||
return;
|
||||
}
|
||||
|
||||
// Remove default fields we don't need.
|
||||
[ ...metabox.children ].forEach( ( el ) => {
|
||||
if ( 'P' === el.nodeName && ! el.classList.contains( 'field-move' ) ) {
|
||||
el.remove();
|
||||
}
|
||||
} );
|
||||
|
||||
const t = pllNavMenu.printMetabox;
|
||||
const itemId = Number( metabox.id.replace( 'menu-item-settings-', '' ) );
|
||||
|
||||
metabox.append( t.createHiddenInput( 'title', itemId, pll_data.title ) ); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.append
|
||||
metabox.append( t.createHiddenInput( 'url', itemId, '#pll_switcher' ) ); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.append
|
||||
metabox.append( t.createHiddenInput( 'pll-detect', itemId, 1 ) ); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.append
|
||||
|
||||
const ids = Array( 'hide_if_no_translation', 'hide_current', 'force_home', 'show_flags', 'show_names', 'dropdown' ); // Reverse order.
|
||||
const isValDefined = typeof( pll_data.val[ itemId ] ) !== 'undefined';
|
||||
|
||||
ids.forEach( ( optionName ) => {
|
||||
// Create the checkbox's wrapper.
|
||||
const inputWrapper = t.createElement( 'p', { class: 'description' } );
|
||||
|
||||
if ( 'hide_current' === optionName && isValDefined && 1 === pll_data.val[ itemId ].dropdown ) {
|
||||
// Hide the `hide_current` checkbox if `dropdown` is checked.
|
||||
inputWrapper.classList.add( 'hidden' );
|
||||
}
|
||||
|
||||
metabox.prepend( inputWrapper ); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.prepend
|
||||
|
||||
// Create the checkbox's label.
|
||||
const inputId = `edit-menu-item-${ optionName }-${ itemId }`;
|
||||
const label = t.createElement( 'label', { 'for': inputId } );
|
||||
label.innerText = ` ${ pll_data.strings[ optionName ] }`;
|
||||
|
||||
inputWrapper.append( label ); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.append
|
||||
|
||||
// Create the checkbox.
|
||||
const cb = t.createElement( 'input', {
|
||||
type: 'checkbox',
|
||||
id: inputId,
|
||||
name: `menu-item-${ optionName }[${ itemId }]`,
|
||||
value: 1,
|
||||
} );
|
||||
|
||||
if ( ( isValDefined && 1 === pll_data.val[ itemId ][ optionName ] ) || ( ! isValDefined && 'show_names' === optionName ) ) { // `show_names` as default value.
|
||||
cb.checked = true;
|
||||
}
|
||||
|
||||
label.prepend( cb ); // phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.prepend
|
||||
} );
|
||||
},
|
||||
|
||||
/**
|
||||
* Creates and returns a `<input type=hidden"/>` element.
|
||||
*
|
||||
* @param {string} id An identifier for this input. It will be part of the final `id` attribute.
|
||||
* @param {number} itemId The ID of the menu element (post ID).
|
||||
* @param {string|number} value The input's value.
|
||||
* @return {HTMLElement} The input element.
|
||||
*/
|
||||
createHiddenInput: ( id, itemId, value ) => {
|
||||
return pllNavMenu.printMetabox.createElement( 'input', {
|
||||
type: 'hidden',
|
||||
id: `edit-menu-item-${ id }-${ itemId }`,
|
||||
name: `menu-item-${ id }[${ itemId }]`,
|
||||
value: value,
|
||||
} );
|
||||
},
|
||||
|
||||
/**
|
||||
* Creates and returns an element.
|
||||
*
|
||||
* @param {string} type Element's type.
|
||||
* @param {Object} atts Element's attributes.
|
||||
* @return {HTMLElement} The element.
|
||||
*/
|
||||
createElement: ( type, atts ) => {
|
||||
const el = document.createElement( type );
|
||||
for ( const [ key, value ] of Object.entries( atts ) ) {
|
||||
el.setAttribute( key, value );
|
||||
}
|
||||
return el;
|
||||
},
|
||||
},
|
||||
|
||||
ensureContent: {
|
||||
regExpr: new RegExp( /^edit-menu-item-show_(names|flags)-(\d+)$/ ),
|
||||
|
||||
/**
|
||||
* Event callback that disallows unchecking both `show_names` and `show_flags`.
|
||||
*
|
||||
* @param {Event} event The event.
|
||||
*/
|
||||
handleEvent: ( event ) => {
|
||||
if ( ! event.target.id || event.target.checked ) {
|
||||
// Now checked, nothing to do.
|
||||
return;
|
||||
}
|
||||
|
||||
const matches = event.target.id.match( pllNavMenu.ensureContent.regExpr );
|
||||
|
||||
if ( ! matches ) {
|
||||
// Not the checkbox we want.
|
||||
return;
|
||||
}
|
||||
|
||||
// Check the other checkbox.
|
||||
const [ , type, id ] = matches;
|
||||
const otherType = 'names' === type ? 'flags' : 'names';
|
||||
document.getElementById( `edit-menu-item-show_${ otherType }-${ id }` ).checked = true;
|
||||
},
|
||||
},
|
||||
|
||||
showHideRows: {
|
||||
regExpr: new RegExp( /^edit-menu-item-dropdown-(\d+)$/ ),
|
||||
|
||||
/**
|
||||
* Event callback that shows or hides the `hide_current` checkbox when `dropdown` is checked.
|
||||
*
|
||||
* @param {Event} event The event.
|
||||
*/
|
||||
handleEvent: ( event ) => {
|
||||
if ( ! event.target.id ) {
|
||||
// Not the checkbox we want.
|
||||
return;
|
||||
}
|
||||
|
||||
const matches = event.target.id.match( pllNavMenu.showHideRows.regExpr );
|
||||
|
||||
if ( ! matches ) {
|
||||
// Not the checkbox we want.
|
||||
return;
|
||||
}
|
||||
|
||||
const hideCb = document.getElementById( `edit-menu-item-hide_current-${ matches[1] }` );
|
||||
|
||||
if ( ! hideCb ) {
|
||||
// Should not happen.
|
||||
return;
|
||||
}
|
||||
|
||||
const description = hideCb.closest( '.description' );
|
||||
|
||||
// Hide or show.
|
||||
description.classList.toggle( 'hidden', event.target.checked );
|
||||
|
||||
if ( event.target.checked ) {
|
||||
// Uncheck after hiding.
|
||||
hideCb.checked = false;
|
||||
hideCb.dispatchEvent( new Event( 'change' ) );
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
pllNavMenu.init();
|
||||
|
||||
Reference in New Issue
Block a user