PageSourceSearch

https://www.infoflora.ch/assets/js/menu.js

js infoflora.ch collected 2026-09-24 08:59:00 UTC 6,058 bytes, 234 lines download raw bytes

1const mediaMobile = window.matchMedia('(max-width: 768px)');
2var mobileMenuBtn = document.getElementById("mobile-menu-btn");
3var sidebar = document.getElementById("sidebar");
4var mobileMenu = document.querySelector(".mobile-menu");
5var toolsMenu = document.querySelector('.tools-menu.mobile');
6var subMenuDiv = document.querySelector(".subMenu");
7var subMenuTitle = document.querySelector(".subMenu-title");
8var subMenuReturn = document.querySelector(".subMenu-return");
9var searchBar = document.getElementById("search_link");
10var searchbarIsOpen = false;
11
12/*
13  Search bar
14*/
15searchBar.addEventListener("click", (e) => {
16  e.stopPropagation();
17  e.preventDefault();
18
19  if (e.target == searchBar) {
20
21    if (searchbarIsOpen == false) {
22      searchBar.childNodes[ 0 ].style.display = "unset";
23      searchbarIsOpen = true;
24    } else {
25      searchBar.childNodes[ 0 ].style.display = "none";
26      searchbarIsOpen = false;
27    }
28  }
29});
30
31/* 
32  Menu selected item
33*/
34
35$('.desktop-menu .menu-nav > ul > li').click(function () {
36  $('.desktop-menu .menu-nav > ul > li').removeClass('selected');
37  $(this).addClass('selected');
38});
39
40$('.subMenu').on('mouseover', '.level2 > a', function () {
41  $('.level2').removeClass('active');
42  $(this).parent().addClass('active');
43});
44
45// For Mobile
46$('.mobile-menu li').click(function (e) {
47  e.stopPropagation();
48  if ($(this).hasClass('fly') && $(this).hasClass('level1')) {
49    e.preventDefault();
50    var ullist = $(this).children('ul:first');
51    $(this).toggleClass('opened');
52    ullist.slideToggle();
53  }
54});
55
56
57/* 
58Sidebar opening and closing
59*/
60
61sidebar.addEventListener("mouseover", () => {
62  if (!mediaMobile.matches) {
63    $('#sidebar').toggleClass('active', true);
64  }
65});
66
67sidebar.addEventListener("mouseleave", () => {
68  if (!(mediaMobile.matches || $('#extended-sidebar').hasClass('active'))) {
69    $('#sidebar').toggleClass('active', false);
70  }
71});
72
73//For mobile
74
75function hideContent () {
76  $('#page-content').toggleClass('hide', true);
77  $('footer').toggleClass('hide', true);
78}
79
80function showContent () {
81  $('#page-content').toggleClass('hide', false);
82  $('footer').toggleClass('hide', false);
83}
84
85function closeMobileMenu () {
86  mobileMenu.style.display = "none";
87  mobileMenuBtn.classList.toggle('closed', true);
88  mobileMenuBtn.classList.toggle('opened', false);
89  $('#autoLatin-home').blur();
90  showContent();
91}
92
93function openMobileMenu () {
94  closeMobileToolsMenu();
95  mobileMenu.style.display = "flex";
96  mobileMenuBtn.classList.toggle('closed', false);
97  mobileMenuBtn.classList.toggle('opened', true);
98  hideContent();
99}
100
101mobileMenuBtn.addEventListener("click", () => {
102  if (mobileMenu.style.display === "none" || mobileMenu.style.display === '') {
103    openMobileMenu();
104  } else {
105    closeMobileMenu();
106  }
107});
108
109
110/* 
111extended sidebar for submenu opening and closing
112*/
113
114// Called from breadcrumb(PagePath)
115function openMenuToElement (e, classname, link, linktext) {
116  if (!mediaMobile.matches) {
117    showSubMenu(e, classname, link, linktext);
118  }
119  else {
120    openMobileMenu();
121    var elementToOpen = $('.mobile-menu li.' + classname)
122    if (elementToOpen.hasClass('fly') && elementToOpen.hasClass('level1')) {
123      e.preventDefault();
124      var ullist = elementToOpen.children('ul:first');
125      elementToOpen.toggleClass('opened');
126      if (ullist.is(":hidden")) {
127        ullist.slideToggle();
128      }
129    }
130  }
131}
132
133
134// Called in mainNav menuRow 
135function showSubMenu (e, classname, link, linktext) {
136  e.preventDefault();
137  if (!mediaMobile.matches) {
138    if (subMenuDiv.lastElementChild) {
139      subMenuDiv.removeChild(subMenuDiv.lastElementChild)
140    }
141    var subMenu = document.getElementsByClassName(classname)[ 0 ].lastChild;
142    var clone = subMenu.cloneNode(true);
143    subMenuDiv.appendChild(clone);
144    subMenuTitle.innerHTML = linktext;
145    $('#sidebar').toggleClass('active', true);
146    $('.' + classname).toggleClass('selected', true);
147    $('#extended-sidebar').toggleClass('active', true);
148
149    $('body').toggleClass('no-scroll', true);
150  }
151}
152
153
154function closeSubMenu () {
155  $('#extended-sidebar').toggleClass('active', false);
156  $('#sidebar').toggleClass('active', false);
157  $('.desktop-menu .menu-nav > ul > li').removeClass('selected');
158  $('body').toggleClass('no-scroll', false);
159  if (subMenuDiv.lastElementChild) {
160    subMenuDiv.removeChild(subMenuDiv.lastElementChild);
161  }
162}
163
164subMenuReturn.addEventListener("click", closeSubMenu);
165document.querySelector("#extended-sidebar .transparent").addEventListener("click", closeSubMenu);
166
167/* 
168  Footer management
169*/
170
171$('footer .col > h4').click(function () {
172  if (mediaMobile.matches) {
173    $(this)[ 0 ].parentNode.lastElementChild.classList.toggle('active');
174  }
175});
176
177/* 
178  Tools menu management
179*/
180
181function closeMobileToolsMenu () {
182  if (toolsMenu) {
183    toolsMenu.classList.toggle('hide', true);
184    showContent();
185  }
186}
187
188$('.tools.mobile button').click(function () {
189  toolsMenu.classList.toggle('hide', false);
190  $(':focus').blur();
191  hideContent();
192  $('.tools-menu-return').click(closeMobileToolsMenu);
193  $('#autoLatin-home').focus();
194});
195
196/* 
197  Media size management
198*/
199
200function handleMediaChange (e) {
201  // Check if the media query is true
202  if (e.matches) {
203    // Then log the following message to the console
204    $('#sidebar').toggleClass('active', false);
205    closeSubMenu();
206  }
207  else {
208    closeMobileMenu();
209    closeMobileToolsMenu();
210  }
211}
212
213// Register event listener
214mediaMobile.addEventListener("change", handleMediaChange);
215
216// Initial check
217handleMediaChange(mediaMobile);
218
219
220$(document).ready(function () {
221  var anchor = document.getElementById(decodeURI(window.location.hash.substr(1)));
222  if (anchor && anchor.classList.contains('collapsed')) {
223    anchor.classList.remove('collapsed');
224    $(anchor.attributes.getNamedItem("data-target").nodeValue).addClass('show in');
225  }
226});
227
228window.addEventListener('hashchange', function () {
229  closeSubMenu();
230  var hashElement = document.getElementById(window.location.hash.substr(1));
231  if (hashElement) {
232    hashElement.scrollIntoView();
233  }
234});

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.