1( function( $ ) { 2 'use strict'; 3 4 /* rtl check */ 5 function rtl_owl(){ 6 if ($('body').hasClass("rtl")) { 7 return true; 8 } else { 9 return false; 10 }}; 11 12 /* -------------------------------------------------- 13 * sticky header 14 * --------------------------------------------------*/ 15 $('.header-desktop .is-fixed').parent().append('<div class="dheader-clone"></div>'); 16 $('.header-mobile .is-fixed').parent().append('<div class="mheader-clone"></div>'); 17 var dclone = $('.dheader-clone'), 18 mclone = $('.mheader-clone'), 19 fixed = $('#site-header .is-fixed'); 20 $(window).on("scroll", function(){ 21 var site_header = $('#site-header').outerHeight() + 200; 22 23 if ($(window).scrollTop() >= site_header) { 24 fixed.addClass('is-stuck'); 25 fixed.find('.hitem').addClass('scrolled'); 26 dclone.height($('.header-desktop .is-fixed').outerHeight()); 27 mclone.height($('.header-mobile .is-fixed').outerHeight()); 28 }else{ 29 fixed.removeClass('is-stuck'); 30 fixed.find('.hitem').removeClass('scrolled'); 31 dclone.height('0'); 32 mclone.height('0'); 33 } 34 }); 35 36 /* -------------------------------------------------- 37 * mobile menu 38 * --------------------------------------------------*/ 39 $('.mmenu_wrapper li:has(ul)').prepend('<span class="arrow"><i class="uil-angle-down"></i></span>'); 40 $(".mmenu_wrapper .mobile_mainmenu > li span.arrow").on('click',function() { 41 $(this).parent().find("> ul").stop(true, true).slideToggle() 42 $(this).toggleClass( "active" ); 43 }); 44 45 $( "#mmenu_toggle" ).on('click', function() { 46 $(this).toggleClass( "active" ); 47 $(this).parents('.header_mobile').toggleClass( "open" ); 48 if ($(this).hasClass( "active" )) { 49 $('.mobile_nav').stop(true, true).slideDown(100); 50 }else{ 51 $('.mobile_nav').stop(true, true).slideUp(100); 52 } 53 }); 54 55 /* -------------------------------------------------- 56 * popup promo 57 * --------------------------------------------------*/ 58 var popup = $('.popup-form'), 59 news = $('.popup-newsletter'); 60 61 function popupOpen() { 62 $('.error').parents('.popup-form').addClass('popup-open'); 63 news.addClass('popup-open'); 64 news.parents('body').addClass('popup-active'); 65 } 66 67 $(window).on('load', function() { 68 setTimeout(popupOpen(), 400); 69 }); 70 71 $('.elementor-button-wrapper a[href=#promo], .ot-button-wrapper a[href=#promo]').on('click', function(){ 72 popupOpen(); 73 return false; 74 }); 75 76 /* -------------------------------------------------- 77 * popup login/register 78 * --------------------------------------------------*/ 79 var login = $('.popup-login'); 80 var regis = $('.popup-regis'); 81 82 $('.popup-form a[href=#signin], .elementor-button-wrapper a[href=#signin], .ot-button-wrapper a[href=#signin]').on('click', function(){ 83 popup.removeClass('popup-open'); 84 login.addClass('popup-open'); 85 $('body').addClass('popup-active'); 86 return false; 87 }); 88 89 90 $('.popup-form a[href=#signup], .elementor-button-wrapper a[href=#signup], .ot-button-wrapper a[href=#signup]').on('click', function(){ 91 popup.removeClass('popup-open'); 92 regis.addClass('popup-open'); 93 $('body').addClass('popup-active'); 94 return false; 95 }); 96 97 $('.popup-close, .popup-overlay').on('click', function(){ 98 popup.removeClass('popup-open'); 99 $('body').removeClass('popup-active'); 100 return false; 101 }); 102 103 /* -------------------------------------------------- 104 * gallery post 105 * --------------------------------------------------*/ 106 $('.gallery-post').each( function () { 107 var selector = $(this); 108 selector.owlCarousel({ 109 rtl: rtl_owl(), 110 loop:false, 111 margin:0, 112 responsiveClass:true, 113 items:1, 114 dots:true, 115 nav:true, 116 dotsClass: 'owl-dots dots-over', 117 navText:['<i class="uil uil-arrow-left"></i>', '<i class="uil uil-arrow-right"></i>'] 118 }); 119 }); 120 121 /* -------------------------------------------------- 122 * slide posts 123 * --------------------------------------------------*/ 124 $('.slide-posts').each( function () { 125 var selector = $(this); 126 selector.owlCarousel({ 127 rtl: rtl_owl(), 128 loop:false, 129 margin:30, 130 responsiveClass:true, 131 dots:true, 132 nav:false, 133 responsive : { 134 0 : { 135 items: 1, 136 }, 137 992 : { 138 items: 2, 139 } 140 } 141 });
142 }); 143 144 /* -------------------------------------------------- 145 * share toggle 146 * --------------------------------------------------*/ 147 $(document).on('click', 'body', function(){ 148 $('.sdropdown').hide(); 149 }); 150 $(document).on('click', '.share-btn', function(){ 151 $(this).next().toggle(); 152 return false; 153 }); 154 155 156 /* -------------------------------------------------- 157 * back to top 158 * --------------------------------------------------*/ 159 var theme = { 160 init: function () { 161 theme.passVisibility(); 162 theme.pageProgress(); 163 theme.bsModal(); 164 theme.singlePostGLightbox(); 165 theme.rellax(); 166 theme.backgroundImageMobile(); 167 theme.scrollCue(); 168 theme.textRotator(); 169 theme.loader(); 170 }, 171 172 /** 173 * scrollCue.js 174 * Enables showing elements by scrolling 175 * Requires assets/js/vendor/scrollCue.min.js 176 */ 177 scrollCue: () => { 178 scrollCue.init({ 179 interval: -400, 180 duration: 700, 181 percentage: 0.9 182 }); 183 scrollCue.update(); 184 }, 185 186 passVisibility: () => { 187 let pass = document.querySelectorAll('.password-field'); 188 for (let i = 0; i < pass.length; i++) { 189 let passInput = pass[i].querySelector('.form-control'); 190 let passToggle = pass[i].querySelector('.password-toggle > i'); 191 passToggle.addEventListener('click', (e) => { 192 if (passInput.type === "password") { 193 passInput.type = "text"; 194 passToggle.classList.remove('uil-eye'); 195 passToggle.classList.add('uil-eye-slash'); 196 } else { 197 passInput.type = "password"; 198 passToggle.classList.remove('uil-eye-slash'); 199 passToggle.classList.add('uil-eye'); 200 } 201 }, false); 202 } 203 }, 204 205 bsModal: () => { 206 if(document.querySelector(".modal-popup") != null) { 207 var myModalPopup = new bootstrap.Modal(document.querySelector('.modal-popup')); 208 setTimeout(function() { 209 myModalPopup.show(); 210 }, 200); 211 } 212 // Fixes jumping of page progress caused by modal 213 var innerWidth = window.innerWidth; 214 var clientWidth = document.body.clientWidth; 215 var scrollSize = innerWidth - clientWidth; 216 var myModalEl = document.querySelectorAll('.modal'); 217 var navbarFixed = document.querySelector('.navbar.fixed'); 218 var pageProgress = document.querySelector('.progress-wrap'); 219 function setPadding() { 220 if(navbarFixed != null) { 221 navbarFixed.style.paddingRight = scrollSize + 'px'; 222 } 223 if(pageProgress != null) { 224 pageProgress.style.marginRight = scrollSize + 'px'; 225 } 226 } 227 function removePadding() { 228 if(navbarFixed != null) { 229 navbarFixed.style.paddingRight = ''; 230 } 231 if(pageProgress != null) { 232 pageProgress.style.marginRight = ''; 233 } 234 } 235 myModalEl.forEach(myModalEl => { 236 myModalEl.addEventListener('show.bs.modal', function(e) { 237 setPadding(); 238 }) 239 myModalEl.addEventListener('hidden.bs.modal', function(e) { 240 removePadding(); 241 }) 242 }); 243 } , 244 245 pageProgress: () => { 246 var progressWrap = document.querySelector('.progress-wrap'); 247 var progressPath = document.querySelector('.progress-wrap path'); 248 var pathLength = progressPath.getTotalLength(); 249 var offset = 50; 250 if(progressWrap != null) { 251 progressPath.style.transition = progressPath.style.WebkitTransition = 'none'; 252 progressPath.style.strokeDasharray = pathLength + ' ' + pathLength; 253 progressPath.style.strokeDashoffset = pathLength; 254 progressPath.getBoundingClientRect(); 255 progressPath.style.transition = progressPath.style.WebkitTransition = 'stroke-dashoffset 10ms linear'; 256 window.addEventListener("scroll", function(event) { 257 var scroll = document.body.scrollTop || document.documentElement.scrollTop; 258 var height = document.documentElement.scrollHeight - document.documentElement.clientHeight; 259 var progress = pathLength - (scroll * pathLength / height); 260 progressPath.style.strokeDashoffset = progress; 261 var scrollElementPos = document.body.scrollTop || document.documentElement.scrollTop; 262 if(scrollElementPos >= offset) { 263 progressWrap.classList.add("active-progress") 264 } else { 265 progressWrap.classList.remove("active-progress") 266 } 267 }); 268 progressWrap.addEventListener('click', function(e) { 269 e.preventDefault(); 270 window.scroll({ 271 top: 0, 272 left: 0, 273 behavior: 'smooth' 274 }); 275 }); 276 } 277 }, 278 singlePostGLightbox: () => { 279 const singlePostGlightbox = GLightbox({ 280 selector: '.single-post-gallery', 281 }); 282 }, 283 284 /**
285 * Background Image Mobile 286 * Adds .mobile class to background images on mobile devices for styling purposes 287 */ 288 backgroundImageMobile: () => { 289 var isMobile = (navigator.userAgent.match(/Android/i) || navigator.userAgent.match(/webOS/i) || navigator.userAgent.match(/iPhone/i) || navigator.userAgent.match(/iPad/i) || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1) || navigator.userAgent.match(/iPod/i) || navigator.userAgent.match(/BlackBerry/i)) ? true : false; 290 if(isMobile) { 291 document.querySelectorAll(".elementor-section.image-wrapper").forEach(e => { 292 e.classList.add("mobile") 293 }) 294 } 295 }, 296 297 /** 298 * ReplaceMe.js 299 * Enables text rotator 300 * Requires assets/js/vendor/replaceme.min.js 301 */ 302 textRotator: () => { 303 if(document.querySelector(".rotator-zoom") != null) { 304 var replace = new ReplaceMe(document.querySelector('.rotator-zoom'), { 305 animation: 'animate__animated animate__zoomIn', 306 speed: 2500, 307 separator: ',', 308 clickChange: false, 309 loopCount: 'infinite' 310 }); 311 document.querySelector(".rotator-zoom").style.opacity = "1"; 312 } 313 if(document.querySelector(".rotator-fade") != null) { 314 var replace = new ReplaceMe(document.querySelector('.rotator-fade'), { 315 animation: 'animate__animated animate__fadeInDown', 316 speed: 2500, 317 separator: ',', 318 clickChange: false, 319 loopCount: 'infinite' 320 }); 321 document.querySelector(".rotator-fade").style.opacity = "1"; 322 } 323 }, 324 325 /** 326 * Rellax.js 327 * Adds parallax animation to shapes and elements 328 * Requires assets/js/vendor/rellax.min.js 329 */ 330 rellax: () => { 331 if(document.querySelector(".rellax") != null) { 332 window.onload = function() { 333 var rellax = new Rellax('.rellax', { 334 speed: 2, 335 center: true, 336 breakpoints: [576, 992, 1201] 337 }); 338 var projects_overflow = document.querySelectorAll('.projects-overflow'); 339 imagesLoaded(projects_overflow, function() { 340 rellax.refresh(); 341 }); 342 } 343 } 344 }, 345 346 /** 347 * Loader 348 * 349 */ 350 loader: () => { 351 var preloader = document.querySelector('.page-loader'); 352 if(preloader != null) { 353 document.body.onload = function(){ 354 setTimeout(function() { 355 if( !preloader.classList.contains('done') ) 356 { 357 preloader.classList.add('done'); 358 } 359 }, 300) 360 } 361 } 362 }, 363 364 } 365 theme.init(); 366 367} )( jQuery );
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.