File "frontend-advanced-menu.js"
Full path: /home/kosmetik/public_html/wp-content/plugins/powerpack-elements142/assets/js/frontend-advanced-menu.js
File
size: 7.24 B
MIME-type: text/plain
Charset: utf-8
Download Open Edit Advanced Editor Back
;(function($) {
PPAdvancedMenu = function( $scope ) {
this.node = $scope;
this.wrap = $scope.find('.pp-advanced-menu__container');
this.menu = $scope.find('.pp-advanced-menu');
this.dropdownMenu = $scope.find('.pp-advanced-menu__container.pp-advanced-menu--dropdown');
this.menuToggle = $scope.find('.pp-menu-toggle'); // hamburger icon
this.settings = $scope.find('.pp-advanced-menu__container').data('settings');
this.menuId = this.settings.menu_id;
this.menuType = this.settings.menu_type;
this.menuLayout = this.settings.menu_layout;
this.duration = 400;
this.init();
};
PPAdvancedMenu.prototype = {
stretchElement: null,
init: function () {
if ( ! this.menu.length ) {
return;
}
if ( jQuery.fn.smartmenus ) {
// Override the default stupid detection
jQuery.SmartMenus.prototype.isCSSOn = function() {
return true;
};
if ( elementorFrontend.config.is_rtl ) {
jQuery.fn.smartmenus.defaults.rightToLeftSubMenus = true;
}
}
if ( 'horizontal' === this.menuLayout ) {
if ('undefined' !== typeof $.fn.smartmenus) {
this.menu.smartmenus({
subIndicatorsText: '',
subIndicatorsPos: 'append',
subMenusMaxWidth: '1000px'
});
}
}
if ( 'vertical' === this.menuLayout ) {
if ('undefined' !== typeof $.fn.smartmenus) {
this.menu.smartmenus({
subIndicatorsText: '',
subIndicatorsPos: 'append',
});
}
}
if ( 'default' === this.menuType ) {
this.initStretchElement();
this.stretchMenu();
}
if ('off-canvas' === this.menuType) {
this.initOffCanvas();
}
if ('full-screen' === this.menuType) {
this.initFullScreen();
}
this.bindEvents();
},
getElementSettings: function( setting ) {
if ( 'undefined' !== typeof this.settings[setting] ) {
return this.settings[setting];
}
return false;
},
bindEvents: function () {
var self = this;
if ( ! this.menu.length ) {
return;
}
this.menuToggle.on('click', $.proxy( this.toggleMenu, this ));
if ('default' === this.menuType) {
elementorFrontend.addListenerOnce(this.node.data('model-cid'), 'resize', $.proxy( this.stretchMenu, this) );
}
//self.panelUpdate();
this.closeMenuESC();
},
panelUpdate: function() {
var self = this;
if ('undefined' !== typeof elementor && $('body').hasClass('elementor-editor-active')) {
elementor.hooks.addAction('panel/open_editor/widget/pp-advanced-menu', function (panel, model, view) {
panel.$el.find('select[data-setting="dropdown"]').on('change', function () {
if (model.attributes.id === self.menuId) {
if ($(this).val() === 'all') {
self.node.find('.pp-advanced-menu--main').hide();
}
if ($(this).val() !== 'all') {
self.node.find('.pp-advanced-menu--main').show();
}
}
});
if (model.attributes.id === self.menuId && 'all' === self.settings.breakpoint) {
self.toggleMenu();
}
});
}
},
initStretchElement: function () {
this.stretchElement = new elementorFrontend.modules.StretchElement({ element: this.dropdownMenu });
},
stretchMenu: function () {
if (this.getElementSettings('full_width')) {
this.stretchElement.stretch();
this.dropdownMenu.css('top', this.menuToggle.outerHeight());
} else {
this.stretchElement.reset();
}
},
initOffCanvas: function () {
$('.pp-menu-' + this.settings.menu_id).each(function(id, el) {
if ($(el).parent().is('body') ) {
$(el).remove();
}
});
$('.pp-menu-clear').remove();
$('body').prepend(this.node.find( '.pp-menu-' + this.settings.menu_id ) );
$('.pp-menu-' + this.settings.menu_id).css('height', window.innerHeight + 'px');
$('.pp-menu-' + this.settings.menu_id).find('.pp-menu-close').on( 'click', $.proxy( this.closeMenu, this ));
},
initFullScreen: function () {
$('body').addClass('pp-menu--full-screen');
$('.pp-menu-' + this.settings.menu_id).css('height', window.innerHeight + 'px');
$('.pp-menu-' + this.settings.menu_id).find('.pp-menu-close').on('click', $.proxy(this.closeMenu, this));
$('.pp-menu-' + this.settings.menu_id).find('.menu-item a').on('click', $.proxy(this.closeMenu, this));
},
toggleMenu: function () {
this.menuToggle.toggleClass('pp-active');
var menuType = this.getElementSettings('menu_type');
var isActive = this.menuToggle.hasClass('pp-active');
if ('default' === menuType) {
var $dropdownMenu = this.dropdownMenu;
if (isActive) {
$dropdownMenu.hide().slideDown(250, function () {
$dropdownMenu.css('display', '');
});
this.stretchMenu();
} else {
$dropdownMenu.show().slideUp(250, function () {
$dropdownMenu.css('display', '');
});
}
}
if ('off-canvas' === menuType) {
this.toggleOffCanvas();
}
if ('full-screen' === menuType) {
this.toggleFullScreen();
}
},
toggleOffCanvas: function()
{
var isActive = this.menuToggle.hasClass('pp-active'),
element = $('body').find('.pp-menu-' + this.menuId),
time = this.duration,
self = this;
$('html').removeClass('pp-menu-toggle-open');
if ( isActive ) {
$('body').addClass('pp-menu--off-canvas');
$('html').addClass('pp-menu-toggle-open');
time = 0;
} else {
time = this.duration;
}
$('.pp-menu-open').removeClass('pp-menu-open');
$('.pp-advanced-menu--toggle .pp-menu-toggle').not(this.menuToggle).removeClass('pp-active');
setTimeout(function() {
$('.pp-menu-off-canvas').removeAttr('style');
if (isActive) {
$('body').addClass('pp-menu-open');
element.addClass('pp-menu-open').css('z-index', '999999');
if ( $('.pp-menu-clear').length === 0 ) {
$('body').append('<div class="pp-menu-clear"></div>');
}
$('.pp-menu-clear').off('click').on('click', $.proxy(self.closeMenu, self));
$('.pp-menu-clear').fadeIn();
} else {
$('.pp-menu-open').removeClass('pp-menu-open');
$('body').removeClass('pp-menu--off-canvas');
$('html').removeClass('pp-menu-toggle-open');
$('.pp-menu-clear').fadeOut();
}
}, time);
},
toggleFullScreen: function() {
var isActive = this.menuToggle.hasClass('pp-active'),
element = $('body').find('.pp-menu-' + this.menuId);
$('html').removeClass('pp-menu-toggle-open');
if ( isActive ) {
$('html').addClass('pp-menu-toggle-open');
this.node.find('.pp-menu-full-screen').addClass('pp-menu-open');
this.node.find('.pp-menu-full-screen').attr('data-scroll', $(window).scrollTop());
$(window).scrollTop(0);
}
},
closeMenu: function() {
if ( 'default' !== this.menuType ) {
$('.pp-menu-open').removeClass('pp-menu-open');
this.menuToggle.removeClass('pp-active');
$('html').removeClass('pp-menu-toggle-open');
if ( 'full-screen' === this.menuType ) {
var scrollTop = this.node.find('.pp-menu-full-screen').data('scroll');
$(window).scrollTop(scrollTop);
}
$('.pp-menu-clear').fadeOut();
}
},
closeMenuESC: function() {
var self = this;
// menu close on ESC key
$(document).on('keydown', function (e) {
if (e.keyCode === 27) { // ESC
self.closeMenu();
}
});
}
};
})(jQuery);