PluginProbe
Responsive Menu – Create Mobile-Friendly Menu / 3.1.12
Responsive Menu – Create Mobile-Friendly Menu v3.1.12
4.7.3 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.1.0 4.1.1 4.1.10 4.1.11 4.1.12 4.1.2 4.1.3 4.1.4 4.1.5 4.1.6 4.1.7 4.1.8 4.1.9 4.2.0 All 90 releases
responsive-menu / public / js / app.js.twig

app.js.twig in Responsive Menu – Create Mobile-Friendly Menu 3.1.12, at public/js/app.js.twig

193 lines 9.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 jQuery(document).ready(function($) {
2
3 var ResponsiveMenu = {
4 trigger: '{{ options.button_click_trigger }}',
5 animationSpeed: {{ options.animation_speed * 1000 }},
6 breakpoint: {{ options.breakpoint }},
7 pushButton: '{{ options.button_push_with_animation }}',
8 animationType: '{{ options.animation_type }}',
9 animationSide: '{{ options.menu_appear_from }}',
10 pageWrapper: '{{ options.page_wrapper }}',
11 isOpen: false,
12 triggerTypes: 'click',
13 activeClass: 'is-active',
14 container: '#responsive-menu-container',
15 openClass: 'responsive-menu-open',
16 accordion: '{{ options.accordion_animation }}',
17 activeArrow: '{{ options.getActiveArrow() }}',
18 inactiveArrow: '{{ options.getInActiveArrow() }}',
19 wrapper: '#responsive-menu-wrapper',
20 closeOnBodyClick: '{{ options.menu_close_on_body_click }}',
21 closeOnLinkClick: '{{ options.menu_close_on_link_click }}',
22 itemTriggerSubMenu: '{{ options.menu_item_click_to_trigger_submenu }}',
23 linkElement: '.responsive-menu-item-link',
24 subMenuTransitionTime: {{ options.sub_menu_speed * 1000 }},
25 openMenu: function() {
26 $(this.trigger).addClass(this.activeClass);
27 $('html').addClass(this.openClass);
28 $('.responsive-menu-button-icon-active').hide();
29 $('.responsive-menu-button-icon-inactive').show();
30 this.setButtonTextOpen();
31 this.setWrapperTranslate();
32 this.isOpen = true;
33 },
34 closeMenu: function() {
35 $(this.trigger).removeClass(this.activeClass);
36 $('html').removeClass(this.openClass);
37 $('.responsive-menu-button-icon-inactive').hide();
38 $('.responsive-menu-button-icon-active').show();
39 this.setButtonText();
40 this.clearWrapperTranslate();
41 this.isOpen = false;
42 },
43 setButtonText: function() {
44 if($('.responsive-menu-button-text-open').length > 0 && $('.responsive-menu-button-text').length > 0) {
45 $('.responsive-menu-button-text-open').hide();
46 $('.responsive-menu-button-text').show();
47 }
48 },
49 setButtonTextOpen: function() {
50 if($('.responsive-menu-button-text').length > 0 && $('.responsive-menu-button-text-open').length > 0) {
51 $('.responsive-menu-button-text').hide();
52 $('.responsive-menu-button-text-open').show();
53 }
54 },
55 triggerMenu: function() {
56 this.isOpen ? this.closeMenu() : this.openMenu();
57 },
58 triggerSubArrow: function(subarrow) {
59 var sub_menu = $(subarrow).parent().siblings('.responsive-menu-submenu');
60 var self = this;
61 if(this.accordion == 'on') {
62 /* Get Top Most Parent and the siblings */
63 var top_siblings = sub_menu.parents('.responsive-menu-item-has-children').last().siblings('.responsive-menu-item-has-children');
64 var first_siblings = sub_menu.parents('.responsive-menu-item-has-children').first().siblings('.responsive-menu-item-has-children');
65 /* Close up just the top level parents to key the rest as it was */
66 top_siblings.children('.responsive-menu-submenu').slideUp(self.subMenuTransitionTime, 'linear').removeClass('responsive-menu-submenu-open');
67 /* Set each parent arrow to inactive */
68 top_siblings.each(function() {
69 $(this).find('.responsive-menu-subarrow').first().html(self.inactiveArrow);
70 $(this).find('.responsive-menu-subarrow').first().removeClass('responsive-menu-subarrow-active');
71 });
72 /* Now Repeat for the current item siblings */
73 first_siblings.children('.responsive-menu-submenu').slideUp(self.subMenuTransitionTime, 'linear').removeClass('responsive-menu-submenu-open');
74 first_siblings.each(function() {
75 $(this).find('.responsive-menu-subarrow').first().html(self.inactiveArrow);
76 $(this).find('.responsive-menu-subarrow').first().removeClass('responsive-menu-subarrow-active');
77 });
78 }
79 if(sub_menu.hasClass('responsive-menu-submenu-open')) {
80 sub_menu.slideUp(self.subMenuTransitionTime, 'linear').removeClass('responsive-menu-submenu-open');
81 $(subarrow).html(this.inactiveArrow);
82 $(subarrow).removeClass('responsive-menu-subarrow-active');
83 } else {
84 sub_menu.slideDown(self.subMenuTransitionTime, 'linear').addClass('responsive-menu-submenu-open');
85 $(subarrow).html(this.activeArrow);
86 $(subarrow).addClass('responsive-menu-subarrow-active');
87 }
88 },
89 menuHeight: function() {
90 return $(this.container).height();
91 },
92 menuWidth: function() {
93 return $(this.container).width();
94 },
95 wrapperHeight: function() {
96 return $(this.wrapper).height();
97 },
98 setWrapperTranslate: function() {
99 switch(this.animationSide) {
100 case 'left':
101 translate = 'translateX(' + this.menuWidth() + 'px)'; break;
102 case 'right':
103 translate = 'translateX(-' + this.menuWidth() + 'px)'; break;
104 case 'top':
105 translate = 'translateY(' + this.wrapperHeight() + 'px)'; break;
106 case 'bottom':
107 translate = 'translateY(-' + this.menuHeight() + 'px)'; break;
108 }
109 if(this.animationType == 'push') {
110 $(this.pageWrapper).css({'transform':translate});
111 $('html, body').css('overflow-x', 'hidden');
112 }
113 if(this.pushButton == 'on') {
114 $('#responsive-menu-button').css({'transform':translate});
115 }
116 },
117 clearWrapperTranslate: function() {
118 var self = this;
119 if(this.animationType == 'push') {
120 $(this.pageWrapper).css({'transform':''});
121 setTimeout(function() {
122 $('html, body').css('overflow-x', '');
123 }, self.animationSpeed);
124 }
125 if(this.pushButton == 'on') {
126 $('#responsive-menu-button').css({'transform':''});
127 }
128 },
129 init: function() {
130 var self = this;
131 $(this.trigger).on(this.triggerTypes, function(e){
132 e.stopPropagation();
133 self.triggerMenu();
134 });
135 $(this.trigger).mouseup(function(){
136 $(self.trigger).blur();
137 });
138 $('.responsive-menu-subarrow').on('click', function(e) {
139 e.preventDefault();
140 e.stopPropagation();
141 self.triggerSubArrow(this);
142 });
143 $(window).resize(function() {
144 if($(window).width() > self.breakpoint) {
145 if(self.isOpen){
146 self.closeMenu();
147 }
148 } else {
149 if($('.responsive-menu-open').length>0){
150 self.setWrapperTranslate();
151 }
152 }
153 });
154 if(this.closeOnLinkClick == 'on') {
155 $(this.linkElement).on('click', function(e) {
156 e.preventDefault();
157 /* Fix for when close menu on parent clicks is on */
158 if(self.itemTriggerSubMenu == 'on' && $(this).is('.responsive-menu-item-has-children > ' + self.linkElement)) {
159 return;
160 }
161 old_href = $(this).attr('href');
162 old_target = typeof $(this).attr('target') == 'undefined' ? '_self' : $(this).attr('target');
163 if(self.isOpen) {
164 if($(e.target).closest('.responsive-menu-subarrow').length) {
165 return;
166 }
167 self.closeMenu();
168 setTimeout(function() {
169 window.open(old_href, old_target);
170 }, self.animationSpeed);
171 }
172 });
173 }
174 if(this.closeOnBodyClick == 'on') {
175 $(document).on('click', 'body', function(e) {
176 if(self.isOpen) {
177 if($(e.target).closest('#responsive-menu-container').length || $(e.target).closest('#responsive-menu-button').length) {
178 return;
179 }
180 }
181 self.closeMenu();
182 });
183 }
184 if(this.itemTriggerSubMenu == 'on') {
185 $('.responsive-menu-item-has-children > ' + this.linkElement).on('click', function(e) {
186 e.preventDefault();
187 self.triggerSubArrow($(this).children('.responsive-menu-subarrow').first());
188 });
189 }
190 }
191 };
192 ResponsiveMenu.init();
193 });