PageSourceSearch

https://www.omnika.ai/assets/site-nav.js

js omnika.ai collected 2026-10-05 13:35:01 UTC 3,946 bytes, 106 lines download raw bytes

1(function () {
2  'use strict';
3
4  function pageLanguage() {
5    return (document.documentElement.lang || '').toLowerCase().indexOf('en') === 0 ? 'en' : 'fr';
6  }
7
8  function linkGroup(anchor) {
9    var href = (anchor.getAttribute('href') || '').toLowerCase();
10    var text = (anchor.textContent || '').trim().toLowerCase();
11    if (text === 'product' || text === 'produit' || href.indexOf('ai-leasing-agent') !== -1 || href.indexOf('agent-location-ia') !== -1) return 'product';
12    if (text === 'about' || text === 'à propos' || href.indexOf('/about') !== -1 || href.indexOf('/a-propos') !== -1) return 'about';
13    if (text === 'resources' || text === 'ressources' || href.indexOf('/resources') !== -1 || href.indexOf('/ressources') !== -1) return 'resources';
14    return 'other';
15  }
16
17  function arrangeLinks(container) {
18    var anchors = Array.prototype.slice.call(container.querySelectorAll(':scope > a'));
19    var order = ['product', 'about', 'resources', 'other'];
20    anchors.sort(function (a, b) {
21      return order.indexOf(linkGroup(a)) - order.indexOf(linkGroup(b));
22    });
23    anchors.forEach(function (anchor) { container.appendChild(anchor); });
24    return anchors;
25  }
26
27  function closeMenu(button, panel) {
28    button.setAttribute('aria-expanded', 'false');
29    panel.hidden = true;
30  }
31
32  function initializeNavigation(nav, index) {
33    if (nav.querySelector('.mobile-menu-toggle')) return;
34    var desktopLinks = nav.querySelector('.nav-links');
35    var navActions = nav.querySelector('.nav-actions');
36    if (!desktopLinks || !navActions) return;
37
38    var links = arrangeLinks(desktopLinks);
39    var language = pageLanguage();
40    var panelId = 'mobile-navigation-' + index;
41
42    var button = document.createElement('button');
43    button.type = 'button';
44    button.className = 'mobile-menu-toggle';
45    button.setAttribute('aria-expanded', 'false');
46    button.setAttribute('aria-controls', panelId);
47    button.setAttribute('aria-label', language === 'en' ? 'Open navigation' : 'Ouvrir la navigation');
48    button.innerHTML = '<span class="mobile-menu-toggle-lines" aria-hidden="true"></span>';
49
50    var panel = document.createElement('div');
51    panel.className = 'mobile-nav';
52    panel.id = panelId;
53    panel.hidden = true;
54
55    links.forEach(function (anchor) {
56      panel.appendChild(anchor.cloneNode(true));
57    });
58
59    var demo = document.createElement('a');
60    demo.className = 'mobile-demo-link';
61    demo.href = language === 'en' ? 'https://www.omnika.ai/en/demo' : 'https://www.omnika.ai/demo';
62    demo.textContent = language === 'en' ? 'View the demo' : 'Voir la démo';
63    panel.appendChild(demo);
64
65    navActions.appendChild(button);
66    nav.appendChild(panel);
67
68    button.addEventListener('click', function () {
69      var willOpen = panel.hidden;
70      panel.hidden = !willOpen;
71      button.setAttribute('aria-expanded', String(willOpen));
72      button.setAttribute('aria-label', willOpen
73        ? (language === 'en' ? 'Close navigation' : 'Fermer la navigation')
74        : (language === 'en' ? 'Open navigation' : 'Ouvrir la navigation'));
75    });
76
77    panel.addEventListener('click', function (event) {
78      if (event.target.closest('a')) closeMenu(button, panel);
79    });
80
81    document.addEventListener('keydown', function (event) {
82      if (event.key === 'Escape' && !panel.hidden) {
83        closeMenu(button, panel);
84        button.focus();
85      }
86    });
87
88    document.addEventListener('click', function (event) {
89      if (!panel.hidden && !nav.contains(event.target)) closeMenu(button, panel);
90    });
91
92    window.addEventListener('resize', function () {
93      if (window.innerWidth > 920 && !panel.hidden) closeMenu(button, panel);
94    });
95  }
96
97  function init() {
98    document.querySelectorAll('.site-header .nav').forEach(initializeNavigation);
99  }
100
101  if (document.readyState === 'loading') {
102    document.addEventListener('DOMContentLoaded', init);
103  } else {
104    init();
105  }
106})();

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.