PageSourceSearch

https://www.hotelmicheletodeon.com/html/views/menu/burger/ui.js

js hotelmicheletodeon.com collected 2026-10-08 20:01:48 UTC 6,345 bytes, 210 lines download raw bytes

1const toggleClass = function (element, ...classname) {
2  classname.forEach((classname) => {
3    element.classList.toggle(classname);
4  });
5};
6
7var initMenu = function () {
8  let menu, menuButton, mainNav, line1, line2, line3;
9  let fixed = false;
10  menu = document.getElementById("main-menu");
11  menuButton = document.getElementById("menu-toggle");
12  mainNav = document.getElementById("main-nav");
13
14  line1 = menuButton.querySelector(".line1");
15  line2 = menuButton.querySelector(".line2");
16  line3 = menuButton.querySelector(".line3");
17
18  var heightNavigation = parseInt(
19    getComputedStyle(document.documentElement).getPropertyValue(
20      "--height-navigation",
21    ),
22  );
23
24  setStickyNav();
25
26  window.addEventListener("scroll", setStickyNav, {
27    capture: true,
28    passive: true,
29  });
30
31  if (document.body.classList.contains("onepage")) {
32    menu.querySelectorAll("a").forEach(function (link) {
33      link.addEventListener("click", function (e) {
34        e.preventDefault();
35        var target = document.getElementById(
36          link.dataset.menu.replace("#", ""),
37        );
38        if (target) {
39          closeMenu();
40          var top = target.offsetTop - heightNavigation;
41          window.scrollTo({
42            top: top,
43            behavior: "smooth",
44          });
45        }
46      });
47    });
48  }
49
50  let events = {
51    click: window.ontouchstart === null ? "touchstart" : "click",
52  };
53
54  const elementsEvent = [menuButton];
55  const body = document.getElementsByTagName("body")[0];
56
57  if (window.globals.header != "") {
58    body.classList.add(window.globals.header);
59  }
60
61  document.addEventListener(
62    "click",
63    function (event) {
64      if (
65        (event.target.matches(".menu-toggle") ||
66          !event.target.closest(".main-nav")) &&
67        menu.classList.contains("open")
68      ) {
69        closeMenu();
70      }
71    },
72    false,
73  );
74
75  const closeMenu = function () {
76    //load images in menu with attr menu-src
77    let images = menu.querySelectorAll("[menu-src]");
78    images.forEach(function (image) {
79      image.src = image.getAttribute("menu-src");
80      image.removeAttribute("menu-src");
81    });
82
83    Array.from([line1, line2, line3], (item) =>
84      item.classList.toggle("fill-neutral-800"),
85    );
86    Array.from([line1, line3], (item) => toggleClass(item, "origin-top"));
87    body.classList.toggle("overflow-hidden");
88    menuButton.querySelector("span").classList.toggle("hidden");
89    toggleClass(menu, "opacity-100", "translate-x-0", "open");
90    toggleClass(
91      line1,
92      "transform",
93      "-rotate-45",
94      "translate-x-[-2px]",
95      "translate-y-[15px]",
96    );
97    toggleClass(
98      line3,
99      "transform",
100      "rotate-45",
101      "translate-x-[15px]",
102      "translate-y-[-6px]",
103    );
104
105    line2.classList.toggle("w-0");
106  };
107
108  elementsEvent.forEach(function (element) {
109    element.addEventListener(
110      events.click,
111      function (e) {
112        e.stopImmediatePropagation();
113        closeMenu();
114      },
115      { passive: true, capture: true },
116    );
117  });
118
119  function setStickyNav() {
120    let scrollBarPosition = Math.abs(
121      window.pageYOffset | document.body.scrollTop,
122    );
123    let pageHeight = document.body.classList.contains("load-header")
124      ? window.innerHeight
125      : 0;
126    fixed = typeof fixed === "undefined" ? false : fixed;
127
128    const editClass = function () {
129      toggleClass(mainNav, "bg-neutral-100", "fixed-menu", "shadow-md");
130      toggleClass(
131        mainNav.querySelector(".btn-effect"),
132        "text-primary-900",
133        "border-primary-900",
134      );
135      menuButton.querySelector("svg").classList.toggle("fill-neutral-100");
136      toggleClass(menuButton.querySelector("svg"), "fill-primary-900");
137      toggleClass(
138        mainNav.querySelector(".menu-nav-logo"),
139        "opacity-100",
140        "pointer-events-auto",
141      );
142      const btnEffect = mainNav.querySelector(".btn-effect");
143
144      if (btnEffect) {
145        toggleClass(btnEffect, "hover:text-neutral-100");
146      }
147    };
148
149    if (scrollBarPosition >= pageHeight && fixed === false) {
150      fixed = true;
151      // get menu-nav-logo element and replace the menu-src by src
152      menuButton.querySelector("span").classList.add("text-primary-900");
153      menuButton.querySelector("span").classList.remove("text-neutral-50");
154
155      let logo = mainNav.querySelector(".menu-nav-logo img");
156      if (logo.getAttribute("menu-src")) {
157        logo.src = logo.getAttribute("menu-src");
158        logo.removeAttribute("menu-src");
159      }
160      editClass();
161    }
162
163    if (scrollBarPosition < pageHeight && fixed === true) {
164      fixed = false;
165      menuButton.querySelector("span").classList.remove("text-primary-900");
166      menuButton.querySelector("span").classList.add("text-neutral-50");
167      editClass();
168    }
169  }
170};
171
172// Hide/show dynamic calendar
173const bookingButton = document.querySelectorAll(".open-booking");
174const closeBookingButton = document.getElementById("close-book-calendar");
175const bookingCalendar = document.getElementById("booking-calendar");
176if (bookingCalendar) {
177  const setBookingCalendarState = function (isOpen) {
178    bookingCalendar.classList.toggle("opacity-0", !isOpen);
179    bookingCalendar.classList.toggle("opacity-100", isOpen);
180    bookingCalendar.classList.toggle("translate-x-full", !isOpen);
181    bookingCalendar.classList.toggle("translate-x-0", isOpen);
182    bookingCalendar.classList.toggle("pointer-events-none", !isOpen);
183    bookingCalendar.classList.toggle("pointer-events-auto", isOpen);
184  };
185
186  setBookingCalendarState(false);
187
188  bookingButton.forEach((btn) => {
189    btn.addEventListener("click", function (e) {
190      e.preventDefault();
191      if (
192        !document.querySelector(
193          "script[src='https://websdk.d-edge.com/widgets/app.js']",
194        )
195      ) {
196        lazy.loadScript("https://websdk.d-edge.com/widgets/app.css", 0);
197        lazy.loadScript("https://websdk.d-edge.com/widgets/app.js", 0);
198      }
199
200      setBookingCalendarState(true);
201    });
202  });
203
204  if (closeBookingButton) {
205    closeBookingButton.addEventListener("click", function (e) {
206      e.preventDefault();
207      setBookingCalendarState(false);
208    });
209  }
210}

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.