PageSourceSearch

http://www.cnterm.cn/images/mcw2023-mobile-nav.js

js cnterm.cn collected 2026-10-02 19:10:05 UTC 9,488 bytes, 125 lines download raw bytes

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.