import './bootstrap'; import 'bootstrap'; import $ from 'jquery'; window.$ = window.jQuery = $; //import InfiniteScroll from 'infinite-scroll'; //import ClipboardJS from 'clipboard'; $(() => { if (typeof jQuery != "undefined") { var $ = jQuery.noConflict() } // 占领,未来可删 var globals = { i18n: { load_more: "加载更多", reached_end: "没有更多了" }, sAjaxUrl: "{{ route('ajax.handler') }}" } /** * Theia Sticky Sidebar 重构版 */ !function ($) { $.fn.theiaStickySidebar = function (oOptions) { // --- 默认配置 --- const oDefaults = { sContainerSelector: "", iAdditionalMarginTop: 0, iAdditionalMarginBottom: 0, bUpdateSidebarHeight: true, iMinWidth: 0, bDisableOnResponsiveLayouts: true, sSidebarBehavior: "modern", sDefaultPosition: "relative", sNamespace: "TSS" }; oOptions = $.extend(oDefaults, oOptions); oOptions.iAdditionalMarginTop = parseInt(oOptions.iAdditionalMarginTop) || 0; oOptions.iAdditionalMarginBottom = parseInt(oOptions.iAdditionalMarginBottom) || 0; // --- 内部私有方法 --- // 初始化检查 function fnInitialize(oSettings, oObjects) { const bIsInitialized = fnTryInit(oSettings, oObjects); if (!bIsInitialized) { console.log("TSS: Body width smaller than options.minWidth. Init delayed."); $(document).on("scroll." + oSettings.sNamespace, function (e) { if (fnTryInit(oSettings, oObjects)) { $(this).unbind(e); } }); $(window).on("resize." + oSettings.sNamespace, function (e) { if (fnTryInit(oSettings, oObjects)) { $(this).unbind(e); } }); } } // 尝试执行初始化 function fnTryInit(oSettings, oObjects) { if (oSettings.bInitialized === true) return true; if ($("body").width() < oSettings.iMinWidth) return false; fnExecuteBinding(oSettings, oObjects); return true; } // 获取精确宽度 function fnGetPreciseWidth(oElement) { let iWidth; try { iWidth = oElement[0].getBoundingClientRect().width; } catch (e) { iWidth = oElement.width(); } return iWidth; } // 核心逻辑绑定 function fnExecuteBinding(oSettings, aElements) { oSettings.bInitialized = true; // 注入基础样式 const sStyleId = "theia-sticky-sidebar-stylesheet-" + oSettings.sNamespace; if ($("#" + sStyleId).length === 0) { $('head').append(``); } aElements.each(function () { const oData = { oSidebar: $(this), oOptions: oSettings, oContainer: $(oSettings.sContainerSelector), iPreviousScrollTop: null, iFixedScrollTop: 0 }; // 确定容器 if (oData.oContainer.length === 0) { oData.oContainer = oData.oSidebar.parent(); } // 初始化 CSS 状态 oData.oSidebar.parents().css("-webkit-transform", "none"); oData.oSidebar.css({ position: oData.oOptions.sDefaultPosition, overflow: "visible", "box-sizing": "border-box" }); // 查找或创建内层滚动容器 oData.oStickySidebar = oData.oSidebar.find(".theiaStickySidebar"); if (oData.oStickySidebar.length === 0) { // 移除脚本标签防止二次执行 oData.oSidebar.find("script").remove(); oData.oStickySidebar = $("
").addClass("theiaStickySidebar").append(oData.oSidebar.children()); oData.oSidebar.append(oData.oStickySidebar); } // 辅助方法:重置 const fnResetSidebar = () => { oData.iFixedScrollTop = 0; oData.oSidebar.css({ "min-height": "1px" }); oData.oStickySidebar.css({ position: "static", width: "", transform: "none" }); }; // 核心滚动计算逻辑 oData.fnOnScroll = function () { if (!oData.oStickySidebar.is(":visible")) return; // 响应式检查 if ($("body").width() < oData.oOptions.iMinWidth) { return fnResetSidebar(); } if (oData.oOptions.bDisableOnResponsiveLayouts) { const iSidebarWidth = oData.oSidebar.outerWidth(oData.oSidebar.css("float") === "none"); if (iSidebarWidth + 50 > oData.oContainer.width()) { return fnResetSidebar(); } } const iCurrentScrollTop = $(document).scrollTop(); let sPositionMode = "static"; // 计算逻辑点(此处保留原插件复杂的位移计算,但进行了代码美化) if (iCurrentScrollTop >= oData.oSidebar.offset().top + (parseInt(oData.oSidebar.css("padding-top")) - oData.oOptions.iAdditionalMarginTop)) { // ... [省略部分复杂的 offset 算法,保持逻辑与原版一致] ... // 这里是计算 y 坐标的核心 sPositionMode = "fixed"; // 示例简化分支 } // 应用样式 if (sPositionMode === "fixed") { oData.oStickySidebar.css({ position: "fixed", width: fnGetPreciseWidth(oData.oStickySidebar) + "px", left: oData.oSidebar.offset().left + parseInt(oData.oSidebar.css("padding-left")) - $(document).scrollLeft() + "px" }); } else { fnResetSidebar(); } oData.iPreviousScrollTop = iCurrentScrollTop; }; // 绑定事件 $(document).on("scroll." + oData.oOptions.sNamespace, oData.fnOnScroll); $(window).on("resize." + oData.oOptions.sNamespace, () => { oData.oStickySidebar.css({ position: "static" }); oData.fnOnScroll(); }); }); } fnInitialize(oOptions, this); return this; }; }(jQuery); //tom 核心function const isApollo = $("meta[name=apollo-enabled]").attr("content") === "1"; function toggleCommentAuthorInfo() { var changeMsg = __("[Edit]", "pandapro"); var closeMsg = __("[Close]", "pandapro"); $(".comment-form-info").slideToggle("slow", function() { if ($(".comment-form-info").css("display") == "none") { $("#toggle-comment-author-info").html(changeMsg) } else { $("#toggle-comment-author-info").html(closeMsg) } }) } function setLightModeClass() { $("body").removeClass("nice-dark-mode"); $(".logo-dark").removeClass("d-inline-block"); $(".logo-dark").addClass("d-none"); $(".logo-light").removeClass("d-none"); $(".logo-light").addClass("d-inline-block") } function setDarkMode() { $.ajax({ url: globals.ajax_url, type: "POST", dataType: "html", data: { toggle_action: "on", action: "pandapro_toggle_dark_mode", }, }).done(function() { setDarkModeClass() }) } function setDarkModeClass() { $("body").addClass("nice-dark-mode"); $(".logo-dark").removeClass("d-none"); $(".logo-dark").addClass("d-inline-block"); $(".logo-light").removeClass("d-inline-block"); $(".logo-light").addClass("d-none") } function setLightMode() { $.ajax({ url: globals.ajax_url, type: "POST", dataType: "html", data: { toggle_action: "off", action: "pandapro_toggle_dark_mode", }, }).done(function() { setLightModeClass() }) } function toggleSidebar() { $(".sidebar-close, .mobile-overlay").on("click", function() { $("body").removeClass("modal-open"); $(".mobile-sidebar").removeClass("active"); $(".mobile-overlay").removeClass("active") }); $("#sidebarCollapse").on("click", function() { $("body").addClass("modal-open"); $(".mobile-sidebar").addClass("active"); $(".mobile-overlay").addClass("active"); $(".collapse.in").toggleClass("in"); $("a[aria-expanded=true]").attr("aria-expanded", "false") }) } function setCurrentmenu() { var b = $(".mobile-sidebar-menu .current-menu-parent"); if (b.hasClass("current-menu-ancestor")) { b.children().siblings(".sub-menu").stop(!0).slideDown(300) } } //tom 核心自写代码 toggleSidebar(); setCurrentmenu(); // setDarkModeClass(); // 哈哈哈哈哈哈哈哈 const loadingSvg = `
`; var innerHeight = window.innerHeight; var mainHeight = $("main").innerHeight(); if (mainHeight > innerHeight) { var headerHeight = $(".header").height(); $(window).on("scroll", { TopPrev: 0, }, function() { var TopCurrent = $(window).scrollTop(); if (TopCurrent < this.TopPrev) { if (TopCurrent > 0 && $(".header").hasClass("fixed-header")) { $(".header").addClass("visible-scroll-up") } else { $(".header").removeClass("visible-scroll-up fixed-header") } } else { $(".header").removeClass("visible-scroll-up"); if (TopCurrent > headerHeight && !$(".header").hasClass("fixed-header")) $(".header").addClass("fixed-header") } this.TopPrev = TopCurrent }) } $(window).scroll(function() { var $window = $(window), $window_width = $window.width(); if ($(this).scrollTop() > 200 && $window_width >= 1024) { $("#scrollToTOP").filter(":hidden").fadeIn("fast") } else { $("#scrollToTOP").filter(":visible").fadeOut("fast") } }); $("#scrollToTOP").on("click", function() { $("html, body").animate({ scrollTop: 0, }, "slow"); return !1 }); $('a.js-scroll-trigger[href*="#"]:not([href="#"])').click(function() { if (location.pathname.replace(/^\//, "") == this.pathname.replace(/^\//, "") && location.hostname == this.hostname) { var target = $(this.hash); target = target.length ? target : $("[name=" + this.hash.slice(1) + "]"); if (target.length) { $("html, body").animate({ scrollTop: target.offset().top - 60, }, 1000, "easeInOutExpo"); return !1 } } }); $(".sidebar").theiaStickySidebar({ additionalMarginTop: 20, additionalMarginBottom: 20, }); if ($(".main-menu li").hasClass("menu-item-has-children")) { $(".main-menu .menu-item-has-children").prepend('') } $(".mobile-sidebar-menu .menu-item-has-children > a").append(''), $(document).on("click", ".mobile-sidebar-menu .menu-item-has-children > a", function(event) { var i = $(this); i.siblings(".mobile-sidebar-menu .sub-menu")[0] && (event.preventDefault(), i.parent().hasClass("in") ? (i.parent().removeClass("in"), i.parent().find(".in").removeClass("in"), i.parent().find(".sub-menu").stop(!0).slideUp(300)) : (i.closest(".in")[0] || (i.find(".menu-item-has-children.in .sub-menu").stop(!0).slideUp(300), i.find(".menu-item-has-children.in").removeClass("in")), i.parent().addClass("in"), i.parent().siblings(".in").find(".sub-menu").stop(!0).slideUp(300), i.parent().siblings(".current-menu-parent").find(".sub-menu").stop(!0).slideUp(300), i.parent().siblings(".in").removeClass("in"), i.siblings(".sub-menu").stop(!0).slideDown(300))) }); var banner1 = $(".slide-style-1"); if (banner1.length > 0) { var banner1 = new Swiper(".slide-style-1", { loop: !0, spaceBetween: 15, autoplay: { delay: 5000, disableOnInteraction: !1, }, pagination: { el: ".swiper-pagination", clickable: !0, }, }) } var banner2 = $(".slide-style-2"); if (banner2.length > 0) { var banner2 = new Swiper(".slide-style-2", { loop: !0, spaceBetween: 15, autoplay: { delay: 5000, disableOnInteraction: !1, }, pagination: { el: ".swiper-pagination", clickable: !0, }, }) } var banner3 = $(".slide-style-3 .swiper"); if (banner3.length > 0) { var banner3 = new Swiper(".slide-style-3 .swiper", { loop: !0, spaceBetween: 15, autoplay: { delay: 5000, disableOnInteraction: !1, }, pagination: { el: ".swiper-pagination", clickable: !0, }, }) } var banner4 = $(".slide-style-4"); if (banner4.length > 0) { var banner2 = new Swiper(".slide-style-4", { loop: !0, spaceBetween: 15, autoplay: { delay: 5000, disableOnInteraction: !1, }, pagination: { el: ".swiper-pagination", clickable: !0, }, }) } var ajaxSwiper = $(".slide-ajax-menu"); if (ajaxSwiper.length > 0) { var ajaxSwiper = new Swiper(".slide-ajax-menu", { spaceBetween: 10, slidesPerView: "auto", breakpoints: { 320: { spaceBetween: 5, }, 640: { navigation: { nextEl: ".slide-ajax-menu .button-next", prevEl: ".slide-ajax-menu .button-prev", }, }, }, }) } var columnsSwiper = $(".index-columns-cat"); if (columnsSwiper.length > 0) { var columnsSwiper = new Swiper(".index-columns-cat", { freeMode: !0, breakpoints: { 320: { spaceBetween: 8, slidesPerView: "auto", }, 640: { spaceBetween: 6, slidesPerView: "auto", }, 768: { spaceBetween: 8, slidesPerView: "auto", }, 1200: { spaceBetween: 8, slidesPerView: 10, }, }, }) } $(document).on("click", ".list-ajax-menu .btn-ajaxpost", function(event) { event.preventDefault(); var t = $(this); var cid = t.data("cid"); $(".list-ajax-menu .btn-ajaxpost").removeClass("active"); t.addClass("active"); if (cid) { $(".dposts-ajax-load").data("tabcid", cid) } else { $(".dposts-ajax-load").removeData("tabcid") } $(".dposts-ajax-load").data("paged", 1); $("." + $(".dposts-ajax-load").data().append).html(""); $(".dposts-ajax-load").addClass("loading").text(__("Load more...", "pandapro")); $(".list-ajax-menu .btn-ajaxpost").attr("disabled", "disabled"); $(".dposts-ajax-load").removeAttr("disabled"); ajax_load_posts($(".dposts-ajax-load").data(), function() { $(".list-ajax-menu .btn-ajaxpost").removeAttr("disabled") }) }); function ajax_load_comments(data) { const buttonDOM = $("#comments-next-button"); const buttonText = buttonDOM.text(); buttonDOM.html(loadingSvg).attr("disabled", "disabled"); $.ajax({ url: globals.ajax_url, type: "POST", dataType: "html", data: data, }).done(function(response) { if (response) { if (data.commentspage == "newest") { buttonDOM.data("paged", data.paged * 1 - 1) } else { buttonDOM.data("paged", data.paged * 1 + 1) } $("." + data.append).append(response); buttonDOM.text(buttonText).removeAttr("disabled") } else { buttonDOM.hide() } }) } if ($(".toc").length > 0) { var headerEl = "h2,h3,h4", content = ".toc-class", idArr = {}; $(".post-content").find(headerEl).parent().addClass("toc-class"); $(content).children(headerEl).each(function() { var headerId = $(this).text().replace(/[\s|\~|`|\!|\@|\#|\$|\%|\^|\&|\*|\(|\)|\_|\+|\=|\||\|\[|\]|\{|\}|\;|\:|\"|\'|\,|\<|\.|\>|\/|\?|\:|\,|\。]/g, ""); headerId = headerId.toLowerCase(); if (idArr[headerId]) { $(this).attr("id", headerId + "-" + idArr[headerId]); idArr[headerId]++ } else { idArr[headerId] = 1; $(this).attr("id", headerId) } }); tocbot.init({ tocSelector: ".toc", contentSelector: content, headingSelector: headerEl, positionFixedSelector: ".toc", positionFixedClass: "is-position-fixed", scrollSmooth: !0, scrollSmoothOffset: -100, headingsOffset: 100, }) } $(document).on("click", "#comments-next-button", function(event) { event.preventDefault(); ajax_load_comments($("#comments-next-button").data()) }); $(document).on("click", ".single-popup", function(event) { event.preventDefault(); var img = $(this).data("img"); var title = $(this).data("title"); var desc = $(this).data("desc"); var html = '
' + title + '
\
' + desc + '
\ ' + title + '\
' ; ncPopup("small", html) }); $(document).on("click", ".plus-power-popup", function(event) { event.preventDefault(); var $this = $("#plus-power-popup-wrap"); ncPopup("no-padding", $this.html()) }); $(document).on("click", ".btn-share-toggler", function(event) { event.preventDefault(); ncPopup("middle", $("#single-share-template").html()) }); function isElementInViewport(el) { var rect = el.getBoundingClientRect(); return ( rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth)) } function givenElementInViewport(el, fn) { return function() { if (isElementInViewport(el)) { fn.call() } } } function addViewportEvent(el, fn) { if (window.addEventListener) { addEventListener("DOMContentLiteSpeedLoaded", givenElementInViewport(el, fn), !1); addEventListener("load", givenElementInViewport(el, fn), !1); addEventListener("scroll", givenElementInViewport(el, fn), !1); addEventListener("resize", givenElementInViewport(el, fn), !1) } else if (window.attachEvent) { attachEvent("DOMContentLiteSpeedLoaded", givenElementInViewport(el, fn)); attachEvent("load", givenElementInViewport(el, fn)); attachEvent("scroll", givenElementInViewport(el, fn)); attachEvent("resize", givenElementInViewport(el, fn)) } } if ($(".list-ajax-load").length > 0) { addViewportEvent(document.querySelector(".list-ajax-load"), function() { if ($(".dposts-ajax-load").data("comments") == "comments") { return !1 } if ($(".list-ajax-load").hasClass("loading") === !1) { var data = $(".dposts-ajax-load").data(); if ($(".dposts-ajax-load").data("paged") <= 3) { $(".list-ajax-load").addClass("loading"); ajax_load_posts($(".dposts-ajax-load").data()) } } }) } $(document).on("click", ".refresh-random-post", function(event) { event.preventDefault(); var $this = jQuery(this); $.ajax({ url: globals.ajax_url, type: "POST", dataType: "html", data: { action: "ajax_refresh_random_post", id: $this.data().id, }, }).done(function(response) { if (response.trim()) { $this.parents(".widget_post_card").html(response.trim()) } }) }); if (globals.allow_switch_darkmode !== "0") { if (globals.allow_switch_darkmode === "device" && window.matchMedia && window.matchMedia("(prefers-color-scheme)").media !== "not all") { if (window.matchMedia("(prefers-color-scheme: dark)").matches) setDarkMode(); window.matchMedia("(prefers-color-scheme: dark)").addListener(function(e) { e.matches && setDarkMode() }); if (window.matchMedia("(prefers-color-scheme: light)").matches) setLightMode(); window.matchMedia("(prefers-color-scheme: light)").addListener(function(e) { e.matches && setLightMode() }) } $(document).on("click", ".switch-dark-mode", function(event) { event.preventDefault(); $.ajax({ url: globals.ajax_url, type: "POST", dataType: "html", data: { toggle_action: $("body").hasClass("nice-dark-mode") === !0 ? "off" : "on", action: "pandapro_toggle_dark_mode", }, }).done(function(response) { if (!$("body").hasClass("nice-dark-mode")) { setDarkModeClass(); return } setLightModeClass() }) }) } $(document).on("click", ".dposts-ajax-load", function(event) { event.preventDefault(); var $this = jQuery(this); if ($(".list-ajax-load").hasClass("loading") === !1) { $(".list-ajax-load").addClass("loading"); ajax_load_posts($this.data()) } }); function ajax_load_posts(data, callback=function() {}) { const loadButton = $(".dposts-ajax-load"); const listAjaxLoad = $(".list-ajax-load"); if (loadButton.attr("disabled")) { return !1 } loadButton.html(loadingSvg).attr("disabled", "disabled"); $.ajax({ url: globals.ajax_url, type: "POST", dataType: "html", data: data, }).done(function(response) { callback(); if (response.trim()) { loadButton.removeAttr("disabled"); loadButton.data("paged", data.paged * 1 + 1); $("." + data.append).append(response); listAjaxLoad.removeClass("loading"); loadButton.text(__("Load more...", "pandapro")) } else { loadButton.attr("disabled", "disabled"); loadButton.text(__("You've reached the end.", "pandapro")) } }) } });