559 lines
12 KiB
JavaScript
559 lines
12 KiB
JavaScript
import { handleBackgroundOptionFor } from '../../../../static/js/customizer/sync/variables/background'
|
|
import ctEvents from 'ct-events'
|
|
import { updateAndSaveEl } from '../../../../static/js/customizer/sync'
|
|
import {
|
|
withKeys,
|
|
disableTransitionsStart,
|
|
disableTransitionsEnd,
|
|
responsiveClassesFor,
|
|
getRootSelectorFor,
|
|
assembleSelector,
|
|
mutateSelector,
|
|
} from '../../../../static/js/customizer/sync/helpers'
|
|
|
|
import { getRowBackgroundVariables } from './sync/background'
|
|
|
|
export const handleRowVariables = ({ itemId }) => ({
|
|
...getRowBackgroundVariables({ itemId }),
|
|
|
|
headerRowHeight: {
|
|
selector: assembleSelector(getRootSelectorFor({ itemId })),
|
|
variable: 'height',
|
|
responsive: true,
|
|
unit: 'px',
|
|
},
|
|
|
|
headerRowShadow: {
|
|
selector: assembleSelector(getRootSelectorFor({ itemId })),
|
|
type: 'box-shadow',
|
|
variable: 'theme-box-shadow',
|
|
forceOutput: true,
|
|
responsive: true,
|
|
},
|
|
|
|
headerRowBlur: {
|
|
selector: assembleSelector(getRootSelectorFor({ itemId })),
|
|
variable: 'theme-backdrop-blur',
|
|
responsive: true,
|
|
unit: 'px',
|
|
forceOutput: true,
|
|
},
|
|
|
|
...withKeys(
|
|
[
|
|
'headerRowTopBorder',
|
|
'transparentHeaderRowTopBorder',
|
|
'stickyHeaderRowTopBorder',
|
|
'headerRowTopBorderFullWidth',
|
|
],
|
|
[
|
|
{
|
|
selector: assembleSelector(getRootSelectorFor({ itemId })),
|
|
variable: 'theme-border-top',
|
|
type: 'border',
|
|
responsive: true,
|
|
|
|
fullValue: true,
|
|
|
|
extractValue: ({
|
|
headerRowTopBorder,
|
|
headerRowTopBorderFullWidth,
|
|
}) =>
|
|
headerRowTopBorderFullWidth === 'yes'
|
|
? headerRowTopBorder
|
|
: {
|
|
desktop: { style: 'none' },
|
|
tablet: { style: 'none' },
|
|
mobile: { style: 'none' },
|
|
},
|
|
},
|
|
|
|
{
|
|
selector: assembleSelector(
|
|
mutateSelector({
|
|
selector: getRootSelectorFor({ itemId }),
|
|
operation: 'suffix',
|
|
to_add: '> div',
|
|
})
|
|
),
|
|
variable: 'theme-border-top',
|
|
type: 'border',
|
|
responsive: true,
|
|
fullValue: true,
|
|
|
|
extractValue: ({
|
|
headerRowTopBorder,
|
|
headerRowTopBorderFullWidth,
|
|
}) =>
|
|
headerRowTopBorderFullWidth !== 'yes'
|
|
? headerRowTopBorder
|
|
: {
|
|
desktop: { style: 'none' },
|
|
tablet: { style: 'none' },
|
|
mobile: { style: 'none' },
|
|
},
|
|
},
|
|
|
|
{
|
|
selector: assembleSelector(
|
|
mutateSelector({
|
|
selector: getRootSelectorFor({ itemId }),
|
|
operation: 'el-prefix',
|
|
to_add: '[data-transparent-row="yes"]',
|
|
})
|
|
),
|
|
|
|
variable: 'theme-border-top',
|
|
type: 'border',
|
|
responsive: true,
|
|
|
|
fullValue: true,
|
|
|
|
extractValue: ({
|
|
transparentHeaderRowTopBorder,
|
|
headerRowTopBorderFullWidth,
|
|
}) =>
|
|
headerRowTopBorderFullWidth === 'yes'
|
|
? transparentHeaderRowTopBorder
|
|
: {
|
|
desktop: { style: 'none' },
|
|
tablet: { style: 'none' },
|
|
mobile: { style: 'none' },
|
|
},
|
|
},
|
|
|
|
{
|
|
selector: assembleSelector(
|
|
mutateSelector({
|
|
selector: mutateSelector({
|
|
selector: getRootSelectorFor({ itemId }),
|
|
operation: 'suffix',
|
|
to_add: '> div',
|
|
}),
|
|
operation: 'el-prefix',
|
|
to_add: '[data-transparent-row="yes"]',
|
|
})
|
|
),
|
|
|
|
variable: 'theme-border-top',
|
|
type: 'border',
|
|
responsive: true,
|
|
fullValue: true,
|
|
|
|
extractValue: ({
|
|
transparentHeaderRowTopBorder,
|
|
headerRowTopBorderFullWidth,
|
|
}) =>
|
|
headerRowTopBorderFullWidth !== 'yes'
|
|
? transparentHeaderRowTopBorder
|
|
: {
|
|
desktop: { style: 'none' },
|
|
tablet: { style: 'none' },
|
|
mobile: { style: 'none' },
|
|
},
|
|
},
|
|
|
|
{
|
|
selector: assembleSelector(
|
|
mutateSelector({
|
|
selector: getRootSelectorFor({ itemId }),
|
|
to_add: '[data-sticky*="yes"]',
|
|
})
|
|
),
|
|
|
|
variable: 'theme-border-top',
|
|
type: 'border',
|
|
responsive: true,
|
|
|
|
fullValue: true,
|
|
|
|
extractValue: ({
|
|
stickyHeaderRowTopBorder,
|
|
headerRowTopBorderFullWidth,
|
|
}) =>
|
|
headerRowTopBorderFullWidth === 'yes'
|
|
? stickyHeaderRowTopBorder
|
|
: {
|
|
desktop: { style: 'none' },
|
|
tablet: { style: 'none' },
|
|
mobile: { style: 'none' },
|
|
},
|
|
},
|
|
|
|
{
|
|
selector: assembleSelector(
|
|
mutateSelector({
|
|
selector: mutateSelector({
|
|
selector: getRootSelectorFor({ itemId }),
|
|
operation: 'suffix',
|
|
to_add: '> div',
|
|
}),
|
|
to_add: '[data-sticky*="yes"]',
|
|
})
|
|
),
|
|
|
|
variable: 'theme-border-top',
|
|
type: 'border',
|
|
responsive: true,
|
|
fullValue: true,
|
|
|
|
extractValue: ({
|
|
stickyHeaderRowTopBorder,
|
|
headerRowTopBorderFullWidth,
|
|
}) =>
|
|
headerRowTopBorderFullWidth !== 'yes'
|
|
? stickyHeaderRowTopBorder
|
|
: {
|
|
desktop: { style: 'none' },
|
|
tablet: { style: 'none' },
|
|
mobile: { style: 'none' },
|
|
},
|
|
},
|
|
]
|
|
),
|
|
|
|
...withKeys(
|
|
[
|
|
'headerRowBottomBorder',
|
|
'transparentHeaderRowBottomBorder',
|
|
'stickyHeaderRowBottomBorder',
|
|
'headerRowBottomBorderFullWidth',
|
|
],
|
|
[
|
|
{
|
|
selector: assembleSelector(getRootSelectorFor({ itemId })),
|
|
variable: 'theme-border-bottom',
|
|
type: 'border',
|
|
responsive: true,
|
|
|
|
fullValue: true,
|
|
|
|
extractValue: ({
|
|
headerRowBottomBorder,
|
|
headerRowBottomBorderFullWidth,
|
|
}) =>
|
|
headerRowBottomBorderFullWidth === 'yes'
|
|
? headerRowBottomBorder
|
|
: {
|
|
desktop: { style: 'none' },
|
|
tablet: { style: 'none' },
|
|
mobile: { style: 'none' },
|
|
},
|
|
},
|
|
|
|
{
|
|
selector: assembleSelector(
|
|
mutateSelector({
|
|
selector: getRootSelectorFor({ itemId }),
|
|
operation: 'suffix',
|
|
to_add: '> div',
|
|
})
|
|
),
|
|
variable: 'theme-border-bottom',
|
|
type: 'border',
|
|
responsive: true,
|
|
fullValue: true,
|
|
|
|
extractValue: ({
|
|
headerRowBottomBorder,
|
|
headerRowBottomBorderFullWidth,
|
|
}) =>
|
|
headerRowBottomBorderFullWidth !== 'yes'
|
|
? headerRowBottomBorder
|
|
: {
|
|
desktop: { style: 'none' },
|
|
tablet: { style: 'none' },
|
|
mobile: { style: 'none' },
|
|
},
|
|
},
|
|
|
|
{
|
|
selector: assembleSelector(
|
|
mutateSelector({
|
|
selector: getRootSelectorFor({ itemId }),
|
|
operation: 'el-prefix',
|
|
to_add: '[data-transparent-row="yes"]',
|
|
})
|
|
),
|
|
|
|
variable: 'theme-border-bottom',
|
|
type: 'border',
|
|
responsive: true,
|
|
|
|
fullValue: true,
|
|
|
|
extractValue: ({
|
|
transparentHeaderRowBottomBorder,
|
|
headerRowBottomBorderFullWidth,
|
|
}) =>
|
|
headerRowBottomBorderFullWidth === 'yes'
|
|
? transparentHeaderRowBottomBorder
|
|
: {
|
|
desktop: { style: 'none' },
|
|
tablet: { style: 'none' },
|
|
mobile: { style: 'none' },
|
|
},
|
|
},
|
|
|
|
{
|
|
selector: assembleSelector(
|
|
mutateSelector({
|
|
selector: mutateSelector({
|
|
selector: getRootSelectorFor({ itemId }),
|
|
operation: 'suffix',
|
|
to_add: '> div',
|
|
}),
|
|
operation: 'el-prefix',
|
|
to_add: '[data-transparent-row="yes"]',
|
|
})
|
|
),
|
|
|
|
variable: 'theme-border-bottom',
|
|
type: 'border',
|
|
responsive: true,
|
|
fullValue: true,
|
|
|
|
extractValue: ({
|
|
transparentHeaderRowBottomBorder,
|
|
headerRowBottomBorderFullWidth,
|
|
}) =>
|
|
headerRowBottomBorderFullWidth !== 'yes'
|
|
? transparentHeaderRowBottomBorder
|
|
: {
|
|
desktop: { style: 'none' },
|
|
tablet: { style: 'none' },
|
|
mobile: { style: 'none' },
|
|
},
|
|
},
|
|
|
|
{
|
|
selector: assembleSelector(
|
|
mutateSelector({
|
|
selector: getRootSelectorFor({ itemId }),
|
|
to_add: '[data-sticky*="yes"]',
|
|
})
|
|
),
|
|
|
|
variable: 'theme-border-bottom',
|
|
type: 'border',
|
|
responsive: true,
|
|
|
|
fullValue: true,
|
|
|
|
extractValue: ({
|
|
stickyHeaderRowBottomBorder,
|
|
headerRowBottomBorderFullWidth,
|
|
}) =>
|
|
headerRowBottomBorderFullWidth === 'yes'
|
|
? stickyHeaderRowBottomBorder
|
|
: {
|
|
desktop: { style: 'none' },
|
|
tablet: { style: 'none' },
|
|
mobile: { style: 'none' },
|
|
},
|
|
},
|
|
|
|
{
|
|
selector: assembleSelector(
|
|
mutateSelector({
|
|
selector: mutateSelector({
|
|
selector: getRootSelectorFor({ itemId }),
|
|
operation: 'suffix',
|
|
to_add: '> div',
|
|
}),
|
|
to_add: '[data-sticky*="yes"]',
|
|
})
|
|
),
|
|
|
|
variable: 'theme-border-bottom',
|
|
type: 'border',
|
|
responsive: true,
|
|
fullValue: true,
|
|
|
|
extractValue: ({
|
|
stickyHeaderRowBottomBorder,
|
|
headerRowBottomBorderFullWidth,
|
|
}) =>
|
|
headerRowBottomBorderFullWidth !== 'yes'
|
|
? stickyHeaderRowBottomBorder
|
|
: {
|
|
desktop: { style: 'none' },
|
|
tablet: { style: 'none' },
|
|
mobile: { style: 'none' },
|
|
},
|
|
},
|
|
]
|
|
),
|
|
|
|
// Transparent
|
|
transparentHeaderRowShadow: {
|
|
selector: assembleSelector(
|
|
mutateSelector({
|
|
selector: getRootSelectorFor({ itemId }),
|
|
operation: 'el-prefix',
|
|
to_add: '[data-transparent-row="yes"]',
|
|
})
|
|
),
|
|
|
|
type: 'box-shadow',
|
|
variable: 'theme-box-shadow',
|
|
forceOutput: true,
|
|
responsive: true,
|
|
},
|
|
|
|
transparentHeaderRowBlur: {
|
|
selector: assembleSelector(
|
|
mutateSelector({
|
|
selector: getRootSelectorFor({ itemId }),
|
|
operation: 'el-prefix',
|
|
to_add: '[data-transparent-row="yes"]',
|
|
})
|
|
),
|
|
|
|
variable: 'theme-backdrop-blur',
|
|
responsive: true,
|
|
unit: 'px',
|
|
forceOutput: true,
|
|
},
|
|
|
|
// Sticky
|
|
stickyHeaderRowShadow: {
|
|
selector: assembleSelector(
|
|
mutateSelector({
|
|
selector: getRootSelectorFor({ itemId }),
|
|
to_add: '[data-sticky*="yes"]',
|
|
})
|
|
),
|
|
|
|
type: 'box-shadow',
|
|
variable: 'theme-box-shadow',
|
|
forceOutput: true,
|
|
responsive: true,
|
|
},
|
|
|
|
stickyHeaderRowBlur: {
|
|
selector: assembleSelector(
|
|
mutateSelector({
|
|
selector: getRootSelectorFor({ itemId }),
|
|
to_add: '[data-sticky*="yes"]',
|
|
})
|
|
),
|
|
variable: 'theme-backdrop-blur',
|
|
responsive: true,
|
|
unit: 'px',
|
|
forceOutput: true,
|
|
},
|
|
|
|
header_row_padding: {
|
|
selector: assembleSelector(getRootSelectorFor({ itemId })),
|
|
type: 'spacing',
|
|
variable: 'row-padding',
|
|
responsive: true,
|
|
},
|
|
|
|
header_row_border_radius: {
|
|
selector: assembleSelector(getRootSelectorFor({ itemId })),
|
|
type: 'spacing',
|
|
variable: 'row-border-radius',
|
|
responsive: true,
|
|
},
|
|
})
|
|
|
|
export const handleRowOptions = ({
|
|
selector,
|
|
changeDescriptor: { optionId, optionValue, values },
|
|
}) => {
|
|
if (optionId === 'headerRowVisibility') {
|
|
updateAndSaveEl(selector, (el) => {
|
|
responsiveClassesFor(optionValue, el)
|
|
})
|
|
}
|
|
|
|
if (optionId === 'headerRowHeight') {
|
|
ctEvents.trigger('blocksy:sticky:compute')
|
|
}
|
|
|
|
if (optionId === 'headerRowWidth') {
|
|
updateAndSaveEl(
|
|
selector,
|
|
(el) => {
|
|
el.classList.add('ct-disable-transitions')
|
|
|
|
if (!optionValue.desktop) {
|
|
optionValue = {
|
|
desktop: optionValue,
|
|
mobile: optionValue,
|
|
}
|
|
}
|
|
|
|
el.firstElementChild.classList.remove(
|
|
'ct-container',
|
|
'ct-container-fluid'
|
|
)
|
|
|
|
el.dataset.row = `${el.dataset.row.split(':')[0]}${
|
|
optionValue.desktop === 'boxed' ? ':boxed' : ''
|
|
}`
|
|
|
|
el.firstElementChild.classList.add(
|
|
optionValue.desktop === 'fluid'
|
|
? 'ct-container-fluid'
|
|
: 'ct-container'
|
|
)
|
|
|
|
setTimeout(() => {
|
|
el.classList.remove('ct-disable-transitions')
|
|
}, 100)
|
|
},
|
|
{ onlyView: 'desktop' }
|
|
)
|
|
|
|
updateAndSaveEl(
|
|
selector,
|
|
(el) => {
|
|
el.classList.add('ct-disable-transitions')
|
|
if (!optionValue.desktop) {
|
|
optionValue = {
|
|
desktop: optionValue,
|
|
mobile: optionValue,
|
|
}
|
|
}
|
|
|
|
el.firstElementChild.classList.remove(
|
|
'ct-container',
|
|
'ct-container-fluid'
|
|
)
|
|
|
|
el.dataset.row = `${el.dataset.row.split(':')[0]}${
|
|
optionValue.mobile === 'boxed' ? ':boxed' : ''
|
|
}`
|
|
|
|
el.firstElementChild.classList.add(
|
|
optionValue.mobile === 'fluid'
|
|
? 'ct-container-fluid'
|
|
: 'ct-container'
|
|
)
|
|
|
|
setTimeout(() => {
|
|
el.classList.remove('ct-disable-transitions')
|
|
}, 100)
|
|
},
|
|
{ onlyView: 'mobile' }
|
|
)
|
|
}
|
|
}
|
|
|
|
ctEvents.on(
|
|
'ct:header:sync:collect-variable-descriptors',
|
|
(variableDescriptors) => {
|
|
variableDescriptors['middle-row'] = handleRowVariables
|
|
}
|
|
)
|
|
|
|
ctEvents.on('ct:header:sync:item:middle-row', (changeDescriptor) =>
|
|
handleRowOptions({
|
|
selector: '[data-row*="middle"]',
|
|
changeDescriptor,
|
|
})
|
|
)
|