PageSourceSearch

https://www.cheero.cz/wa_script/js/bs_slide_menu.js?_=2026-09-02-11-10

js cheero.cz collected 2026-09-24 13:50:04 UTC 7,878 bytes, 320 lines download raw bytes

1;var BS = BS || {};
2(function($, BS) {
3  'use strict';
4
5  var initialized = false;
6  var _vars = {
7    widescreenEnabled: false,
8    widescreenActive: false,
9    widescreenMinWidth: 992,
10    menuState: {
11      running: false,
12      loaded: false
13    },
14    classNames: {
15      btnActive: "is-active",
16      widescreenActive: "menu-widescreen",
17      widescreenOpenedLoad: "menu-widescreen-load"
18    },
19    resizeTimeout: null,
20    resizeDelay: 150
21  };
22
23  var _eventHandlers = {};
24  var _cookie = "bs_slide_menu";
25  var _keydownEvent = "keydown.mm-offCanvas";
26
27  function _init(menuSelector, settings) {
28    var menu = document.getElementById(menuSelector);
29    if(menu)
30    {
31      $(menu).mmenu(settings.mmenu.options, settings.mmenu.configuration);
32      _vars.menu = menu;
33      _vars.api = $(menu).data("mmenu");
34      _vars.btn = document.getElementById("navButtonIcon");
35      _vars.html = document.documentElement;
36      $.extend(true, _vars, settings);
37
38      if(_vars.autoOpenPanel) {
39        _openPanel();
40      }
41      menu = null;
42      _registerEvents();
43      return true;
44    }
45    else
46    {
47      return false;
48    }
49  }
50
51  function _openPanel() {
52    var selected = $(_vars.menu).find("." + _vars.classNames.selected).eq(-1);
53    var next = selected.find("a.mm-next").attr("href"),
54        panel;
55    if(next) {
56      panel = $(next);
57      if(panel.length) {
58        _vars.api.openPanel(panel);
59      }
60    }
61  }
62
63  function _registerEvents() {
64    _vars.api.bind("open:start", function() {
65      _updateMenuState("opening");
66      _runEventHandlers("opening", this, [_createEventObj("opening")]);
67    });
68    _vars.api.bind("open:finish", function() {
69      _updateMenuState("opened");
70      _runEventHandlers("open", this, [_createEventObj("open")]);
71    });
72    _vars.api.bind("close:start", function() {
73      _updateMenuState("closing");
74      _runEventHandlers("closing", this, [[_createEventObj("closing")]]);
75    });
76    _vars.api.bind("close:finish", function() {
77      _updateMenuState("closed");
78      _runEventHandlers("close", this, [_createEventObj("close")]);
79    });
80    _vars.btn.addEventListener("click", function(e) {
81      e.preventDefault();
82      if(!_isOpened())
83      {
84        _open();
85        BS.cookie.set(_cookie, 1);
86      }
87      else
88      {
89        _close();
90        BS.cookie.set(_cookie, 0);
91      }
92    });
93    if(_vars.widescreenEnabled)
94    {
95      window.addEventListener("resize", function(e) {
96        clearTimeout(_vars.resizeTimeout);
97        _vars.resizeTimeout = setTimeout(function() {
98          _windowResize(window.innerWidth);
99          _vars.resizeTimeout = null;
100        }, _vars.resizeDelay);
101      });
102      _windowResize(window.innerWidth);
103    }
104    else
105    {
106      _menuFirstLoaded();
107    }
108    //mmenu úplně ruší tabelování pokud je menu otevřeno
109    //ve widescreen variantě ale máme menu otevřeno a chceme interagovat se stránkou
110    //zrušení interního onkeydown eventu a nahrazení našim
111    $(window).off(_keydownEvent);
112    _addKeydownEvent();
113  }
114
115  function _windowResize(width) {
116    //nic nedělat, pokud 'widescreen' možnost není zapnuta
117    //nebo se menu již otevírá/zavírá
118    if(_vars.widescreenEnabled
119      && !_vars.menuState.running)
120    {
121      if(width >= parseInt(_vars.widescreenMinWidth))
122      {
123        _vars.html.classList.add(_vars.classNames.widescreenActive);
124        _vars.widescreenActive = true;
125        if(parseInt(BS.cookie.get(_cookie)) !== 0
126          && !_vars.menuState.loaded) {
127          //prvotní načtení a otevření menu
128          _open();
129        } else if(!_vars.menuState.loaded) {
130          //nečekáme na otevření menu
131          _menuFirstLoaded();
132        }
133      }
134      else
135      {
136        if(_vars.widescreenActive === true) {
137          _vars.html.classList.remove(_vars.classNames.widescreenActive);
138          _close();
139          _vars.widescreenActive = false;
140          if(!_vars.menuState.loaded)
141          {
142            //malá obrazovka, menu zůstává zavřeno
143            _menuFirstLoaded();
144          }
145        }
146      }
147    }
148  }
149
150  function _menuFirstLoaded() {
151    if(_vars.widescreenEnabled)
152    {
153      _vars.html.classList.remove(_vars.classNames.widescreenOpenedLoad);
154    }
155
156    _vars.menuState.loaded = true;
157  }
158
159  function _open() {
160    if(!_isOpened())
161    {
162      _vars.api.open();
163    }
164  }
165
166  function _close() {
167    if(_isOpened())
168    {
169      _vars.api.close();
170    }
171  }
172
173  function _resizeSlider() {
174    if(_vars.widescreenEnabled
175      && _vars.widescreenActive
176      && BS.slider
177      && BS.slider.isReady())
178    {
179      BS.slider.api.revredraw();
180    }
181  }
182
183  function _updateMenuState(state) {
184    switch (state)
185    {
186      case "opening":
187        _vars.menuState.running = true;
188        break;
189      case "opened":
190        _menuOpened();
191        _resizeSlider();
192        _vars.menuState.running = false;
193        break;
194      case "closing":
195        _vars.menuState.running = true;
196        break;
197      case "closed":
198        _menuClosed();
199        _resizeSlider();
200        _vars.menuState.running = false;
201        break;
202    }
203  }
204
205  function _menuOpened() {
206    if(!_vars.menuState.loaded)
207    {
208      _menuFirstLoaded();
209    }
210    setTimeout(function() {
211      _vars.btn.classList.add(_vars.classNames.btnActive);
212    }, 10);
213  }
214
215  function _menuClosed() {
216    setTimeout(function() {
217      _vars.btn.classList.remove(_vars.classNames.btnActive);
218    }, 10);
219  }
220
221  function _isOpened() {
222    return _vars.api.getInstance().vars.opened;
223  }
224
225  function _runEventHandlers(event, context, data) {
226    if(_eventHandlers[event]) {
227      for(var i = 0; i < _eventHandlers[event].length; i++) {
228        _eventHandlers[event][i].apply(context, data);
229      }
230    }
231  }
232
233  function _createEventObj(event) {
234    return {
235      type: event,
236      api: _vars.api,
237      menu: _vars.menu
238    }
239  }
240
241  function _customKeydownHandler(e) {
242    if(e.keyCode === 9) {
243      //rozšíření interní funkce mmenu
244      if(!_vars.widescreenActive && _isOpened()) {
245        e.preventDefault();
246      }
247    }
248  }
249
250  function _removeKeydownEvent() {
251    window.removeEventListener("keydown", _customKeydownHandler);
252  }
253
254  function _addKeydownEvent() {
255    window.addEventListener("keydown", _customKeydownHandler);
256  }
257
258  function initSlideMenu(menuSelector, settings) {
259    if(!_init(menuSelector, settings))
260    {
261      console.error("Menu couldn't be initialized");
262      return;
263    }
264
265    //veřejné metody
266    BS.slideMenu.menu = {
267      open: function() {
268        _open();
269      },
270      close: function() {
271        _close();
272      },
273      isOpened: function() {
274        return _isOpened();
275      },
276      isWidescreenEnabled: function() {
277        return _vars.widescreenEnabled;
278      },
279      isWidescreenActive: function() {
280        return _vars.widescreenActive;
281      },
282      tabEnable: function() {
283        _removeKeydownEvent();
284      },
285      tabRestore: function() {
286        _addKeydownEvent()
287      },
288      getApi: function() {
289        return _vars.api;
290      },
291      on: function(event, handler) {
292        if(typeof handler === "function") {
293          if(!_eventHandlers[event]) _eventHandlers[event] = [];
294          _eventHandlers[event].push(handler);
295        }
296      },
297      off: function(event, handler) {
298        if(typeof handler === "function"
299          && !!_eventHandlers[event]
300          && !!_eventHandlers[event].length) {
301          var i = _eventHandlers[event].length - 1;
302          for(; i >= 0 ; i--) {
303            if(_eventHandlers[event][i] === handler) {
304              _eventHandlers[event].splice(i, 1);
305            }
306          }
307        }
308      }
309    }
310  }
311
312  BS.slideMenu = {
313    init: function(menuSelector, settings) {
314      if(!initialized) {
315        initSlideMenu(menuSelector, settings);
316        initialized = true;
317      }
318    }
319  }
320})(jQuery, BS);

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.