194 lines
4.4 KiB
JavaScript
194 lines
4.4 KiB
JavaScript
|
|
import { typographyOption } from '../../../../static/js/customizer/sync/variables/typography'
|
||
|
|
import ctEvents from 'ct-events'
|
||
|
|
import {
|
||
|
|
responsiveClassesFor,
|
||
|
|
getRootSelectorFor,
|
||
|
|
assembleSelector,
|
||
|
|
mutateSelector,
|
||
|
|
} from '../../../../static/js/customizer/sync/helpers'
|
||
|
|
|
||
|
|
import { maybePromoteScalarValueIntoResponsive } from 'customizer-sync-helpers/dist/promote-into-responsive'
|
||
|
|
|
||
|
|
export const handleMenuVariables = ({ itemId }) => ({
|
||
|
|
footerMenuItemsSpacing: {
|
||
|
|
selector: assembleSelector(
|
||
|
|
getRootSelectorFor({ itemId, panelType: 'footer' })
|
||
|
|
),
|
||
|
|
variable: 'menu-items-spacing',
|
||
|
|
responsive: true,
|
||
|
|
unit: 'px',
|
||
|
|
},
|
||
|
|
|
||
|
|
footerMenuAlignment: {
|
||
|
|
selector: assembleSelector(
|
||
|
|
mutateSelector({
|
||
|
|
selector: getRootSelectorFor({ itemId, panelType: 'footer' }),
|
||
|
|
operation: 'replace-last',
|
||
|
|
to_add: `[data-column="${itemId}"]`,
|
||
|
|
})
|
||
|
|
),
|
||
|
|
variable: 'horizontal-alignment',
|
||
|
|
responsive: true,
|
||
|
|
unit: '',
|
||
|
|
},
|
||
|
|
|
||
|
|
footerMenuVerticalAlignment: {
|
||
|
|
selector: assembleSelector(
|
||
|
|
mutateSelector({
|
||
|
|
selector: getRootSelectorFor({ itemId, panelType: 'footer' }),
|
||
|
|
operation: 'replace-last',
|
||
|
|
to_add: `[data-column="${itemId}"]`,
|
||
|
|
})
|
||
|
|
),
|
||
|
|
variable: 'vertical-alignment',
|
||
|
|
responsive: true,
|
||
|
|
unit: '',
|
||
|
|
},
|
||
|
|
|
||
|
|
...typographyOption({
|
||
|
|
id: 'footerMenuFont',
|
||
|
|
|
||
|
|
selector: assembleSelector(
|
||
|
|
mutateSelector({
|
||
|
|
selector: getRootSelectorFor({ itemId, panelType: 'footer' }),
|
||
|
|
operation: 'suffix',
|
||
|
|
to_add: 'ul',
|
||
|
|
})
|
||
|
|
),
|
||
|
|
}),
|
||
|
|
|
||
|
|
footerMenuFontColor: [
|
||
|
|
{
|
||
|
|
selector: assembleSelector(
|
||
|
|
mutateSelector({
|
||
|
|
selector: getRootSelectorFor({
|
||
|
|
itemId,
|
||
|
|
panelType: 'footer',
|
||
|
|
}),
|
||
|
|
operation: 'suffix',
|
||
|
|
to_add: '> ul > li > a',
|
||
|
|
})
|
||
|
|
),
|
||
|
|
variable: 'theme-link-initial-color',
|
||
|
|
type: 'color:default',
|
||
|
|
},
|
||
|
|
|
||
|
|
{
|
||
|
|
selector: assembleSelector(
|
||
|
|
mutateSelector({
|
||
|
|
selector: getRootSelectorFor({
|
||
|
|
itemId,
|
||
|
|
panelType: 'footer',
|
||
|
|
}),
|
||
|
|
operation: 'suffix',
|
||
|
|
to_add: '> ul > li > a',
|
||
|
|
})
|
||
|
|
),
|
||
|
|
variable: 'theme-link-hover-color',
|
||
|
|
type: 'color:hover',
|
||
|
|
},
|
||
|
|
|
||
|
|
{
|
||
|
|
selector: assembleSelector(
|
||
|
|
mutateSelector({
|
||
|
|
selector: getRootSelectorFor({
|
||
|
|
itemId,
|
||
|
|
panelType: 'footer',
|
||
|
|
}),
|
||
|
|
operation: 'suffix',
|
||
|
|
to_add: '> ul > li > a',
|
||
|
|
})
|
||
|
|
),
|
||
|
|
variable: 'theme-link-active-color',
|
||
|
|
type: 'color:active',
|
||
|
|
},
|
||
|
|
],
|
||
|
|
|
||
|
|
footerMenuMargin: {
|
||
|
|
selector: assembleSelector(
|
||
|
|
getRootSelectorFor({ itemId, panelType: 'footer' })
|
||
|
|
),
|
||
|
|
type: 'spacing',
|
||
|
|
variable: 'margin',
|
||
|
|
responsive: true,
|
||
|
|
important: true,
|
||
|
|
},
|
||
|
|
|
||
|
|
menu_items_direction: {
|
||
|
|
variable: 'menu-item-width',
|
||
|
|
selector: assembleSelector(
|
||
|
|
getRootSelectorFor({ itemId, panelType: 'footer' })
|
||
|
|
),
|
||
|
|
responsive: true,
|
||
|
|
unit: '',
|
||
|
|
extractValue: (val) => {
|
||
|
|
const { desktop, tablet, mobile } =
|
||
|
|
maybePromoteScalarValueIntoResponsive(val || 'horizontal')
|
||
|
|
|
||
|
|
return {
|
||
|
|
desktop: desktop === 'vertical' ? '100%' : 'initial',
|
||
|
|
tablet: tablet === 'vertical' ? '100%' : 'initial',
|
||
|
|
mobile: mobile === 'vertical' ? '100%' : 'initial',
|
||
|
|
}
|
||
|
|
},
|
||
|
|
},
|
||
|
|
})
|
||
|
|
|
||
|
|
export const handleMenuOptions = ({
|
||
|
|
selector,
|
||
|
|
changeDescriptor: { optionId, optionValue, values },
|
||
|
|
}) => {
|
||
|
|
const el = document.querySelector(selector)
|
||
|
|
|
||
|
|
if (optionId === 'stretch_menu' || optionId === 'menu_items_direction') {
|
||
|
|
el.removeAttribute('data-stretch')
|
||
|
|
|
||
|
|
el.classList.add('ct-disable-transitions')
|
||
|
|
|
||
|
|
let menu_items_direction = maybePromoteScalarValueIntoResponsive(
|
||
|
|
values.menu_items_direction || 'horizontal'
|
||
|
|
)
|
||
|
|
|
||
|
|
if (
|
||
|
|
values.stretch_menu === 'yes' &&
|
||
|
|
(menu_items_direction.desktop === 'horizontal' ||
|
||
|
|
menu_items_direction.tablet === 'horizontal' ||
|
||
|
|
menu_items_direction.mobile === 'horizontal')
|
||
|
|
) {
|
||
|
|
el.dataset.stretch = ''
|
||
|
|
}
|
||
|
|
|
||
|
|
setTimeout(() => {
|
||
|
|
el.classList.remove('ct-disable-transitions')
|
||
|
|
}, 500)
|
||
|
|
}
|
||
|
|
|
||
|
|
if (optionId === 'footer_menu_visibility') {
|
||
|
|
responsiveClassesFor(optionValue, el)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
ctEvents.on('ct:footer:sync:item:menu', (changeDescriptor) => {
|
||
|
|
const selector = '.ct-footer [data-id="menu"]'
|
||
|
|
handleMenuOptions({ selector, changeDescriptor })
|
||
|
|
})
|
||
|
|
|
||
|
|
ctEvents.on('ct:footer:sync:item:menu-secondary', (changeDescriptor) => {
|
||
|
|
const selector = '.ct-footer [data-id="menu-secondary"]'
|
||
|
|
handleMenuOptions({ selector, changeDescriptor })
|
||
|
|
})
|
||
|
|
|
||
|
|
ctEvents.on(
|
||
|
|
'ct:footer:sync:collect-variable-descriptors',
|
||
|
|
(variableDescriptors) => {
|
||
|
|
variableDescriptors['menu'] = handleMenuVariables
|
||
|
|
}
|
||
|
|
)
|
||
|
|
|
||
|
|
ctEvents.on(
|
||
|
|
'ct:footer:sync:collect-variable-descriptors',
|
||
|
|
(variableDescriptors) => {
|
||
|
|
variableDescriptors['menu-secondary'] = handleMenuVariables
|
||
|
|
}
|
||
|
|
)
|