PageSourceSearch

https://www.octobergallery.co.uk/js/jquery.meanmenu.js?v=1774523181

js octobergallery.co.uk collected 2026-10-02 07:05:37 UTC 11,646 bytes, 288 lines download raw bytes

1/*!
2* jQuery meanMenu v2.0.8
3* @Copyright (C) 2012-2014 Chris Wharton @ MeanThemes (https://github.com/meanthemes/meanMenu)
4*
5*/
6/*
7* This program is free software: you can redistribute it and/or modify
8* it under the terms of the GNU General Public License as published by
9* the Free Software Foundation, either version 3 of the License, or
10* (at your option) any later version.
11*
12* THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT
13* HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED,
14* INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR
15* FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE
16* OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY PATENTS,
17* COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.COPYRIGHT HOLDERS WILL NOT
18* BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL
19* DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION.
20*
21* You should have received a copy of the GNU General Public License
22* along with this program. If not, see <http://gnu.org/licenses/>.
23*
24* Find more information at http://www.meanthemes.com/plugins/meanmenu/
25*
26*/
27(function ($) {
28	"use strict";
29		$.fn.meanmenu = function (options) {
30				var defaults = {
31						meanMenuTarget: jQuery(this), // Target the current HTML markup you wish to replace
32						meanMenuContainer: 'body', // Choose where meanmenu will be placed within the HTML
33						meanMenuClose: "X", // single character you want to represent the close menu button
34						meanMenuCloseSize: "24px", // set font size of close button
35						meanMenuOpen: "<span /><span /><span />", // text/markup you want when menu is closed
36						meanRevealPosition: "right", // left right or center positions
37						meanRevealPositionDistance: "0", // Tweak the position of the menu
38						meanRevealColour: "", // override CSS colours for the reveal background
39						meanScreenWidth: "768", // set the screen width you want meanmenu to kick in at
40						meanNavPush: "", // set a height here in px, em or % if you want to budge your layout now the navigation is missing.
41						meanShowChildren: true, // true to show children in the menu, false to hide them
42						meanExpandableChildren: false, // true to allow expand/collapse children
43						meanExpand: "+", // single character you want to represent the expand for ULs
44						meanContract: "-", // single character you want to represent the contract for ULs
45						meanRemoveAttrs: false, // true to remove classes and IDs, false to keep them
46						onePage: false, // set to true for one page sites
47						meanDisplay: "block", // override display method for table cell based layouts e.g. table-cell
48						removeElements: "" // set to hide page elements
49				};
50				options = $.extend(defaults, options);
51
52				// get browser width
53				var currentWidth = window.innerWidth || document.documentElement.clientWidth;
54
55				return this.each(function () {
56						var meanMenu = options.meanMenuTarget;
57						var meanContainer = options.meanMenuContainer;
58						var meanMenuClose = options.meanMenuClose;
59						var meanMenuCloseSize = options.meanMenuCloseSize;
60						var meanMenuOpen = options.meanMenuOpen;
61						var meanRevealPosition = options.meanRevealPosition;
62						var meanRevealPositionDistance = options.meanRevealPositionDistance;
63						var meanRevealColour = options.meanRevealColour;
64						var meanScreenWidth = options.meanScreenWidth;
65						var meanNavPush = options.meanNavPush;
66						var meanRevealClass = ".meanmenu-reveal";
67						var meanShowChildren = options.meanShowChildren;
68						var meanExpandableChildren = options.meanExpandableChildren;
69						var meanExpand = options.meanExpand;
70						var meanContract = options.meanContract;
71						var meanRemoveAttrs = options.meanRemoveAttrs;
72						var onePage = options.onePage;
73						var meanDisplay = options.meanDisplay;
74						var removeElements = options.removeElements;
75
76						//detect known mobile/tablet usage
77						var isMobile = false;
78						if ( (navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i)) || (navigator.userAgent.match(/iPad/i)) || (navigator.userAgent.match(/Android/i)) || (navigator.userAgent.match(/Blackberry/i)) || (navigator.userAgent.match(/Windows Phone/i)) ) {
79								isMobile = true;
80						}
81
82						if ( (navigator.userAgent.match(/MSIE 8/i)) || (navigator.userAgent.match(/MSIE 7/i)) ) {
83							// add scrollbar for IE7 & 8 to stop breaking resize function on small content sites
84								jQuery('html').css("overflow-y" , "scroll");
85						}
86
87						var meanRevealPos = "";
88						var meanCentered = function() {
89							if (meanRevealPosition === "center") {
90								var newWidth = window.innerWidth || document.documentElement.clientWidth;
91								var meanCenter = ( (newWidth/2)-22 )+"px";
92								meanRevealPos = "left:" + meanCenter + ";right:auto;";
93
94								if (!isMobile) {
95									jQuery('.meanmenu-reveal').css("left",meanCenter);
96								} else {
97									jQuery('.meanmenu-reveal').animate({
98											left: meanCenter
99									});
100								}
101							}
102						};
103
104						var menuOn = false;
105						var meanMenuExist = false;
106
107
108						if (meanRevealPosition === "right") {
109								meanRevealPos = "right:" + meanRevealPositionDistance + ";left:auto;";
110						}
111						if (meanRevealPosition === "left") {
112								meanRevealPos = "left:" + meanRevealPositionDistance + ";right:auto;";
113						}
114						// run center function
115						meanCentered();
116
117						// set all styles for mean-reveal
118						var $navreveal = "";
119
120						var meanInner = function() {
121								// get last class name
122								if (jQuery($navreveal).is(".meanmenu-reveal.meanclose")) {
123										$navreveal.html(meanMenuClose);
124								} else {
125										$navreveal.html(meanMenuOpen);
126								}
127						};
128
129						// re-instate original nav (and call this on window.width functions)
130						var meanOriginal = function() {
131							jQuery('.mean-bar,.mean-push').remove();
132							jQuery(meanContainer).removeClass("mean-container");
133							jQuery(meanMenu).css('display', meanDisplay);
134							menuOn = false;
135							meanMenuExist = false;
136							jQuery(removeElements).removeClass('mean-remove');
137							$('.backstretch-caption, .backstretch-buttons').fadeIn();
138						};
139
140						// navigation reveal
141						var showMeanMenu = function() {
142								var meanStyles = "background:"+meanRevealColour+";color:"+meanRevealColour+";"+meanRevealPos;
143								if (currentWidth <= meanScreenWidth) {
144								jQuery(removeElements).addClass('mean-remove');
145									meanMenuExist = true;
146									// add class to body so we don't need to worry about media queries here, all CSS is wrapped in '.mean-container'
147									jQuery(meanContainer).addClass("mean-container");
148									jQuery('.mean-container').prepend('<div class="mean-bar"><a href="#nav" class="meanmenu-reveal" style="'+meanStyles+'">Show Navigation</a><nav class="mean-nav"></nav></div>');
149
150									//push meanMenu navigation into .mean-nav
151									var meanMenuContents = jQuery(meanMenu).html();
152									jQuery('.mean-nav').html(meanMenuContents);
153
154									// remove all classes from EVERYTHING inside meanmenu nav
155									if(meanRemoveAttrs) {
156										jQuery('nav.mean-nav ul, nav.mean-nav ul *').each(function() {
157											// First check if this has mean-remove class
158											if (jQuery(this).is('.mean-remove')) {
159												jQuery(this).attr('class', 'mean-remove');
160											} else {
161												jQuery(this).removeAttr("class");
162											}
163											jQuery(this).removeAttr("id");
164										});
165									}
166
167									// push in a holder div (this can be used if removal of nav is causing layout issues)
168									jQuery(meanMenu).before('<div class="mean-push" />');
169									jQuery('.mean-push').css("margin-top",meanNavPush);
170
171									// hide current navigation and reveal mean nav link
172									jQuery(meanMenu).hide();
173									jQuery(".meanmenu-reveal").show();
174
175									// turn 'X' on or off
176									jQuery(meanRevealClass).html(meanMenuOpen);
177									$navreveal = jQuery(meanRevealClass);
178
179									//hide mean-nav ul
180									jQuery('.mean-nav ul').hide();
181
182									// hide sub nav
183									if(meanShowChildren) {
184											// allow expandable sub nav(s)
185											if(meanExpandableChildren){
186												jQuery('.mean-nav ul ul').each(function() {
187														if(jQuery(this).children().length){
188																jQuery(this,'li:first').parent().append('<a class="mean-expand" href="#" style="font-size: '+ meanMenuCloseSize +'">'+ meanExpand +'</a>');
189														}
190												});
191												jQuery('.mean-expand').on("click",function(e){
192														e.preventDefault();
193															if (jQuery(this).hasClass("mean-clicked")) {
194																	jQuery(this).text(meanExpand);
195																jQuery(this).prev('ul').slideUp(300, function(){});
196														} else {
197																jQuery(this).text(meanContract);
198																jQuery(this).prev('ul').slideDown(300, function(){});
199														}
200														jQuery(this).toggleClass("mean-clicked");
201												});
202											} else {
203													jQuery('.mean-nav ul ul').show();
204											}
205									} else {
206											jQuery('.mean-nav ul ul').hide();
207									}
208
209									// add last class to tidy up borders
210									jQuery('.mean-nav ul li').last().addClass('mean-last');
211									$navreveal.removeClass("meanclose");
212									jQuery($navreveal).click(function(e){
213										e.preventDefault();
214								if( menuOn === false ) {
215												$navreveal.css("text-align", "center");
216												$navreveal.css("text-indent", "0");
217												$navreveal.css("font-size", meanMenuCloseSize);
218												jQuery('.mean-nav ul:first').slideDown();
219									$('.backstretch-caption, .backstretch-buttons').fadeOut();
220												menuOn = true;
221										} else {
222											jQuery('.mean-nav ul:first').slideUp();
223											$('.backstretch-caption, .backstretch-buttons').fadeIn();
224											menuOn = false;
225										}
226											$navreveal.toggleClass("meanclose");
227											meanInner();
228											jQuery(removeElements).addClass('mean-remove');
229									});
230
231									// for one page websites, reset all variables...
232									if ( onePage ) {
233										jQuery('.mean-nav ul > li > a:first-child').on( "click" , function () {
234											jQuery('.mean-nav ul:first').slideUp();
235											menuOn = false;
236											jQuery($navreveal).toggleClass("meanclose").html(meanMenuOpen);
237										});
238									}
239							} else {
240								meanOriginal();
241							}
242						};
243
244						if (!isMobile) {
245								// reset menu on resize above meanScreenWidth
246								jQuery(window).resize(function () {
247										currentWidth = window.innerWidth || document.documentElement.clientWidth;
248										if (currentWidth > meanScreenWidth) {
249												meanOriginal();
250										} else {
251											meanOriginal();
252										}
253										if (currentWidth <= meanScreenWidth) {
254												showMeanMenu();
255												meanCentered();
256										} else {
257											meanOriginal();
258										}
259								});
260						}
261
262					jQuery(window).resize(function () {
263								// get browser width
264								currentWidth = window.innerWidth || document.documentElement.clientWidth;
265
266								if (!isMobile) {
267										meanOriginal();
268										if (currentWidth <= meanScreenWidth) {
269												showMeanMenu();
270												meanCentered();
271										}
272								} else {
273										meanCentered();
274										if (currentWidth <= meanScreenWidth) {
275												if (meanMenuExist === false) {
276														showMeanMenu();
277												}
278										} else {
279												meanOriginal();
280										}
281								}
282						});
283
284					// run main menuMenu function on load
285					showMeanMenu();
286				});
287		};
288})(jQuery);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.