first commit

This commit is contained in:
ericli1018
2024-03-13 10:43:39 +08:00
commit 1caae33c43
677 changed files with 105611 additions and 0 deletions

View File

@ -0,0 +1,176 @@
/**
* @module RD Navbar
* @author Evgeniy Gusarov
* @see https://ua.linkedin.com/pub/evgeniy-gusarov/8a/a40/54a
* @version 2.2.5
*/
(function () {
var t;
t = "ontouchstart" in window,
function (n, o, e) {
var a;
a = function () {
function a(t, a) {
this.options = n.extend(!0, {}, this.Defaults, a), this.$element = n(t), this.$clone = null, this.$win = n(e), this.$doc = n(o), this.currentLayout = this.options.layout, this.loaded = !1, this.focusOnHover = this.options.focusOnHover, this.focusTimer = !1, this.cloneTimer = !1, this.isStuck = !1, this.initialize()
}
return a.prototype.Defaults = {
layout: "rd-navbar-static",
deviceLayout: "rd-navbar-fixed",
focusOnHover: !0,
focusOnHoverTimeout: 800,
linkedElements: ["html"],
domAppend: !0,
stickUp: !0,
stickUpClone: !0,
stickUpOffset: "100%",
anchorNav: !0,
anchorNavSpeed: 400,
anchorNavOffset: 0,
anchorNavEasing: "swing",
autoHeight: !0,
responsive: {
0: {
layout: "rd-navbar-fixed",
deviceLayout: "rd-navbar-fixed",
focusOnHover: !1,
stickUp: !1
},
1200: {
layout: "rd-navbar-static",
deviceLayout: "rd-navbar-static",
focusOnHover: !0,
stickUp: !0
}
},
callbacks: {
onToggleSwitch: !1,
onToggleClose: !1,
onDomAppend: !1,
onDropdownOver: !1,
onDropdownOut: !1,
onDropdownToggle: !1,
onDropdownClose: !1,
onStuck: !1,
onUnstuck: !1,
onAnchorChange: !1
}
}, a.prototype.initialize = function () {
var n;
return (n = this).$element.addClass("rd-navbar").addClass(n.options.layout), t && n.$element.addClass("rd-navbar--is-touch"), n.options.domAppend && n.createNav(n), n.options.stickUpClone && n.createClone(n), n.$element.addClass("rd-navbar-original"), n.addAdditionalClassToToggles(".rd-navbar-original", "toggle-original", "toggle-original-elements"), n.applyHandlers(n), n.offset = n.$element.offset().top, n.height = n.$element.outerHeight(), n.loaded = !0, n
}, a.prototype.resize = function (o, e) {
var a, s;
return s = t ? o.getOption("deviceLayout") : o.getOption("layout"), a = o.$element.add(o.$clone), s === o.currentLayout && o.loaded || (o.switchClass(a, o.currentLayout, s), null != o.options.linkedElements && n.grep(o.options.linkedElements, function (t, n) {
return o.switchClass(t, o.currentLayout + "-linked", s + "-linked")
}), o.currentLayout = s), o.focusOnHover = o.getOption("focusOnHover"), o
}, a.prototype.stickUp = function (t, o) {
function e() {
"resize" === o.type ? t.switchClass(i, "", "rd-navbar--is-stuck") : i.addClass("rd-navbar--is-stuck"), t.isStuck = !0
}
var a, s, r, i, l;
return s = t.getOption("stickUp"), (n("html").hasClass("ios") || t.$element.hasClass("rd-navbar-fixed")) && (s = !1), a = t.$doc.scrollTop(), i = null != t.$clone ? t.$clone : t.$element, r = t.getOption("stickUpOffset"), l = "string" == typeof r ? r.indexOf("%") > 0 ? parseFloat(r) * t.height / 100 : parseFloat(r) : r, s ? (a >= l && !t.isStuck || a < l && t.isStuck) && (t.$element.add(t.$clone).find("[data-rd-navbar-toggle]").each(function () {
n.proxy(t.closeToggle, this)(t, !1)
}).end().find(".rd-navbar-submenu").removeClass("opened").removeClass("focus"), a >= l && !t.isStuck && !t.$element.hasClass("rd-navbar-fixed") ? (t.options.callbacks.onStuck && t.options.callbacks.onStuck.call(t), navigator.platform.match(/(Mac)/i) ? setTimeout(e, 10) : e()) : ("resize" === o.type ? t.switchClass(i, "rd-navbar--is-stuck", "") : i.removeClass("rd-navbar--is-stuck").one("transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd", n.proxy(t.resizeWrap, t, o)), t.isStuck = !1, t.options.callbacks.onUnstuck && t.options.callbacks.onUnstuck.call(t))) : (t.$element.find(".rd-navbar-submenu").removeClass("opened").removeClass("focus"), t.isStuck && (t.switchClass(i, "rd-navbar--is-stuck", ""), t.isStuck = !1, t.resizeWrap(o))), t
}, a.prototype.resizeWrap = function (t) {
var n, o;
if (null == (o = this).$clone && !o.isStuck) return n = o.$element.parent(), o.getOption("autoHeight") ? (o.height = o.$element.outerHeight(), "resize" === t.type ? (n.addClass("rd-navbar--no-transition").css("height", o.height), n[0].offsetHeight, n.removeClass("rd-navbar--no-transition")) : n.css("height", o.height)) : void n.css("height", "auto")
}, a.prototype.createNav = function (t) {
return t.$element.find(".rd-navbar-dropdown, .rd-navbar-megamenu").each(function () {
var t;
return t = n(this), this.getBoundingClientRect(), t.hasClass("rd-navbar-megamenu") ? t.parent().addClass("rd-navbar--has-megamenu") : t.parent().addClass("rd-navbar--has-dropdown")
}).parents("li").addClass("rd-navbar-submenu"), n('<span class="rd-navbar-submenu-toggle"></span>').insertAfter(".rd-navbar-nav li.rd-navbar-submenu > a"), t.options.callbacks.onDomAppend && t.options.callbacks.onDomAppend.call(this), t
}, a.prototype.createClone = function (t) {
return t.$clone = t.$element.clone().insertAfter(t.$element).addClass("rd-navbar--is-clone"), t.addAdditionalClassToToggles(".rd-navbar--is-clone", "toggle-cloned", "toggle-cloned-elements"), t
}, a.prototype.closeToggle = function (t, o) {
var e, a, s, r, i, l, c;
return a = n(o.target), i = !1, l = this.getAttribute("data-rd-navbar-toggle"), t.options.stickUpClone && t.isStuck ? (r = ".toggle-cloned", s = ".toggle-cloned-elements", c = !a.hasClass("toggle-cloned")) : (r = ".toggle-original", s = ".toggle-original-elements", c = !a.hasClass("toggle-original")), o.target !== this && !a.parents(r + "[data-rd-navbar-toggle]").length && !a.parents(s).length && l && c && ((e = n(this).parents("body").find(l).add(n(this).parents(".rd-navbar")[0])).each(function () {
if (!i) return i = !0 === (o.target === this || n.contains(this, o.target))
}), i || (e.add(this).removeClass("active"), t.options.callbacks.onToggleClose && t.options.callbacks.onToggleClose.call(this, t))), this
}, a.prototype.switchToggle = function (t, o) {
var e, a, s;
return o.preventDefault(), n(this).hasClass("toggle-cloned") ? (s = ".rd-navbar--is-clone", e = ".toggle-cloned-elements") : (s = ".rd-navbar-original", e = ".toggle-original-elements"), (a = this.getAttribute("data-rd-navbar-toggle")) && (n(s + " [data-rd-navbar-toggle]").not(this).each(function () {
var t;
if (t = this.getAttribute("data-rd-navbar-toggle")) return n(this).parents("body").find(s + " " + t + e).add(this).add(n.inArray(".rd-navbar", t.split(/\s*,\s*/i)) > -1 && n(this).parents("body")[0]).removeClass("active")
}), n(this).parents("body").find(s + " " + a + e).add(this).add(n.inArray(".rd-navbar", a.split(/\s*,\s*/i)) > -1 && n(this).parents(".rd-navbar")[0]).toggleClass("active")), t.options.callbacks.onToggleSwitch && t.options.callbacks.onToggleSwitch.call(this, t), this
}, a.prototype.dropdownOver = function (t, o) {
var e;
if (t.focusOnHover) {
if (e = n(this), clearTimeout(o), t.options.callbacks.onDropdownOver && !t.options.callbacks.onDropdownOver.call(this, t)) return this;
e.addClass("focus").siblings().removeClass("opened").each(t.dropdownUnfocus)
}
return this
}, a.prototype.dropdownTouch = function (t, o) {
var e, a;
if (e = n(this), clearTimeout(o), t.focusOnHover) {
if (a = !1, e.hasClass("focus") && (a = !0), !a) return e.addClass("focus").siblings().removeClass("opened").each(t.dropdownUnfocus), !1;
t.options.callbacks.onDropdownOver && t.options.callbacks.onDropdownOver.call(this, t)
}
return this
}, a.prototype.dropdownOut = function (t, o) {
return t.focusOnHover && (n(this).one("mouseenter.navbar", function () {
return clearTimeout(o)
}), t.options.callbacks.onDropdownOut && t.options.callbacks.onDropdownOut.call(this, t), clearTimeout(o), o = setTimeout(n.proxy(t.dropdownUnfocus, this, t), t.options.focusOnHoverTimeout)), this
}, a.prototype.dropdownUnfocus = function (t) {
return n(this).find("li.focus").add(this).removeClass("focus"), this
}, a.prototype.dropdownClose = function (t, o) {
return o.target === this || n(o.target).parents(".rd-navbar-submenu").length || (n(this).find("li.focus").add(this).removeClass("focus").removeClass("opened"), t.options.callbacks.onDropdownClose && t.options.callbacks.onDropdownClose.call(this, t)), this
}, a.prototype.dropdownToggle = function (t) {
return n(this).toggleClass("opened").siblings().removeClass("opened"), t.options.callbacks.onDropdownToggle && t.options.callbacks.onDropdownToggle.call(this, t), this
}, a.prototype.goToAnchor = function (t, o) {
var e, a;
return a = this.hash, e = n(a), !!t.getOption("anchorNav") && (e.length && (o.preventDefault(), n("html, body").stop().animate({
scrollTop: e.offset().top + t.getOption("anchorNavOffset") + 1
}, t.getOption("anchorNavSpeed"), t.getOption("anchorNavEasing"), function () {
return t.changeAnchor(a)
})), this)
}, a.prototype.activateAnchor = function (t) {
var o, e, a, s, r, i, l, c, d, p, u, h;
if (s = this, u = s.$doc.scrollTop(), h = s.$win.height(), r = s.$doc.height(), p = s.getOption("anchorNavOffset"), !s.options.anchorNav) return !1;
if (u + h > r - 50) return (o = n('[data-type="anchor"]').last()).length && o.offset().top >= u && (i = "#" + o.attr("id"), (e = n('.rd-navbar-nav a[href^="' + i + '"]').parent()).hasClass("active") || (e.addClass("active").siblings().removeClass("active"), s.options.callbacks.onAnchorChange && s.options.callbacks.onAnchorChange.call(o[0], s))), o;
d = n('.rd-navbar-nav a[href^="#"]').get();
for (l in d) c = d[l], i = (a = n(c)).attr("href"), (o = n(i)).length && o.offset().top + p <= u && o.offset().top + o.outerHeight() > u && (a.parent().addClass("active").siblings().removeClass("active"), s.options.callbacks.onAnchorChange && s.options.callbacks.onAnchorChange.call(o[0], s));
return null
}, a.prototype.getAnchor = function () {
return history && history.state ? history.state.id : null
}, a.prototype.changeAnchor = function (t) {
return history && (history.state && history.state.id !== t ? history.replaceState({
anchorId: t
}, null, t) : history.pushState({
anchorId: t
}, null, t)), this
}, a.prototype.applyHandlers = function (t) {
return null != t.options.responsive && t.$win.on("resize.navbar", n.proxy(t.resize, t.$win[0], t)).on("resize.navbar", n.proxy(t.resizeWrap, t)).on("resize.navbar", n.proxy(t.stickUp, null != t.$clone ? t.$clone : t.$element, t)).on("orientationchange.navbar", n.proxy(t.resize, t.$win[0], t)).trigger("resize.navbar"), t.$doc.on("scroll.navbar", n.proxy(t.stickUp, null != t.$clone ? t.$clone : t.$element, t)).on("scroll.navbar", n.proxy(t.activateAnchor, t)), t.$element.add(t.$clone).find("[data-rd-navbar-toggle]").each(function () {
var o;
return (o = n(this)).on("click", n.proxy(t.switchToggle, this, t)), o.parents("body").on("click", n.proxy(t.closeToggle, this, t))
}), t.$element.add(t.$clone).find(".rd-navbar-submenu").each(function () {
var o, e;
return o = n(this), e = o.parents(".rd-navbar--is-clone").length ? t.cloneTimer : t.focusTimer, o.on("mouseleave.navbar", n.proxy(t.dropdownOut, this, t, e)), o.find("> a").on("mouseenter.navbar", n.proxy(t.dropdownOver, this, t, e)), o.find("> a").on("touchstart.navbar", n.proxy(t.dropdownTouch, this, t, e)), o.find("> .rd-navbar-submenu-toggle").on("click", n.proxy(t.dropdownToggle, this, t)), o.parents("body").on("click", n.proxy(t.dropdownClose, this, t))
}), t.$element.add(t.$clone).find('.rd-navbar-nav a[href^="#"]').each(function () {
return n(this).on("click", n.proxy(t.goToAnchor, this, t))
}), t.$element.find(".rd-navbar-dropdown, .rd-navbar-megamenu").each(function () {
var t, o;
t = n(this), (o = this.getBoundingClientRect()).left + t.outerWidth() >= e.innerWidth - 10 ? this.className += " rd-navbar-open-left" : o.left - t.outerWidth() <= 10 && (this.className += " rd-navbar-open-right")
}), t
}, a.prototype.switchClass = function (t, o, e) {
var a;
return (a = t instanceof jQuery ? t : n(t)).addClass("rd-navbar--no-transition").removeClass(o).addClass(e), a[0].offsetHeight, a.removeClass("rd-navbar--no-transition")
}, a.prototype.getOption = function (t) {
var n, o;
for (n in this.options.responsive) n <= e.innerWidth && (o = n);
return null != this.options.responsive && null != this.options.responsive[o][t] ? this.options.responsive[o][t] : this.options[t]
}, a.prototype.addAdditionalClassToToggles = function (t, o, e) {
return n(t).find("[data-rd-navbar-toggle]").each(function () {
var a;
return n(this).addClass(o), a = this.getAttribute("data-rd-navbar-toggle"), n(this).parents("body").find(t).find(a).addClass(e)
})
}, a
}(), n.fn.extend({
RDNavbar: function (t) {
var o;
if (!(o = n(this)).data("RDNavbar")) return o.data("RDNavbar", new a(this, t))
}
}), e.RDNavbar = a
}(window.jQuery, document, window), "undefined" != typeof module && null !== module ? module.exports = window.RDNavbar : "function" == typeof define && define.amd && define(["jquery"], function () {
"use strict";
return window.RDNavbar
})
}).call(this);