fn_b/resources/js/app.js
2026-02-12 12:36:53 +08:00

893 lines
34 KiB
JavaScript
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import './bootstrap';
import 'bootstrap';
import $ from 'jquery';
window.$ = window.jQuery = $;
import InfiniteScroll from 'infinite-scroll';
import ClipboardJS from 'clipboard';
const initHeaderScroll = (sHeaderSelector) => {
console.log('检查点1函数跑起来了选择器是');
const $oHeader = $(sHeaderSelector);
const iHeaderHeight = $oHeader.outerHeight();
const oRoot = document.documentElement;
if ($oHeader.length === 0) return;
let iLastScroll = 0;
const iThreshold = 5; // 加上一个细微的阈值,防止手抖产生的位移
$(window).on('scroll', () => {
console.log('检查点3你在滚我也在动'); // 看看控制台刷不刷屏
let iCurrentScroll = $(window).scrollTop();
// 1. 忽略极小的滚动(防止灵敏度过高)
if (Math.abs(iCurrentScroll - iLastScroll) <= iThreshold) return;
// 2. 核心判断
if (iCurrentScroll > iLastScroll && iCurrentScroll > $oHeader.outerHeight()) {
// 向下滚动且已经滚过 Header 高度 -> 藏起来
$oHeader.addClass('is-hidden');
oRoot.style.setProperty('--header-offset', '0px');
} else {
// 向上滚动 -> 滚出来见我
$oHeader.removeClass('is-hidden');
oRoot.style.setProperty('--header-offset', iHeaderHeight+'px');
}
// 3. 边界情况:滚回顶部了,必须显示
if (iCurrentScroll <= 0) {
$oHeader.removeClass('is-hidden');
oRoot.style.setProperty('--header-offset', iHeaderHeight+'px');
}
iLastScroll = iCurrentScroll;
});
};
const initArticleLoader = (sContainerSelector) => {
const $oContainer = $(sContainerSelector);
if ($oContainer.length === 0) return;
const oInfScroll = new InfiniteScroll($oContainer[0], {
// 使用函数式 path灵活得飞起
path: function() {
let sUrl = window.location.origin + window.location.pathname; // 当前基础路径
let sSearch = window.location.search; // 当前已有的参数(比如 ?s=关键字)
let iNextPage = this.loadCount + 2; // InfiniteScroll 内部计数从0开始第二页就是2
// 原则:判断当前 URL 是否已经有了其他参数
if (sSearch) {
// 如果已有参数,判断是否带 page没有就拼 &page=,有就替换(正则处理最稳)
if (sSearch.indexOf('page=') > -1) {
return sSearch.replace(/page=\d+/, 'page=' + iNextPage);
}
return sSearch + '&page=' + iNextPage;
} else {
return '?page=' + iNextPage;
}
},
append: '.ajax-item',
history: false,
// prefill: true,
status: '.page-load-status',
scrollThreshold: 600,
responseBody: 'text',
});
$oContainer.on('append.infiniteScroll', (oEvent, xResponse, sPath, aItems) => {
const $aNewItems = $(aItems);
$aNewItems.addClass('ajax-item-fade-in');
setTimeout(() => {
$aNewItems.addClass('is-visible');
}, 50);
console.log(`[ArticleLoader] s-Hungarian 风格追加成功: ${sPath}`);
});
window.oMainInfScroll = oInfScroll;
};
$(() => {
if (typeof jQuery != "undefined") {
var $ = jQuery.noConflict()
}
// 全局只初始化一次
const oClipboard = new ClipboardJS('.copy-permalink', {
// 关键:由于按钮可能是弹窗出来的,我们需要指定 container
container: document.body
});
oClipboard.on('success', function(e) {
ncPopupTips(1, "复制成功");
e.clearSelection();
e.trigger.blur();
});
$(document).on("click", '.post-like-button', function(event) { // .post-like-button[data-action="like"]
event.preventDefault();
var $this = $(".post-like-button");
var id = $(this).data("id");
if ($this.hasClass("requesting")) {
return false;
}
$this.addClass("requesting");
$.ajax({
url: "/like/"+id,
type: "GET",
dataType: "json",
}).done(function(data) {
ncPopupTips(1, data.msg);
$(".like-count").html(data.iLikeCount);
$this.removeClass("requesting")
}).fail(function(jqXHR) {
let sMsg = '系统开小差了';
if (jqXHR.responseJSON && jqXHR.responseJSON.msg) {
sMsg = jqXHR.responseJSON.msg; // 这里拿到的就是“兄弟,你已经点过了”
}
ncPopupTips(0, sMsg);
$this.removeClass("requesting")
});
return false;
});
initHeaderScroll('#header');
document.getElementById('searchform').addEventListener('submit', function(e) {
e.preventDefault(); // 拦截默认提交
let sKeywords = document.getElementById('s').value;
if (sKeywords.trim() !== '') {
window.location.href = '/search/' + encodeURIComponent(sKeywords);
}
});
initArticleLoader('.list-home');
// 占领,未来可删
var globals = {
i18n: { load_more: "加载更多", reached_end: "没有更多了" },
sAjaxUrl: "{{ route('ajax.handler') }}"
}
////tom 复活分享链接弹出
function ncPopupTips(type, msg) {
var c = type ? "success" : "error";
var icon = type ? "<i class='icon me-2'></i>" : "<i class='icon me-2'></i>";
var html = '<div class="nice-popup nice-popup-sm nice-popup-error ' + c + '">' + '<div class="nice-popup-body">' + '<div class="nice-popup-content">' + icon + msg + "</div>" + "</div>" + "</div>";
var tips = $(html);
$("body").append(tips);
setTimeout(function() {
tips.addClass("nice-popup-open")
}, 300);
if (typeof lazyLoadInstance !== "undefined") {
lazyLoadInstance.update()
}
setTimeout(function() {
tips.removeClass("nice-popup-open");
setTimeout(function() {
setTimeout(function() {
tips.remove()
}, 600)
}, 1000)
}, 1600)
}
function ncPopup(type, html, maskStyle, btnCallBack) {
var maskStyle = maskStyle ? 'style="' + maskStyle + '"' : "";
var size = "";
if (type == "big") {
size = "nice-popup-lg"
} else if (type == "no-padding") {
size = "nice-popup-nopd"
} else if (type == "cover") {
size = "nice-popup-cover nice-popup-nopd"
} else if (type == "full") {
size = "nice-popup-xl"
} else if (type == "scroll") {
size = "nice-popup-scroll"
} else if (type == "middle") {
size = "nice-popup-md"
} else if (type == "small") {
size = "nice-popup-sm"
}
var template = '\
<div class="nice-popup nice-popup-center '
+ size + '">\
<div class="nice-popup-overlay" '
+ maskStyle + '></div>\
<div class="nice-popup-body">\
<div class="nice-popup-close">\
<span class="svg-white"></span>\
<span class="svg-dark"></span>\
</div>\
<div class="nice-popup-content">\
'
+ html + "\
</div>\
</div>\
</div>\
"
;
var popup = $(template);
$("body").append(popup);
$("body").addClass("nice-popup-hidden");
setTimeout(function() {
popup.addClass("nice-popup-open")
}, 300);
if (typeof lazyLoadInstance !== "undefined") {
lazyLoadInstance.update()
}
var close = function() {
$("body").removeClass("nice-popup-hidden");
$(popup).removeClass("nice-popup-open");
setTimeout(function() {
setTimeout(function() {
popup.remove()
}, 300)
}, 600)
};
$(popup).on("click touchstart", ".nice-popup-close, .nice-popup-overlay", function(event) {
event.preventDefault();
close()
});
if (typeof btnCallBack == "object") {
Object.keys(btnCallBack).forEach(function(key) {
$(popup).on("click touchstart", key, function(event) {
var ret = btnCallBack[key](event, close)
})
})
}
return popup
}
/**
* 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(`<style id="${sStyleId}">.theiaStickySidebar:after {content: ""; display: table; clear: both;}</style>`);
}
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 = $("<div>").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 = `<div class="text-center"><div class="spinner-border spinner-border-sm text-light" role="status"></div></div>`;
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('<div class="submenu-arrow iconfont icon-jiantou1"></div>')
}
$(".mobile-sidebar-menu .menu-item-has-children > a").append('<div class="dropdown-sub-menu"><span class="iconfont icon-right"></span></div>'),
$(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 = '<div class="text-center"><h6 class="py-1">' + title + '</h6>\
<div class="text-muted text-sm mb-2" > '
+ desc + ' </div>\
<img src="'
+ img + '" alt="' + title + '" style="width:100%;height:auto;">\
</div>'
;
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"))
}
})
}
});