PageSourceSearch

https://oikeuskansleri.fi/o/frontend-js-jquery-web/jquery/side_navigation.js

js oikeuskansleri.fi collected 2026-10-02 03:57:12 UTC 28,684 bytes, 880 lines download raw bytes

1/**
2 * SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com
3 * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
4 */
5+function ($) {
6  var doc = $(document);
7  var listenerAdded = false; // Make sure we only add one resize listener to the page,
8  // no matter how many components we have
9
10  var addResizeListener = function addResizeListener() {
11    if (!listenerAdded) {
12      $(window).on('resize', debounce(function () {
13        doc.trigger('screenChange.lexicon.sidenav');
14      }, 150));
15      listenerAdded = true;
16    }
17  };
18
19  var debounce = function debounce(fn, delay) {
20    var id;
21    return function () {
22      var instance = this;
23      var args = arguments;
24
25      var later = function later() {
26        id = null;
27        fn.apply(instance, args);
28      };
29
30      clearTimeout(id);
31      id = setTimeout(later, delay);
32    };
33  };
34
35  var getBreakpointRegion = function getBreakpointRegion() {
36    var screenXs = 480;
37    var screenSm = 768;
38    var screenMd = 992;
39    var screenLg = 1200;
40    var windowWidth = window.innerWidth;
41    var region = '';
42
43    if (windowWidth >= screenLg) {
44      region = 'lg';
45    } else if (windowWidth >= screenMd) {
46      region = 'md';
47    } else if (windowWidth >= screenSm) {
48      region = 'sm';
49    } else if (windowWidth >= screenXs) {
50      region = 'xs';
51    } else {
52      region = 'xxs';
53    }
54
55    return region;
56  };
57
58  var guid = function () {
59    var counter = 0;
60    return function (toggler, ns) {
61      var strId = toggler.attr('id');
62
63      if (!strId) {
64        strId = ns + counter++;
65        toggler.attr('id', strId);
66      }
67
68      return strId;
69    };
70  }();
71
72  var toInt = function toInt(str) {
73    return parseInt(str, 10) || 0;
74  };
75
76  var SideNavigation = function SideNavigation(toggler, options) {
77    this.init(toggler, options);
78  };
79
80  SideNavigation.TRANSITION_DURATION = 500;
81  SideNavigation.prototype = {
82    _bindUI: function _bindUI() {
83      var instance = this;
84
85      if (!instance.useDataAttribute) {
86        addResizeListener();
87
88        instance._onScreenChange();
89      }
90
91      if (instance.options.useDelegate) {
92        instance._onDelegateClickTrigger();
93      } else {
94        instance._onClickTrigger();
95      }
96
97      instance._onClickSidenavClose();
98    },
99    _focusElement: function _focusElement(el) {
100      // ios 8 fixed element disappears when trying to scroll
101      el.focus();
102    },
103    _getSidenavWidth: function _getSidenavWidth() {
104      var instance = this;
105      var options = instance.options;
106      var widthOriginal = options.widthOriginal;
107      var width = widthOriginal;
108      var winWidth = window.innerWidth;
109
110      if (winWidth < widthOriginal + 40) {
111        width = winWidth - 40;
112      }
113
114      return width;
115    },
116    _getSimpleSidenavType: function _getSimpleSidenavType() {
117      var instance = this;
118      var options = instance.options;
119
120      var desktop = instance._isDesktop();
121
122      var type = options.type;
123      var typeMobile = options.typeMobile;
124
125      if (desktop && type === 'fixed-push') {
126        return 'desktop-fixed-push';
127      } else if (!desktop && typeMobile === 'fixed-push') {
128        return 'mobile-fixed-push';
129      }
130
131      return 'fixed';
132    },
133    _isDesktop: function _isDesktop() {
134      return window.innerWidth >= this.options.breakpoint;
135    },
136    _isSidenavRight: function _isSidenavRight() {
137      var instance = this;
138      var options = instance.options;
139      var container = $(options.container);
140      var isSidenavRight = container.hasClass('sidenav-right');
141      return isSidenavRight;
142    },
143    _isSimpleSidenavClosed: function _isSimpleSidenavClosed() {
144      var instance = this;
145      var options = instance.options;
146      var openClass = options.openClass;
147      var container = $(options.container);
148      return !container.hasClass(openClass);
149    },
150    _loadUrl: function _loadUrl(sidenav, url, eventTarget) {
151      var instance = this;
152      var urlLoaded = sidenav.data('url-loaded');
153      var readyState = urlLoaded ? urlLoaded.readyState : 0;
154      eventTarget = eventTarget || sidenav;
155      var sidebarBody = sidenav.find('.sidebar-body').first();
156
157      if (!readyState && sidebarBody.length && (typeof url === 'string' || $.isPlainObject(url))) {
158        sidebarBody.append('<div class="sidenav-loading">' + instance.options.loadingIndicatorTPL + '</div>');
159        urlLoaded = $.ajax(url).done(function (response) {
160          sidebarBody.append(response);
161          eventTarget.trigger('urlLoaded.lexicon.sidenav');
162          sidebarBody.find('.sidenav-loading').remove();
163        });
164        sidenav.data('url-loaded', urlLoaded);
165      }
166
167      return urlLoaded;
168    },
169    _onClickSidenavClose: function _onClickSidenavClose() {
170      var instance = this;
171      var options = instance.options;
172      var containerSelector = options.container;
173      var closeButton = $(containerSelector).find('.sidenav-close').first();
174      var closeButtonSelector = '#' + guid(closeButton, 'generatedLexiconSidenavCloseId');
175      var dataCloseButtonSelector = 'lexicon.' + closeButtonSelector;
176
177      if (!doc.data(dataCloseButtonSelector)) {
178        doc.data(dataCloseButtonSelector, 'true');
179        doc.on('click.close.lexicon.sidenav', closeButtonSelector, function (event) {
180          event.preventDefault();
181          instance.toggle();
182        });
183      }
184
185      instance.closeButtonSelector = closeButtonSelector;
186      instance.dataCloseButtonSelector = dataCloseButtonSelector;
187    },
188    _onClickTrigger: function _onClickTrigger() {
189      var instance = this;
190      var el = instance.toggler;
191      el.on('click.lexicon.sidenav', function () {
192        instance.toggle();
193      });
194    },
195    _onDelegateClickTrigger: function _onDelegateClickTrigger() {
196      var instance = this;
197      var toggler = instance.toggler;
198      var togglerSelector = '#' + guid(toggler, 'generatedLexiconSidenavTogglerId');
199      var dataTogglerSelector = 'lexicon.' + togglerSelector;
200
201      if (!doc.data(dataTogglerSelector)) {
202        doc.data(dataTogglerSelector, 'true');
203        doc.on('click.lexicon.sidenav', togglerSelector, function (event) {
204          instance.toggle();
205          event.preventDefault();
206        });
207      }
208
209      instance.togglerSelector = togglerSelector;
210      instance.dataTogglerSelector = dataTogglerSelector;
211    },
212    _onScreenChange: function _onScreenChange() {
213      var instance = this;
214      var options = instance.options;
215      var container = $(options.container);
216      var toggler = instance.toggler;
217
218      var screenStartDesktop = instance._setScreenSize();
219
220      doc.on('screenChange.lexicon.sidenav', function () {
221        var desktop = instance._setScreenSize();
222
223        var sidenavRight = instance._isSidenavRight();
224
225        var type = desktop ? options.type : options.typeMobile;
226        var fixedMenu = type === 'fixed' || type === 'fixed-push';
227        var menu = container.find('.sidenav-menu').first();
228        var menuWidth;
229        var originalMenuWidth = options.widthOriginal;
230        var positionDirection = options.rtl ? 'left' : 'right';
231        container.toggleClass('sidenav-fixed', fixedMenu);
232
233        if (!desktop && screenStartDesktop || desktop && !screenStartDesktop) {
234          instance.hideSidenav();
235          instance.clearStyle(['min-height', 'height']);
236          container.addClass('closed').removeClass('open');
237          toggler.removeClass('active').removeClass('open');
238          screenStartDesktop = false;
239
240          if (desktop) {
241            if (sidenavRight) {
242              menu.css(positionDirection, originalMenuWidth).css('width', originalMenuWidth);
243            }
244
245            screenStartDesktop = true;
246          }
247        }
248
249        var closed = container.hasClass('closed');
250
251        if (!desktop) {
252          menuWidth = originalMenuWidth;
253
254          if (window.innerWidth <= originalMenuWidth) {
255            menuWidth = window.innerWidth - options.gutter - 25;
256          }
257
258          if (sidenavRight) {
259            if (closed) {
260              menu.css(positionDirection, menuWidth);
261            }
262
263            menu.css('width', menuWidth);
264          }
265
266          screenStartDesktop = false;
267        }
268
269        if (!closed) {
270          instance.clearStyle(['min-height', 'height']);
271          instance.showSidenav();
272          instance.setHeight();
273        }
274      });
275    },
276    _onSidenavTransitionEnd: function _onSidenavTransitionEnd(el, fn) {
277      var instance = this;
278      var transitionEnd = 'bsTransitionEnd';
279
280      var complete = function complete() {
281        el.removeClass('sidenav-transition');
282
283        if (fn) {
284          fn();
285        }
286      };
287
288      if (!bootstrap.Util.supportsTransitionEnd()) {
289        complete.call(instance);
290      } else {
291        el.one(transitionEnd, function () {
292          complete();
293        }).emulateTransitionEnd(SideNavigation.TRANSITION_DURATION);
294      }
295    },
296    _renderNav: function _renderNav() {
297      var instance = this;
298      var options = instance.options;
299      var container = $(options.container);
300      var slider = container.find(options.navigation).first();
301      var menu = slider.find('.sidenav-menu').first();
302      var closed = container.hasClass('closed');
303
304      var sidenavRight = instance._isSidenavRight();
305
306      var width = instance._getSidenavWidth();
307
308      if (closed) {
309        menu.css('width', width);
310
311        if (sidenavRight) {
312          var positionDirection = options.rtl ? 'left' : 'right';
313          menu.css(positionDirection, width);
314        }
315      } else {
316        instance.showSidenav();
317        instance.setHeight();
318      }
319
320      container.removeClass('sidenav-js-fouc');
321    },
322    _renderUI: function _renderUI() {
323      var instance = this;
324      var options = instance.options;
325      var container = $(options.container);
326      var toggler = instance.toggler;
327      var mobile = instance.mobile;
328      var type = mobile ? options.typeMobile : options.type;
329
330      if (!instance.useDataAttribute) {
331        if (mobile) {
332          container.addClass('closed').removeClass('open');
333          toggler.removeClass('active').removeClass('open');
334        }
335
336        if (options.position === 'right') {
337          container.addClass('sidenav-right');
338        }
339
340        if (type !== 'relative') {
341          container.addClass('sidenav-fixed');
342        }
343
344        instance._renderNav();
345      }
346
347      container.css('display', ''); // Force Reflow for IE11 Browser Bug
348    },
349    _setScreenSize: function _setScreenSize() {
350      var instance = this;
351      var screenSize = getBreakpointRegion();
352      var desktop = screenSize === 'sm' || screenSize === 'md' || screenSize === 'lg';
353      instance.mobile = !desktop;
354      instance.desktop = desktop;
355      return desktop;
356    },
357    clearStyle: function clearStyle(attribute) {
358      var instance = this;
359      var options = instance.options;
360      var container = $(options.container);
361      var content = container.find(options.content).first();
362      var navigation = container.find(options.navigation).first();
363      var menu = container.find('.sidenav-menu').first();
364      var els = content.add(navigation).add(menu);
365
366      if (Array.isArray(attribute)) {
367        for (var i = 0; i < attribute.length; i++) {
368          els.css(attribute[i], '');
369        }
370      } else {
371        els.css(attribute, '');
372      }
373    },
374    destroy: function destroy() {
375      var instance = this;
376      var options = instance.options;
377      var container = $(instance.options.container); // Detach sidenav close
378
379      doc.off('click.close.lexicon.sidenav', instance.closeButtonSelector);
380      doc.data(instance.dataCloseButtonSelector, null); // Detach toggler
381
382      if (options.useDelegate) {
383        doc.off('click.lexicon.sidenav', instance.togglerSelector);
384        doc.data(instance.dataTogglerSelector, null);
385      } else {
386        container.off('click.lexicon.sidenav');
387      } // Remove Side Navigation
388
389
390      container.data('lexicon.sidenav', null);
391    },
392    hide: function hide() {
393      var instance = this;
394
395      if (instance.useDataAttribute) {
396        instance.hideSimpleSidenav();
397      } else {
398        instance.toggleNavigation(false);
399      }
400    },
401    hideSidenav: function hideSidenav() {
402      var instance = this;
403      var options = instance.options;
404      var container = $(options.container);
405      var content = container.find(options.content).first();
406      var navigation = container.find(options.navigation).first();
407      var menu = navigation.find('.sidenav-menu').first();
408
409      var sidenavRight = instance._isSidenavRight();
410
411      var positionDirection = options.rtl ? 'right' : 'left';
412
413      if (sidenavRight) {
414        positionDirection = options.rtl ? 'left' : 'right';
415      }
416
417      var paddingDirection = 'padding-' + positionDirection;
418      content.css(paddingDirection, '').css(positionDirection, '');
419      navigation.css('width', '');
420
421      if (sidenavRight) {
422        menu.css(positionDirection, instance._getSidenavWidth());
423      }
424    },
425    hideSimpleSidenav: function hideSimpleSidenav() {
426      var instance = this;
427      var options = instance.options;
428
429      var simpleSidenavClosed = instance._isSimpleSidenavClosed();
430
431      if (!simpleSidenavClosed) {
432        var content = $(options.content).first();
433        var sidenav = $(options.container);
434        var closedClass = options.closedClass;
435        var openClass = options.openClass;
436        var toggler = instance.toggler;
437        var target = toggler.attr('href') || toggler.attr('data-target');
438        sidenav.trigger({
439          toggler: $(instance.togglerSelector),
440          type: 'closedStart.lexicon.sidenav'
441        });
442
443        instance._onSidenavTransitionEnd(content, function () {
444          sidenav.removeClass('sidenav-transition');
445          toggler.removeClass('sidenav-transition');
446          sidenav.trigger({
447            toggler: $(instance.togglerSelector),
448            type: 'closed.lexicon.sidenav'
449          });
450        });
451
452        if (content.hasClass(openClass)) {
453          content.addClass('sidenav-transition').addClass(closedClass).removeClass(openClass);
454        }
455
456        sidenav.addClass('sidenav-transition');
457        toggler.addClass('sidenav-transition');
458        sidenav.addClass(closedClass).removeClass(openClass);
459        $('[data-target="' + target + '"]').removeClass(openClass).removeClass('active');
460        $('[href="' + target + '"]').removeClass(openClass).removeClass('active');
461      }
462    },
463    init: function init(toggler, options) {
464      var instance = this;
465      var useDataAttribute = toggler.data('toggle') === 'sidenav';
466      options = $.extend({}, $.fn.sideNavigation.defaults, options);
467      options.breakpoint = toInt(options.breakpoint);
468      options.container = options.container || toggler.data('target') || toggler.attr('href');
469      options.gutter = toInt(options.gutter);
470      options.heightType = options.heightType || (options.equalHeight ? 'equalHeight' : false);
471      options.rtl = doc.attr('dir') === 'rtl';
472      options.width = toInt(options.width);
473      options.widthOriginal = options.width; // instantiate using data attribute
474
475      if (useDataAttribute) {
476        options.closedClass = toggler.data('closed-class') || 'closed';
477        options.content = toggler.data('content');
478        options.equalHeight = false; // equalHeight option is deprecated
479
480        options.loadingIndicatorTPL = toggler.data('loading-indicator-tpl') || options.loadingIndicatorTPL;
481        options.openClass = toggler.data('open-class') || 'open';
482        options.toggler = toggler;
483        options.type = toggler.data('type');
484        options.typeMobile = toggler.data('type-mobile');
485        options.url = toggler.data('url');
486        options.useDelegate = toggler.data('use-delegate');
487        options.width = '';
488
489        if (options.useDelegate === undefined) {
490          options.useDelegate = true;
491        }
492      }
493
494      instance.toggler = toggler;
495      instance.options = options;
496      instance.useDataAttribute = useDataAttribute;
497
498      instance._bindUI();
499
500      instance._renderUI();
501    },
502    setEqualHeight: function setEqualHeight() {
503      var instance = this;
504      var options = instance.options;
505      var container = $(options.container);
506      var content = options.content;
507      var navigation = options.navigation;
508      var type = instance.mobile ? options.typeMobile : options.type;
509
510      if (type !== 'fixed' && type !== 'fixed-push') {
511        var contentNode = container.find(content).first();
512        var navNode = container.find(navigation).first();
513        var sideNavMenuNode = container.find('.sidenav-menu').first();
514        var tallest = Math.max(contentNode.outerHeight(), navNode.outerHeight());
515        contentNode.css('min-height', tallest);
516        navNode.css({
517          height: '100%',
518          'min-height': tallest
519        });
520        sideNavMenuNode.css({
521          height: '100%',
522          'min-height': tallest
523        });
524      }
525    },
526    setFullHeight: function setFullHeight() {
527      var instance = this;
528      var options = instance.options;
529      var container = $(options.container);
530      var navigation = options.navigation;
531      var type = instance.mobile ? options.typeMobile : options.type;
532
533      if (type === 'relative') {
534        var navNode = container.find(navigation).first();
535        var sidenavMenuNode = container.find('.sidenav-menu').first();
536        var minHeight = doc.innerHeight() - navNode.offset().top;
537
538        if (sidenavMenuNode.innerHeight() + navNode.offset().top > doc.innerHeight()) {
539          minHeight = sidenavMenuNode.innerHeight();
540        }
541
542        navNode.css({
543          height: '100%',
544          'min-height': minHeight
545        });
546        sidenavMenuNode.css({
547          height: '100%',
548          'min-height': minHeight
549        });
550      }
551    },
552    setHeight: function setHeight() {
553      var instance = this;
554      var options = instance.options;
555
556      if (options.heightType === 'equalHeight') {
557        instance.setEqualHeight();
558      } else if (options.heightType === 'fullHeight') {
559        instance.setFullHeight();
560      }
561    },
562    show: function show() {
563      var instance = this;
564
565      if (instance.useDataAttribute) {
566        instance.showSimpleSidenav();
567      } else {
568        instance.toggleNavigation(true);
569      }
570    },
571    showSidenav: function showSidenav() {
572      var instance = this;
573      var mobile = instance.mobile;
574      var options = instance.options;
575      var container = $(options.container);
576      var content = container.find(options.content).first();
577      var navigation = container.find(options.navigation).first();
578      var menu = navigation.find('.sidenav-menu').first();
579
580      var sidenavRight = instance._isSidenavRight();
581
582      var width = instance._getSidenavWidth();
583
584      var offset = width + options.gutter;
585      var url = options.url;
586
587      if (url) {
588        container.one('urlLoaded.lexicon.sidenav', function () {
589          instance.setHeight();
590        });
591
592        instance._loadUrl(menu, url, container);
593      }
594
595      navigation.css('width', width);
596      menu.css('width', width);
597      var positionDirection = options.rtl ? 'right' : 'left';
598
599      if (sidenavRight) {
600        positionDirection = options.rtl ? 'left' : 'right';
601      }
602
603      var paddingDirection = 'padding-' + positionDirection;
604      var pushContentCssProperty = mobile ? positionDirection : paddingDirection;
605      var type = mobile ? options.typeMobile : options.type;
606
607      if (type !== 'fixed') {
608        var navigationStartX = container.hasClass('open') ? navigation.offset().left - options.gutter : navigation.offset().left - offset;
609        var contentStartX = content.offset().left;
610        var contentWidth = content.innerWidth();
611        var padding = '';
612
613        if (options.rtl && sidenavRight || !options.rtl && options.position === 'left') {
614          navigationStartX = navigation.offset().left + offset;
615
616          if (navigationStartX > contentStartX) {
617            padding = navigationStartX - contentStartX;
618          }
619        } else if (options.rtl && options.position === 'left' || !options.rtl && sidenavRight) {
620          if (navigationStartX < contentStartX + contentWidth) {
621            padding = contentStartX + contentWidth - navigationStartX;
622
623            if (padding >= offset) {
624              padding = offset;
625            }
626          }
627        }
628
629        content.css(pushContentCssProperty, padding);
630      }
631    },
632    showSimpleSidenav: function showSimpleSidenav() {
633      var instance = this;
634      var options = instance.options;
635
636      var simpleSidenavClosed = instance._isSimpleSidenavClosed();
637
638      if (simpleSidenavClosed) {
639        var content = $(options.content).first();
640        var sidenav = $(options.container);
641        var closedClass = options.closedClass;
642        var openClass = options.openClass;
643        var toggler = options.toggler;
644        var url = toggler.data('url');
645
646        if (url) {
647          instance._loadUrl(sidenav, url);
648        }
649
650        sidenav.trigger({
651          toggler: $(instance.togglerSelector),
652          type: 'openStart.lexicon.sidenav'
653        });
654
655        instance._onSidenavTransitionEnd(content, function () {
656          sidenav.removeClass('sidenav-transition');
657          toggler.removeClass('sidenav-transition');
658          sidenav.trigger({
659            toggler: $(instance.togglerSelector),
660            type: 'open.lexicon.sidenav'
661          });
662        });
663
664        content.addClass('sidenav-transition').addClass(openClass).removeClass(closedClass);
665        sidenav.addClass('sidenav-transition');
666        toggler.addClass('sidenav-transition');
667        sidenav.addClass(openClass).removeClass(closedClass);
668        toggler.addClass('active').addClass(openClass);
669      }
670    },
671    toggle: function toggle() {
672      var instance = this;
673
674      if (instance.useDataAttribute) {
675        instance.toggleSimpleSidenav();
676      } else {
677        instance.toggleNavigation();
678      }
679    },
680    toggleNavigation: function toggleNavigation(force) {
681      var instance = this;
682      var options = instance.options;
683      var container = $(options.container);
684      var menu = container.find('.sidenav-menu').first();
685      var toggler = instance.toggler;
686      var width = options.width;
687      var closed = $.type(force) === 'boolean' ? force : container.hasClass('closed');
688
689      var sidenavRight = instance._isSidenavRight();
690
691      var widthMethod = closed ? 'showSidenav' : 'hideSidenav';
692
693      if (closed) {
694        container.trigger({
695          toggler: toggler,
696          type: 'openStart.lexicon.sidenav'
697        });
698      } else {
699        container.trigger({
700          toggler: toggler,
701          type: 'closedStart.lexicon.sidenav'
702        });
703      }
704
705      instance._onSidenavTransitionEnd(container, function () {
706        var menu = container.find('.sidenav-menu').first();
707
708        if (container.hasClass('closed')) {
709          instance.clearStyle(['min-height', 'height']);
710          toggler.removeClass('open').removeClass('sidenav-transition');
711          container.trigger({
712            toggler: toggler,
713            type: 'closed.lexicon.sidenav'
714          });
715        } else {
716          toggler.addClass('open').removeClass('sidenav-transition');
717          container.trigger({
718            toggler: toggler,
719            type: 'open.lexicon.sidenav'
720          });
721        }
722
723        if (instance.mobile) {
724          instance._focusElement(menu);
725        }
726      });
727
728      if (closed) {
729        instance.setHeight();
730        menu.css('width', width);
731        var positionDirection = options.rtl ? 'left' : 'right';
732
733        if (sidenavRight) {
734          menu.css(positionDirection, '');
735        }
736      }
737
738      container.addClass('sidenav-transition');
739      toggler.addClass('sidenav-transition');
740      instance[widthMethod](container);
741      container.toggleClass('closed', !closed).toggleClass('open', closed);
742      toggler.toggleClass('active', closed).toggleClass('open', closed);
743    },
744    toggleSimpleSidenav: function toggleSimpleSidenav() {
745      var instance = this;
746
747      var simpleSidenavClosed = instance._isSimpleSidenavClosed();
748
749      if (simpleSidenavClosed) {
750        instance.showSimpleSidenav();
751      } else {
752        instance.hideSimpleSidenav();
753      }
754    },
755    visible: function visible() {
756      var instance = this;
757      var closed;
758
759      if (instance.useDataAttribute) {
760        closed = instance._isSimpleSidenavClosed();
761      } else {
762        var container = $(instance.options.container);
763        closed = container.hasClass('sidenav-transition') ? !container.hasClass('closed') : container.hasClass('closed');
764      }
765
766      return !closed;
767    }
768  };
769  var old = $.fn.sideNavigation;
770
771  var initialize = function initialize(toggler, options, selector) {
772    var data = toggler.data('lexicon.sidenav');
773
774    if (!data) {
775      if (!options) {
776        options = {};
777      }
778
779      options.selector = selector;
780      data = new SideNavigation(toggler, options);
781      toggler.data('lexicon.sidenav', data);
782    }
783
784    return data;
785  };
786
787  var Plugin = function Plugin(options) {
788    var instance = this;
789    var selector = instance.selector;
790    var retVal = instance;
791    var methodCall = typeof options === 'string';
792    var returnInstance = options === 'instance';
793    var args = $.makeArray(arguments).slice(1);
794
795    if (methodCall) {
796      this.each(function () {
797        var $this = $(this);
798        var data = $this.data('lexicon.sidenav');
799
800        if (data) {
801          if (returnInstance) {
802            retVal = data;
803            return false;
804          }
805
806          var methodRetVal;
807
808          if ($.isFunction(data[options]) && options.indexOf('_') !== 0) {
809            methodRetVal = data[options].apply(data, args);
810          }
811
812          if (methodRetVal !== data && methodRetVal !== undefined) {
813            if (methodRetVal.jquery) {
814              retVal = retVal.pushStack(methodRetVal.get());
815            } else {
816              retVal = methodRetVal;
817            }
818
819            return false;
820          }
821        } else if (returnInstance) {
822          retVal = null;
823          return false;
824        }
825      });
826    } else {
827      this.each(function () {
828        initialize($(this), options, selector);
829      });
830    }
831
832    return retVal;
833  };
834
835  Plugin.noConflict = function () {
836    $.fn.sideNavigation = old;
837    return this;
838  };
839  /**
840   * Plugin options
841   * @property {String|Number}  breakpoint   The window width that defines the desktop size.
842   * @property {String}         content      The class or ID of the content container.
843   * @property {String}         container    The class or ID of the sidenav container.
844   * @property {String|Number}  gutter       The space between the sidenav-slider and the sidenav-content.
845   * @property {String|Boolean} equalHeight  The height of content and navigation should be equal. This is deprecated.
846   * @property {String}         heightType   Calculates the height of sidenav when type is relative. Possible values: `fullHeight`, `equalHeight`
847   * @property {String}         navigation   The class or ID of the navigation container.
848   * @property {String}         position     The position of the sidenav-slider. Possible values: left, right
849   * @property {String}         type         The type of sidenav in desktop. Possible values: relative, fixed, fixed-push
850   * @property {String}         typeMobile   The type of sidenav in mobile. Possible values: relative, fixed, fixed-push
851   * @property {String|Boolean} useDelegate  The type of reference to use on the toggler event handler. Value false, directly binds click to the toggler.
852   * @property {String|Object}  url          The URL or $.ajax config object to fetch the content to inject into .sidebar-body
853   * @property {String|Number}  width        The width of the side navigation.
854   */
855
856
857  Plugin.defaults = {
858    breakpoint: 768,
859    content: '.sidenav-content',
860    equalHeight: true,
861    // equalHeight option is deprecated, use heightType instead
862    gutter: '0px',
863    heightType: null,
864    loadingIndicatorTPL: '<div class="loading-animation loading-animation-md"></div>',
865    navigation: '.sidenav-menu-slider',
866    position: 'left',
867    type: 'relative',
868    typeMobile: 'relative',
869    url: null,
870    useDelegate: true,
871    width: '225px'
872  };
873  Plugin.Constructor = SideNavigation;
874  $.fn.sideNavigation = Plugin;
875  $(function () {
876    var sidenav = $('[data-toggle="sidenav"]');
877    Plugin.call(sidenav);
878  });
879}(jQuery);
880//# sourceMappingURL=side_navigation.js.map

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.