Add massive collection of CSS, JavaScript and theme assets that were previously excluded: **CSS Files (681 total):** - HVAC plugin-specific styles (hvac-*.css): 34 files including dashboard, certificates, registration, mobile nav, accessibility fixes, animations, and welcome popup - Theme framework files (Astra, builder systems, layouts): 200+ files - Plugin compatibility styles (WooCommerce, WPForms, Elementor, Contact Form 7): 150+ files - WordPress core and editor styles: 50+ files - Responsive and RTL language support: 200+ files **JavaScript Files (400+ total):** - HVAC plugin functionality (hvac-*.js): 27 files including menu systems, dashboard enhancements, profile sharing, mobile responsive features, accessibility, and animations - Framework and library files: jQuery plugins, GSAP, AOS, Swiper, Chart.js, Lottie, Isotope - Plugin compatibility scripts: WPForms, WooCommerce, Elementor, Contact Form 7, LifterLMS - WordPress core functionality: customizer, admin, block editor compatibility - Third-party integrations: Stripe, SMTP, analytics, search functionality **Assets:** - Certificate background images and logos - Comprehensive theme styling infrastructure - Mobile-responsive design systems - Cross-browser compatibility assets - Performance-optimized minified versions **Updated .gitignore:** - Fixed asset directory whitelisting patterns to properly include CSS/JS/images - Added proper directory structure recognition (!/assets/css/, !/assets/js/, etc.) - Maintains security by excluding sensitive files while including essential assets This commit provides the complete frontend infrastructure needed for: - Full theme functionality and styling - Plugin feature implementations - Mobile responsiveness and accessibility - Cross-browser compatibility - Performance optimization - Developer workflow support
196 lines
7.2 KiB
JavaScript
196 lines
7.2 KiB
JavaScript
window.addEventListener( 'DOMContentLoaded', uagbTimelineInit );
|
|
window.addEventListener( 'resize', uagbTimelineInit );
|
|
window.addEventListener( 'scroll', uagbTimelineInit );
|
|
document.addEventListener( 'UAGTimelineEditor', uagbTimelineInit );
|
|
// Callback function for all event listeners.
|
|
function uagbTimelineInit() {
|
|
const iframeEl = document.querySelector( `iframe[name='editor-canvas']` );
|
|
let mainDiv;
|
|
if ( iframeEl ) {
|
|
mainDiv = iframeEl.contentDocument.querySelectorAll( '.uagb-timeline' );
|
|
} else {
|
|
mainDiv = document.querySelectorAll( '.uagb-timeline' );
|
|
}
|
|
|
|
const timeline = mainDiv;
|
|
if ( timeline.length === 0 ) {
|
|
return;
|
|
}
|
|
|
|
for ( const content of timeline ) {
|
|
const lineInner = content.querySelector( '.uagb-timeline__line__inner' );
|
|
const lineOuter = content.querySelector( '.uagb-timeline__line' );
|
|
const iconClass = content.querySelectorAll( '.uagb-timeline__marker' );
|
|
const timelineField = content.querySelector( '.uagb-timeline__field:nth-last-child(2)' );
|
|
const cardLast = timelineField
|
|
? timelineField
|
|
: content.querySelector( '.block-editor-block-list__block:last-child' );
|
|
const timelineStartIcon = iconClass[ 0 ];
|
|
const timelineEndIcon = iconClass[ iconClass.length - 1 ];
|
|
|
|
setTimeout( () => {
|
|
lineOuter.style.top = timelineStartIcon?.offsetTop + 'px';
|
|
}, 300 );
|
|
const timelineCardHeight = cardLast?.offsetHeight;
|
|
|
|
if ( content.classList.contains( 'uagb-timeline__arrow-center' ) ) {
|
|
lineOuter.style.bottom = timelineEndIcon?.offsetTop + 'px';
|
|
} else if ( content.classList.contains( 'uagb-timeline__arrow-top' ) ) {
|
|
const topHeight = timelineCardHeight - timelineEndIcon?.offsetTop;
|
|
lineOuter.style.bottom = topHeight + 'px';
|
|
} else if ( content.classList.contains( 'uagb-timeline__arrow-bottom' ) ) {
|
|
const bottomHeight = timelineCardHeight - timelineEndIcon?.offsetTop;
|
|
lineOuter.style.bottom = bottomHeight + 'px';
|
|
}
|
|
|
|
const connectorHeight = 3 * iconClass[ 0 ]?.offsetHeight;
|
|
|
|
const viewportHeight = document?.documentElement?.clientHeight;
|
|
|
|
const viewportHeightHalf = viewportHeight / 2 + connectorHeight;
|
|
|
|
const body = document.body;
|
|
const html = document.documentElement;
|
|
|
|
const height = Math.max(
|
|
body.scrollHeight,
|
|
body.offsetHeight,
|
|
html.clientHeight,
|
|
html.scrollHeight,
|
|
html.offsetHeight
|
|
);
|
|
|
|
const timelineEndIconOffsetBottom = height - timelineEndIcon?.getBoundingClientRect()?.top;
|
|
|
|
const totalTimelineLineHeight =
|
|
height - timelineStartIcon?.getBoundingClientRect()?.top - timelineEndIconOffsetBottom;
|
|
|
|
const startFlag =
|
|
timelineStartIcon?.getBoundingClientRect()?.top +
|
|
window?.scrollY -
|
|
( window?.innerHeight - window?.innerHeight / 3 );
|
|
|
|
if ( startFlag < document?.documentElement?.scrollTop ) {
|
|
const tscrollPerc =
|
|
( ( document?.documentElement?.scrollTop - startFlag ) / totalTimelineLineHeight ) * 100;
|
|
const percHeight = ( totalTimelineLineHeight / 100 ) * tscrollPerc;
|
|
|
|
if ( percHeight < totalTimelineLineHeight + 60 ) {
|
|
lineInner.style.height = percHeight + 'px';
|
|
}
|
|
}
|
|
|
|
// Icon bg color and icon color
|
|
|
|
let timelineIconPos, timelineCardPos;
|
|
let timelineIconTop, timelineCardTop;
|
|
const timelineIcon = content.querySelectorAll( '.uagb-timeline__marker' );
|
|
|
|
let animateBorder = content.querySelectorAll( '.uagb-timeline__field' );
|
|
|
|
if ( animateBorder.length === 0 ) {
|
|
animateBorder = content.querySelectorAll( '.uagb-timeline__animate-border' );
|
|
}
|
|
|
|
for ( let j = 0; j < timelineIcon.length; j++ ) {
|
|
timelineIconPos = timelineIcon[ j ].lastElementChild.getBoundingClientRect().top + window.scrollY;
|
|
timelineCardPos = animateBorder[ j ].lastElementChild.getBoundingClientRect().top + window.scrollY;
|
|
|
|
timelineIconTop = timelineIconPos - document.documentElement.scrollTop;
|
|
timelineCardTop = timelineCardPos - document.documentElement.scrollTop;
|
|
|
|
if ( timelineCardTop < viewportHeightHalf ) {
|
|
animateBorder[ j ].classList.remove( 'out-view' );
|
|
animateBorder[ j ].classList.add( 'in-view' );
|
|
} else {
|
|
// Remove classes if element is below than half of viewport.
|
|
animateBorder[ j ].classList.add( 'out-view' );
|
|
animateBorder[ j ].classList.remove( 'in-view' );
|
|
}
|
|
|
|
if ( timelineIconTop < viewportHeightHalf ) {
|
|
// Add classes if element is above than half of viewport.
|
|
timelineIcon[ j ].classList.remove( 'uagb-timeline__out-view-icon' );
|
|
timelineIcon[ j ].classList.add( 'uagb-timeline__in-view-icon' );
|
|
} else {
|
|
// Remove classes if element is below than half of viewport.
|
|
timelineIcon[ j ].classList.add( 'uagb-timeline__out-view-icon' );
|
|
timelineIcon[ j ].classList.remove( 'uagb-timeline__in-view-icon' );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// eslint-disable-next-line no-unused-vars
|
|
function UAGBTimelineClasses( attributes, id ) {
|
|
const timeline = document.querySelectorAll( id );
|
|
|
|
if ( timeline.length === 0 ) {
|
|
return;
|
|
}
|
|
|
|
const deviceWidth = Math.max( window.screen.width, window.innerWidth );
|
|
|
|
for ( const content of timeline ) {
|
|
content.classList.remove(
|
|
'uagb-timeline__left-block',
|
|
'uagb-timeline__right-block',
|
|
'uagb-timeline__center-block'
|
|
);
|
|
|
|
let device = '';
|
|
|
|
if ( deviceWidth <= uagb_timeline_data.mobile_breakpoint ) {
|
|
device = 'Mobile';
|
|
} else if ( deviceWidth <= uagb_timeline_data.tablet_breakpoint ) {
|
|
device = 'Tablet';
|
|
}
|
|
|
|
if ( 'left' === attributes[ 'timelinAlignment' + device ] ) {
|
|
content.classList.add( 'uagb-timeline__left-block' );
|
|
} else if ( 'right' === attributes[ 'timelinAlignment' + device ] ) {
|
|
content.classList.add( 'uagb-timeline__right-block' );
|
|
} else {
|
|
content.classList.add( 'uagb-timeline__center-block' );
|
|
}
|
|
|
|
let timelineChild = content.querySelectorAll( '.wp-block-uagb-content-timeline-child' );
|
|
let childIndex = 0;
|
|
|
|
if ( 0 === timelineChild.length ) {
|
|
timelineChild = content.querySelectorAll( '.uagb-timeline__field' );
|
|
}
|
|
|
|
for ( const child of timelineChild ) {
|
|
child.classList.remove( 'uagb-timeline__left', 'uagb-timeline__right' );
|
|
const timelineMarker = child.querySelectorAll( '.uagb-timeline__marker' )[ 0 ];
|
|
timelineMarker.classList.remove( 'uagb-timeline__left', 'uagb-timeline__right' );
|
|
|
|
const timeLineEventInner = child.querySelectorAll( '.uagb-timeline__events-inner-new' )[ 0 ];
|
|
|
|
timeLineEventInner.classList.remove( 'uagb-timeline__day-right', 'uagb-timeline__day-left' );
|
|
|
|
if ( 'left' === attributes[ 'timelinAlignment' + device ] ) {
|
|
child.classList.add( 'uagb-timeline__left' );
|
|
timelineMarker.classList.add( 'uagb-timeline__left' );
|
|
timeLineEventInner.classList.add( 'uagb-timeline__day-left' );
|
|
} else if ( 'right' === attributes[ 'timelinAlignment' + device ] ) {
|
|
child.classList.add( 'uagb-timeline__right' );
|
|
timelineMarker.classList.add( 'uagb-timeline__left' );
|
|
timeLineEventInner.classList.add( 'uagb-timeline__day-right' );
|
|
} else if ( 'center' === attributes[ 'timelinAlignment' + device ] ) {
|
|
if ( childIndex % 2 === 0 ) {
|
|
child.classList.add( 'uagb-timeline__right' );
|
|
timelineMarker.classList.add( 'uagb-timeline__right' );
|
|
timeLineEventInner.classList.add( 'uagb-timeline__day-right' );
|
|
} else {
|
|
child.classList.add( 'uagb-timeline__left' );
|
|
timelineMarker.classList.add( 'uagb-timeline__left' );
|
|
timeLineEventInner.classList.add( 'uagb-timeline__day-left' );
|
|
}
|
|
}
|
|
|
|
childIndex++;
|
|
}
|
|
}
|
|
}
|