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
131 lines
5.6 KiB
JavaScript
131 lines
5.6 KiB
JavaScript
const triggerActiveAttributeButton = () => {
|
|
const activeAttributeButton = document.querySelector('.ast-variation-button-group .ast-single-variation.active');
|
|
if (activeAttributeButton) {
|
|
activeAttributeButton.click();
|
|
}
|
|
};
|
|
|
|
const productVariation = (image_slider_wrap) => {
|
|
const productSingleVariations = document.querySelectorAll( '.ast-single-variation' );
|
|
const productVariationReset = document.querySelector( '.reset_variations' );
|
|
|
|
// Resets Buttons on Clear Button.
|
|
if( productVariationReset ) {
|
|
productVariationReset.addEventListener( 'click', (e) => {
|
|
const allVariationButtons = document.querySelectorAll( '.ast-single-variation' );
|
|
allVariationButtons.forEach( element => {
|
|
element.classList.remove( 'active' );
|
|
element.style.opacity = '1';
|
|
element.style.pointerEvents = 'inherit';
|
|
} );
|
|
} );
|
|
}
|
|
|
|
if( productSingleVariations ) {
|
|
productSingleVariations.forEach( element => {
|
|
|
|
// Single Product Variation Buttons.
|
|
element.addEventListener( 'click', (e) => {
|
|
const allVariationButtons = e.target.closest( '.ast-variation-button-group' );
|
|
|
|
if( allVariationButtons ) {
|
|
const allVariationButtonSingle = allVariationButtons.querySelectorAll( '.ast-single-variation' );
|
|
if( allVariationButtonSingle ) {
|
|
allVariationButtonSingle.forEach( element => {
|
|
element.classList.remove( 'active' );
|
|
} );
|
|
}
|
|
}
|
|
|
|
const allVariationContainer = document.querySelector( '.ast-product-single-variable form .variations' )
|
|
|
|
if( allVariationContainer ) {
|
|
allVariationSelector = allVariationContainer.querySelectorAll( 'select' );
|
|
allVariationButton = allVariationContainer.querySelectorAll( '.ast-variation-button-group' );
|
|
|
|
// Enables and Disables Variation Buttons.
|
|
if( allVariationSelector && allVariationButton ) {
|
|
setTimeout( () => {
|
|
allVariationSelector.forEach( select => {
|
|
const options = select.querySelectorAll('option');
|
|
const node = [];
|
|
|
|
options.forEach( element => {
|
|
node.push( element.getAttribute('value') );
|
|
});
|
|
|
|
const buttons = select.nextElementSibling;
|
|
const buttonList = buttons !== null ? buttons.querySelectorAll('.ast-single-variation') : null;
|
|
|
|
if (buttonList !== null) {
|
|
buttonList.forEach(button => {
|
|
buttonList.forEach( element => {
|
|
if( ! node.includes( element.getAttribute('data-slug') ) ) {
|
|
element.style.opacity = '.5';
|
|
element.style.pointerEvents = 'none';
|
|
} else {
|
|
element.style.opacity = '1';
|
|
element.style.pointerEvents = 'inherit';
|
|
}
|
|
|
|
} ); });
|
|
}
|
|
|
|
} );
|
|
}, 100 );
|
|
}
|
|
}
|
|
|
|
const currentSlug = e.target.getAttribute( 'data-slug' );
|
|
const currentTarget = e.target.closest( 'td' ).querySelector( 'select' );
|
|
|
|
// On Variation Change Trigger Hidden Select.
|
|
if( currentSlug && currentTarget ) {
|
|
e.target.classList.add( 'active' );
|
|
currentTarget.value = currentSlug;
|
|
currentTarget.dispatchEvent( new Event( 'change', { 'bubbles': true } ) )
|
|
|
|
// Triggering the active Attribute button to ensure the state is updated
|
|
triggerActiveAttributeButton();
|
|
}
|
|
|
|
if (image_slider_wrap != null) {
|
|
image_slider_wrap.flexslider(0);
|
|
}
|
|
} );
|
|
} );
|
|
}
|
|
}
|
|
|
|
document.addEventListener("DOMContentLoaded", function(event) {
|
|
productVariation();
|
|
});
|
|
|
|
document.addEventListener( "astUpdateSingleProductVariations", function() {
|
|
productVariation();
|
|
});
|
|
|
|
// Composite product plugin compatibility.
|
|
jQuery('.composite_data').on('wc-composite-initializing', function (event, composite) {
|
|
composite.actions.add_action('component_scripts_initialized', function () {
|
|
productVariation();
|
|
}, 100)
|
|
});
|
|
|
|
// Adding Function to read URL parameters dynamically.
|
|
document.addEventListener("DOMContentLoaded", function () {
|
|
const urlParams = new URLSearchParams(window.location.search);
|
|
|
|
urlParams.forEach((value, key) => {
|
|
const variationButton = document.querySelector(`.ast-single-variation[data-slug="${value}"]`);
|
|
|
|
if (variationButton) {
|
|
variationButton.classList.add('active');
|
|
const selectElement = document.querySelector(`select[name="${key}"]`);
|
|
if (selectElement) {
|
|
selectElement.value = value;
|
|
selectElement.dispatchEvent(new Event('change', { bubbles: true }));
|
|
}
|
|
}
|
|
});
|
|
});
|