/** * Porto theme's main JavaScript file */ /* Alternatives for old browsers */ if (!String.prototype.endsWith) { String.prototype.endsWith = function(search, this_len) { if (this_len === undefined || this_len > this.length) { this_len = this.length; } return this.substring(this_len - search.length, this_len) === search; }; } if (window.NodeList && !NodeList.prototype.forEach) { NodeList.prototype.forEach = Array.prototype.forEach; } if (!String.prototype.trim) { String.prototype.trim = function () { return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); }; } /* Smart Resize */ (function($,sr){ 'use strict'; // debouncing function from John Hann // http://unscriptable.com/index.php/2009/03/20/debouncing-javascript-methods/ var debounce = function (func, threshold, execAsap) { var timeout; return function debounced () { var obj = this, args = arguments; function delayed () { if (!execAsap) func.apply(obj, args); timeout = null; } if (timeout && timeout.val) theme.deleteTimeout(timeout); else if (execAsap) func.apply(obj, args); timeout = theme.requestTimeout(delayed, threshold || 100); }; }; // smartresize jQuery.fn[sr] = function(fn){ return fn ? this.on('resize', debounce(fn)) : this.trigger(sr); }; })(jQuery,'smartresize'); /* easing */ jQuery.extend( jQuery.easing, { def: 'easeOutQuad', swing: function (x, t, b, c, d) { return jQuery.easing[jQuery.easing.def](x, t, b, c, d); }, easeOutQuad: function (x, t, b, c, d) { return -c *(t/=d)*(t-2) + b; }, easeInOutQuart: function (x, t, b, c, d) { if ((t/=d/2) < 1) return c/2*t*t*t*t + b; return -c/2 * ((t-=2)*t*t*t - 2) + b; }, easeOutQuint: function (x, t, b, c, d) { return c*((t=t/d-1)*t*t*t*t + 1) + b; } }); (function($){ /** * Copyright 2012, Digital Fusion * Licensed under the MIT license. * http://teamdf.com/jquery-plugins/license/ * * @author Sam Sehnert * @desc A small plugin that checks whether elements are within * the user visible viewport of a web browser. * only accounts for vertical position, not horizontal. */ $.fn.visible = function(partial,hidden,direction,container){ if (this.length < 1) return; var $t = this.length > 1 ? this.eq(0) : this, isContained = typeof container !== 'undefined' && container !== null, $w = isContained ? $(container) : $(window), wPosition = isContained ? $w.position() : 0, t = $t.get(0), vpWidth = $w.outerWidth(), vpHeight = $w.outerHeight(), direction = (direction) ? direction : 'both', clientSize = hidden === true ? t.offsetWidth * t.offsetHeight : true; if (typeof t.getBoundingClientRect === 'function'){ // Use this native browser method, if available. var rec = t.getBoundingClientRect(), tViz = isContained ? rec.top - wPosition.top >= 0 && rec.top < vpHeight + wPosition.top : rec.top >= 0 && rec.top < vpHeight, bViz = isContained ? rec.bottom - wPosition.top > 0 && rec.bottom <= vpHeight + wPosition.top : rec.bottom > 0 && rec.bottom <= vpHeight, lViz = isContained ? rec.left - wPosition.left >= 0 && rec.left < vpWidth + wPosition.left : rec.left >= 0 && rec.left < vpWidth, rViz = isContained ? rec.right - wPosition.left > 0 && rec.right < vpWidth + wPosition.left : rec.right > 0 && rec.right <= vpWidth, vVisible = partial ? tViz || bViz : tViz && bViz, hVisible = partial ? lViz || rViz : lViz && rViz; if(direction === 'both') return clientSize && vVisible && hVisible; else if(direction === 'vertical') return clientSize && vVisible; else if(direction === 'horizontal') return clientSize && hVisible; } else { var viewTop = isContained ? 0 : wPosition, viewBottom = viewTop + vpHeight, viewLeft = $w.scrollLeft(), viewRight = viewLeft + vpWidth, position = $t.position(), _top = position.top, _bottom = _top + $t.height(), _left = position.left, _right = _left + $t.width(), compareTop = partial === true ? _bottom : _top, compareBottom = partial === true ? _top : _bottom, compareLeft = partial === true ? _right : _left, compareRight = partial === true ? _left : _right; if(direction === 'both') return !!clientSize && ((compareBottom <= viewBottom) && (compareTop >= viewTop)) && ((compareRight <= viewRight) && (compareLeft >= viewLeft)); else if(direction === 'vertical') return !!clientSize && ((compareBottom <= viewBottom) && (compareTop >= viewTop)); else if(direction === 'horizontal') return !!clientSize && ((compareRight <= viewRight) && (compareLeft >= viewLeft)); } }; })(jQuery); /* Name: Porto Theme Javascript Writtern By: P-THEMES Javascript Version: 1.2 */ // Theme window.theme = {}; // Configuration (function(theme, $) { 'use strict'; theme = theme || {}; $.extend(theme, { rtl: js_porto_vars.rtl == '1' ? true : false, rtl_browser: $('html').hasClass('browser-rtl'), ajax_url: js_porto_vars.ajax_url, request_error: js_porto_vars.request_error, change_logo: js_porto_vars.change_logo == '1' ? true : false, show_sticky_header: js_porto_vars.show_sticky_header == '1' ? true : false, show_sticky_header_tablet: js_porto_vars.show_sticky_header_tablet == '1' ? true : false, show_sticky_header_mobile: js_porto_vars.show_sticky_header_mobile == '1' ? true : false, category_ajax: js_porto_vars.category_ajax == '1' ? true : false, prdctfltr_ajax: js_porto_vars.prdctfltr_ajax == '1' ? true : false, container_width: parseInt(js_porto_vars.container_width), grid_gutter_width: parseInt(js_porto_vars.grid_gutter_width), screen_lg: parseInt(js_porto_vars.screen_lg), slider_loop: js_porto_vars.slider_loop == '1' ? true : false, slider_autoplay: js_porto_vars.slider_autoplay == '1' ? true : false, slider_autoheight: js_porto_vars.slider_autoheight == '1' ? true : false, slider_speed: js_porto_vars.slider_speed ? js_porto_vars.slider_speed : 5000, slider_nav: js_porto_vars.slider_nav == '1' ? true : false, slider_nav_hover: js_porto_vars.slider_nav_hover == '1' ? true : false, slider_margin: js_porto_vars.slider_margin == '1' ? 40 : 0, slider_dots: js_porto_vars.slider_dots == '1' ? true : false, slider_animatein: js_porto_vars.slider_animatein ? js_porto_vars.slider_animatein : '', slider_animateout: js_porto_vars.slider_animateout ? js_porto_vars.slider_animateout : '', product_thumbs_count: js_porto_vars.product_thumbs_count ? js_porto_vars.product_thumbs_count : 4, product_zoom: js_porto_vars.product_zoom == '1' ? true : false, product_zoom_mobile: js_porto_vars.product_zoom_mobile == '1' ? true : false, product_image_popup: js_porto_vars.product_image_popup == '1' ? 'fadeOut' : false, owlConfig: { rtl: js_porto_vars.rtl == '1' ? true : false, loop : js_porto_vars.slider_loop == '1' ? true : false, autoplay : js_porto_vars.slider_autoplay == '1' ? true : false, autoHeight : js_porto_vars.slider_autoheight == '1' ? true : false, autoplayTimeout: js_porto_vars.slider_speed ? js_porto_vars.slider_speed : 7000, autoplayHoverPause : true, lazyLoad: true, nav: js_porto_vars.slider_nav == '1' ? true : false, navText: ["", ""], dots: js_porto_vars.slider_dots == '1' ? true : false, stagePadding: (js_porto_vars.slider_nav_hover != '1' && js_porto_vars.slider_margin == '1') ? 40 : 0, animateOut: js_porto_vars.slider_animateout ? js_porto_vars.slider_animateout : '', animateIn: js_porto_vars.slider_animatein ? js_porto_vars.slider_animatein : '' }, sticky_nav_height: 0, is_device_mobile: /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent||navigator.vendor||window.opera)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test((navigator.userAgent||navigator.vendor||window.opera).substr(0,4)), getScrollbarWidth: function() { // thx David if (this.scrollbarSize === undefined) { var scrollDiv = document.createElement("div"); scrollDiv.style.cssText = 'width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;'; document.body.appendChild(scrollDiv); this.scrollbarSize = scrollDiv.offsetWidth - scrollDiv.clientWidth; document.body.removeChild(scrollDiv); } return this.scrollbarSize; }, isTablet: function() { if (window.innerWidth < 992) return true; return false; }, isMobile: function() { if (window.innerWidth <= 480) return true; return false; }, refreshVCContent: function($elements) { if ($elements || $(document.body).hasClass('elementor-page')) { $(window).trigger('resize'); } theme.refreshStickySidebar(true); if (typeof window.vc_js == 'function') window.vc_js(); $(document.body).trigger('porto_refresh_vc_content', [$elements]); }, adminBarHeight: function() { var obj = document.getElementById('wpadminbar'); if (obj && obj.offsetHeight && window.innerWidth > 600) { return obj.offsetHeight; } return 0; }, refreshStickySidebar: function(timeout) { var $sticky_sidebar = $('.sidebar [data-plugin-sticky]'); if ($sticky_sidebar.get(0)) { if (timeout) { theme.requestTimeout(function() { $sticky_sidebar.trigger('recalc.pin'); }, 400); } else { $sticky_sidebar.trigger('recalc.pin'); } } }, scrolltoContainer: function( $container, timeout ) { if ($container.get(0)) { if (window.innerWidth < 992) { $('.sidebar-overlay').click(); } if (!timeout) { timeout = 600; } $('html, body').stop().animate({ scrollTop: $container.offset().top - theme.StickyHeader.sticky_height - theme.adminBarHeight() - theme.sticky_nav_height - 18 }, timeout, 'easeOutQuad'); } }, requestFrame: function(fn) { var handler = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame; if ( ! handler ) { return setTimeout( fn, 1000 / 60 ); } var rt = new Object() rt.val = handler(fn); return rt; }, requestTimeout: function(fn, delay) { var handler = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame; if ( ! handler ) { return setTimeout(fn, delay); } var start, rt = new Object(); function loop( timestamp ) { if ( ! start ) { start = timestamp; } var progress = timestamp - start; progress >= delay ? fn.call() : rt.val = handler( loop ); }; rt.val = handler( loop ); return rt; }, deleteTimeout: function( timeoutID ) { if ( ! timeoutID ) { return; } var handler = window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame; if ( ! handler ) { return clearTimeout( timeoutID ); } if ( timeoutID.val ) { return handler( timeoutID.val ); } } }); }).apply(this, [window.theme, jQuery]); /* browser select */ (function($) { 'use strict'; $.extend({ browserSelector: function() { // Touch var hasTouch = 'ontouchstart' in window || navigator.msMaxTouchPoints; var u = navigator.userAgent, ua = u.toLowerCase(), is = function (t) { return ua.indexOf(t) > -1; }, g = 'gecko', w = 'webkit', s = 'safari', o = 'opera', h = document.documentElement, b = [(!(/opera|webtv/i.test(ua)) && /msie\s(\d)/.test(ua)) ? ('ie ie' + parseFloat(navigator.appVersion.split("MSIE")[1])) : is('firefox/2') ? g + ' ff2' : is('firefox/3.5') ? g + ' ff3 ff3_5' : is('firefox/3') ? g + ' ff3' : is('gecko/') ? g : is('opera') ? o + (/version\/(\d+)/.test(ua) ? ' ' + o + RegExp.jQuery1 : (/opera(\s|\/)(\d+)/.test(ua) ? ' ' + o + RegExp.jQuery2 : '')) : is('konqueror') ? 'konqueror' : is('chrome') ? w + ' chrome' : is('iron') ? w + ' iron' : is('applewebkit/') ? w + ' ' + s + (/version\/(\d+)/.test(ua) ? ' ' + s + RegExp.jQuery1 : '') : is('mozilla/') ? g : '', is('j2me') ? 'mobile' : is('iphone') ? 'iphone' : is('ipod') ? 'ipod' : is('mac') ? 'mac' : is('darwin') ? 'mac' : is('webtv') ? 'webtv' : is('win') ? 'win' : is('freebsd') ? 'freebsd' : (is('x11') || is('linux')) ? 'linux' : '', 'js']; var c = b.join(' '); if (theme.is_device_mobile) { c += ' mobile'; } if (hasTouch) { c += ' touch'; } h.className += ' ' + c; // IE11 Detect var isIE11 = !(window.ActiveXObject) && "ActiveXObject" in window; if (isIE11) { $('html').removeClass('gecko').addClass('ie ie11'); return; } } }); $.browserSelector(); })(jQuery); // Appear (function(){ var checks = [], timerId = false, one, a, b, o, x, y, ax, ay, retryCounter = 0, has_event = false; var checkAll = function() { if (!checks.length) { if (retryCounter > 10) { window.removeEventListener('scroll', checkAll); window.removeEventListener('resize', checkAll); } retryCounter++; } else { for ( var i = checks.length; i--; ) { one = checks[i]; a = window.pageXOffset; b = window.pageYOffset; o = one.el.getBoundingClientRect(); x = o.left + a; y = o.top + b; ax = one.options.accX; ay = one.options.accY; if (y + o.height + ay >= b && y <= b + window.innerHeight + ay && x + o.width + ax >= a && x <= a + window.innerWidth + ax) { one.fn.call(one.el, one.data); checks.splice(i, 1); } } } timerId = false; }; window.theme.appear = function(el, fn, options) { var settings = { data: undefined, accX: 0, accY: 0 }; if ( options ) { options.data && ( settings.data = options.data ); options.accX && ( settings.accX = options.accX ); options.accY && ( settings.accY = options.accY ); } checks.push({ el: el, fn: fn, options: settings }); if ( ! timerId ) { timerId = theme.requestTimeout(checkAll, 100); } if ( ! has_event ) { jQuery(document.body).on('appear_refresh', checkAll); window.addEventListener('scroll', checkAll, {passive: true}); window.addEventListener('resize', checkAll); has_event = true; } } })(); // Accordion (function(theme, $) { 'use strict'; theme = theme || {}; var instanceName = '__accordion'; var Accordion = function($el, opts) { return this.initialize($el, opts); }; Accordion.defaults = { }; Accordion.prototype = { initialize: function($el, opts) { if ($el.data(instanceName)) { return this; } this.$el = $el; this .setData() .setOptions(opts) .build(); return this; }, setData: function() { this.$el.data(instanceName, this); return this; }, setOptions: function(opts) { this.options = $.extend(true, {}, Accordion.defaults, opts, { wrapper: this.$el }); return this; }, build: function() { if (!($.isFunction($.fn.collapse))) { return this; } var $el = this.options.wrapper, $collapse = $el.find('.collapse'), collapsible = $el.data('collapsible'), active_num = $el.data('active-tab'); if ( $collapse.length > 0 ) { if ( $el.data('use-accordion') && 'yes' == $el.data('use-accordion') ) { $el.find('.collapse').attr('data-parent', '#' + $el.attr('id')); } if ( collapsible == 'yes' ) { $collapse.collapse({toggle: false, parent: '#' + $el.attr('id')}); } else if ( !isNaN(active_num) && active_num == parseInt(active_num) && $el.find('.collapse').length > active_num ) { $el.find('.collapse').collapse({toggle: false, parent: '#' + $el.attr('id')}); $el.find('.collapse').eq(active_num-1).collapse('toggle'); } else { $el.find('.collapse').collapse({parent: '#' + $el.attr('id')}); } } return this; } }; // expose to scope $.extend(theme, { Accordion: Accordion }); // jquery plugin $.fn.themeAccordion = function(opts) { return this.map(function() { var $this = $(this); if ($this.data(instanceName)) { return $this.data(instanceName); } else { return new theme.Accordion($this, opts); } }); }; }).apply(this, [window.theme, jQuery]); // Accordion Menu (function(theme, $) { 'use strict'; theme = theme || {}; var instanceName = '__accordionMenu'; var AccordionMenu = function($el, opts) { return this.initialize($el, opts); }; AccordionMenu.defaults = { }; AccordionMenu.prototype = { initialize: function($el, opts) { if ($el.data(instanceName)) { return this; } this.$el = $el; this .setData() .setOptions(opts) .build(); return this; }, setData: function() { this.$el.data(instanceName, this); return this; }, setOptions: function(opts) { this.options = $.extend(true, {}, AccordionMenu.defaults, opts, { wrapper: this.$el }); return this; }, build: function() { var self = this, $el = this.options.wrapper; $el.find('li.menu-item.active').each(function() { var $this = $(this); if ($this.find('> .arrow').get(0)) $this.find('> .arrow').click(); }); $el.find('.arrow').on('click', function() { var $this = $(this), $parent = $this.closest('li'); if (typeof self.options.open_one != 'undefined') { $parent.siblings('.open').children('.arrow').next().hide(); $parent.siblings('.open').removeClass('open'); $this.next().stop().toggle(); } else { $this.next().stop().slideToggle(); } if ($parent.hasClass('open')) { $parent.removeClass('open'); } else { $parent.addClass('open'); } }); return this; } }; // expose to scope $.extend(theme, { AccordionMenu: AccordionMenu }); // jquery plugin $.fn.themeAccordionMenu = function(opts) { return this.map(function() { var $this = $(this); if ($this.data(instanceName)) { return $this.data(instanceName); } else { return new theme.AccordionMenu($this, opts); } }); }; }).apply(this, [window.theme, jQuery]); // Lazyload Menu (function(theme, $) { 'use strict'; theme = theme || {}; // expose to scope $.extend(theme, { lazyload_menu: function($el, menu_type) { if (!js_porto_vars.lazyload_menu) { return; } if (menu_type) { $.post( window.location.href, { action: 'porto_lazyload_menu', menu_type: menu_type, nonce: js_porto_vars.porto_nonce }, function(data) { if (data) { var $data = $(data); if ('mobile_menu' != menu_type) { $el.each(function(i) { var $menu = $(this), $main_menu = $data.children('.mega-menu, .sidebar-menu').eq(i); $menu.children('li.menu-item-has-children').each(function(index) { var popup = $main_menu.children('li.menu-item-has-children').eq(index).children('.popup, .sub-menu'); if (popup.hasClass('popup')) { popup = popup.children('.inner'); } if (popup.length) { if ($(this).children('.popup').length) { $(this).children('.popup').children('.inner').replaceWith(popup); } else { $(this).children('.sub-menu').replaceWith(popup); } } }); if ($menu.hasClass('mega-menu')) { theme.MegaMenu.build($menu); } else { if ($menu.hasClass('side-menu-accordion')) { $menu.themeAccordionMenu({'open_one':true}); } else { theme.SidebarMenu.build($menu); } } $menu.addClass('sub-ready'); }); } if ($data.find('#nav-panel, #side-nav-panel').length || 'mobile_menu' == menu_type) { if ($('#nav-panel').length) { $('#nav-panel .mobile-nav-wrap').replaceWith($data.find('.mobile-nav-wrap')); $('#nav-panel .accordion-menu').themeAccordionMenu(); } else if ($('#side-nav-panel').length) { $('#side-nav-panel').replaceWith($data.find('.side-nav-panel-close').parent()); $('#side-nav-panel .accordion-menu').themeAccordionMenu(); } } } } ); } } }); }).apply(this, [window.theme, jQuery]); // Animate (function(theme, $) { 'use strict'; theme = theme || {}; var instanceName = '__animate'; var Animate = function($el, opts) { return this.initialize($el, opts); }; Animate.defaults = { accX: 0, accY: -120, delay: 1, duration: 1000 }; Animate.prototype = { initialize: function($el, opts) { if ($el.data(instanceName)) { return this; } this.$el = $el; this .setData() .setOptions(opts) .build(); return this; }, setData: function() { this.$el.data(instanceName, true); return this; }, setOptions: function(opts) { this.options = $.extend(true, {}, Animate.defaults, opts, { wrapper: this.$el }); return this; }, build: function() { var self = this, $el = this.options.wrapper, delay = 0, duration = 0; $el.addClass('appear-animation'); if (!$('html').hasClass('no-csstransitions') && window.innerWidth > 767) { var el_obj = $el.get(0); theme.appear(el_obj, function() { delay = Math.abs($el.data('appear-animation-delay') ? $el.data('appear-animation-delay') : self.options.delay); if (delay > 1) { el_obj.style.animationDelay = delay + 'ms'; } duration = Math.abs($el.data('appear-animation-duration') ? $el.data('appear-animation-duration') : self.options.duration); if (duration != 1000) { el_obj.style.animationDuration = duration + 'ms'; } if ($el.find('.porto-lazyload:not(.lazy-load-loaded)').length) { $el.find('.porto-lazyload:not(.lazy-load-loaded)').trigger('appear'); } $el.addClass($el.data('appear-animation') + ' appear-animation-visible'); /*if (delay) { theme.requestTimeout(function() { if ($el.find('.porto-lazyload:not(.lazy-load-loaded)').length) { $el.find('.porto-lazyload:not(.lazy-load-loaded)').trigger('appear'); } $el.addClass('appear-animation-visible'); }, delay); } else { if ($el.find('.porto-lazyload:not(.lazy-load-loaded)').length) { $el.find('.porto-lazyload:not(.lazy-load-loaded)').trigger('appear'); } $el.addClass('appear-animation-visible'); }*/ }, { accX: self.options.accX, accY: self.options.accY }); } else { $el.addClass('appear-animation-visible'); } return this; } }; // expose to scope $.extend(theme, { Animate: Animate }); // jquery plugin $.fn.themeAnimate = function(opts) { return this.map(function() { var $this = $(this); if ($this.data(instanceName)) { return $this; } else { return new theme.Animate($this, opts); } }); }; }).apply(this, [window.theme, jQuery]); // Carousel (function(theme, $) { 'use strict'; theme = theme || {}; var instanceName = '__carousel'; var Carousel = function($el, opts) { return this.initialize($el, opts); }; Carousel.defaults = $.extend({}, { loop: true, navText: [], themeConfig: false, lazyLoad: true, lg: 0, md: 0, sm: 0, xs: 0, single: false, rtl: theme.rtl }); Carousel.prototype = { initialize: function($el, opts) { if ($el.data(instanceName)) { return this; } this.$el = $el; this .setData() .setOptions(opts) .build(); return this; }, setData: function() { this.$el.data(instanceName, true); return this; }, setOptions: function(opts) { if ((opts && opts.themeConfig) || !opts) { this.options = $.extend(true, {}, Carousel.defaults, theme.owlConfig, opts, { wrapper: this.$el, themeConfig: true }); } else { this.options = $.extend(true, {}, Carousel.defaults, opts, { wrapper: this.$el }); } return this; }, calcOwlHeight: function($el) { var h = 0; $el.find('.owl-item.active').each(function() { if (h < $(this).height()) h = $(this).height(); }); $el.children('.owl-stage-outer').height( h ); }, build: function() { if (!($.isFunction($.fn.owlCarousel))) { return this; } var $el = this.options.wrapper, loop = this.options.loop, lg = this.options.lg, md = this.options.md, sm = this.options.sm, xs = this.options.xs, single = this.options.single, zoom = $el.find('.zoom').get(0), responsive = {}, items, count = $el.find('.owl-item').length > 0 ? $el.find('.owl-item:not(.cloned)').length : $el.find('> *').length, fullscreen = typeof this.options.fullscreen == 'undefined' ? false : this.options.fullscreen, // Add default responsive options scrollWidth = theme.getScrollbarWidth(); /*if (fullscreen) { $el.children().width(window.innerWidth - theme.getScrollbarWidth()); $el.children().height($el.closest('.fullscreen-carousel').length ? $el.closest('.fullscreen-carousel').height() : window.innerHeight); $el.children().css('max-height', '100%'); $(window).on('resize', function() { $el.find('.owl-item').children().width(window.innerWidth - theme.getScrollbarWidth()); $el.find('.owl-item').children().height($el.closest('.fullscreen-carousel').length ? $el.closest('.fullscreen-carousel').height() : window.innerHeight); $el.find('.owl-item').children().css('max-height', '100%'); }); }*/ if (single) { items = 1; } else if (typeof this.options.responsive != 'undefined') { for (var w in this.options.responsive) { var number_items = Number(this.options.responsive[w]); responsive[Number(w)] = {items: number_items, loop: (loop && count >= number_items) ? true : false}; } } else { items = this.options.items ? this.options.items : (lg ? lg : 1); if (this.options.xl) { responsive[1400 - scrollWidth] = { items: this.options.xl, loop: (loop && count > this.options.xl) ? true : false, mergeFit: this.options.mergeFit }; } else { if (items > lg + 1) { responsive[1400 - scrollWidth] = { items: items, loop: (loop && count > items) ? true : false, mergeFit: this.options.mergeFit }; responsive[theme.screen_lg - scrollWidth] = { items: lg + 1, loop: (loop && count > lg + 1) ? true : false, mergeFit: this.options.mergeFit }; } } if (typeof responsive[theme.screen_lg - scrollWidth] == 'undefined') { responsive[theme.screen_lg - scrollWidth] = { items: items, loop: (loop && count > items) ? true : false, mergeFit: this.options.mergeFit }; } if (lg) responsive[992 - scrollWidth] = { items: lg, loop: (loop && count > lg) ? true : false, mergeFit: this.options.mergeFit_lg }; if (md) responsive[768 - scrollWidth] = { items: md, loop: (loop && count > md) ? true : false, mergeFit: this.options.mergeFit_md }; if (sm) { responsive[576 - scrollWidth] = { items: sm, loop: (loop && count > sm) ? true : false, mergeFit: this.options.mergeFit_sm }; } else { responsive[576 - scrollWidth] = { items: 1, mergeFit: false }; } if (xs) { responsive[0] = { items: xs, loop: (loop && count > xs) ? true : false, mergeFit: this.options.mergeFit_xs }; } else { responsive[0] = { items: 1 }; } } if (!$el.hasClass('show-nav-title') && this.options.themeConfig && theme.slider_nav && theme.slider_nav_hover) { $el.addClass('show-nav-hover'); } this.options = $.extend(true, {}, this.options, { items: items, loop: (loop && count > items) ? true : false, responsive: responsive, onInitialized: function() { if ($el.hasClass('stage-margin')) { $el.find('.owl-stage-outer').css({ 'margin-left': this.options.stagePadding, 'margin-right': this.options.stagePadding }); } var heading_cls = '.porto-u-heading, .vc_custom_heading, .slider-title, .elementor-widget-heading, .porto-heading'; if ($el.hasClass('show-dots-title') && ($el.prev(heading_cls).length || $el.closest('.slider-wrapper').prev(heading_cls).length || $el.closest('.porto-recent-posts').prev(heading_cls).length || $el.closest('.elementor-widget-porto_recent_posts, .elementor-section').prev(heading_cls).length)) { var $obj = $el.prev(heading_cls); if (!$obj.length) { $obj = $el.closest('.slider-wrapper').prev(heading_cls); } if (!$obj.length) { $obj = $el.closest('.porto-recent-posts').prev(heading_cls); } if (!$obj.length) { $obj = $el.closest('.elementor-widget-porto_recent_posts, .elementor-section').prev(heading_cls); } try { var innerWidth = $obj.addClass('w-auto').css('display', 'inline-block').width(); $obj.removeClass('w-auto').css('display', ''); if (innerWidth + 15 + $el.find('.owl-dots').width() <= $obj.width()) { $el.find('.owl-dots').css('left', innerWidth + 15 + ($el.width() - $obj.width()) / 2); $el.find('.owl-dots').css('top', -1 * $obj.height() / 2 - parseInt($obj.css('margin-bottom')) - $el.find('.owl-dots').height() / 2 + 2); } else { $el.find('.owl-dots').css('position', 'static'); } } catch(e) {} } }, touchDrag: (count == 1) ? false : true, mouseDrag: (count == 1) ? false : true }); // Auto Height Fixes if (this.options.autoHeight) { var thisobj = this; $(window).on('resize', function() { thisobj.calcOwlHeight($el); }); $(window).on('load', function() { thisobj.calcOwlHeight($el); }); } var links = false; if (zoom) { links = []; var i = 0; $el.find('.zoom').each(function() { var slide = {}, $zoom = $(this); slide.src = $zoom.data('src'); slide.title = $zoom.data('title'); links[i] = slide; $zoom.data('index', i); i++; }); } if ($el.hasClass('show-nav-title')) { this.options.stagePadding = 0; } else { if (this.options.themeConfig && theme.slider_nav && theme.slider_nav_hover) $el.addClass('show-nav-hover'); if (this.options.themeConfig && !theme.slider_nav_hover && theme.slider_margin) $el.addClass('stage-margin'); } $el.owlCarousel(this.options); if (zoom && links) { $el.on('click', '.zoom', function(e) { e.preventDefault(); if ($.fn.magnificPopup) { $.magnificPopup.close(); $.magnificPopup.open($.extend(true, {}, theme.mfpConfig, { items: links, gallery: { enabled: true }, type: 'image' }), $(this).data('index')); } return false; }); } return this; } }; // expose to scope $.extend(theme, { Carousel: Carousel }); // jquery plugin $.fn.themeCarousel = function(opts, zoom) { return this.map(function() { var $this = $(this); if ($this.data(instanceName)) { return $this; } else { return new theme.Carousel($this, opts, zoom); } }); }; }).apply(this, [window.theme, jQuery]); // Chart Circular (function(theme, $) { 'use strict'; theme = theme || {}; var instanceName = '__chartCircular'; var ChartCircular = function($el, opts) { return this.initialize($el, opts); }; ChartCircular.defaults = { accX: 0, accY: -150, delay: 1, barColor: '#0088CC', trackColor: '#f2f2f2', scaleColor: false, scaleLength: 5, lineCap: 'round', lineWidth: 13, size: 175, rotate: 0, animate: ({ duration: 2500, enabled: true }) }; ChartCircular.prototype = { initialize: function($el, opts) { if ($el.data(instanceName)) { return this; } this.$el = $el; this .setData() .setOptions(opts) .build(); return this; }, setData: function() { this.$el.data(instanceName, this); return this; }, setOptions: function(opts) { this.options = $.extend(true, {}, ChartCircular.defaults, opts, { wrapper: this.$el }); return this; }, build: function() { if (!($.isFunction($.fn.easyPieChart))) { return this; } var self = this, $el = this.options.wrapper, value = ($el.attr('data-percent') ? $el.attr('data-percent') : 0), percentEl = $el.find('.percent'); if (!value) value = 1; var labelValue = this.options.labelValue ? this.options.labelValue : value; $.extend(true, self.options, { onStep: function(from, to, currentValue) { percentEl.html(parseInt(labelValue * currentValue / value)); } }); $el.attr('data-percent', 0); theme.appear($el.get(0), function() { $el.easyPieChart(self.options); var handler; if (Number(self.options.delay) <= 1000 / 60) { handler = theme.requestFrame; } else { handler = theme.requestTimeout; } handler(function() { $el.data('easyPieChart').update(value); $el.attr('data-percent', value); }, self.options.delay); }, { accX: self.options.accX, accY: self.options.accY }); return this; } }; // expose to scope $.extend(theme, { ChartCircular: ChartCircular }); // jquery plugin $.fn.themeChartCircular = function(opts) { return this.map(function() { var $this = $(this); if ($this.data(instanceName)) { return $this.data(instanceName); } else { return new theme.ChartCircular($this, opts); } }); }; }).apply(this, [window.theme, jQuery]); // Fit Video (function(theme, $) { 'use strict'; theme = theme || {}; var instanceName = '__fitVideo'; var FitVideo = function($el, opts) { return this.initialize($el, opts); }; FitVideo.defaults = { }; FitVideo.prototype = { initialize: function($el, opts) { if ($el.data(instanceName)) { return this; } this.$el = $el; this .setData() .setOptions(opts) .build(); return this; }, setData: function() { this.$el.data(instanceName, this); return this; }, setOptions: function(opts) { this.options = $.extend(true, {}, FitVideo.defaults, opts, { wrapper: this.$el }); return this; }, build: function() { if (!($.isFunction($.fn.fitVids))) { return this; } var $el = this.options.wrapper; $el.fitVids(); $(window).on('resize', function() { $el.fitVids(); }); return this; } }; // expose to scope $.extend(theme, { FitVideo: FitVideo }); // jquery plugin $.fn.themeFitVideo = function(opts) { return this.map(function() { var $this = $(this); if ($this.data(instanceName)) { return $this.data(instanceName); } else { return new theme.FitVideo($this, opts); } }); }; }).apply(this, [window.theme, jQuery]); /* Porto Video Background */ (function(theme, $) { 'use strict'; theme = theme || {}; var instanceName = '__videobackground'; var PluginVideoBackground = function($el, opts) { return this.initialize($el, opts); }; PluginVideoBackground.defaults = { overlay: true, volume: 1, playbackRate: 1, muted: true, loop: true, autoplay: true, position: '50% 50%', posterType: 'detect' }; PluginVideoBackground.prototype = { initialize: function($el, opts) { this.$el = $el; this .setData() .setOptions(opts) .build(); return this; }, setData: function() { this.$el.data(instanceName, this); return this; }, setOptions: function(opts) { this.options = $.extend(true, {}, PluginVideoBackground.defaults, opts, { path: this.$el.data('video-path'), wrapper: this.$el }); return this; }, build: function() { if (!($.isFunction($.fn.vide)) || (!this.options.path)) { return this; } if (this.options.overlay) { this.options.wrapper.prepend( $('
').addClass('video-overlay') ); } this.options.wrapper.vide(this.options.path, this.options); return this; } }; // expose to scope $.extend(theme, { PluginVideoBackground: PluginVideoBackground }); // jquery plugin $.fn.themePluginVideoBackground = function(opts) { return this.map(function() { var $this = $(this); if ($this.data(instanceName)) { return $this.data(instanceName); } else { return new PluginVideoBackground($this, opts); } }); }; }).apply(this, [window.theme, jQuery]); // Flickr Zoom (function(theme, $) { 'use strict'; theme = theme || {}; var instanceName = '__flickrZoom'; var FlickrZoom = function($el, opts) { return this.initialize($el, opts); }; FlickrZoom.defaults = { }; FlickrZoom.prototype = { initialize: function($el, opts) { if ($el.data(instanceName)) { return this; } this.$el = $el; this .setData() .setOptions(opts) .build(); return this; }, setData: function() { this.$el.data(instanceName, this); return this; }, setOptions: function(opts) { this.options = $.extend(true, {}, FlickrZoom.defaults, opts, { wrapper: this.$el }); return this; }, build: function() { var $el = this.options.wrapper, links = [], i = 0, $flickr_links = $el.find('.flickr_badge_image > a'); $flickr_links.each(function() { var slide = {}, $image = $(this).find('> img'); slide.src = $image.attr('src').replace('_s.', '_b.'); slide.title = $image.attr('title'); links[i] = slide; i++; }); $flickr_links.on('click', function(e) { e.preventDefault(); if ($.fn.magnificPopup) { $.magnificPopup.close(); $.magnificPopup.open($.extend(true, {}, theme.mfpConfig, { items: links, gallery: { enabled: true }, type: 'image' }), $flickr_links.index($(this))); } }); return this; } }; // expose to scope $.extend(theme, { FlickrZoom: FlickrZoom }); // jquery plugin $.fn.themeFlickrZoom = function(opts) { return this.map(function() { var $this = $(this); if ($this.data(instanceName)) { return $this.data(instanceName); } else { return new theme.FlickrZoom($this, opts); } }); } }).apply(this, [window.theme, jQuery]); // Lazy Load (function(theme, $) { 'use strict'; theme = theme || {}; var instanceName = '__lazyload'; var PluginLazyLoad = function($el, opts) { return this.initialize($el, opts); }; PluginLazyLoad.defaults = { effect: 'show', appearEffect: '', appear: function(elements_left, settings) { }, load: function(elements_left, settings) { $(this).addClass('lazy-load-loaded ' + settings.appearEffect.trim()); } }; PluginLazyLoad.prototype = { initialize: function($el, opts) { if ($el.data(instanceName)) { return this; } this.$el = $el; this .setData() .setOptions(opts) .build(); return this; }, setData: function() { this.$el.data(instanceName, this); return this; }, setOptions: function(opts) { this.options = $.extend(true, {}, PluginLazyLoad.defaults, opts, { wrapper: this.$el }); return this; }, build: function() { if (!($.isFunction($.fn.lazyload))) { return this; } var self = this; self.options.wrapper.lazyload(this.options); return this; } }; // expose to scope $.extend(theme, { PluginLazyLoad: PluginLazyLoad }); // jquery plugin $.fn.themePluginLazyLoad = function(opts) { return this.map(function() { var $this = $(this); if ($this.data(instanceName)) { return $this.data(instanceName); } else { return new PluginLazyLoad($this, opts); } }); /*var $this = $(this); if ($this.data(instanceName)) { return $this.data(instanceName); } else { return new PluginLazyLoad($this, opts); }*/ } }).apply(this, [window.theme, jQuery]); // Loading Overlay (function(theme, $) { 'use strict'; theme = theme || {}; var loadingOverlayTemplate = [ '
', '
', '
' ].join(''); var LoadingOverlay = function( $wrapper, options ) { return this.initialize( $wrapper, options ); }; LoadingOverlay.prototype = { options: { css: {} }, initialize: function( $wrapper, options ) { this.$wrapper = $wrapper; this .setVars() .setOptions( options ) .build() .events(); this.$wrapper.data( 'loadingOverlay', this ); }, setVars: function() { this.$overlay = this.$wrapper.find('.loading-overlay'); return this; }, setOptions: function( options ) { if ( !this.$overlay.get(0) ) { this.matchProperties(); } this.options = $.extend( true, {}, this.options, options ); this.loaderClass = this.getLoaderClass( this.options.css.backgroundColor ); return this; }, build: function() { if ( !this.$overlay.closest(document.documentElement).get(0) ) { if ( !this.$cachedOverlay ) { this.$overlay = $( loadingOverlayTemplate ).clone(); if ( this.options.css ) { this.$overlay.css( this.options.css ); this.$overlay.find( '.loader' ).addClass( this.loaderClass ); } } else { this.$overlay = this.$cachedOverlay.clone(); } this.$wrapper.append( this.$overlay ); } if ( !this.$cachedOverlay ) { this.$cachedOverlay = this.$overlay.clone(); } return this; }, events: function() { var _self = this; if ( this.options.startShowing ) { _self.show(); } if ( this.$wrapper.is('body') || this.options.hideOnWindowLoad ) { $( window ).on( 'load error', function() { _self.hide(); }); } if ( this.options.listenOn ) { $( this.options.listenOn ) .on( 'loading-overlay:show beforeSend.ic', function( e ) { e.stopPropagation(); _self.show(); }) .on( 'loading-overlay:hide complete.ic', function( e ) { e.stopPropagation(); _self.hide(); }); } this.$wrapper .on( 'loading-overlay:show beforeSend.ic', function( e ) { e.stopPropagation(); _self.show(); }) .on( 'loading-overlay:hide complete.ic', function( e ) { e.stopPropagation(); _self.hide(); }); return this; }, show: function() { this.build(); this.position = this.$wrapper.css( 'position' ).toLowerCase(); if ( this.position != 'relative' || this.position != 'absolute' || this.position != 'fixed' ) { this.$wrapper.css({ position: 'relative' }); } this.$wrapper.addClass( 'loading-overlay-showing' ); }, hide: function() { var _self = this; this.$wrapper.removeClass( 'loading-overlay-showing' ); setTimeout(function() { if ( this.position != 'relative' || this.position != 'absolute' || this.position != 'fixed' ) { _self.$wrapper.css({ position: '' }); } }, 500); }, matchProperties: function() { var i, l, properties; properties = [ 'backgroundColor', 'borderRadius' ]; l = properties.length; for( i = 0; i < l; i++ ) { var obj = {}; obj[ properties[ i ] ] = this.$wrapper.css( properties[ i ] ); $.extend( this.options.css, obj ); } }, getLoaderClass: function( backgroundColor ) { if ( !backgroundColor || backgroundColor === 'transparent' || backgroundColor === 'inherit' ) { return 'black'; } var hexColor, r, g, b, yiq; var colorToHex = function( color ){ var hex, rgb; if( color.indexOf('#') >- 1 ){ hex = color.replace('#', ''); } else { rgb = color.match(/\d+/g); hex = ('0' + parseInt(rgb[0], 10).toString(16)).slice(-2) + ('0' + parseInt(rgb[1], 10).toString(16)).slice(-2) + ('0' + parseInt(rgb[2], 10).toString(16)).slice(-2); } if ( hex.length === 3 ) { hex = hex + hex; } return hex; }; hexColor = colorToHex( backgroundColor ); r = parseInt( hexColor.substr( 0, 2), 16 ); g = parseInt( hexColor.substr( 2, 2), 16 ); b = parseInt( hexColor.substr( 4, 2), 16 ); yiq = ((r * 299) + (g * 587) + (b * 114)) / 1000; return ( yiq >= 128 ) ? 'black' : 'white'; } }; // expose to scope $.extend(theme, { LoadingOverlay: LoadingOverlay }); // expose as a jquery plugin $.fn.loadingOverlay = function( opts ) { return this.each(function() { var $this = $( this ); var loadingOverlay = $this.data( 'loadingOverlay' ); if ( loadingOverlay ) { return loadingOverlay; } else { var options = opts || $this.data( 'loading-overlay-options' ) || {}; return new LoadingOverlay( $this, options ); } }); } // auto init $(function() { $('body.loading-overlay-showing, [data-loading-overlay]').loadingOverlay(); }); }).apply(this, [window.theme, jQuery]); // Masonry (function(theme, $) { 'use strict'; theme = theme || {}; var instanceName = '__masonry'; var Masonry = function($el, opts) { return this.initialize($el, opts); }; Masonry.defaults = { itemSelector: 'li', isOriginLeft : !theme.rtl }; Masonry.prototype = { initialize: function($el, opts) { if ($el.data(instanceName)) { return this; } this.$el = $el; this .setData() .setOptions(opts) .build(); return this; }, setData: function() { this.$el.data(instanceName, this); return this; }, setOptions: function(opts) { this.options = $.extend(true, {}, Masonry.defaults, opts, { wrapper: this.$el }); return this; }, build: function() { if (!($.isFunction($.fn.isotope))) { return this; } var self = this, $el = this.options.wrapper, trigger_timer = null; $el.isotope(this.options); $el.isotope('on', 'layoutComplete', function() { if (typeof this.options.callback == 'function') { this.options.callback.call(); } //$el.find('.porto-lazyload:not(.lazy-load-loaded):visible').trigger('appear'); if ($el.find('.porto-lazyload:not(.lazy-load-loaded):visible').length) { $(window).trigger('scroll'); } }); $el.isotope('layout'); self.resize(); $(window).smartresize(function() { self.resize() }); return this; }, resize: function() { var self = this, $el = this.options.wrapper; if (self.resizeTimer) { theme.deleteTimeout(self.resizeTimer); } self.resizeTimer = theme.requestTimeout(function() { if ($el.data('isotope')) { $el.isotope('layout'); } delete self.resizeTimer; }, 600); } }; // expose to scope $.extend(theme, { Masonry: Masonry }); // jquery plugin $.fn.themeMasonry = function(opts) { return this.map(function() { var $this = $(this); $this.waitForImages(function() { if ($this.data(instanceName)) { return $this.data(instanceName); } else { return new theme.Masonry($this, opts); } }); }); } }).apply(this, [window.theme, jQuery]); // Preview Image (function(theme, $) { 'use strict'; theme = theme || {}; var instanceName = '__previewImage'; var PreviewImage = function($el, opts) { return this.initialize($el, opts); }; PreviewImage.defaults = { }; PreviewImage.prototype = { initialize: function($el, opts) { if ($el.data(instanceName)) { return this; } this.$el = $el; this .setData() .setOptions(opts) .build(); return this; }, setData: function() { this.$el.data(instanceName, this); return this; }, setOptions: function(opts) { this.options = $.extend(true, {}, PreviewImage.defaults, opts, { wrapper: this.$el }); return this; }, build: function() { var $el = this.options.wrapper, image = $el.data('image'); if (image) { $el.css('background-image', 'url(' + image + ')'); } return this; } }; // expose to scope $.extend(theme, { PreviewImage: PreviewImage }); // jquery plugin $.fn.themePreviewImage = function(opts) { return this.map(function() { var $this = $(this); if ($this.data(instanceName)) { return $this.data(instanceName); } else { return new theme.PreviewImage($this, opts); } }); } }).apply(this, [window.theme, jQuery]); // Refresh Video Sizes (function(theme, $) { 'use strict'; theme = theme || {}; var instanceName = '__refreshVideoSize'; var RefreshVideoSize = function($el, opts) { return this.initialize($el, opts); }; RefreshVideoSize.defaults = { }; RefreshVideoSize.prototype = { initialize: function($el, opts) { if ($el.data(instanceName)) { return this; } this.$el = $el; this .setData() .setOptions(opts) .build(); return this; }, setData: function() { this.$el.data(instanceName, this); return this; }, setOptions: function(opts) { this.options = $.extend(true, {}, RefreshVideoSize.defaults, opts, { wrapper: this.$el }); return this; }, build: function() { var self = this, resizeTimer = false; theme.requestTimeout(function() { self.refresh(); }, 100); $(window).on('resize', function() { if (resizeTimer) { theme.deleteTimeout(resizeTimer); } resizeTimer = theme.requestTimeout(function() { self.refresh(); }, 100); }); return this; }, refresh: function() { var $el = this.options.wrapper, $video = $el.find('video'), h = $el.height(); if (!$video.get(0)) { return; } $video.css('width', '100%').css('height', 'auto'); var vh = $video.height(); if (vh < h) { $video.css('height', h); $video.css('width', h / vh * 100 + '%'); } return this; } }; // expose to scope $.extend(theme, { RefreshVideoSize: RefreshVideoSize }); // jquery plugin $.fn.themeRefreshVideoSize = function(opts) { return this.map(function() { var $this = $(this); if ($this.data(instanceName)) { return $this.data(instanceName); } else { return new theme.RefreshVideoSize($this, opts); } }); } }).apply(this, [window.theme, jQuery]); // Toggle (function(theme, $) { 'use strict'; theme = theme || {}; var instanceName = '__toggle'; var Toggle = function($el, opts) { return this.initialize($el, opts); }; Toggle.defaults = { }; Toggle.prototype = { initialize: function($el, opts) { if ($el.data(instanceName)) { return this; } this.$el = $el; this .setData() .setOptions(opts) .build(); return this; }, setData: function() { this.$el.data(instanceName, this); return this; }, setOptions: function(opts) { this.options = $.extend(true, {}, Toggle.defaults, opts, { wrapper: this.$el }); return this; }, build: function() { var $el = this.options.wrapper; if ($el.hasClass('active')) $el.find("> div.toggle-content").stop().slideDown(350, function() { $(this).attr('style', '').show(); }); $el.on('click', "> label", function(e) { var parentSection = $(this).parent(), parentWrapper = $(this).closest("div.toogle"), parentToggles = $(this).closest(".porto-toggles"), isAccordion = parentWrapper.hasClass("toogle-accordion"), toggleContent = parentSection.find("> div.toggle-content"); if (isAccordion && typeof(e.originalEvent) != "undefined") { parentWrapper.find("section.toggle.active > label").trigger("click"); } // Preview Paragraph if(!parentSection.hasClass("active")) { if (parentToggles.length) { if (parentToggles.data('view') == 'one-toggle') { parentToggles.find('.toggle').each(function() { $(this).removeClass('active'); $(this).find("> div.toggle-content").stop().slideUp(350, function() { $(this).attr('style', '').hide(); }); }); } } toggleContent.stop().slideDown(350, function() { $(this).attr('style', '').show(); theme.refreshVCContent(toggleContent); }); parentSection.addClass("active"); } else { if (!parentToggles.length || parentToggles.data('view') != 'one-toggle') { toggleContent.stop().slideUp(350, function() { $(this).attr('style', '').hide(); }); parentSection.removeClass("active"); } } }); return this; } }; // expose to scope $.extend(theme, { Toggle: Toggle }); // jquery plugin $.fn.themeToggle = function(opts) { return this.map(function() { var $this = $(this); if ($this.data(instanceName)) { return $this.data(instanceName); } else { return new theme.Toggle($this, opts); } }); } }).apply(this, [window.theme, jQuery]); // Parallax (function(theme, $) { 'use strict'; theme = theme || {}; var instanceName = '__parallax'; var Parallax = function($el, opts) { return this.initialize($el, opts); }; Parallax.defaults = { speed: 1.5, horizontalPosition: '50%', offset: 0, }; Parallax.prototype = { initialize: function($el, opts) { if ($el.data(instanceName)) { return this; } this.$el = $el; this .setData() .setOptions(opts) .build(); return this; }, setData: function() { this.$el.data(instanceName, this); return this; }, setOptions: function(opts) { this.options = $.extend(true, {}, Parallax.defaults, opts, { wrapper: this.$el }); return this; }, build: function() { var self = this, $window = $(window), offset, yPos, bgpos, background; // Create Parallax Element background = $('
'); // Set Style for Parallax Element var bg = self.options.wrapper.data('image-src') ? 'url(' + self.options.wrapper.data('image-src') + ')' : self.options.wrapper.css('background-image'); background.css({ 'background-image': bg, 'background-size': 'cover', 'background-position': '50% 0%', 'position': 'absolute', 'top': 0, 'left': 0, 'width': '100%', 'height': self.options.speed * 100 + '%' }); // Add Parallax Element on DOM self.options.wrapper.prepend(background); // Set Overlfow Hidden and Position Relative to Parallax Wrapper self.options.wrapper.css({ 'position': 'relative', 'overflow': 'hidden' }); // Parallax Effect on Scroll & Resize var parallaxEffectOnScrolResize = function() { var skrollr_size = 100 * self.options.speed, skrollr_start = -(skrollr_size - 100); background.attr("data-bottom-top", "top: " + skrollr_start+"%;").attr("data-top-bottom", "top: 0%;"); } if (!theme.is_device_mobile) { parallaxEffectOnScrolResize(); } else { if( self.options.enableOnMobile == true ) { parallaxEffectOnScrolResize(); } else { self.options.wrapper.addClass('parallax-disabled'); } } return this; } }; // expose to scope $.extend(theme, { Parallax: Parallax }); // jquery plugin $.fn.themeParallax = function(opts) { if (typeof skrollr == 'undefined') { return this; } var obj = this.map(function() { var $this = $(this); if ($this.data(instanceName)) { return $this.data(instanceName); } else { return new theme.Parallax($this, opts); } }); if (theme.portoSkrollr) { theme.portoSkrollr.refresh(); } else if (!theme.is_device_mobile) { theme.portoSkrollr = skrollr.init( {forceHeight: false, smoothScrolling: false, mobileCheck: function() { return theme.is_device_mobile }} ); } return obj; } }).apply(this, [window.theme, jQuery]); // Sticky (function(theme, $) { 'use strict'; // jQuery Pin plugin $.fn.themePin = function (options) { var scrollY = 0, lastScrollY = 0, elements = [], disabled = false, $window = $(window), fixedSideTop = [], fixedSideBottom = [], prevDataTo = []; options = options || {}; var recalculateLimits = function () { for (var i=0, len=elements.length; i"); } var pad = $.extend({ top: 0, bottom: 0 }, options.padding || {}); var $pin = $this.parent(), pt = parseInt($pin.parent().css('padding-top')), pb = parseInt($pin.parent().css('padding-bottom')); if (options.autoInit) { if ($('#header').hasClass('header-side')) { pad.top = theme.adminBarHeight(); /*if ($('.page-top.fixed-pos').length) { pad.top += $('.page-top.fixed-pos').height(); }*/ } else { pad.top = theme.adminBarHeight(); if ($('#header > .main-menu-wrap').length || !$('#header').hasClass('sticky-menu-header')) { pad.top += theme.StickyHeader.sticky_height; } } if (typeof options.paddingOffsetTop != 'undefined') { pad.top += parseInt(options.paddingOffsetTop, 10); } else { pad.top += 18; } if (typeof options.paddingOffsetBottom != 'undefined') { pad.bottom = parseInt(options.paddingOffsetBottom, 10); } else { pad.bottom = 0; } } var bb = $this.css('border-bottom'), h = $this.outerHeight(); $this.css('border-bottom', '1px solid transparent'); var o_h = $this.outerHeight() - h - 1; $this.css('border-bottom', bb); $this.css({width: $this.outerWidth() <= $pin.width() ? $this.outerWidth() : $pin.width()}); $pin.css("height", $this.outerHeight() + o_h); if ( (!options.autoFit && !options.fitToBottom) || $this.outerHeight() <= $window.height()) { $this.data("themePin", { pad: pad, from: (options.containerSelector ? containerOffset.top : offset.top) - pad.top + pt, pb: pb, parentTop: parentOffset.top - pt, offset: o_h }); } else { $this.data("themePin", { pad: pad, fromFitTop: (options.containerSelector ? containerOffset.top : offset.top) - pad.top + pt, from: (options.containerSelector ? containerOffset.top : offset.top) + $this.outerHeight() - window.innerHeight + pt, pb: pb, parentTop: parentOffset.top - pt, offset: o_h }); } } }; var onScroll = function () { if (disabled) { return; } scrollY = $window.scrollTop(); var window_height = window.innerHeight || $window.height(); for (var i=0, len=elements.length; i data.end || from >= to) { $this.css({position: "", top: "", left: ""}); if (options.activeClass) { $this.removeClass(options.activeClass); } $this.removeClass('sticky-transition'); $this.removeClass('sticky-absolute'); continue; } if (scrollY > from && scrollY < to) { !($this.css("position") == "fixed") && $this.css({ left: $this.offset().left, top: data.pad.top }).css("position", "fixed"); if (options.activeClass) { $this.addClass(options.activeClass); } $this.removeClass('sticky-transition'); $this.removeClass('sticky-absolute'); } else if (scrollY >= to) { $this.css({ left: "", top: to - data.parentTop + data.pad.top }).css("position", "absolute"); if (options.activeClass) { $this.addClass(options.activeClass); } if ($this.hasClass('sticky-absolute')) $this.addClass('sticky-transition'); $this.addClass('sticky-absolute'); } else { $this.css({position: "", top: "", left: ""}); if (options.activeClass) { $this.removeClass(options.activeClass); } $this.removeClass('sticky-transition'); $this.removeClass('sticky-absolute'); } } else if (options.fitToBottom) { var from = data.from, to = data.to; if (data.from + window_height > data.end || data.from >= to) { $this.css({position: "", top: "", bottom: "", left: ""}); if (options.activeClass) { $this.removeClass(options.activeClass); } $this.removeClass('sticky-transition'); $this.removeClass('sticky-absolute'); continue; } if (scrollY > from && scrollY < to) { !($this.css("position") == "fixed") && $this.css({ left: $this.offset().left, bottom: data.pad.bottom, top: "" }).css("position", "fixed"); if (options.activeClass) { $this.addClass(options.activeClass); } $this.removeClass('sticky-transition'); $this.removeClass('sticky-absolute'); } else if (scrollY >= to) { $this.css({ left: "", top: data.to2, bottom: "" }).css("position", "absolute"); if (options.activeClass) { $this.addClass(options.activeClass); } if ($this.hasClass('sticky-absolute')) $this.addClass('sticky-transition'); $this.addClass('sticky-absolute'); } else { $this.css({position: "", top: "", bottom: "", left: ""}); if (options.activeClass) { $this.removeClass(options.activeClass); } $this.removeClass('sticky-transition'); $this.removeClass('sticky-absolute'); } } else { // auto fit var this_height = $this.outerHeight() if ( prevDataTo[i] != data.to ) { if (fixedSideBottom[i] && this_height + $this.offset().top + data.pad.bottom < scrollY + window_height) { fixedSideBottom[i] = false; } } if ( ( this_height + data.pad.top + data.pad.bottom ) > window_height || fixedSideTop[i] || fixedSideBottom[i] ) { var padTop = parseInt($this.parent().parent().css('padding-top')); // Reset the sideSortables style when scrolling to the top. if ( scrollY + data.pad.top - padTop <= data.parentTop ) { $this.css({position: "", top: "", bottom: "", left: ""}); fixedSideTop[i] = fixedSideBottom[i] = false; if (options.activeClass) { $this.removeClass(options.activeClass); } } else if ( scrollY >= data.to ) { $this.css({ left: "", top: data.to2, bottom: "" }).css("position", "absolute"); if (options.activeClass) { $this.addClass(options.activeClass); } } else { // When scrolling down. if ( scrollY >= lastScrollY ) { if ( fixedSideTop[i] ) { // Let it scroll. fixedSideTop[i] = false; sidebarTop = $this.offset().top - data.parentTop; $this.css({ left: "", top: sidebarTop, bottom: "" }).css("position", "absolute"); if (options.activeClass) { $this.addClass(options.activeClass); } } else if ( ! fixedSideBottom[i] && this_height + $this.offset().top + data.pad.bottom < scrollY + window_height ) { // Pin the bottom. fixedSideBottom[i] = true; !($this.css("position") == "fixed") && $this.css({ left: $this.offset().left, bottom: data.pad.bottom, top: "" }).css("position", "fixed"); if (options.activeClass) { $this.addClass(options.activeClass); } } // When scrolling up. } else if ( scrollY < lastScrollY ) { if ( fixedSideBottom[i] ) { // Let it scroll. fixedSideBottom[i] = false; sidebarTop = $this.offset().top - data.parentTop; /*if ($this.css('position') == 'absolute' && sidebarTop > data.to2) { sidebarTop = data.to2; }*/ $this.css({ left: "", top: sidebarTop, bottom: "" }).css("position", "absolute"); if (options.activeClass) { $this.addClass(options.activeClass); } } else if ( ! fixedSideTop[i] && $this.offset().top >= scrollY + data.pad.top ) { // Pin the top. fixedSideTop[i] = true; !($this.css("position") == "fixed") && $this.css({ left: $this.offset().left, top: data.pad.top, bottom: '' }).css("position", "fixed"); if (options.activeClass) { $this.addClass(options.activeClass); } } else if ( ! fixedSideBottom[i] && fixedSideTop[i] && $this.css('position') == 'absolute' && $this.offset().top >= scrollY + data.pad.top) { fixedSideTop[i] = false; } } } } else { // If the sidebar container is smaller than the viewport, then pin/unpin the top when scrolling. if ( scrollY >= ( data.parentTop - data.pad.top ) ) { $this.css( { position: 'fixed', top: data.pad.top } ); } else { $this.css({position: "", top: "", bottom: "", left: ""}); if (options.activeClass) { $this.removeClass(options.activeClass); } } fixedSideTop[i] = fixedSideBottom[i] = false; } } prevDataTo[i] = data.to; } lastScrollY = scrollY; }; var update = function () { recalculateLimits(); onScroll(); }, r_timer = null; this.each(function () { var $this = $(this), data = $(this).data('themePin') || {}; if (data && data.update) { return; } elements.push($this); $("img", this).one("load", function() { if (r_timer) { theme.deleteTimeout(r_timer); } r_timer = theme.requestFrame(recalculateLimits); }); data.update = update; $(this).data('themePin', data); fixedSideTop.push(false); fixedSideBottom.push(false); prevDataTo.push(0); }); $window.on('touchmove scroll', onScroll); recalculateLimits(); $window.on('load', update); $(this).on('recalc.pin', function() { recalculateLimits(); onScroll(); }); return this; }; theme = theme || {}; var instanceName = '__sticky'; var Sticky = function($el, opts) { return this.initialize($el, opts); }; Sticky.defaults = { autoInit: false, minWidth: 767, activeClass: 'sticky-active', padding: { top: 0, bottom: 0 }, offsetTop: 0, offsetBottom: 0, autoFit: false, fitToBottom: false }; Sticky.prototype = { initialize: function($el, opts) { if ($el.data(instanceName)) { return this; } this.$el = $el; this .setData() .setOptions(opts) .build(); return this; }, setData: function() { this.$el.data(instanceName, this); return this; }, setOptions: function(opts) { this.options = $.extend(true, {}, Sticky.defaults, opts, { wrapper: this.$el }); return this; }, build: function() { if (!($.isFunction($.fn.themePin))) { return this; } var self = this, $el = this.options.wrapper, stickyResizeTrigger; if ($el.hasClass('porto-sticky-nav')) { this.options.padding.top = theme.StickyHeader.sticky_height + theme.adminBarHeight(); this.options.activeClass = 'sticky-active'; this.options.containerSelector = '.main-content-wrap'; theme.sticky_nav_height = $el.outerHeight(); if (this.options.minWidth > window.innerWidth) theme.sticky_nav_height = 0; } $el.themePin(this.options); $(window).smartresize(function() { if (stickyResizeTrigger) { clearTimeout(stickyResizeTrigger); } stickyResizeTrigger = setTimeout(function() { $el.trigger('recalc.pin'); }, 800); var $parent = $el.parent(); $el.outerWidth($parent.width()); if ($el.css('position') == 'fixed') { $el.css('left', $parent.offset().left); } if ($el.hasClass('porto-sticky-nav')) { theme.sticky_nav_height = $el.outerHeight(); if (self.options.minWidth > window.innerWidth) theme.sticky_nav_height = 0; } }); return this; } }; // expose to scope $.extend(theme, { Sticky: Sticky }); // jquery plugin $.fn.themeSticky = function(opts) { return this.map(function() { var $this = $(this); if ($this.data(instanceName)) { $this.trigger('recalc.pin'); setTimeout(function() { $this.trigger('recalc.pin'); }, 800); return $this.data(instanceName); } else { return new theme.Sticky($this, opts); } }); } }).apply(this, [window.theme, jQuery]); // Mobile Panel (function(theme, $) { 'use strict'; $(function() { $(document.body).on('click', '.mobile-toggle', function(e) { var $nav_panel = $('#nav-panel'); if ($nav_panel.length > 0) { if ($(this).closest('.header-main').length && $nav_panel.closest('.header-builder-p').length && !$nav_panel.parent('.header-main').length) { $nav_panel.appendTo($(this).closest('.header-main')); } if ($nav_panel.is(':visible') && $('#header').hasClass('sticky-header')) { var h_h = $('#header').height(), p_h = $nav_panel.outerHeight(); if (h_h > p_h + 30) { $('#header').css('height', h_h - p_h); } } $nav_panel.stop().slideToggle(); } else if ($('#side-nav-panel').length > 0) { $('html').toggleClass('panel-opened'); $('.panel-overlay').toggleClass('active'); } if ($('#nav-panel .skeleton-body, #side-nav-panel .skeleton-body').length) { theme.lazyload_menu(1, 'mobile_menu'); } e.preventDefault(); }); $(document.body).on('click', '.panel-overlay', function() { $('html').css('transition', 'margin .3s').removeClass('panel-opened'); theme.requestTimeout(function() { $('html').css('transition', ''); }, 260); $(this).removeClass('active'); }); $(document.body).on('click', '#side-nav-panel .side-nav-panel-close', function(e) { e.preventDefault(); $('.panel-overlay').click(); }); $(window).on('resize', function() { if (window.innerWidth > 991) { $('#nav-panel').hide(); $('.panel-overlay').click(); } }); }); }).apply(this, [window.theme, jQuery]); // Portfolio Like (function(theme, $) { 'use strict'; $(function() { $(document).on('click', '.portfolio-like', function(e) { e.preventDefault(); var $this = $(this), $parent = $this.parent(), portfolio_id = $this.attr('data-id'); $.post( theme.ajax_url, { portfolio_id: portfolio_id, action: 'porto_portfolio-like', nonce: js_porto_vars.porto_nonce }, function(data) { if (data) { $this.remove(); $parent.html(data); $parent.find("data-tooltip").tooltip(); } } ); return false; }); }); }).apply(this, [window.theme, jQuery]); // Blog Like (function(theme, $) { 'use strict'; $(function() { $(document).on('click', '.blog-like', function(e) { e.preventDefault(); var $this = $(this), $parent = $this.parent(), blog_id = $this.attr('data-id'); if ($this.hasClass('updating')) { return false; } $this.addClass('updating').text('...'); $.post( theme.ajax_url, { blog_id: blog_id, action: 'porto_blog-like', nonce: js_porto_vars.porto_nonce }, function(data) { if (data) { $this.remove(); $parent.html(data); $parent.find("data-tooltip").tooltip(); } } ); return false; }); }); }).apply(this, [window.theme, jQuery]); // Scroll to Top //** jQuery Scroll to Top Control script- (c) Dynamic Drive DHTML code library: http://www.dynamicdrive.com. //** Available/ usage terms at http://www.dynamicdrive.com (March 30th, 09') //** v1.1 (April 7th, 09'): //** 1) Adds ability to scroll to an absolute position (from top of page) or specific element on the page instead. //** 2) Fixes scroll animation not working in Opera. var scrolltotop={ //startline: Integer. Number of pixels from top of doc scrollbar is scrolled before showing control //scrollto: Keyword (Integer, or "Scroll_to_Element_ID"). How far to scroll document up when control is clicked on (0=top). setting: {startline:100, scrollto: 0, scrollduration:1000, fadeduration:[500, 100]}, controlHTML: '', //HTML for control, which is auto wrapped in DIV w/ ID="topcontrol" controlattrs: {offsetx:10, offsety:10}, //offset of control relative to right/ bottom of window corner anchorkeyword: '#top', //Enter href value of HTML anchors on the page that should also act as "Scroll Up" links state: {isvisible:false, shouldvisible:false}, scrollup:function(){ if (!this.cssfixedsupport) //if control is positioned using JavaScript this.$control.css({opacity:0}); //hide control immediately after clicking it var dest=isNaN(this.setting.scrollto)? this.setting.scrollto : parseInt(this.setting.scrollto); if (typeof dest=="string" && jQuery('#'+dest).length==1) //check element set by string exists dest=jQuery('#'+dest).offset().top; else dest=0; this.$body.stop().animate({scrollTop: dest}, this.setting.scrollduration); }, keepfixed:function(){ var $window=jQuery(window); var controlx=$window.scrollLeft() + $window.width() - this.$control.width() - this.controlattrs.offsetx; var controly=$window.scrollTop() + $window.height() - this.$control.height() - this.controlattrs.offsety; this.$control.css({left:controlx+'px', top:controly+'px'}); }, togglecontrol:function(){ var scrolltop=jQuery(window).scrollTop(); if (!this.cssfixedsupport) this.keepfixed(); this.state.shouldvisible=(scrolltop>=this.setting.startline)? true : false; if (this.state.shouldvisible && !this.state.isvisible){ this.$control.stop().animate({opacity:1}, this.setting.fadeduration[0]); this.state.isvisible=true; } else if (this.state.shouldvisible==false && this.state.isvisible){ this.$control.stop().animate({opacity:0}, this.setting.fadeduration[1]); this.state.isvisible=false; } }, init:function(){ jQuery(document).ready(function($){ var mainobj=scrolltotop; var iebrws=document.all; mainobj.cssfixedsupport=!iebrws || iebrws && document.compatMode=="CSS1Compat" && window.XMLHttpRequest //not IE or IE7+ browsers in standards mode mainobj.$body=(window.opera)? (document.compatMode=="CSS1Compat"? $('html') : $('body')) : $('html,body'); mainobj.$control=$('
'+mainobj.controlHTML+'
') .css({position:mainobj.cssfixedsupport? 'fixed' : 'absolute', bottom:mainobj.controlattrs.offsety, opacity:0, cursor:'pointer'}) .attr({title:''}) .click(function(){mainobj.scrollup(); return false;}) .appendTo('body'); if (document.all && !window.XMLHttpRequest && mainobj.$control.text()!='') //loose check for IE6 and below, plus whether control contains any text mainobj.$control.css({width:mainobj.$control.width()}); //IE6- seems to require an explicit width on a DIV containing text mainobj.togglecontrol(); $('a[href="' + mainobj.anchorkeyword +'"]').click(function(){ mainobj.scrollup(); return false; }); $(window).on('scroll resize', function(e){ mainobj.togglecontrol(); }); }); } }; //scrolltotop.init() (function(theme, $) { 'use strict'; theme = theme || {}; $.extend(theme, { ScrollToTop: { defaults: { html: '', offsetx: 10, offsety: 0 }, initialize: function(html, offsetx, offsety) { if ($('#topcontrol').length) { return this; } this.html = (html || this.defaults.html); this.offsetx = (offsetx || this.defaults.offsetx); this.offsety = (offsety || this.defaults.offsety); this.build(); return this; }, build: function() { var self = this; if (typeof scrolltotop !== 'undefined') { // scroll top control scrolltotop.controlHTML = self.html; scrolltotop.controlattrs = {offsetx: self.offsetx, offsety: self.offsety}; scrolltotop.init(); } return self; } } }); }).apply(this, [window.theme, jQuery]); // Mega Menu (function(theme, $) { 'use strict'; theme = theme || {}; $.extend(theme, { MegaMenu: { defaults: { menu: $('.mega-menu') }, initialize: function($menu) { this.$menu = ($menu || this.defaults.menu); this.build() .events(); return this; }, popupWidth: function() { var winWidth = window.innerWidth, popupWidth = window.innerWidth - theme.getScrollbarWidth() - theme.grid_gutter_width * 2; if (!$('body').hasClass('wide')) { if (winWidth >= theme.container_width + theme.grid_gutter_width - 1) popupWidth = theme.container_width - theme.grid_gutter_width; else if (winWidth >= 992) popupWidth = 960 - theme.grid_gutter_width; else if (winWidth >= 768) popupWidth = 720 - theme.grid_gutter_width; } return popupWidth; }, calcMenuPosition: function(menu_obj) { var menu = menu_obj, $header_container = $("#header .header-main .container-fluid").length ? $("#header .header-main .container-fluid") : ( $("#header .header-main .container").length ? $("#header .header-main .container") : null ); if (null === $header_container) { return; } var menuContainerWidth = $header_container.outerWidth() - parseInt($header_container.css('padding-left')) - parseInt($header_container.css('padding-right')); if (menuContainerWidth < 900) return; if (menu.parent().hasClass('pos-fullwidth')) { menu.get(0).style.width = menuContainerWidth + 'px'; } var browserWidth = Math.max(document.documentElement.clientWidth, window.innerWidth || 0) - theme.getScrollbarWidth(), menuLeftPos = menu.offset().left - (browserWidth - menuContainerWidth) / 2; if (window.theme.rtl) { menuLeftPos = window.innerWidth - theme.getScrollbarWidth() - (menu.offset().left + menu.outerWidth() ) - (browserWidth - menuContainerWidth) / 2; } var menuWidth = menu.width(), remainWidth = menuContainerWidth - (menuLeftPos+menuWidth), l = false; if (menuLeftPos > remainWidth && menuLeftPos < menuWidth ) { l = (menuLeftPos + remainWidth) / 3; } if (remainWidth < 0) { l = -remainWidth; } return l; }, build: function($menu) { var self = this; if (!$menu) { $menu = self.$menu; } $menu.each( function() { var $menu = $(this), $menu_container = $menu.closest('.container'), container_width = self.popupWidth(); if ($menu.closest('.porto-popup-menu').length) { return false; } var $menu_items = $menu.children('li.has-sub'); $menu_items.each( function() { var $menu_item = $(this), $popup = $menu_item.children('.popup'); if ($popup.length) { var popup_obj = $popup.get(0); popup_obj.style.display = 'block'; if ($menu_item.hasClass('wide')) { popup_obj.style.left = 0; var padding = parseInt($popup.css('padding-left')) + parseInt($popup.css('padding-right')) + parseInt($popup.find('> .inner').css('padding-left')) + parseInt($popup.find('> .inner').css('padding-right')); var row_number = 4; if ($menu_item.hasClass('col-2')) row_number = 2; if ($menu_item.hasClass('col-3')) row_number = 3; if ($menu_item.hasClass('col-4')) row_number = 4; if ($menu_item.hasClass('col-5')) row_number = 5; if ($menu_item.hasClass('col-6')) row_number = 6; if (window.innerWidth < 992) row_number = 1; var col_length = 0; $popup.find('> .inner > ul > li').each(function() { var cols = parseFloat($(this).attr('data-cols')); if (cols <= 0 || !cols) cols = 1; if (cols > row_number) cols = row_number; col_length += cols; }); if (col_length > row_number) col_length = row_number; var popup_max_width = $popup.data('popup-mw') ? $popup.data('popup-mw') : $popup.find('.inner').css('max-width'), col_width = container_width / row_number; if ('none' !== popup_max_width && popup_max_width < container_width) { col_width = parseInt(popup_max_width) / row_number; } $popup.find('> .inner > ul > li').each(function() { var cols = parseFloat($(this).data('cols')); if (cols <= 0) cols = 1; if (cols > row_number) cols = row_number; if ($menu_item.hasClass('pos-center') || $menu_item.hasClass('pos-left') || $menu_item.hasClass('pos-right')) this.style.width = (100 / col_length * cols) + '%'; else this.style.width = (100 / row_number * cols) + '%'; }); if ($menu_item.hasClass('pos-center')) { // position center $popup.find('> .inner > ul').get(0).style.width = (col_width * col_length - padding) + 'px'; var left_position = $popup.offset().left - (window.innerWidth - theme.getScrollbarWidth() - col_width * col_length) / 2; popup_obj.style.left = '-' + left_position + 'px'; } else if ($menu_item.hasClass('pos-left')) { // position left $popup.find('> .inner > ul').get(0).style.width = (col_width * col_length - padding) + 'px'; popup_obj.style.left = '-15px'; } else if ($menu_item.hasClass('pos-right')) { // position right $popup.find('> .inner > ul').get(0).style.width = (col_width * col_length - padding) + 'px'; popup_obj.style.right = '-15px'; popup_obj.style.left = 'auto'; } else { // position justify if (!$menu_item.hasClass('pos-fullwidth')) { $popup.find('> .inner > ul').get(0).style.width = (container_width - padding) + 'px'; } if (theme.rtl) { popup_obj.style.right = 0; popup_obj.style.left = 'auto'; } var left_position = self.calcMenuPosition($popup); if (theme.rtl) { popup_obj.style.right = '-15px'; popup_obj.style.left = 'auto'; if (left_position) { popup_obj.style.right = '-' + left_position + 'px'; } } else { popup_obj.style.left = '-15px'; popup_obj.style.right = 'auto'; if (left_position) { popup_obj.style.left = '-' + left_position + 'px'; } } } } $menu_item.addClass('sub-ready'); } }); }); return self; }, events: function() { var self = this; $(window).smartresize(function() { self.build(); }); $(window).on('load', function() { theme.requestFrame(function() { self.build(); }); }); return self; } } }); }).apply(this, [window.theme, jQuery]); // Sidebar Menu (function(theme, $) { 'use strict'; theme = theme || {}; $.extend(theme, { SidebarMenu: { defaults: { menu: $('.sidebar-menu:not(.side-menu-accordion)'), toggle: $('.widget_sidebar_menu .widget-title .toggle'), menu_toggle: $('#main-toggle-menu .menu-title') }, rtl: theme.rtl, initialize: function($menu, $toggle, $menu_toggle) { if (this.$menu && this.$menu.length && $menu && $menu.length) { this.$menu = $.unique($.merge(this.$menu, $menu)); this.build(); return this; } this.$menu = ($menu || this.defaults.menu); if (!this.$menu.length) { return this; } this.$toggle = ($toggle || this.defaults.toggle); this.$menu_toggle = ($menu_toggle || this.defaults.menu_toggle); this.build() .events(); return this; }, isRightSidebar: function($menu) { var flag = false; if (this.rtl) { flag = !($('#main').hasClass('column2-right-sidebar') || $('#main').hasClass('column2-wide-right-sidebar')); } else { flag = $('#main').hasClass('column2-right-sidebar') || $('#main').hasClass('column2-wide-right-sidebar'); } if ($menu.closest('#main-toggle-menu').length) { if (this.rtl) { flag = true; } else { flag = false; } } var $header_wrapper = $menu.closest('.header-wrapper'); if ($header_wrapper.length && $header_wrapper.hasClass('header-side-nav')) { if (this.rtl) { flag = true; } else { flag = false; } if( $('.page-wrapper').hasClass('side-nav-right') ){ if( this.rtl ){ flag = false; }else{ flag = true; } } } return flag; }, popupWidth: function() { var winWidth = window.innerWidth, popupWidth = winWidth - theme.getScrollbarWidth() - theme.grid_gutter_width * 2; if (!$('body').hasClass('wide')) { if (winWidth >= theme.container_width + theme.grid_gutter_width - 1) popupWidth = theme.container_width - theme.grid_gutter_width; else if (winWidth >= 992) popupWidth = 960 - theme.grid_gutter_width; else if (winWidth >= 768) popupWidth = 720 - theme.grid_gutter_width; } return popupWidth; }, build: function($menus) { var self = this; if (!$menus) { $menus = self.$menu; } if (!$menus.length) { return; } var $parent_toggle_wrap = $menus.parent('.toggle-menu-wrap'), parent_toogle_wrap = null; if ($parent_toggle_wrap.length && $parent_toggle_wrap.is(':hidden')) { parent_toogle_wrap = $parent_toggle_wrap.get(0); parent_toogle_wrap.style.display = 'block'; parent_toogle_wrap.style.visibility = 'hidden'; } $menus.each( function() { var $menu = $(this), container_width; if ($menu.hasClass('side-menu-slide')) { return; } if (window.innerWidth < 992) container_width = self.popupWidth(); else { var menu_width = this.offsetWidth ? this.offsetWidth : $menu.width(); container_width = self.popupWidth() - menu_width - 45; } var is_right_sidebar = self.isRightSidebar($menu), $menu_items = $menu.children('li'); $menu_items.each( function() { var $menu_item = $(this), $popup = $menu_item.children('.popup'); if ($popup.length) { var popup_obj = $popup.get(0), is_opened = false; if ($popup.is(':visible')) { is_opened = true; } else { popup_obj.style.display = 'block'; } if ($menu_item.hasClass('wide')) { if (!$menu.hasClass('side-menu-columns')) { popup_obj.style.left = 0; } var row_number = 4; if ($menu_item.hasClass('col-2')) row_number = 2; if ($menu_item.hasClass('col-3')) row_number = 3; if ($menu_item.hasClass('col-4')) row_number = 4; if ($menu_item.hasClass('col-5')) row_number = 5; if ($menu_item.hasClass('col-6')) row_number = 6; if (window.innerWidth < 992) row_number = 1; var col_length = 0; $popup.find('> .inner > ul > li').each(function() { var cols = parseFloat($(this).data('cols')); if (!cols || cols <= 0) cols = 1; if (cols > row_number) cols = row_number; col_length += cols; }); if (col_length > row_number) col_length = row_number; var popup_max_width = $popup.data('popup-mw') ? $popup.data('popup-mw') : $popup.find('.inner').css('max-width'), col_width = container_width / row_number; if ('none' !== popup_max_width && popup_max_width < container_width) { col_width = parseInt(popup_max_width) / row_number; } $popup.find('> .inner > ul > li').each(function() { var cols = parseFloat($(this).data('cols')); if (cols <= 0) cols = 1; if (cols > row_number) cols = row_number; if ($menu_item.hasClass('pos-center') || $menu_item.hasClass('pos-left') || $menu_item.hasClass('pos-right')) this.style.width = (100 / col_length * cols) + '%'; else this.style.width = (100 / row_number * cols) + '%'; }); popup_obj.children[0].children[0].style.width = col_width * col_length + 1 + 'px'; if (!$menu.hasClass('side-menu-columns')) { if (is_right_sidebar) { popup_obj.style.left = 'auto'; popup_obj.style.right = (this.offsetWidth ? this.offsetWidth : $(this).width()) + 'px'; } else { popup_obj.style.left = (this.offsetWidth ? this.offsetWidth : $(this).width()) + 'px'; popup_obj.style.right = 'auto'; } } } if (!is_opened) { popup_obj.style.display = 'none'; } if ($menu.hasClass('side-menu-accordion')) { } else if ($menu.hasClass('side-menu-slide')) { } else if (!$menu_item.hasClass('sub-ready')) { $menu_item.hover(function() { $menu_items.find('.popup').hide(); $popup.show(); $popup.parent().addClass('open'); $(document.body).trigger('appear_refresh'); }, function() { $popup.hide(); $popup.parent().removeClass('open'); }); $menu_item.addClass('sub-ready'); } } }); }); // slide menu if ($menus.hasClass('side-menu-slide')) { var slideNavigation = { $mainNav: $menus, $mainNavItem: $menus.find('li'), build: function(){ var self = this; self.menuNav(); }, menuNav: function(){ var self = this; self.$mainNav.find('.menu-item-has-children > a.nolink').removeClass('nolink').attr('href', ''); self.$mainNav.find('.menu-item-has-children > a:not(.go-back)').off('click').on('click', function(e) { e.stopImmediatePropagation(); e.preventDefault(); var currentMenu = $(this).closest('ul'), nextMenu = $(this).parent().find('ul').first(); if (nextMenu.children('.menu-item').children('.go-back').length < 1) { nextMenu.prepend(''); } var nextMenuHeightDiff = nextMenu.find('> li').length * nextMenu.find('> li').outerHeight() - nextMenu.outerHeight(); currentMenu.addClass('next-menu'); nextMenu.addClass('visible'); currentMenu.css({ overflow: 'visible', 'overflow-y': 'visible' }); if (nextMenuHeightDiff > 0) { nextMenu.css({ overflow: 'hidden', 'overflow-y': 'scroll' }); } //for (i = 0; i < nextMenu.find('> li').length; i++) { if( nextMenu.outerHeight() < (nextMenu.closest('.header-main').outerHeight() - 100) ) { nextMenu.css({ height: nextMenu.outerHeight() + nextMenu.find('> li').outerHeight() }); } // } nextMenu.css({ 'padding-top': nextMenuHeightDiff + 'px' }); }); } }; slideNavigation.build(); } if (parent_toogle_wrap) { parent_toogle_wrap.style.display = ''; parent_toogle_wrap.style.visibility = ''; } return self; }, events: function() { var self = this; self.$toggle.on('click', function() { var $widget = $(this).parent().parent(); var $this = $(this); if ($this.hasClass('closed')) { $this.removeClass('closed'); $widget.removeClass('closed'); $widget.find('.sidebar-menu-wrap').stop().slideDown(400, function() { $(this).attr('style', '').show(); self.build(); }); } else { $this.addClass('closed'); $widget.addClass('closed'); $widget.find('.sidebar-menu-wrap').stop().slideUp(400, function() { $(this).attr('style', '').hide(); }); } }); this.$menu_toggle.on('click', function() { var $toggle_menu = $(this).parent(); if ($toggle_menu.hasClass('show-always') || $toggle_menu.hasClass('show-hover')) { return; } var $this = $(this); if ($this.hasClass('closed')) { $this.removeClass('closed'); $toggle_menu.removeClass('closed'); $toggle_menu.find('.toggle-menu-wrap').stop().slideDown(400, function() { $(this).attr('style', '').show(); }); self.build(); } else { $this.addClass('closed'); $toggle_menu.addClass('closed'); $toggle_menu.find('.toggle-menu-wrap').stop().slideUp(400, function() { $(this).attr('style', '').hide(); }); } }); if (self.$menu.hasClass('side-menu-slide')) { self.$menu.on('click', '.go-back', function(e) { e.preventDefault(); var prevMenu = $(this).closest('.next-menu'), prevMenuHeightDiff = 0; if (prevMenu.length && prevMenu.find('> li').length) { prevMenuHeightDiff = prevMenu.find('> li').length * prevMenu.find('> li').outerHeight() - prevMenu.outerHeight(); } prevMenu.removeClass('next-menu'); $(this).closest('ul').removeClass('visible'); if( prevMenuHeightDiff > 0 ) { prevMenu.css({ overflow: 'hidden', 'overflow-y': 'scroll' }); } }); } if ($('.sidebar-menu:not(.side-menu-accordion)').closest('[data-plugin-sticky]').length) { var sidebarRefreshTimer; $(window).smartresize(function() { if (sidebarRefreshTimer) { clearTimeout(sidebarRefreshTimer); } sidebarRefreshTimer = setTimeout(function() { self.build(); }, 800); }); } else { $(window).smartresize(function() { self.build(); }); } setTimeout(function() { self.build(); }, 400); return self; } } }); }).apply(this, [window.theme, jQuery]); // Sticky Header (function(theme, $) { 'use strict'; theme = theme || {}; $.extend(theme, { StickyHeader: { defaults: { header: $('#header') }, initialize: function($header) { this.$header = ($header || this.defaults.header); this.sticky_height = 0; this.sticky_pos = 0; this.change_logo = theme.change_logo; if (!theme.show_sticky_header || !this.$header.length || $('.side-header-narrow-bar').length) return this; var self = this; var $menu_wrap = self.$header.find('> .main-menu-wrap'); if ($menu_wrap.length) { self.$menu_wrap = $menu_wrap; self.menu_height = $menu_wrap.height(); } else { self.$menu_wrap = false; } self.$header_main = self.$header.find('.header-main'); // fix compatibility issue with Elementor pro header builder if ( !self.$header_main.length && self.$header.children('.elementor-location-header').length ) { self.$header_main = self.$header.children('.elementor-location-header').last().addClass('header-main'); } if (!self.$header_main.length) { return this; } self.reveal = self.$header.parents('.header-wrapper').hasClass('header-reveal'); self.is_sticky = false; self.reset() .build() .events(); return self; }, build: function() { var self = this; if (!self.is_sticky && (window.innerHeight + self.header_height + theme.adminBarHeight() + parseInt(self.$header.css('border-top-width')) >= $(document).height())) { return self; } if (window.innerHeight > $(document.body).height()) window.scrollTo(0, 0); var scroll_top = $(window).scrollTop(); if (self.$menu_wrap && !theme.isTablet()) { self.$header_main.stop().css('top', 0); if (self.$header.parent().hasClass('fixed-header')) self.$header.parent().attr('style', ''); if (scroll_top > self.sticky_pos) { if (!self.$header.hasClass('sticky-header')) { var header_height = self.$header.outerHeight(); self.$header.addClass('sticky-header').css('height', header_height); self.$menu_wrap.stop().css('top', theme.adminBarHeight()); var selectric = self.$header.find('.header-main .searchform select').data('selectric'); if (selectric && typeof selectric.close != 'undefined') selectric.close(); if (self.$header.parent().hasClass('fixed-header')) { self.$header_main.hide(); self.$header.css('height', ''); } if (!self.init_toggle_menu) { self.init_toggle_menu = true; theme.MegaMenu.build(); if ($('#main-toggle-menu').length) { if ($('#main-toggle-menu').hasClass('show-always')) { $('#main-toggle-menu').data('show-always', true); $('#main-toggle-menu').removeClass('show-always'); } $('#main-toggle-menu').addClass('closed'); $('#main-toggle-menu .menu-title').addClass('closed'); $('#main-toggle-menu .toggle-menu-wrap').attr('style', ''); } } self.is_sticky = true; } } else { if (self.$header.hasClass('sticky-header')) { self.$header.removeClass('sticky-header'); self.$header.css('height', ''); self.$menu_wrap.stop().css('top', 0); self.$header_main.show(); var selectric = self.$header.find('.main-menu-wrap .searchform select').data('selectric'); if (selectric && typeof selectric.close != 'undefined') selectric.close(); if (self.init_toggle_menu) { self.init_toggle_menu = false; theme.MegaMenu.build(); if ($('#main-toggle-menu').length) { if ($('#main-toggle-menu').data('show-always')) { $('#main-toggle-menu').addClass('show-always'); $('#main-toggle-menu').removeClass('closed'); $('#main-toggle-menu .menu-title').removeClass('closed'); $('#main-toggle-menu .toggle-menu-wrap').attr('style', ''); } } } self.is_sticky = false; } } } else { self.$header_main.show(); if (self.$header.parent().hasClass('fixed-header') && $('#wpadminbar').length && $('#wpadminbar').css('position') == 'absolute') { self.$header.parent().css('top', ($('#wpadminbar').height() - scroll_top) < 0 ? -$('#wpadminbar').height() : -scroll_top); } else if (self.$header.parent().hasClass('fixed-header')) { self.$header.parent().attr('style', ''); } else { if (self.$header.parent().hasClass('fixed-header')) self.$header.parent().attr('style', ''); } if (self.$header.hasClass('sticky-menu-header') && !theme.isTablet()) { self.$header_main.stop().css('top', 0); if (self.change_logo) self.$header_main.removeClass('change-logo'); self.$header_main.removeClass('sticky'); self.$header.removeClass('sticky-header'); self.is_sticky = false; self.sticky_height = 0; } else { if (self.$menu_wrap) self.$menu_wrap.stop().css('top', 0); if (scroll_top > self.sticky_pos && (!theme.isTablet() || (theme.isTablet() && (!theme.isMobile() && theme.show_sticky_header_tablet) || (theme.isMobile() && theme.show_sticky_header_tablet && theme.show_sticky_header_mobile)))) { if (!self.$header.hasClass('sticky-header')) { var header_height = self.$header.outerHeight(); self.$header.addClass('sticky-header').css('height', header_height); self.$header_main.addClass('sticky'); if (self.change_logo) self.$header_main.addClass('change-logo'); self.$header_main.stop().css('top', theme.adminBarHeight()); if (!self.init_toggle_menu) { self.init_toggle_menu = true; theme.MegaMenu.build(); if ($('#main-toggle-menu').length) { if ($('#main-toggle-menu').hasClass('show-always')) { $('#main-toggle-menu').data('show-always', true); $('#main-toggle-menu').removeClass('show-always'); } $('#main-toggle-menu').addClass('closed'); $('#main-toggle-menu .menu-title').addClass('closed'); $('#main-toggle-menu .toggle-menu-wrap').attr('style', ''); } } self.is_sticky = true; } } else { if (self.$header.hasClass('sticky-header')) { if (self.change_logo) self.$header_main.removeClass('change-logo'); self.$header_main.removeClass('sticky'); self.$header.removeClass('sticky-header'); self.$header.css('height', ''); self.$header_main.stop().css('top', 0); if (self.init_toggle_menu) { self.init_toggle_menu = false; theme.MegaMenu.build(); if ($('#main-toggle-menu').length) { if ($('#main-toggle-menu').data('show-always')) { $('#main-toggle-menu').addClass('show-always'); $('#main-toggle-menu').removeClass('closed'); $('#main-toggle-menu .menu-title').removeClass('closed'); $('#main-toggle-menu .toggle-menu-wrap').attr('style', ''); } } } self.is_sticky = false; } } } } if (!self.$header.hasClass('header-loaded')) self.$header.addClass('header-loaded'); if (!self.$header.find('.logo').hasClass('logo-transition')) self.$header.find('.logo').addClass('logo-transition'); if (self.$header.find('.overlay-logo').get(0) && !self.$header.find('.overlay-logo').hasClass('overlay-logo-transition')) self.$header.find('.overlay-logo').addClass('overlay-logo-transition'); return self; }, reset: function() { var self = this; if (self.$header.find('.logo').hasClass('logo-transition')) self.$header.find('.logo').removeClass('logo-transition'); if (self.$header.find('.overlay-logo').get(0) && self.$header.find('.overlay-logo').hasClass('overlay-logo-transition')) self.$header.find('.overlay-logo').removeClass('overlay-logo-transition'); if (self.$menu_wrap && !theme.isTablet()) { // show main menu self.$header.addClass('sticky-header sticky-header-calc'); self.$header_main.addClass('sticky'); if (self.change_logo) self.$header_main.addClass('change-logo'); self.sticky_height = self.$menu_wrap.height() + parseInt(self.$menu_wrap.css('padding-top')) + parseInt(self.$menu_wrap.css('padding-bottom')); if (self.change_logo) self.$header_main.removeClass('change-logo'); self.$header_main.removeClass('sticky'); self.$header.removeClass('sticky-header sticky-header-calc'); self.header_height = self.$header.height() + parseInt(self.$header.css('margin-top')); self.menu_height = self.$menu_wrap.height() + parseInt(self.$menu_wrap.css('padding-top')) + parseInt(self.$menu_wrap.css('padding-bottom')); self.sticky_pos = (self.header_height - self.sticky_height) + parseInt($('body').css('padding-top')) + parseInt(self.$header.css('border-top-width')); if ($('.banner-before-header').length) { self.sticky_pos += $('.banner-before-header').height(); } if ($('.porto-block-html-top').length) { self.sticky_pos += $('.porto-block-html-top').height(); } } else { // show header main self.$header.addClass('sticky-header sticky-header-calc'); self.$header_main.addClass('sticky'); if (self.change_logo) self.$header_main.addClass('change-logo'); self.sticky_height = self.$header_main.outerHeight(); if (self.change_logo) self.$header_main.removeClass('change-logo'); self.$header_main.removeClass('sticky'); self.$header.removeClass('sticky-header sticky-header-calc'); self.header_height = self.$header.height() + parseInt(self.$header.css('margin-top')); self.main_height = self.$header_main.height(); if (!(!theme.isTablet() || (theme.isTablet() && !theme.isMobile() && theme.show_sticky_header_tablet) || (theme.isMobile() && theme.show_sticky_header_tablet && theme.show_sticky_header_mobile))) { self.sticky_height = 0; } /*if (self.$header_main.length && self.$header.length) { self.sticky_pos = self.$header_main.offset().top - self.$header.offset().top + $('.banner-before-header').height() + parseInt($('body').css('padding-top')) + parseInt(self.$header.css('border-top-width')); } else { self.sticky_pos = $('.banner-before-header').height() + parseInt($('body').css('padding-top')) + parseInt(self.$header.css('border-top-width')); } if (theme.adminBarHeight() && self.$header.offset().top > theme.adminBarHeight()) { self.sticky_pos -= theme.adminBarHeight(); } self.sticky_pos = (self.header_height - self.sticky_height) + $('.banner-before-header').height() + $('.porto-block-html-top').height() + parseInt($('body').css('padding-top')) + parseInt(self.$header.css('border-top-width'));*/ self.sticky_pos = self.$header.offset().top + self.header_height - self.sticky_height - theme.adminBarHeight() + parseInt(self.$header.css('border-top-width')); } if (self.reveal) { if (self.menu_height) { self.sticky_pos += self.menu_height + 30; } else { self.sticky_pos += 30; } } if (self.sticky_pos < 0) { self.sticky_pos = 0; } self.init_toggle_menu = false; self.$header_main.removeAttr('style'); if (!theme.isTablet() && self.$header.hasClass('header-side') && typeof self.$header.attr('data-plugin-sticky') != 'undefined') { self.$header.css('height', ''); } else { self.$header.removeAttr('style'); } return self; }, events: function() { var self = this, win_width = 0; $(window).smartresize(function() { if (win_width != window.innerWidth) { self.reset().build(); win_width = window.innerWidth; } }); window.addEventListener('scroll', function() { theme.requestFrame(function() { self.build(); }); }, {passive: true}); return self; } } }); }).apply(this, [window.theme, jQuery]); // Side Nav (function(theme, $) { 'use strict'; theme = theme || {}; $.extend(theme, { SideNav: { defaults: { side_nav: $('.header-side-nav #header') }, bc_pos_top: 0, initialize: function($side_nav) { this.$side_nav = ($side_nav || this.defaults.side_nav); if (!this.$side_nav.length) return this; var self = this; self.$side_nav.addClass('initialize'); self.reset() .build() .events(); return self; }, build: function() { var self = this; var $page_top = $('.page-top'), $main = $('#main'); if (theme.isTablet()) { //self.$side_nav.removeClass("fixed-bottom"); $page_top.removeClass("fixed-pos"); $page_top.attr('style', ''); $main.attr('style', ''); } else { //var side_height = self.$side_nav.innerHeight(); //var window_height = window.innerHeight; var scroll_top = $(window).scrollTop(); /*if (side_height - window_height + theme.adminBarHeight() < scroll_top) { if (!self.$side_nav.hasClass("fixed-bottom")) self.$side_nav.addClass("fixed-bottom"); } else { if (self.$side_nav.hasClass("fixed-bottom")) self.$side_nav.removeClass("fixed-bottom"); }*/ if ($page_top.length && $page_top.outerHeight() < 100 && !$('.side-header-narrow-bar-top').length) { if (self.page_top_offset == theme.adminBarHeight() || self.page_top_offset <= scroll_top) { if (!$page_top.hasClass("fixed-pos")) { $page_top.addClass("fixed-pos"); $page_top.css('top', theme.adminBarHeight()); $main.css('padding-top', $page_top.outerHeight()); } } else { if ($page_top.hasClass("fixed-pos")) { $page_top.removeClass("fixed-pos"); $page_top.attr('style', ''); $main.attr('style', ''); } } } $main.css('min-height', window.innerHeight - theme.adminBarHeight() - $('.page-top:not(.fixed-pos)').height() - $('.footer-wrapper').height()); } return self; }, reset: function() { var self = this; if (theme.isTablet()) { self.$side_nav.attr('style', ''); } else { var w_h = window.innerHeight, $side_bottom = self.$side_nav.find('.side-bottom'); self.$side_nav.css({ 'min-height': w_h - theme.adminBarHeight(), 'padding-bottom': $side_bottom.length ? $side_bottom.height() + parseInt($side_bottom.css('margin-top')) + parseInt($side_bottom.css('margin-bottom')) : '' }); var appVersion = navigator.appVersion; var webkitVersion_positionStart = appVersion.indexOf("AppleWebKit/") + 12; var webkitVersion_positionEnd = webkitVersion_positionStart + 3; var webkitVersion = appVersion.slice(webkitVersion_positionStart,webkitVersion_positionEnd); if (webkitVersion < 537) { self.$side_nav.css('-webkit-backface-visibility', 'hidden'); self.$side_nav.css('-webkit-perspective', '1000'); } } var $page_top = $('.page-top'), $main = $('#main'); if ($page_top.length) { $page_top.removeClass("fixed-pos"); $page_top.attr('style', ''); $main.attr('style', ''); self.page_top_offset = $page_top.offset().top; } return self; }, events: function() { var self = this; $(window).on('resize', function() { self.reset() .build(); }); window.addEventListener('scroll', function() { self.build(); }, {passive: true}); if ($('.side-header-narrow-bar-top').length) { if ($(window).scrollTop() > theme.adminBarHeight() + $('.side-header-narrow-bar-top').height()) { $('.side-header-narrow-bar-top').addClass('side-header-narrow-bar-sticky'); } window.addEventListener('scroll', function() { var scroll_top = $(this).scrollTop(); if (scroll_top > theme.adminBarHeight() + $('.side-header-narrow-bar-top').height()) { $('.side-header-narrow-bar-top').addClass('side-header-narrow-bar-sticky'); } else { $('.side-header-narrow-bar-top').removeClass('side-header-narrow-bar-sticky'); } }, {passive: true}); } // Side Narrow Bar $('.side-header-narrow-bar .hamburguer-btn').on('click', function() { $(this).toggleClass('active'); $('#header').toggleClass('side-header-visible'); if ($(this).closest('.side-header-narrow-bar-top').length && !$('#header > .hamburguer-btn').length) { $(this).closest('.side-header-narrow-bar-top').toggle(); } }); $('.hamburguer-close').on('click', function(){ $('.side-header-narrow-bar .hamburguer-btn').trigger('click'); }); return self; } } }); }).apply(this, [window.theme, jQuery]); // Search (function(theme, $) { 'use strict'; theme = theme || {}; $.extend(theme, { Search: { defaults: { popup: $('.searchform-popup'), form: $('.searchform') }, initialize: function($popup, $form) { this.$popup = ($popup || this.defaults.popup); this.$form = ($form || this.defaults.form); this.build() .events(); return this; }, build: function() { var self = this; /* Change search form values */ var $search_form_texts = self.$form.find('.text input'), $search_form_cats = self.$form.find('.cat'); if ($('.header-wrapper .searchform .cat').get(0) && $.fn.selectric) { $('.header-wrapper .searchform .cat').selectric({ arrowButtonMarkup: '', expandToItemText: true, maxHeight: 240 }); } $search_form_texts.on('change', function() { var $this = $(this), val = $this.val(); $search_form_texts.each(function() { if ($this != $(this)) $(this).val(val); }); }); $search_form_cats.on('change', function() { var $this = $(this), val = $this.val(); $search_form_cats.each(function() { if ($this != $(this)) $(this).val(val); }); }); return this; }, events: function() { var self = this; self.$popup.on('click', function(e) { e.stopPropagation(); }); self.$popup.find('.search-toggle').on('click', function(e) { $(this).toggleClass('opened'); $(this).next().toggle(); if ($(this).hasClass('opened')) { $('#mini-cart.open').removeClass('open'); $(this).next().find('input[type="text"]').focus(); if (self.$popup.find('.btn-close-search-form').length) { self.$popup.parent().addClass('position-static'); } } e.stopPropagation(); }); $('html,body').on('click', function() { self.removeFormStyle(); }); if (!('ontouchstart' in document)) { $(window).on('resize', function() { self.removeFormStyle(); }); $('.btn-close-search-form').on('click', function(e) { e.preventDefault(); self.removeFormStyle(); }); } return self; }, removeFormStyle: function() { this.$form.removeAttr('style'); this.$popup.find('.search-toggle').removeClass('opened'); if (this.$popup.find('.btn-close-search-form').length) { this.$popup.parent().removeClass('position-static'); } } } }); }).apply(this, [window.theme, jQuery]); // Hash Scroll (function(theme, $) { 'use strict'; theme = theme || {}; $.extend(theme, { HashScroll: { initialize: function() { this.build() .events(); return this; }, build: function() { var self = this; try { var hash = window.location.hash; var target = $(hash); if (target.length && !(hash == '#review_form' || hash == '#reviews' || hash.indexOf('#comment-') != -1)) { $('html, body').delay(600).stop().animate({ scrollTop: target.offset().top - theme.StickyHeader.sticky_height - theme.adminBarHeight() - theme.sticky_nav_height + 1 }, 600, 'easeOutQuad', function() { self.activeMenuItem(); }); } return self; } catch (err) { return self; } }, getTarget: function(href) { if ('#' == href || href.endsWith('#')) { return false; } var target; if (href.indexOf('#') == 0) { target = $(href); } else { var url = window.location.href; url = url.substring(url.indexOf('://') + 3); if (url.indexOf('#') != -1) url = url.substring(0, url.indexOf('#')); href = href.substring(href.indexOf('://') + 3); href = href.substring(href.indexOf(url) + url.length); if (href.indexOf('#') == 0) { target = $(href); } } return target; }, activeMenuItem: function() { var self = this; var scroll_pos = $(window).scrollTop(); var $menu_items = $('.menu-item > a[href*="#"], .porto-sticky-nav .nav > li > a[href*="#"]'); if ($menu_items.length) { $menu_items.each(function() { var $this = $(this), href = $this.attr('href'), target = self.getTarget(href); if (target && target.get(0)) { if ($this.parent().is(':last-child') && scroll_pos + window.innerHeight >= target.offset().top + target.outerHeight()) { $this.parent().siblings().removeClass('active'); $this.parent().addClass('active'); } else { var scroll_to = target.offset().top - theme.StickyHeader.sticky_height - theme.adminBarHeight() - theme.sticky_nav_height + 1, $parent = $this.parent(); //if (scroll_to <= theme.StickyHeader.sticky_pos + theme.sticky_nav_height) { //scroll_to = theme.StickyHeader.sticky_pos + theme.sticky_nav_height + 1; //} if (scroll_to <= scroll_pos + 5) { $parent.siblings().removeClass('active'); $parent.addClass('active'); if ($parent.closest('.secondary-menu').length) { $parent.closest('#header').find('.main-menu').eq(0).children('.menu-item.active').removeClass('active'); } } else { $parent.removeClass('active'); } } } }); } return self; }, events: function() { var self = this; $('.menu-item > a[href*="#"], .porto-sticky-nav .nav > li > a[href*="#"], a[href*="#"].hash-scroll, .hash-scroll-wrap a[href*="#"]').on('click', function(e) { e.preventDefault(); var $this = $(this), href = $this.attr('href'), target = self.getTarget(href); if (target && target.get(0)) { var $parent = $this.parent(); var scroll_to = target.offset().top - theme.StickyHeader.sticky_height - theme.adminBarHeight() - theme.sticky_nav_height + 1; // if (scroll_to <= theme.StickyHeader.sticky_pos + theme.sticky_nav_height) { // scroll_to = theme.StickyHeader.sticky_pos + theme.sticky_nav_height + 1; // } $('html, body').stop().animate({ scrollTop: scroll_to }, 600, 'easeOutQuad', function() { self.activeMenuItem(); $parent.siblings().removeClass('active'); $parent.addClass('active'); }); if ($this.closest('.porto-popup-menu.opened').length) { $this.closest('.porto-popup-menu.opened').children('.hamburguer-btn').trigger('click'); } } else if (('#' != href || !$this.closest('.porto-popup-menu.opened').length) && !$this.hasClass('nolink')) { window.location.href = $this.attr('href'); } }); window.addEventListener('scroll', function() { self.activeMenuItem(); }, {passive: true}); self.activeMenuItem(); return self; } } }); }).apply(this, [window.theme, jQuery]); // Sort Filter (function(theme, $) { 'use strict'; theme = theme || {}; $.extend(theme, { SortFilter: { defaults: { filters: '.porto-sort-filters ul', elements: '.porto-sort-container .row' }, initialize: function($elements, $filters) { this.$elements = ($elements || $(this.defaults.elements)); this.$filters = ($filters || $(this.defaults.filters)); this.build(); return this; }, build: function() { var self = this; self.$elements.each(function() { var $this = $(this); $this.isotope({ itemSelector: '.porto-sort-item', layoutMode: 'masonry', getSortData: { popular: '[data-popular] parseInt' }, sortBy: 'popular', isOriginLeft : !theme.rtl }); $this.isotope('on', 'layoutComplete', function() { $this.find('.porto-lazyload:not(.lazy-load-loaded)').trigger('appear'); }); $this.waitForImages(function() { if ($this.data('isotope')) { $this.isotope('layout'); } }); }); self.$filters.each(function() { var $this = $(this); var id = $this.attr('data-sort-id'); var $container = $('#' + id); if ($container.length) { $this.on('click', 'li', function(e) { e.preventDefault(); var $that = $(this); $this.find('li').removeClass('active'); $that.addClass("active"); var sortByValue = $that.attr('data-sort-by'); $container.isotope({sortBy: sortByValue}); var filterByValue = $that.attr('data-filter-by'); if (filterByValue) { $container.isotope({filter: filterByValue}); } else { $container.isotope({filter: '.porto-sort-item'}); } theme.refreshVCContent(); }); $this.find('li[data-active]').click(); } }); return self; } } }); }).apply(this, [window.theme, jQuery]); /* * Footer Reveal */ (function($) { var $footerReveal = { $wrapper: $('.footer-reveal'), init: function() { var self = this; self.build(); self.events(); }, build: function() { var self = this, footer_height = self.$wrapper.outerHeight(true), window_height = window.innerHeight - theme.adminBarHeight(); if ($('#header .header-main').length) { window_height -= $('#header .header-main').height(); } if( footer_height > window_height ) { $('.footer-wrapper').removeClass('footer-reveal'); $('.page-wrapper').css('margin-bottom', 0); } else { $('.footer-wrapper').addClass('footer-reveal'); $('.page-wrapper').css('margin-bottom', footer_height); } }, events: function() { var self = this, $window = $(window); $window.smartresize(function(){ self.build(); }); } } if( $('.footer-reveal').get(0) ) { $footerReveal.init(); } })(jQuery); // Float Element (function(theme, $) { 'use strict'; theme = theme || {}; var instanceName = '__floatElement'; var PluginFloatElement = function($el, opts) { return this.initialize($el, opts); }; PluginFloatElement.defaults = { startPos: 'top', speed: 3, horizontal: false, transition: false, transitionDelay: 0, transitionDuration: 500 }; PluginFloatElement.prototype = { initialize: function($el, opts) { if ($el.data(instanceName)) { return this; } this.$el = $el; this .setData() .setOptions(opts) .build(); return this; }, setData: function() { this.$el.data(instanceName, this); return this; }, setOptions: function(opts) { this.options = $.extend(true, {}, PluginFloatElement.defaults, opts, { wrapper: this.$el }); return this; }, build: function() { var self = this, $el = this.options.wrapper, $window = $(window), minus; if( self.options.style ) { $el.attr('style', self.options.style); } if( $window.width() > 767 ) { // Set Start Position if( self.options.startPos == 'none' ) { minus = ''; } else if( self.options.startPos == 'top' ) { $el.css({ top: 0 }); minus = ''; } else { $el.css({ bottom: 0 }); minus = '-'; } // Set Transition if( self.options.transition ) { $el.css({ transition: 'ease-out transform '+ self.options.transitionDuration +'ms ' + self.options.transitionDelay + 'ms' }); } // First Load self.movement(minus); // Scroll window.addEventListener('scroll', function(){ self.movement(minus); }, {passive: true}); } return this; }, movement: function(minus) { var self = this, $el = this.options.wrapper, $window = $(window), scrollTop = $window.scrollTop(), elementOffset = $el.offset().top, currentElementOffset = (elementOffset - scrollTop); var scrollPercent = 100 * currentElementOffset / ($window.height()); if( $el.visible( true ) ) { if( !self.options.horizontal ) { $el.css({ transform: 'translate3d(0, '+ minus + scrollPercent / self.options.speed +'%, 0)' }); } else { $el.css({ transform: 'translate3d('+ minus + scrollPercent / self.options.speed +'%, '+ minus + scrollPercent / self.options.speed +'%, 0)' }); } } } }; // expose to scope $.extend(theme, { PluginFloatElement: PluginFloatElement }); // jquery plugin $.fn.themePluginFloatElement = function(opts) { return this.map(function() { var $this = $(this); if ($this.data(instanceName)) { return $this.data(instanceName); } else { return new PluginFloatElement($this, opts); } }); } }).apply(this, [window.theme, jQuery]); // Init Theme function porto_init($wrap) { 'use strict'; jQuery(window).on('touchstart',function(){}); if (!$wrap) { $wrap = jQuery(document.body); } $wrap.trigger('porto_init_start'); (function ($) { // Accordion if ($.isFunction($.fn.themeAccordion)) { $(function() { $wrap.find('.accordion:not(.manual)').each(function() { var $this = $(this), opts; var pluginOptions = $this.data('plugin-options'); if (pluginOptions) opts = pluginOptions; $this.themeAccordion(opts); }); }); } // Accordion Menu if ($.isFunction($.fn.themeAccordionMenu)) { $(function() { $wrap.find('.accordion-menu:not(.manual)').each(function() { var $this = $(this), opts; var pluginOptions = $this.data('plugin-options'); if (pluginOptions) opts = pluginOptions; $this.themeAccordionMenu(opts); }); }); } // Animate if ($.isFunction($.fn.themeAnimate)) { $(function() { $wrap.find('[data-plugin-animate], [data-appear-animation]').each(function() { var $this = $(this), opts; var pluginOptions = $this.data('plugin-options'); if (pluginOptions) { if (typeof pluginOptions == 'string') { opts = JSON.parse(pluginOptions.replace(/'/g,'"').replace(';','')); } else { opts = pluginOptions; } } $this.themeAnimate(opts); }); }); } // Carousel if ($.isFunction($.fn.themeCarousel)) { $(function() { if (!window.parent.document.getElementById('vcv-layout')) { $wrap.find('.vc-porto-carousel-wrapper .porto-carousel.manual').removeClass('manual'); } // Carousel Lazyload images var portoCarouselInit = function(e) { var $this = $(e.currentTarget); if ($this.find('.owl-item.cloned').length) { $this.find('.porto-lazyload:not(.lazy-load-loaded)').themePluginLazyLoad({effect: 'fadeIn', effect_speed: 400}); $this.find('.appear-animation').themeAnimate(); } setTimeout(function() { var $hiddenItems = $this.find('.owl-item:not(.active)'); if (!$('html').hasClass('no-csstransitions') && window.innerWidth > 767) { $hiddenItems.find('.appear-animation').removeClass('appear-animation-visible'); $hiddenItems.find('.appear-animation').each(function() { var $el = $(this), delay = Math.abs($el.data('appear-animation-delay') ? $el.data('appear-animation-delay') : 0); if (delay > 1) { this.style.animationDelay = delay + 'ms'; } var duration = Math.abs($el.data('appear-animation-duration') ? $el.data('appear-animation-duration') : 1000); if (1000 != duration) { this.style.animationDuration = duration + 'ms'; } }); } if (window.innerWidth >= 1200) { $hiddenItems.find('[data-vce-animate]').removeAttr('data-vcv-o-animated'); } }, 300); }; var portoCarouselTranslated = function(e) { var $this = $(e.currentTarget); if (window.innerWidth > 767) { if ($this.find('.owl-item.cloned').length && $this.find('.appear-animation:not(.appear-animation-visible)').length) { $(document.body).trigger('appear_refresh'); } } var $active = $this.find('.owl-item.active'); if ($active.hasClass('translating')) { $active.removeClass('translating'); return; } $this.find('.owl-item.translating').removeClass('translating'); if (window.innerWidth > 767) { // WPBakery $this.find('.appear-animation').removeClass('appear-animation-visible'); $active.find('.appear-animation').each(function () { var $animation_item = $(this), anim_name = $animation_item.data('appear-animation'); $animation_item.addClass(anim_name + ' appear-animation-visible'); }); } // Elementor $active.find('.slide-animate').each(function () { var $animation_item = $(this), settings = $animation_item.data('settings'); if (settings && (settings._animation || settings.animation)) { var animation = settings._animation || settings.animation, delay = settings._animation_delay || settings.animation_delay || 0; theme.requestTimeout(function() { $animation_item.removeClass('elementor-invisible').addClass('animated ' + animation); }, delay); } }); // Visual Composer if (window.innerWidth >= 1200) { $this.find('[data-vce-animate]').removeAttr('data-vcv-o-animated').removeAttr('data-vcv-o-animated-fully'); $active.find('[data-vce-animate]').each(function () { var $animation_item = $(this); if ($animation_item.data('porto-origin-anim')) { var anim_name = $animation_item.data('porto-origin-anim'); $animation_item.attr('data-vce-animate', anim_name).attr('data-vcv-o-animated', true); var duration = parseFloat(window.getComputedStyle(this)[ 'animationDuration' ]) * 1000, delay = parseFloat(window.getComputedStyle(this)[ 'animationDelay' ]) * 1000; window.setTimeout(function() { $animation_item.attr('data-vcv-o-animated-fully', true); }, delay + duration + 5); } }); } }; var portoCarouselTranslateVC = function(e) { var $this = $(e.currentTarget); $this.find('.owl-item.active').addClass('translating'); if (window.innerWidth >= 1200) { $this.find('[data-vce-animate]').each(function () { var $animation_item = $(this); $animation_item.data('porto-origin-anim', $animation_item.data('vce-animate')).attr('data-vce-animate', ''); }); } }; var portoCarouselTranslateElementor = function(e) { var $this = $(e.currentTarget); $this.find('.owl-item.active').addClass('translating'); $this.find('.owl-item:not(.active) .slide-animate').addClass('elementor-invisible'); $this.find('.slide-animate').each(function () { var $animation_item = $(this), settings = $animation_item.data('settings'); if (settings._animation || settings.animation) { $animation_item.removeClass(settings._animation || settings.animation); } }); }; var portoCarouselTranslateWPB = function(e) { if (window.innerWidth > 767) { var $this = $(e.currentTarget); $this.find('.owl-item.active').addClass('translating'); $this.find('.appear-animation').each(function () { var $animation_item = $(this); $animation_item.removeClass($animation_item.data('appear-animation')); }); } }; var carouselItems = $wrap.find('.owl-carousel:not(.manual)'); carouselItems.on('initialized.owl.carousel refreshed.owl.carousel', portoCarouselInit).on('translated.owl.carousel', portoCarouselTranslated); carouselItems.filter(function() { if ($(this).find('[data-vce-animate]').length) { return true; } return false; }).on('translate.owl.carousel', portoCarouselTranslateVC); carouselItems.filter(function() { var $anim_obj = $(this).find('.elementor-invisible'); if ($anim_obj.length) { $anim_obj.addClass('slide-animate'); return true; } return false; }).on('translate.owl.carousel', portoCarouselTranslateElementor); carouselItems.filter(function() { if ($(this).find('.appear-animation').length) { return true; } return false; }).on('translate.owl.carousel', portoCarouselTranslateWPB); $wrap.find('[data-plugin-carousel]:not(.manual), .porto-carousel:not(.manual)').each(function() { var $this = $(this), opts; var pluginOptions = $this.data('plugin-options'); if (pluginOptions) opts = pluginOptions; $this.themeCarousel(opts); }); }); } // Chart.Circular if ($.isFunction($.fn.themeChartCircular)) { $(function() { $wrap.find('[data-plugin-chart-circular]:not(.manual), .circular-bar-chart:not(.manual)').each(function() { var $this = $(this), opts; var pluginOptions = $this.data('plugin-options'); if (pluginOptions) opts = pluginOptions; $this.themeChartCircular(opts); }); }); } // Fit Video if ($.isFunction($.fn.themeFitVideo)) { $(function() { $wrap.find('.fit-video:not(.manual)').each(function() { var $this = $(this), opts; var pluginOptions = $this.data('plugin-options'); if (pluginOptions) opts = pluginOptions; $this.themeFitVideo(opts); }); }); } // Video Background if ($.isFunction($.fn.themePluginVideoBackground)) { $(function() { $wrap.find('[data-plugin-video-background]:not(.manual)').each(function() { var $this = $(this), opts; var pluginOptions = JSON.parse($this.data('plugin-options').replace(/'/g,'"').replace(';','')); if (pluginOptions) opts = pluginOptions; $this.themePluginVideoBackground(opts); }); }); } // Flickr Zoom if ($.isFunction($.fn.themeFlickrZoom)) { $(function() { $wrap.find('.wpb_flickr_widget:not(.manual)').each(function() { var $this = $(this), opts; var pluginOptions = $this.data('plugin-options'); if (pluginOptions) opts = pluginOptions; $this.themeFlickrZoom(opts); }); }); } // Lazy Load if ($.isFunction($.fn.themePluginLazyLoad)) { $(function() { $wrap.find('[data-plugin-lazyload]:not(.manual)').each(function() { var $this = $(this), opts; var pluginOptions = $this.data('plugin-options'); if (pluginOptions) opts = pluginOptions; $this.themePluginLazyLoad(opts); }); $wrap.find('.porto-lazyload').filter(function() { if ($(this).data('__lazyload') || ($(this).closest('.owl-carousel').length && $(this).closest('.owl-carousel').find('.owl-item.cloned').length)) { return false; } return true; }).themePluginLazyLoad({effect: 'fadeIn', effect_speed: 400}); if ($wrap.find('.porto-lazyload').closest('.nivoSlider').length) { theme.requestTimeout(function() { $wrap.find('.nivoSlider').each(function() { if ($(this).find('.porto-lazyload').length) { $(this).closest('.nivoSlider').find('.nivo-main-image').attr('src', $(this).closest('.nivoSlider').find('.porto-lazyload').eq(0).attr('src')); } }); }, 100); } if ($wrap.find('.porto-lazyload').closest('.porto-carousel-wrapper').length) { theme.requestTimeout(function() { $wrap.find('.porto-carousel-wrapper').each(function() { if ($(this).find('.porto-lazyload:not(.lazy-load-loaded)').length) { $(this).find('.slick-list').css('height', 'auto'); $(this).find('.porto-lazyload:not(.lazy-load-loaded)').trigger('appear'); } }); }, 100); } }); } // Masonry if ($.isFunction($.fn.themeMasonry)) { $(function() { $wrap.find('[data-plugin-masonry]:not(.manual)').each(function() { var $this = $(this), opts; if ($this.hasClass('elementor-row')) { $this.children('.elementor-column').addClass('porto-grid-item'); } var pluginOptions = $this.data('plugin-options'); if (pluginOptions) opts = pluginOptions; $this.themeMasonry(opts); }); $wrap.find('.posts-masonry .posts-container:not(.manual)').each(function() { var pluginOptions = $(this).data('plugin-options'); if (!pluginOptions) { pluginOptions = {}; } pluginOptions.itemSelector = '.post'; $(this).themeMasonry(pluginOptions); }); $wrap.find('.page-portfolios .portfolio-row:not(.manual)').each(function() { if ( $(this).closest('.porto-grid-container').length > 0 || typeof $(this).attr('data-plugin-masonry') != 'undefined' ) { return; } var $parent = $(this).parent(), layoutMode = 'masonry', options, columnWidth = '.portfolio:not(.w2)', timer = null; if ($parent.hasClass('portfolios-grid')) { //layoutMode = 'fitRows'; } else if ($parent.hasClass('portfolios-masonry')) { $parent.append('
'); } options = { itemSelector: '.portfolio', layoutMode: layoutMode, callback: function() { timer && clearTimeout(timer); timer = setTimeout(function() { theme.FilterZoom.initialize($('.page-portfolios')); $parent.addClass('portfolio-iso-active'); }, 400); } }; if (layoutMode == 'masonry') { if (!$parent.find('.portfolio:not(.w2)').length) columnWidth = '.portfolio'; options = $.extend(true, {}, options, { masonry: { columnWidth: columnWidth } }); } $(this).themeMasonry(options); }); $wrap.find('.page-members .member-row:not(.manual)').each(function() { $(this).themeMasonry({ itemSelector: '.member', //layoutMode: 'fitRows', callback: function() { setTimeout(function() { theme.FilterZoom.initialize($('.page-members')); }, 400); } }); }); }); } // Preview Image if ($.isFunction($.fn.themePreviewImage)) { $(function() { $wrap.find('.thumb-info-preview .thumb-info-image:not(.manual)').each(function() { var $this = $(this), opts; var pluginOptions = $this.data('plugin-options'); if (pluginOptions) opts = pluginOptions; $this.themePreviewImage(opts); }); }); } // Refresh Video Size if ($.isFunction($.fn.themeRefreshVideoSize)) { $(function() { $wrap.find('.video-cover:not(.manual) .upb_video-bg').each(function() { var $this = $(this), opts; var pluginOptions = $this.data('plugin-options'); if (pluginOptions) opts = pluginOptions; $this.themeRefreshVideoSize(opts); }); }); } // Toggle if ($.isFunction($.fn.themeToggle)) { $(function() { $wrap.find('section.toggle:not(.manual)').each(function() { var $this = $(this), opts; var pluginOptions = $this.data('plugin-options'); if (pluginOptions) opts = pluginOptions; $this.themeToggle(opts); }); }); } // Parallax if ($.isFunction($.fn.themeParallax)) { $(function() { $wrap.find('[data-plugin-parallax]:not(.manual)').each(function() { var $this = $(this), opts; var pluginOptions = $this.data('plugin-options'); if (pluginOptions) opts = pluginOptions; $this.themeParallax(opts); }); }); } // Sticky if ($.isFunction($.fn.themeSticky)) { $(function() { $wrap.find('[data-plugin-sticky]:not(.manual), .porto-sticky:not(.manual), .porto-sticky-nav:not(.manual)').each(function() { var $this = $(this), opts; var pluginOptions = $this.data('plugin-options'); if (pluginOptions) opts = pluginOptions; if ($this.is(':visible')) { $this.themeSticky(opts); } }); }); } // Float Element if ($.isFunction($.fn['themePluginFloatElement'])) { $(function() { $wrap.find('[data-plugin-float-element]:not(.manual)').each(function() { var $this = $(this), opts; var pluginOptions = $this.data('plugin-options'); if (pluginOptions) opts = pluginOptions; if (typeof opts == 'string') { try { opts = JSON.parse(opts.replace(/'/g,'"').replace(';','')); } catch(e) {} } $this.themePluginFloatElement(opts); }); }); } /* Common */ // Tooltip if ($.isFunction($.fn.tooltip)) { $wrap.find("[data-tooltip]:not(.manual), [data-toggle='tooltip']:not(.manual), .star-rating:not(.manual)").tooltip(); } // bootstrap popover //$("[data-toggle='popover']").popover(); // Tabs $wrap.find('a[data-toggle="tab"]').off('shown.bs.tab').on('shown.bs.tab', function (e) { $(this).parents('.nav-tabs').find('.active').removeClass('active'); $(this).addClass('active').parent().addClass('active'); }); if($.fn.vcwaypoint) { // Progress bar tooltip $wrap.find('.vc_progress_bar').each(function() { var $this = $(this); if (!$this.find('.progress-bar-tooltip').length) { return; } $this.vcwaypoint(function() { var $tooltips = $this.find('.progress-bar-tooltip'), index = 0, count = $tooltips.length; function loop() { theme.requestTimeout(function() { $tooltips.animate({ opacity: 1 }); }, 200); index++; if (index < count) { loop(); } } loop(); }, { offset: '85%' }); }); } // Fixed video $wrap.find('.video-fixed').each(function() { var $this = $(this), $video = $this.find('video, iframe'); if ($video.length) { window.addEventListener('scroll', function() { var offset = $(window).scrollTop() - $this.position().top + theme.adminBarHeight(); $video.css("cssText", "top: " + offset + "px !important;"); }, {passive: true}); } }); // Thumb Gallery $wrap.find('.thumb-gallery-thumbs').each(function() { var $thumbs = $(this), $detail = $thumbs.parent().find('.thumb-gallery-detail'), flag = false, duration = 300; if ($thumbs.data('initThumbs')) return; $detail.on('changed.owl.carousel', function(e) { if (!flag) { flag = true; var len = $detail.find('.owl-item').length, cloned = $detail.find('.cloned').length; if (len) { $thumbs.trigger('to.owl.carousel', [(e.item.index - cloned / 2 - 1) % len, duration, true]); } flag = false; } }); $thumbs.on('changed.owl.carousel', function(e) { if (!flag) { flag = true; var len = $thumbs.find('.owl-item').length, cloned = $thumbs.find('.cloned').length; if (len) { $detail.trigger('to.owl.carousel', [(e.item.index - cloned / 2) % len, duration, true]); } flag = false; } }).on('click', '.owl-item', function() { if (!flag) { flag = true; var len = $thumbs.find('.owl-item').length, cloned = $thumbs.find('.cloned').length; if (len) { $detail.trigger('to.owl.carousel', [($(this).index() - cloned / 2) % len, duration, true]); } flag = false; } }).data('initThumbs', true); }); })(jQuery); jQuery(document.body).trigger('porto_init', [$wrap]); } (function(theme, $) { 'use strict'; $(document).ready(function() { if (typeof window.innerWidth == 'undefined') { window.innerWidth = $(window).width() + theme.getScrollbarWidth(); window.innerHeight = $(window).height(); $(window).on('resize', function() { window.innerWidth = $(window).width() + theme.getScrollbarWidth(); window.innerHeight = $(window).height(); }); } // Init Porto Theme porto_init(); // Scroll to Top if (typeof theme.ScrollToTop !== 'undefined') { theme.ScrollToTop.initialize(); } // Mega Menu if (typeof theme.MegaMenu !== 'undefined') { theme.MegaMenu.initialize(); } // Sidebar Menu if (typeof theme.SidebarMenu !== 'undefined') { theme.SidebarMenu.initialize(); $('.sidebar-menu.side-menu-accordion').themeAccordionMenu({'open_one':true}); } // Overlay Menu if ($('.porto-popup-menu').length) { $('.porto-popup-menu .hamburguer-btn').on('click', function(e) { e.preventDefault(); var $this = $(this); if ($('.porto-popup-menu-spacer').length) { $('.porto-popup-menu-spacer').remove(); } else { $('
').insertBefore($this.parent()); $('.porto-popup-menu-spacer').width($this.parent().width()); } $this.parent().toggleClass('opened'); theme.requestFrame(function() { $this.toggleClass('active'); }); }); $('.porto-popup-menu .main-menu').scrollbar(); $('.porto-popup-menu li.menu-item-has-children > a').on('click', function(e) { e.preventDefault(); $(this).parent().siblings('li.menu-item-has-children.opened').removeClass('opened'); $(this).parent().toggleClass('opened'); }); } // Lazy load Menu if (js_porto_vars.lazyload_menu) { var menu_type, $menu_obj, porto_menu_loaded = false; if ($('.secondary-menu.mega-menu').length) { menu_type = 'secondary_menu'; $menu_obj = $('.mega-menu.main-menu'); } else if ($('.mega-menu.main-menu').length) { menu_type = 'main_menu'; $menu_obj = $('.mega-menu.main-menu'); } else if ($('.toggle-menu-wrap .sidebar-menu').length) { menu_type = 'toggle_menu'; $menu_obj = $('.toggle-menu-wrap .sidebar-menu'); } else if ($('.main-sidebar-menu .sidebar-menu').length) { menu_type = 'sidebar_menu'; $menu_obj = $('.main-sidebar-menu .sidebar-menu'); } else if ($('.header-side-nav .sidebar-menu').length) { menu_type = 'header_side_menu'; $menu_obj = $('.header-side-nav .sidebar-menu'); } if ('pageload' == js_porto_vars.lazyload_menu) { theme.lazyload_menu($menu_obj, menu_type); } else if ('firsthover' == js_porto_vars.lazyload_menu) { $menu_obj.one('mouseenter', 'li.menu-item-has-children', function() { if (porto_menu_loaded) { return true; } theme.lazyload_menu($menu_obj, menu_type); porto_menu_loaded = true; }); } } // Side Navigation if (typeof theme.SideNav !== 'undefined') { theme.SideNav.initialize(); } // Sticky Header if (typeof theme.StickyHeader !== 'undefined') { theme.StickyHeader.initialize(); } // Search if (typeof theme.Search !== 'undefined') { theme.Search.initialize(); } // Hash Scroll if (typeof theme.HashScroll !== 'undefined') { theme.HashScroll.initialize(); } // Sort Filter if (typeof theme.SortFilter !== 'undefined') { theme.SortFilter.initialize(); } // Mobile Sidebar // filter popup events $(document).on('click', '.sidebar-toggle', function(e) { e.preventDefault(); var $html = $('html'); if ($(this).siblings('.porto-product-filters').length) { if ($html.hasClass('filter-sidebar-opened')) { $html.removeClass('filter-sidebar-opened'); $('.sidebar-overlay').removeClass('active'); } else { $html.removeClass('sidebar-opened'); $html.addClass('filter-sidebar-opened'); $('.sidebar-overlay').addClass('active'); } } else { if ($html.hasClass('sidebar-opened')) { $html.removeClass('sidebar-opened'); $('.sidebar-overlay').removeClass('active'); } else { $html.addClass('sidebar-opened'); $('.sidebar-overlay').addClass('active'); $('.mobile-sidebar').find('.porto-lazyload:not(.lazy-load-loaded)').trigger('appear'); } } }); $('.minicart-offcanvas .cart-head').on('click', function() { $('html').toggleClass('minicart-opened'); }); $('.minicart-offcanvas .minicart-overlay').on('click', function() { $('html').removeClass('minicart-opened'); }); $(document.body).on('click', '.sidebar-overlay', function() { $('html').removeClass('sidebar-opened'); $('html').removeClass('filter-sidebar-opened'); $(this).removeClass('active'); }); $(window).on('resize', function() { if (window.innerWidth > 991) { $('.sidebar-overlay').click(); } }); // Common // Match Height if ($.isFunction($.fn.matchHeight)) { $('.tabs-simple .featured-box .box-content').matchHeight(); $('.porto-content-box .featured-box .box-content').matchHeight(); $('.vc_general.vc_cta3').matchHeight(); $('.match-height').matchHeight(); } // WhatsApp Sharing if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) { $('.share-whatsapp').css('display', 'inline-block'); } $(document).ajaxComplete(function(event, xhr, options) { if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) { $('.share-whatsapp').css('display', 'inline-block'); } }); // Add Ege Browser Class var ua = window.navigator.userAgent, ie12 = ua.indexOf('Edge/') > 0; if (ie12) $('html').addClass('ie12'); // Portfolio Link Lightbox $(document).on('click', '.portfolios-lightbox a.portfolio-link', function(e) { $(this).find('.thumb-info-zoom').click(); return false; }); // Posts Shortcode Pagination $(document).on('click', '.porto-portfolios .pagination:not(.load-more) a, .porto-members .pagination a, .porto-faqs .pagination a', function(e) { var $this = $(this), post_type = $this.closest('.porto-portfolios').length ? 'portfolio' : ($this.closest('.porto-members').length ? 'member' : 'faq'), url = $this.attr('href'), shortcode_id = $this.closest('.porto-' + post_type + 's').find('.shortcode-id').val(), $container = $this.closest('.porto-' + post_type + 's' + shortcode_id); if (url && $container.length) { e.preventDefault(); $container.addClass('porto-ajax-loading'); if (!$container.children('.porto-loading-icon').length) { $container.append(''); } theme.requestTimeout(function() { $('html, body').stop().animate({ scrollTop: $container.offset().top - theme.StickyHeader.sticky_height - theme.adminBarHeight() - theme.sticky_nav_height - 14 }, 600, 'easeOutQuad'); }, 160); $.ajax({ type : 'post', url : url, success: function(response) { var $response_container = $('
' + response + '
').find('.porto-' + post_type + 's'+shortcode_id); $container.html($response_container.html()); if ('faq' != post_type) { theme['portfolio' == post_type ? 'PortfolioAjaxPage' : 'MemberAjaxPage'].initialize($container.find('.page-' + post_type + 's')); theme.PostAjaxModal.initialize($container.find('.page-' + post_type + 's')); } porto_init($container); theme.PostFilter.initialize($container.find('.' + post_type + '-filter'), post_type); } }).always(function() { $container.removeClass('porto-ajax-loading'); }); return false; } }); $('.porto-faqs').each(function() { if ($(this).find('.faq .toggle.active').length < 1) { $(this).find('.faq').eq(0).find('.toggle').addClass('active'); $(this).find('.faq').eq(0).find('.toggle-content').show(); } }); // refresh wpb content $(document).on('shown.bs.collapse', '.collapse', function() { var panel = $(this); theme.refreshVCContent(panel); }); $(document).on('shown.bs.tab', 'a[data-toggle="tab"]', function(e) { var panel = $($(e.target).attr('href')); theme.refreshVCContent(panel); }); // porto tooltip for header, footer $('.porto-tooltip .tooltip-icon').on('click', function() { if($(this).parent().children(".tooltip-popup").css("display")=="none") { $(this).parent().children(".tooltip-popup").fadeIn(200); }else{ $(this).parent().children(".tooltip-popup").fadeOut(200); } }); $('.porto-tooltip .tooltip-close').on('click', function() { $(this).parent().fadeOut(200); }); // skeleton screens if (js_porto_vars.use_skeleton_screen.length > 0 && $('.skeleton-loading').length) { var dclFired = false, dclPromise = (function() { var deferred = $.Deferred(); $(function() { deferred.resolve(); dclFired = true; }); return deferred.promise(); })(), observer = false, NativeMutationObserver = window.MutationObserver || window.WebkitMutationObserver || window.MozMutationObserver; if (typeof NativeMutationObserver != 'undefined') { observer = new NativeMutationObserver(function(mutationsList, observer) { for(var i in mutationsList) { var mutation = mutationsList[i]; if (mutation.type == 'childList') { $(mutation.target).trigger('skeleton:initialised'); } } }); } var killObserverTrigger = setTimeout(function() { if (observer) { observer.disconnect(); observer = undefined; } }, 4000); var skeletonTimer; $('.skeleton-loading').each(function(e) { var $this = $(this), skeletonInitialisedPromise = (function() { var deferred = $.Deferred(); $this.on('skeleton:initialised', function (evt) { if (evt.target.classList.contains('skeleton-loading')) { deferred.resolve(evt); } }); return deferred.promise(); })(), resourcesLoadedPromise = (function() { return $.Deferred().resolve().promise(); })(); $.when(skeletonInitialisedPromise, resourcesLoadedPromise, dclPromise).done(function(e) { var $real = $(e.target), $placeholder = $real.siblings('.skeleton-body'); if (!$placeholder.length) { $placeholder = $real.parent().parent().parent().find('[class="' + $real.attr('class').replace('skeleton-loading', 'skeleton-body') + '"]'); } porto_init($real); if ($real.find('.sidebar-menu:not(.side-menu-accordion)').length) { theme.SidebarMenu.initialize($real.find('.sidebar-menu:not(.side-menu-accordion)')); } if (skeletonTimer) { theme.deleteTimeout(skeletonTimer); } $real.trigger('skeleton-loaded'); theme.requestTimeout(function() { if ($placeholder.length) { // fix YITH Products Filters compatibility issue if ($placeholder.parent().hasClass('yit-wcan-container')) { $placeholder.parent().remove(); } else { $placeholder.remove(); } } $real.removeClass('skeleton-loading'); if ($real.closest('.skeleton-loading-wrap')) { $real.closest('.skeleton-loading-wrap').removeClass('skeleton-loading-wrap'); } if ($(document.body).hasClass('elementor-default') || $(document.body).hasClass('elementor-page')) { $(window).trigger('resize'); } theme.refreshStickySidebar(false); }, 100); if (!$('.skeleton-loading').length) { clearTimeout(killObserverTrigger); observer.disconnect(); observer = undefined; } }); if ($this.children('script[type="text/template"]').length) { var content = $(JSON.parse($this.children('script[type="text/template"]').eq(0).html())); $this.children('script[type="text/template"]').eq(0).remove(); if (observer) { observer.observe(this, {childList: true, subtree: false}); } $this.append(content); if (!observer) { $this.trigger('skeleton:initialised'); } } }); } $(document).trigger('porto_theme_init'); }); }).apply(this, [window.theme, jQuery]); (function (theme, $, undefined) { "use strict"; $(document).ready(function(){ $(window).on('vc_reload', function() { porto_init(); $('.type-post').addClass('post'); $('.type-portfolio').addClass('portfolio'); $('.type-member').addClass('member'); $('.type-block').addClass('block'); }); }); // Portfolios Load More $(document).on('click', '.porto-portfolios .pagination.load-more a', function(e) { var $this = $(this), url = $this.attr('href'), shortcode_id = $this.closest('.porto-portfolios').find('.shortcode-id').val(), $container = $this.closest('.porto-portfolios' + shortcode_id), $loader = $container.find('.pagination-wrap.load-more .bounce-loader'), $btn = $container.find('.pagination.load-more a.next'); if (url) { e.preventDefault(); $btn.hide(); $loader.show(); $.ajax({ type : 'post', url : url, success: function(response) { var $response_container = $('
' + response + '
').find('.porto-portfolios'+shortcode_id), $portfolio_thumbs = $response_container.find('.porto-portfolios-lighbox-thumbnails .owl-carousel').html(), $next_posts = $response_container.find('.portfolio-row').children('article.portfolio'); $container.find('.pagination-wrap').replaceWith( $response_container.find('.pagination-wrap') ); $container.find('.porto-portfolios-lighbox-thumbnails .owl-carousel').append( $portfolio_thumbs ); if ($next_posts.length) { var $iso = $container.find('.page-portfolios').find('.portfolio-row'); $iso.isotope('insert', $next_posts); $iso.waitForImages(function() { $iso.isotope('layout'); }); } else if ($response_container.find('.portfolios-timeline').length) { // timeline $next_posts = $response_container.find('.portfolios-timeline .timeline-body'); var $first_timeline_date = $next_posts.children('.timeline-date:first-child'), $last_date = $container.find('.timeline-body').children('.timeline-date').last(); if ($last_date.length && $first_timeline_date.length && $last_date.html() == $first_timeline_date.html()) { $next_posts.children('.timeline-date:first-child').remove(); } $container.find('.timeline-body').append($next_posts.children()); } theme.PortfolioAjaxPage.initialize($('.page-portfolios')); theme.PostAjaxModal.initialize($('.page-portfolios')); porto_init($container); theme.PostFilter.initialize($('.portfolio-filter'), 'portfolio'); $container.find('.porto-lazyload:not(.lazy-load-loaded)').trigger('appear'); } }).always(function() { $loader.hide(); }); return false; } }); /* * Experience Timeline */ var timelineHeightAdjust = { $timeline: $('#exp-timeline'), $timelineBar: $('#exp-timeline .timeline-bar'), $firstTimelineItem: $('#exp-timeline .timeline-box').first(), $lastTimelineItem: $('#exp-timeline .timeline-box').last(), build: function() { var self = this; self.adjustHeight(); }, adjustHeight: function() { var self = this, calcFirstItemHeight = ( self.$firstTimelineItem.outerHeight(true) / 2 ) + 5, calcLastItemHeight = ( self.$lastTimelineItem.outerHeight(true) / 2 ) + 5; // Set Timeline Bar Top and Bottom self.$timelineBar.css({ top: calcFirstItemHeight, bottom: calcLastItemHeight }); } } if( $('#exp-timeline').get(0) ) { // Adjust Timeline Height On Resize var timeline_timer = null; $(window).smartresize(function() { if (timeline_timer) { clearTimeout(timeline_timer); } timeline_timer = setTimeout(function() { timelineHeightAdjust.build(); }, 800); }); timelineHeightAdjust.build(); } $('.custom-view-our-location').on('click',function(e){ e.preventDefault(); var this_ = $(this); $('.custom-googlemap').slideDown('1000', function(){ this_.delay(700).hide(); }); }); })( window.theme, jQuery ); // Porto 4.0 extra shortcodes (function (theme, $, undefined) { 'use strict'; // porto ultimate heading function porto_headings_init() { $('.porto-u-heading').each(function(){ var align = $(this).attr('data-halign'), spacer = $(this).attr('data-hspacer'); if(spacer == 'line_only') { if(align == 'right' || align == 'left') { if ($(this).find('.porto-u-heading-spacer').find('.porto-u-headings-line')[0].style.width != 'auto') { $(this).find('.porto-u-heading-spacer').find('.porto-u-headings-line').css({'float':align}); } } else { $(this).find('.porto-u-heading-spacer').find('.porto-u-headings-line').css({'margin':'0 auto'}); } } }); } $(document).ready(function() { porto_headings_init(); if (typeof elementorFrontend != 'undefined') { // fix Elementor ScrollTop $(window).on('elementor/frontend/init', function() { elementorFrontend.hooks.addFilter('frontend/handlers/menu_anchor/scroll_top_distance', function(scrollTop) { if (theme && theme.StickyHeader && typeof theme.sticky_nav_height != 'undefined') { if (elementorFrontend.elements.$wpAdminBar.length) { scrollTop += elementorFrontend.elements.$wpAdminBar.height(); } scrollTop = scrollTop - theme.adminBarHeight() - theme.StickyHeader.sticky_height - theme.sticky_nav_height + 1; } return scrollTop; }); }); } }); /* Advanced Buttons */ $('.porto-btn[data-hover]').on('mouseenter', function() { var hoverColor = $(this).data('hover'), hover_border_color = $(this).data('border-hover'); if (hoverColor) { $(this).data('originalColor', $(this).css('color')); $(this).css('color', hoverColor); } if (hover_border_color) { $(this).data('originalBorderColor', $(this).css('border-color')); $(this).css('border-color', hover_border_color); } }).on('mouseleave', function() { var originalColor = $(this).data('originalColor'), original_border_color = $(this).data('originalBorderColor'); if (originalColor) { $(this).css('color', originalColor); } if (original_border_color) { $(this).css('border-color', original_border_color); } }); // widget wysija $('#footer .widget_wysija .wysija-submit:not(.btn)').addClass('btn btn-default'); // fixed visual compoer issue which has owl carousel if ($('[data-vc-parallax] .owl-carousel').length) { theme.requestTimeout(function() { if (typeof window.vcParallaxSkroll == 'object') { window.vcParallaxSkroll.refresh(); } }, 200); } $('.wpcf7-form .wpcf7-submit').on('click',function(e) { if ($(this).closest('form').hasClass('processing')) { e.preventDefault(); return false; } $(this).closest('form').addClass("processing"); }); $(document).ajaxComplete(function(t,e,i) { $('.wpcf7-form.processing').removeClass('processing'); }); if ($('.page-content > .alignfull, .post-content > .alignfull').length) { var initAlignFull = function() { $('.page-content > .alignfull, .post-content > .alignfull').each(function() { $(this).css('left', -1 * $(this).parent().offset().left).css('right', -1 * $(this).parent().offset().left).css('width', $('body').width() - (parseInt($(this).css('margin-left'), 10) + parseInt($(this).css('margin-right'), 10))); }); }; initAlignFull(); $(window).smartresize(function() { initAlignFull(); }); } if (js_porto_vars.user_edit_pages) { var porto_init_builder_tooltip = function($obj) { $obj.find('.pb-edit-link').each(function() { var $this = $(this), title = $this.data('title'); $this.next('.porto-block').addClass('has-pb-edit').tooltip({ html: true, template: '', trigger: 'manual', title: '' + title + '', delay: 300 }); var tooltipData = $this.next('.porto-block').data('bs.tooltip'); $(tooltipData.element).on('mouseenter.bs.tooltip', function(e) { tooltipData._enter(e); }); $(tooltipData.element).on('mouseleave.bs.tooltip', function(e) { tooltipData._leave(e); }); }); }; porto_init_builder_tooltip($(document.body)); $('.skeleton-loading').on('skeleton-loaded', function() { porto_init_builder_tooltip($(this)); }); $(document.body).on('mouseenter mouseleave', '.tooltip[role="tooltip"]', function(e) { var $element = $('.porto-block[aria-describedby="' + $(this).attr('id') + '"]'); if ($element.length && $element.data('bs.tooltip')) { var fn_name = 'mouseenter' == e.type ? '_enter' : '_leave'; $element.data('bs.tooltip')[fn_name](false, $element.data('bs.tooltip')); } }); } })( window.theme, jQuery ); // Porto Sticky icon bar on mobile (function( theme, $ ) { 'use strict'; var $header_main = $('#header .header-main'); var $menu_wrap = $('#header .main-menu-wrap'); if( $('.porto-sticky-navbar').length > 0 ) { window.addEventListener('scroll', function() { if( window.innerWidth < 576 ) { var headerOffset = -1; var scrollTop = $(window).scrollTop(); if ($header_main.length) { headerOffset = Math.max( $header_main.scrollTop() + $header_main.height(), headerOffset ); } if ($menu_wrap.length) { headerOffset = Math.max( $menu_wrap.scrollTop() + $menu_wrap.height(), headerOffset ); } if( headerOffset <= 0 ) { if( $('#header').length > 0 && $('#header').height() > 10 ) headerOffset = $('#header').scrollTop() + $('#header').height(); else headerOffset = 100; } if( headerOffset <= scrollTop ) { $('.porto-sticky-navbar').addClass('fixed'); } else { $('.porto-sticky-navbar').removeClass('fixed'); } } }, {passive: true}); } })( window.theme, jQuery );