1/*------------------------------------------------------------*/ 2// Header Scripts 3 4function header_scripts() { 5 6 var header = document.querySelector('.cc-header'); 7 var header_top = document.querySelector('.cc-header-top'); 8 var elementor_header = document.querySelector('.elementor-location-header'); 9 10 var header_color = ''; 11 var is_color_set = false; 12 var is_subnav_open = false; 13 14 var header_height = 0; 15 var header_top_height = parseInt(getComputedStyle(document.documentElement).getPropertyValue('--header-top-height')); 16 17 // Header Menu â Mark active items 18 var menu_items = document.querySelectorAll('.cc-header-navbar .header-menu .sub-menu li.current-menu-item'); 19 menu_items.forEach(function(item) { 20 item.parentNode.closest('li').classList.add('current-menu-item'); 21 }); 22 23 // Header Menu â Set header colors 24 var menu_items = document.querySelectorAll('.cc-header-navbar .header-menu > li.current-menu-item'); 25 if (menu_items) { // First level items 26 menu_items.forEach(function(item) { 27 item.classList.forEach(function(class_name) { 28 if (class_name.startsWith('header-color')) { 29 header_color = class_name; 30 } 31 }); 32 }); 33 menu_items = document.querySelectorAll('.cc-header-navbar .header-menu > li.current-menu-item > .sub-menu > li.current-menu-item'); 34 if (menu_items) { // Second level items 35 menu_items.forEach(function(item) { 36 item.classList.forEach(function(class_name) { 37 if (class_name.startsWith('header-color')) { 38 header_color = class_name; 39 } 40 }); 41 }); 42 } 43 if (header_color) { 44 header.classList.add(header_color); 45 var header_color_hex = getComputedStyle(header).getPropertyValue('--header-background-color'); 46 document.querySelector('meta[name="theme-color"]').setAttribute('content', header_color_hex); 47 console.log('Header color: '+header_color_hex+' ('+header_color+')'); 48 } 49 } 50 51 // Header Submenus 52 var submenus = document.querySelectorAll('.cc-header-subnav .header-submenu'); 53 submenus.forEach(function(submenu) { // Loop through submenu placeholders 54 var submenu_name = submenu.dataset.menu; 55 if (submenu_name) { 56 57 // Copy items from the main menu 58 var submenu_source = document.querySelector('.cc-header-navbar .header-menu > li.'+submenu_name+' > ul.sub-menu'); 59 if (submenu_source) { 60 var submenu_clone = submenu_source.cloneNode(true); 61 submenu_clone.classList.replace('sub-menu', 'menu'); 62 submenu.replaceChildren(submenu_clone); 63 } 64 65 // Open the first active submenu 66 if (!is_subnav_open) { 67 var is_submenu_current = submenu.querySelector('li.current-menu-item'); 68 if (is_submenu_current) { 69 is_subnav_open = true; 70 header.classList.add('open-'+submenu_name); 71 set_header_height(); // Refresh header height 72 } 73 } 74 75 // Add listener to open submenus on click 76 var submenu_trigger = document.querySelector('.cc-header-navbar .header-menu > li.'+submenu_name+' > a'); 77 if (submenu_trigger) { 78 submenu_trigger.addEventListener('click', function(event) { 79 if (!header.classList.contains('open-'+submenu_name) && !header.classList.contains('open-ddrawer')) { 80 event.preventDefault(); 81 header.classList.forEach(function(class_name) { 82 if (class_name.startsWith('open-header-submenu')) { 83 header.classList.remove(class_name); 84 } 85 }); 86 header.classList.add('open-'+submenu_name); 87 set_header_height(); // Refresh header height 88 } else { 89 var submenu_trigger_href = submenu_trigger.getAttribute('href'); 90 if (submenu_trigger_href == '#') { 91 event.preventDefault(); 92 } 93 } 94 }); 95 } 96 97 } 98 }); 99 100 // Desktop Drawer Submenus â Initialize 101 var submenus = document.querySelectorAll('.cc-header-ddrawer .header-submenu'); 102 submenus.forEach(function(submenu) { // Loop through submenu placeholders 103 var submenu_name = submenu.dataset.menu; 104 if (submenu_name) { 105 106 // Copy items from the main menu 107 var submenu_source = document.querySelector('.cc-header-navbar .header-menu > li.'+submenu_name+' > ul.sub-menu'); 108 if (submenu_source) { 109 var submenu_clone = submenu_source.cloneNode(true); 110 submenu_clone.classList.replace('sub-menu', 'menu'); 111 submenu.replaceChildren(submenu_clone); 112 } 113 114 } 115 }); 116 117 // Desktop Drawer â Alternative content functionality 118 var drawer_content_button = document.querySelector('.cc-header-ddrawer #trigger-ddrawer-alt-content'); 119 drawer_content_button.addEventListener('click', function(event) { 120 event.preventDefault(); 121 if (header.classList.contains('ddrawer-alt-content')) { 122 header.classList.remove('ddrawer-alt-content'); 123 drawer_content_button.classList.remove('active'); 124 } else { 125 header.classList.add('ddrawer-alt-content'); 126 drawer_content_button.classList.add('active'); 127 } 128 }); 129 130 // Mobile Drawer â Prevent default functionality for dummy links (mobile menu top level) 131 var menu_items = document.querySelectorAll('.cc-header-mdrawer .header-mobile-menu > li > a');
132 menu_items.forEach(function(item) { 133 item.addEventListener('click', function(event) { 134 if (this.getAttribute('href') == '#') { 135 event.preventDefault(); 136 } 137 }); 138 }); 139 140 // Desktop Drawer â Open/close functionality 141 function toggle_ddrawer(action = 'toggle') { 142 var is_ddrawer_open = header.classList.contains('open-ddrawer'); 143 if (is_ddrawer_open) { 144 if (action == 'close' || action == 'toggle') { 145 document.body.classList.remove('no-scroll'); 146 header.classList.remove('open-ddrawer'); 147 console.log('Desktop drawer closed'); 148 set_header_height(); // Refresh header height 149 } 150 } else { 151 if (action == 'open' || action == 'toggle') { 152 document.body.classList.add('no-scroll'); 153 header.classList.add('open-ddrawer'); 154 console.log('Desktop drawer opened'); 155 set_header_height(); // Refresh header height 156 } 157 } 158 } 159 160 // Mobile Drawer â Open/close functionality 161 function toggle_mdrawer(action = 'toggle') { 162 var is_mdrawer_open = header.classList.contains('open-mdrawer'); 163 if (is_mdrawer_open) { 164 if (action == 'close' || action == 'toggle') { 165 document.body.classList.remove('no-scroll'); 166 header.classList.remove('open-mdrawer'); 167 console.log('Mobile drawer closed'); 168 // set_header_height(); // Refresh header height 169 } 170 } else { 171 if (action == 'open' || action == 'toggle') { 172 document.body.classList.add('no-scroll'); 173 header.classList.add('open-mdrawer'); 174 console.log('Mobile drawer opened'); 175 // set_header_height(); // Refresh header height 176 } 177 } 178 } 179 180 // Drawers â Open/close trigger buttons 181 var ddrawer_trigger = document.querySelector('.cc-header .trigger-ddrawer'); 182 ddrawer_trigger.addEventListener('click', function(event) { 183 event.preventDefault(); 184 toggle_ddrawer(); 185 }); 186 var mdrawer_trigger = document.querySelector('.cc-header .trigger-mdrawer'); 187 mdrawer_trigger.addEventListener('click', function(event) { 188 event.preventDefault(); 189 toggle_mdrawer(); 190 }); 191 192 // Drawers â Close on ESC key press 193 document.addEventListener('keydown', function(event) { 194 if (event.key === "Escape" || event.keyCode === 27) { 195 toggle_ddrawer('close'); 196 toggle_mdrawer('close'); 197 } 198 }); 199 200 // Drawers â Close on viewport resize (eg: orientation change) 201 window.addEventListener('resize', function() { 202 if (window.innerWidth >= 1024) { 203 toggle_mdrawer('close'); 204 } else { 205 toggle_ddrawer('close'); 206 } 207 }); 208 209 // Drawers â Open desktop drawer if there is a newsletter form response 210 var newsletter_header_response = document.querySelector('.cc-header-ddrawer .mc4wp-form .mc4wp-response .mc4wp-alert'); 211 if (newsletter_header_response) { 212 toggle_ddrawer('open'); 213 } 214 215 // Sticky Header â Set header height (parent element min-height) 216 // Acts as a content spacer when the header has a fixed position 217 function set_header_height() { 218 header_height = header.offsetHeight; 219 if (header_top.offsetHeight == 0 && window.innerWidth >= 1024) { 220 header_height = header_height + header_top_height; 221 } 222 document.documentElement.style.setProperty('--header-height', header_height+'px'); 223 } 224 set_header_height(); // Take a quick first measurment 225 226 // Sticky Header â Refresh header height after page load 227 window.addEventListener('load', function() { 228 set_header_height(); // Take a more refined measurment 229 }); 230 231 // Sticky Header â Refresh header height on viewport resize 232 window.addEventListener('resize', function() { 233 set_header_height(); 234 }); 235 236 // Sticky Header â Add/remove sticky class 237 // Sticky is always enabled on mobile (with CSS). No need to add a class! 238 window.addEventListener('scroll', function() { 239 if (!document.body.classList.contains('elementor-editor-active')) { // Elementor editor is NOT active! 240 if (window.innerWidth >= 1024) { 241 if (window.scrollY >= header_top_height) { 242 elementor_header.classList.add('sticky-enabled'); 243 } else { 244 elementor_header.classList.remove('sticky-enabled'); 245 set_header_height(); // Refresh header height 246 } 247 } else { // Remove class in case of viewport resize 248 elementor_header.classList.remove('sticky-enabled'); 249 } 250 } 251 }); 252
253 // Update Date 254 update_date(); // Utility Functions 255 setInterval(update_date, 5000); 256 257} 258 259 260/*------------------------------------------------------------*/ 261// Content Scripts 262 263function content_scripts() { 264 265 // Post Share Buttons 266 var post_share_buttons = document.querySelectorAll('.post-share .post-share-toggle'); 267 post_share_buttons.forEach(function(post_share_button) { 268 post_share_button.addEventListener('click', function(event) { 269 event.preventDefault(); 270 var post_share = post_share_button.closest('.post-share'); 271 if (post_share) { 272 post_share.classList.toggle('open'); 273 } 274 }); 275 }); 276 277 // Publication Groups 278 var toggle_publication_button = document.querySelectorAll('.pub-toggle'); 279 toggle_publication_button.forEach(function(button) { 280 button.addEventListener('click', function(event) { 281 event.preventDefault(); 282 var publication_group = this.closest('.pub-group'); 283 if (publication_group) { 284 publication_group.classList.toggle('open'); 285 } 286 }); 287 }); 288 289} 290 291 292/*------------------------------------------------------------*/ 293// Utility Functions 294 295function update_date() { 296 297 var now = new Date(); 298 var day = now.getDate(); 299 var month = now.getMonth() + 1; // Month starts from 0 300 var year = now.getFullYear(); 301 302 day = (day < 10) ? '0' + day : day; 303 month = (month < 10) ? '0' + month : month; 304 var date = day + '.' + month + '.' + year; 305 306 document.getElementById('current-date').innerHTML = date; 307 308}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.