PageSourceSearch

https://zantemarissuites.gr/js/header.js?ver=5

js zantemarissuites.gr collected 2026-10-08 22:55:49 UTC 6,461 bytes, 164 lines download raw bytes

1/**
2 * Zante Maris Suites — shared header injector
3 * Reads data-page attribute from <body> to mark active nav item.
4 * Usage: <body data-page="about"> etc.
5 * Pages: home, about, suites, food, wellness, gallery, contact
6 */
7(function () {
8  var pages = ['home', 'about', 'suites', 'food', 'wellness', 'gallery', 'contact'];
9  var links = {
10    home:     'https://zantemarissuites.gr/',
11    about:    '/about.html',
12    suites:   '/suites.html',
13    food:     '/food-drink.html',
14    wellness: '/wellness.html',
15    gallery:  '/gallery.html',
16    contact:  '/contact.html'
17  };
18  var labels = {
19    home: 'Home',
20    about: 'About',
21    suites: 'Suites',
22    food: 'Food &amp; Drink',
23    wellness: 'Wellness',
24    gallery: 'Photo Gallery',
25    contact: 'Contact'
26  };
27
28  function navItem(page, currentPage) {
29    var isCurrent = page === currentPage ? ' class="current"' : '';
30    var href = links[page];
31    var key = page === 'home' ? 'nav.home' : page === 'food' ? 'nav.food' : 'nav.' + page;
32    var label = labels[page] || page;
33    return '<li' + isCurrent + '><a href="' + href + '" data-i18n="' + key + '">' + label + '</a></li>';
34  }
35
36  function detectLang() {
37    if (window.location.pathname.indexOf('/el/') === 0 || window.location.pathname === '/el') {
38      return 'el';
39    }
40    var stored = localStorage.getItem('zms_lang');
41    if (stored === 'en' || stored === 'el') return stored;
42    var browser = (navigator.language || '').substring(0, 2).toLowerCase();
43    return browser === 'el' ? 'el' : 'en';
44  }
45
46  function langHref(targetLang) {
47    var path = window.location.pathname || '/';
48    var search = window.location.search || '';
49    var hash = window.location.hash || '';
50    var isGreekPath = path.indexOf('/el/') === 0 || path === '/el';
51    var normalizedPath = path;
52
53    if (isGreekPath) {
54      normalizedPath = path === '/el' ? '/' : path.replace(/^\/el\//, '/');
55    }
56
57    if (targetLang === 'el') {
58      // Root goes to /el/, inner pages map to /el/<page>.
59      var greekPath = normalizedPath === '/' ? '/el/' : '/el' + normalizedPath;
60      return greekPath + search + hash;
61    }
62
63    return normalizedPath + search + hash;
64  }
65
66  function langItems(currentLang) {
67    var enClass = currentLang === 'en' ? ' class="lang-menu-item current"' : ' class="lang-menu-item"';
68    var elClass = currentLang === 'el' ? ' class="lang-menu-item current"' : ' class="lang-menu-item"';
69    var enHref = langHref('en');
70    var elHref = langHref('el');
71    return (
72      '<li' + enClass + '><a href="' + enHref + '" class="lang-link" data-lang="en" data-i18n="nav.lang.en" onclick="localStorage.setItem(\'zms_lang\',\'en\')">EN</a></li>' +
73      '<li' + elClass + '><a href="' + elHref + '" class="lang-link" data-lang="el" data-i18n="nav.lang.el" onclick="localStorage.setItem(\'zms_lang\',\'el\')">GR</a></li>'
74    );
75  }
76
77  function render() {
78    var currentPage = document.body.getAttribute('data-page') || 'home';
79    var currentLang = detectLang();
80
81    var navItems = pages.map(function(p) { return navItem(p, currentPage); }).join('');
82    var langNavItems = langItems(currentLang);
83
84    var html =
85      '<!-- Mobile Menu -->' +
86      '<aside class="side-navigation-wrapper enter-right" data-no-scrollbar data-animation="push-in">' +
87        '<div class="side-navigation-scroll-pane">' +
88          '<div class="side-navigation-inner">' +
89            '<div class="side-navigation-header">' +
90              '<div class="navigation-hide side-nav-hide">' +
91                '<a href="#"><span class="icon-cancel medium"></span></a>' +
92              '</div>' +
93            '</div>' +
94            '<nav class="side-navigation">' +
95              '<ul>' +
96                navItems +
97                langNavItems +
98              '</ul>' +
99            '</nav>' +
100            '<div class="side-navigation-footer">' +
101              '<p class="copyright no-margin-bottom">&copy; Zante Maris Suites.</p>' +
102            '</div>' +
103          '</div>' +
104        '</div>' +
105      '</aside>' +
106      '<div class="wrapper">' +
107        '<div class="wrapper-inner">' +
108          '<!-- Header -->' +
109          '<header class="header header-absolute header-fixed-on-mobile header-transparent" data-bkg-threshold="1000" data-compact-threshold="1000">' +
110            '<div class="header-inner">' +
111              '<div class="row nav-bar">' +
112                '<div class="column width-12 nav-bar-inner">' +
113                  '<div class="logo">' +
114                    '<div class="logo-inner">' +
115                      '<a href="https://zantemarissuites.gr/"><img src="/images/logo-small.png" alt="Zante Maris Suites Logo" /></a>' +
116                      '<a href="https://zantemarissuites.gr/"><img src="/images/logo.png" alt="Zante Maris Suites Logo" /></a>' +
117                    '</div>' +
118                  '</div>' +
119                  '<nav class="navigation nav-block secondary-navigation nav-right">' +
120                    '<ul>' +
121                      '<li>' +
122                        '<div class="v-align-middle">' +
123                          '<a href="//zantemarissuites.reserve-online.net" target="_blank" class="button small pull-right no-margin-bottom" data-i18n="nav.book">Book A Suite</a>' +
124                        '</div>' +
125                      '</li>' +
126                      '<li class="aux-navigation hide">' +
127                        '<a href="#" class="navigation-show side-nav-show nav-icon"><span class="icon-menu"></span></a>' +
128                      '</li>' +
129                    '</ul>' +
130                  '</nav>' +
131                  '<nav class="navigation nav-block primary-navigation nav-right">' +
132                    '<ul>' +
133                      navItems +
134                      langNavItems +
135                    '</ul>' +
136                  '</nav>' +
137                '</div>' +
138              '</div>' +
139            '</div>' +
140          '</header>';
141
142    var target = document.getElementById('site-header');
143    if (target) {
144      target.outerHTML = html;
145    }
146
147    // Apply translations immediately after injection
148    if (window.ZMI18n && ZMI18n.applyTranslations) {
149      ZMI18n.applyTranslations();
150    }
151  }
152
153  // Render as early as possible so Timber can bind mobile-menu handlers.
154  function boot() {
155    // If placeholder is not in DOM yet, wait briefly and retry.
156    if (!document.getElementById('site-header')) {
157      setTimeout(boot, 10);
158      return;
159    }
160    render();
161  }
162
163  boot();
164})();

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.