1/*! 2 * jQuery HC-MobileNav 3 * =================== 4 * Version: 3.0.0 5 * Author: Some Web Media 6 * Author URL: http://somewebmedia.com 7 * Plugin URL: https://github.com/somewebmedia/hc-mobile-nav 8 * Description: jQuery plugin for creating toggled mobile multi-level navigations 9 * License: MIT 10 */ 11! function(y, e) { 12 "use strict"; 13 var a, l, x = e.document, 14 T = (/iPad|iPhone|iPod/.test(navigator.userAgent) || !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform)) && !e.MSStream, 15 w = "ontouchstart" in e || navigator.maxTouchPoints || e.DocumentTouch && x instanceof DocumentTouch, 16 O = function(e) { return !isNaN(parseFloat(e)) && isFinite(e) }, 17 B = function(e) { return e.stopPropagation() }, 18 M = function(n, a, l) { return function(e) { n && e.preventDefault(), a && e.stopPropagation(), "function" == typeof l && l() } }, 19 P = (a = y("head"), l = "hc-mobile-nav-style", function(e) { 20 var n = a.find("style#" + l); 21 n.length ? n.html(e) : y('<style id="' + l + '">' + e + "</style>").appendTo(a) 22 }), 23 N = function(e, n, a) { 24 var l = a.children("li"), 25 o = l.length, 26 i = -1 < n ? Math.max(0, Math.min(n - 1, o)) : Math.max(0, Math.min(o + n + 1, o)); 27 0 === i ? a.prepend(e) : l.eq(i - 1).after(e) 28 }, 29 S = 0; 30 y.fn.extend({ 31 hcMobileNav: function(e) { 32 if (!this.length) return this; 33 var l, m = y.extend({}, { maxWidth: 1024, appendTo: "body", clone: !0, offCanvas: !0, side: "left", levelOpen: "overlap", levelSpacing: 40, levelTitles: !1, navTitle: null, navClass: "", disableBody: !0, closeOnClick: !0, customToggle: null, responsive: null, insertClose: !0, insertBack: !0, labelClose: "Close", labelBack: "Back" }, e), 34 k = y(x.getElementsByTagName("html")[0]), 35 b = (y(x), y(x.body)), 36 C = (l = function(e) { 37 var n = ["Webkit", "Moz", "Ms", "O"], 38 a = (x.body || x.documentElement).style, 39 l = e.charAt(0).toUpperCase() + e.slice(1); 40 if (void 0 !== a[e]) return e; 41 for (var o = 0; o < n.length; o++) 42 if (void 0 !== a[n[o] + l]) return n[o] + l; 43 return !1 44 }("transform"), function(e, n) { 45 if (l) { 46 var a = "left" === m.side ? n : -n; 47 e.css(l, "translate3d(" + a + "px,0,0)") 48 } else e.css(m.side, n) 49 }); 50 return this.each(function() { 51 var e = y(this), 52 n = void 0, 53 a = !1, 54 l = 0; 55 if (e.is("ul")) n = e.clone(true).wrap("<nav>").parent(); 56 else if (e.is("nav")) n = e.clone(true); 57 else if (!(n = e.find("nav, ul").first().clone(true)).length) return void console.log("%c! HC MobileNav:%c There is no <nav> or <ul> elements in your menu.", "color: red", "color: black"); 58 var o = n.find("ul"); 59 if (o.length) { 60 var p = {}, 61 i = void 0, 62 v = "hc-nav-" + ++S; 63 e.addClass("hc-nav " + v), m.customToggle ? i = y(m.customToggle).addClass(v).on("click", u) : (i = y('<a class="hc-nav-trigger ' + v + '"><span></span></a>').on("click", u), e.after(i)); 64 var r = n.children("ul").wrapAll('<div class="nav-wrapper nav-wrapper-1">').parent().on("click", B).wrap('<div class="nav-container">').parent(); 65 m.navTitle && r.children().prepend("<h2>" + m.navTitle + "</h2>"); 66 var t = "\n .hc-mobile-nav." + v + " {\n display: block;\n }\n .hc-nav-trigger." + v + ",\n " + m.customToggle + "." + v + " {\n display: " + (i.css("display") || "block") + "\n }\n .hc-nav." + v + " {\n display: none;\n }"; 67 if (m.maxWidth && (t = "@media screen and (max-width: " + (m.maxWidth - 1) + "px) {\n " + t + "\n }"), P(t), n.on("click", B).removeAttr("id").removeClass().addClass("\n hc-mobile-nav\n " + v + "\n " + (m.navClass || "") + "\n nav-levels-" + (m.levelOpen || "none") + "\n side-" + m.side + "\n " + (m.offCanvas ? "off-canvas" : "") + "\n " + (m.disableBody ? "disable-body" : "") + "\n " + (T ? "is-ios" : "") + "\n " + (w ? "touch-device" : "") + "\n ").find("[id]").removeAttr("id"), m.disableBody && n.on("click", h), m.closeOnClick && o.find("li").children("a").on("click", h), !1 !== m.insertClose) { 68 var s = y('<li class="nav-close"><a href="#">
68' + (m.labelClose || "") + "<span></span></a></li>"); 69 s.children("a").on("click", M(!0, !0, h)), !0 === m.insertClose ? o.first().prepend(s) : O(m.insertClose) && N(s, m.insertClose, o.first().add(o.siblings("ul"))) 70 } 71 o.each(function() { 72 var e = y(this), 73 n = e.parents("li").length; 74 if (0 !== n) { 75 var a = e.parent().addClass("nav-parent"), 76 l = a.children("a"); 77 p[n] || (p[n] = []), p[n].push({ nav: e }); 78 var o = p[n].length - 1; 79 p[n][o].wrapper = e.closest(".nav-wrapper"); 80 var i = e.wrap('<div class="nav-wrapper nav-wrapper-' + (n + 1) + '">').parent().on("click", B); 81 if (!m.levelSpacing || "expand" !== m.levelOpen && !1 !== m.levelOpen && "none" !== m.levelOpen || e.css("text-indent", m.levelSpacing * n + "px"), !1 === m.levelOpen || "none" === m.levelOpen) return; 82 !0 === m.levelTitles && i.prepend("<h2>" + l.text() + "</h2>"); 83 var t = y('<span class="nav-next">').appendTo(l), 84 r = y('<label for="' + v + "-" + n + "-" + o + '">').on("click", B), 85 s = y('<input type="checkbox" id="' + v + "-" + n + "-" + o + '">').attr("data-level", n).attr("data-index", o).on("click", B).on("change", d); 86 if (p[n][o].checkbox = s, a.prepend(s), l.attr("href") && "#" !== l.attr("href") ? t.append(r) : l.on("click", M(!0, !0)).prepend(r), !1 !== m.insertBack && "overlap" === m.levelOpen) { 87 var c = y('<li class="nav-back"><a href="#">' + (m.labelBack || "") + "<span></span></a></li>"); 88 c.children("a").on("click", M(!0, !0, function() { return g(n, o) })), !0 === m.insertBack ? e.prepend(c) : O(m.insertBack) && N(c, m.insertBack, e) 89 } 90 } 91 }), m.clone ? y(m.appendTo).append(n) : e.replaceWith(n); 92 var c = function(e, n) { 93 if (p[e] && p[e][n]) { 94 var a = p[e][n].checkbox, 95 l = a.parent("li"), 96 o = p[e][n].wrapper; 97 a.prop("checked", !1), o.removeClass("sub-level-open"), l.removeClass("level-open") 98 } 99 } 100 } else console.log("%c! HC MobileNav:%c Menu must contain <ul> element.", "color: red", "color: black"); 101 102 function d() { 103 var e, n, a, l, o = y(this), 104 i = Number(o.attr("data-level")), 105 t = Number(o.attr("data-index")); 106 o.prop("checked") ? (n = t, a = p[e = i][n].checkbox.parent("li"), (l = p[e][n].wrapper).addClass("sub-level-open"), a.addClass("level-open"), "overlap" === m.levelOpen && (l.on("click", function() { return g(e, n) }), C(r, e * m.levelSpacing))) : g(i, t) 107 } 108 109 function f() { a = !0, n.addClass("nav-open"), i.addClass("toggle-open"), m.disableBody && (l = k.scrollTop() || b.scrollTop(), b.addClass("hc-nav-open"), l && b.css("top", -l), x.body.scrollHeight > x.body.offsetHeight && k.addClass("hc-yscroll")) } 110 111 function h() { a = !1, n.removeClass("nav-open"), r.removeAttr("style"), i.removeClass("toggle-open"), !1 !== m.levelOpen && "none" !== m.levelOpen && g(0), m.disableBody && (b.removeClass("hc-nav-open"), k.removeClass("hc-yscroll"), l && (b.css("top", "").scrollTop(l), k.scrollTop(l), l = 0)) } 112 113 function u(e) { e.preventDefault(), e.stopPropagation(), a ? h() : f() } 114 115 function g(e, n) { 116 for (var a = e; a <= Object.keys(p).length; a++) { 117 if (0 !== a) 118 if (a == e && void 0 !== n) { if (c(a, n), "overlap" === m.levelOpen) p[a][n].wrapper.off("click").on("click", B), C(r, (a - 1) * m.levelSpacing) } else 119 for (var l in p[a]) { if (c(a, l), "overlap" === m.levelOpen) p[a][l].wrapper.off("click").on("click", B), a == e && C(r, (a - 1) * m.levelSpacing) } 120 } 121 } 122 }) 123 } 124 }) 125}(jQuery, "undefined" != typeof window ? window : this);
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.