oont-contents/plugins/astra-addon/addons/advanced-search/assets/js/unminified/advanced-search.js
2025-02-08 15:10:23 +01:00

217 lines
6.5 KiB
JavaScript

/**
* Advanced Search Styling
*
* @package Astra Addon
* @since 1.4.8
*/
( function() {
function body_iphone_classes() {
var iphone = ( navigator.userAgent.match(/iPhone/i) == 'iPhone' ) ? 'iphone' : '';
var ipod = ( navigator.userAgent.match(/iPod/i) == 'iPod' ) ? 'ipod' : '';
document.body.className += ' ' + iphone;
document.body.className += ' ' + ipod;
}
body_iphone_classes();
function remove_style_class( style ) {
var allClasses = document.body.className;
allClasses = allClasses.replace( style, '' );
document.body.className = allClasses;
}
function add_style_class( style ) {
document.body.className += ' ' + style;
}
// Helper Function.
function fade_in( element ) {
element.style.display = 'block';
setTimeout(function() {
element.style.opacity = 1;
}, 1);
}
function fade_out( element ) {
element.style.opacity = '';
setTimeout(function() {
element.style.display = '';
}, 200);
}
function header_cover_form_height( current_header_cover_form ) {
// Primary header cover search.
if ( document.body.classList.contains('ast-header-break-point') ) {
var site_navigation = document.querySelector( '.main-navigation' );
var main_header_bar = document.querySelector( '.main-header-bar' );
if( null !== main_header_bar && null !== site_navigation ) {
var site_navigation_outer_height = site_navigation.offsetHeight;
var main_header_outer_height = main_header_bar.offsetHeight;
// Have a navigation outer height.
// And primary header NOT have the `No Toggle` style.
if( site_navigation_outer_height && ( ! document.body.classList.contains('ast-no-toggle-menu-enable') ) ) {
var search_height = parseFloat(site_navigation_outer_height) - parseFloat(main_header_outer_height);
} else {
var search_height = parseFloat(main_header_outer_height);
}
current_header_cover_form.style.maxHeight = Math.abs( search_height ) + "px";
}
}
}
function header_builder_cover_form_height( current_header_cover_form ) {
// Primary header cover search.
if ( document.body.classList.contains('ast-header-break-point') ) {
var site_navigation = document.querySelector( '.main-navigation' );
var main_header_bar = document.querySelector( '.main-header-bar' );
var mobile_header_bar = document.querySelector( '.ast-mobile-header-wrap' );
if( null !== main_header_bar && null !== site_navigation ) {
var site_navigation_outer_height = site_navigation.offsetHeight;
var main_header_outer_height = main_header_bar.offsetHeight;
var mobile_header_outer_height = mobile_header_bar.offsetHeight;
// Have a navigation outer height.
// And primary header NOT have the `No Toggle` style.
if( site_navigation_outer_height && ( ! document.body.classList.contains('ast-no-toggle-menu-enable') ) ) {
var search_height = parseFloat(site_navigation_outer_height) - parseFloat(main_header_outer_height);
} else {
var search_height = parseFloat(main_header_outer_height);
}
if ( current_header_cover_form.parentNode.classList.contains( 'ast-mobile-header-wrap' ) ) {
var search_height = parseFloat(mobile_header_outer_height);
}
current_header_cover_form.style.maxHeight = Math.abs( search_height ) + "px";
}
}
}
var searchIcons = document.querySelectorAll( 'a.astra-search-icon:not(.slide-search)' );
for ( var i = 0; searchIcons.length > i; i++ ) {
searchIcons[i].onclick = function ( evt ) {
evt.preventDefault();
if ( ! evt ) {
evt = window.event;
}
if ( this.classList.contains( 'header-cover' ) ) {
var header_cover = document.querySelectorAll( '.ast-search-box.header-cover' ),
header_builder_active = astraAddon.is_header_builder_active || false;
for (var j = 0; j < header_cover.length; j++) {
var header_cover_icon = header_cover[j].parentNode.querySelectorAll( 'a.astra-search-icon' );
for (var k = 0; k < header_cover_icon.length; k++) {
if ( header_cover_icon[k] == this ) {
fade_in( header_cover[j] );
header_cover[j].querySelector( 'input.search-field' ).focus();
// Set header cover form height.
if ( header_builder_active ) {
header_builder_cover_form_height( header_cover[j] );
} else {
header_cover_form_height( header_cover[j] );
}
}
};
};
} else if ( this.classList.contains( 'full-screen' ) ) {
var fullScreen = document.getElementById( 'ast-seach-full-screen-form' );
if ( fullScreen.classList.contains( 'full-screen' ) ) {
fade_in( fullScreen );
add_style_class( 'full-screen' );
fullScreen.querySelector( 'input.search-field' ).focus();
}
}
};
};
/* Search Header Cover & Full Screen Close */
var closes = document.querySelectorAll( '.ast-search-box .close' );
for (var i = 0, len = closes.length; i < len; ++i) {
closes[i].onclick = function(evt){
if ( ! evt) { evt = window.event;
}
var self = this;
while ( 1 ) {
if ( self.parentNode.classList.contains( 'ast-search-box' ) ) {
fade_out( self.parentNode );
remove_style_class( 'full-screen' );
break;
} else if ( self.parentNode.classList.contains( 'site-header' ) ) {
break;
}
self = self.parentNode;
}
};
}
document.onkeydown = function ( evt ) {
if ( evt.keyCode == 27 ) {
var fullScreenForm = document.getElementById( 'ast-seach-full-screen-form' );
if ( null != fullScreenForm ) {
fade_out( fullScreenForm );
remove_style_class( 'full-screen' );
}
var header_cover = document.querySelectorAll( '.ast-search-box.header-cover' );
for (var j = 0; j < header_cover.length; j++) {
fade_out( header_cover[j] );
}
}
}
window.addEventListener("resize", function() {
if( 'BODY' !== document.activeElement.tagName ) {
return;
}
// Skip resize event when keyboard display event triggers on devices.
if( 'INPUT' != document.activeElement.tagName ) {
var header_cover = document.querySelectorAll( '.ast-search-box.header-cover' );
if ( ! document.body.classList.contains( 'ast-header-break-point' ) ) {
for (var j = 0; j < header_cover.length; j++) {
header_cover[j].style.maxHeight = '';
header_cover[j].style.opacity = '';
header_cover[j].style.display = '';
}
}
}
});
let closeIcon = document.getElementById("close");
if ( closeIcon ) {
closeIcon.addEventListener("keydown", function (event) {
if (event.key === "Enter") {
event.preventDefault();
this.click();
} else if (event.key === "Tab") {
event.preventDefault();
}
});
}
} )();