From 26e71c66027cf340dddd1c3f40f55e1936753f67 Mon Sep 17 00:00:00 2001 From: Nya Candy Date: Thu, 13 Jan 2022 00:10:11 +0800 Subject: [PATCH] fix: remove debug logs --- source/js/kratosr.min.js | 2 +- source/maps/kratosr.min.js.map | 2 +- src/js/kratosr.js | 3 --- 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/source/js/kratosr.min.js b/source/js/kratosr.min.js index 46ea61ef..86bc35ad 100644 --- a/source/js/kratosr.min.js +++ b/source/js/kratosr.min.js @@ -1,2 +1,2 @@ -let kr={};window.requestIdleCallback=window.requestIdleCallback||function(e){let t=Date.now();return setTimeout((function(){e({didTimeout:!1,timeRemaining:function(){return Math.max(0,50-(Date.now()-t))}})}),1)},window.cancelIdleCallback=window.cancelIdleCallback||function(e){clearTimeout(e)},(()=>{const e=()=>{$(document).on("click",".xHeading",(function(e){$(this).next().slideToggle(300),$(this).parent(".xControl").hasClass("active")?$(this).parent(".xControl").removeClass("active"):$(this).parent(".xControl").addClass("active"),e.preventDefault()}))},t=()=>{$(document).on("click",".donate",(()=>{layer.open({type:1,area:["300px","370px"],title:kr.donateBtn,resize:!1,scrollbar:!1,content:''}),$(".choose-pay input[type='radio']").click((function(){const e=$(this).attr("id");"alipay"==e&&($(".qr-pay #alipay_qr").removeClass("d-none"),$(".qr-pay #wechat_qr").addClass("d-none")),"wechatpay"==e&&($(".qr-pay #alipay_qr").addClass("d-none"),$(".qr-pay #wechat_qr").removeClass("d-none"))}))}))},o=()=>{void 0!==$.fancybox&&($.fancybox.defaults.hash=!1,$(".kratos-hentry").each((function(e){$(this).find("img").each((function(){if($(this).parent().hasClass("fancybox")||$(this).parent().hasClass("qrcode")||$(this).parent().is("a"))return;const e=this.alt;e&&$(this).after(''+e+""),$(this).wrap('')}))})),$(".fancybox").fancybox())},n=()=>{$(document).on("click","a[class=toc-link]",(function(){return $("html, body").animate({scrollTop:$(decodeURI($(this).attr("href"))).offset().top-60},500),!1}))};let a;let s="";const r=(e,t=!0)=>{let o;const n=e/1e3,a=Math.floor(n/60/60/24),s=Math.floor(n/60/60-24*a),r=Math.floor(n/60-1440*a-60*s),i=Math.floor(n-86400*a-3600*s-60*r);let l=a.toString(),c=s.toString(),d=r.toString(),m=i.toString();return t?(l&&1===l.length&&(l="0"+l),c&&1===c.length&&(c="0"+c),d&&1===d.length&&(d="0"+d),m&&1===m.length&&(m="0"+m),o=l+"天"+c+"小时"+d+"分"+m+"秒"):o=a<540?a<60?l+"天":Math.floor(a/30).toString()+"个月":Math.floor(a/365).toString()+"年",o},i=()=>{(()=>{const e=document.getElementsByClassName("kratos-entry-thumb-new-img");let t=window.kr?.siteRoot||"/";(kr.picCDN||kr.pic?.CDN)&&(t="unpkg"===kr.picCDN?"//unpkg.com/kratos-rebirth@latest/source/":"//cdn.jsdelivr.net/npm/kratos-rebirth@latest/source/");const o=parseInt(kr.pic?.random_amount)||20;let n="images/thumb/thumb_{no}.webp";kr.pic&&kr.pic.filename&&(n=kr.pic.filename.includes("//")?kr.pic.filename:t+kr.pic.filename);const a=new Array(o+1),s=()=>{let e,t=5;for(;t>0&&(e=Math.floor(Math.random()*o+1),a[e]);)t--;if(t<=0){e=-1;for(let t=1;t<=o;t++)if(!a[t]){e=t;break}if(-1===e){for(let e=1;e<=o;e++)a[e]=!1;e=Math.floor(Math.random()*o+1)}}return a[e]=!0,e};for(let t=0,o=e.length;t{e.getElementsByTagName("table")[0].getElementsByTagName("tbody")[0].getElementsByTagName("tr")[0].getElementsByClassName("code")[0].setAttribute("id",`code-${t}`),e.innerHTML+=``})),new ClipboardJS("button.copy").on("success",(e=>{const t=e.trigger.innerHTML;e.trigger.innerHTML=' 成功~',setTimeout((()=>{e.trigger.innerHTML=t}),3e3),e.clearSelection()})),(()=>{const e="undefined"!=typeof window,t=e&&!("onscroll"in window)||"undefined"!=typeof navigator&&/(gle|ing|ro|msn)bot|crawl|spider|yand|duckgo/i.test(navigator.userAgent),o=e&&"IntersectionObserver"in window,n=document.querySelector(".post-comments.lazy-load"),a=()=>{window.loadCommentsEventHandler&&window.cancelIdleCallback(window.loadCommentsEventHandler),window.loadCommentsEventHandler=window.requestIdleCallback(load_comm),load_comm=null};if(e&&!t&&o&&null!==n){const e=new IntersectionObserver((t=>{t[0].isIntersecting&&(a(),e.disconnect())}),{threshold:0});e.observe(n)}else"undefined"!=typeof load_comm&&null!==load_comm&&a()})(),(()=>{if(kr.expire_day){const e=document.getElementById("expire-alert");if(e){const t=e.querySelector("time"),o=new Date(parseInt(t.getAttribute("datetime"))),n=Date.now()-o;n>24*kr.expire_day*3600*1e3&&(t.innerText=r(n,!1),e.classList.remove("hidden"))}}})(),(()=>{if(null!==document.getElementById("krw-toc")){const e=document.getElementById("krw-toc").getElementsByClassName("toc-item"),t=[];try{Array.from(e).forEach((e=>{const o=e.getElementsByClassName("toc-link")[0],n=decodeURI(o.getAttribute("href"));if(!n.includes("#"))throw new Error("TOC 小标题链接无效,进行回落处理");const a=document.getElementById(n.replace("#","")).offsetTop;t.push({h:a,el:e})}))}catch(t){return console.log("错误:",t.message),void Array.from(e).forEach((e=>{e.classList.add("show")}))}t.sort(((e,t)=>e.h-t.h)),console.log(t);const o=(e=-1)=>{let o;o=!Number.isInteger(e)||e<0||e>t.length-1?0:e;const n=window.scrollY;if(console.log(n),t[0].h>n)o=-1;else if(t[t.length-1].h<=n)o=t.length-1;else for(;!(t[o].h<=n&&t[o+1].h>n);)t[o].h>n&&o>0?o--:t[o+1].h<=n&&o{if(e!==o){if(-1!==e){t[e].el.classList.remove("active"),t[e].el.classList.remove("show");let o=t[e].el;for(;!o.classList.contains("toc");)o.classList.contains("toc-item")&&o.classList.remove("show"),o=o.parentNode}if(-1!==o){t[o].el.classList.add("active"),t[o].el.classList.add("show");let e=t[o].el;for(;!e.classList.contains("toc");)e.classList.contains("toc-item")&&e.classList.add("show"),e=e.parentNode}}};let a=-1;const s=()=>{const e=o(a);n(a,e),a=e},r=()=>{let e=0;window.requestAnimationFrame((()=>{e&&clearTimeout(e),e=setTimeout((e=>{e===window.scrollY&&s()}),100,window.scrollY)}))};window.addEventListener("scroll",r),s(),window.addEventListener("pjax:before",(()=>{t.length=0,window.removeEventListener("scroll",r)}),{once:!0});const i=document.getElementsByClassName("toc-progress-bar")[0],l=()=>{i.style.width=(window.scrollY/document.body.clientHeight*100).toString()+"%"};window.addEventListener("scroll",(()=>{window.requestAnimationFrame(l)})),l()}})()},l=()=>{i(),kr.copyrightNotice&&(document.body.oncopy=e=>{const t=window.getSelection().toString();t.length>150&&(e.preventDefault(),e.clipboardData&&e.clipboardData.setData("text/plain",t+a))}),(()=>{if(kr.siteLeaveEvent){let e;const t=$('[rel="icon"]').attr("href");document.addEventListener("visibilitychange",(()=>{document.hidden?(document.title=kr.leaveTitle,kr.leaveLogo&&$('[rel="icon"]').attr("href",kr.leaveLogo),clearTimeout(e)):(document.title=kr.returnTitle+" "+s,kr.leaveLogo&&$('[rel="icon"]').attr("href",t),e=setTimeout((()=>{document.title=s,e=0}),2e3))}))}})(),(()=>{const e=new Date(kr.createTime),t=document.getElementById("span_dt");setInterval((()=>{t.innerText=r(Date.now()-e)}),1e3)})(),t(),(()=>{if(!kr.topNavScrollToggle)return;let e=window.innerHeight,t=!1;window.addEventListener("wheel",(()=>{window.requestAnimationFrame((()=>{ewindow.scrollY&&t&&(document.body.classList.remove("nav-up"),t=!1),e=window.scrollY}))}))})()};window.addEventListener("pjax:complete",i),window.addEventListener("window:onload",(()=>{var t;t=l,fetch((window.kr?.siteRoot||"/")+"config/main.json").then((e=>e.json())).then((e=>{kr=e})).then((()=>{t()})),(()=>{let e=!1;const t=()=>{window.requestAnimationFrame((()=>{window.scrollY>200?e||(document.body.classList.add("scroll-down"),e=!0):e&&(document.body.classList.remove("scroll-down"),e=!1)}))};$(".gotop-box").on("click",(function(e){return $("html, body").animate({scrollTop:$("html").offset().top},500),!1})),t(),window.addEventListener("scroll",t)})(),(()=>{let e=$("#kratos-menu-wrap").clone();e.attr({id:"offcanvas-menu"}),e.filter("> ul").attr({class:"ul-me",id:""}),$("#kratos-page").prepend(e),$(".js-kratos-nav-toggle").on("click",(()=>{$(".nav-toggle").hasClass("toon")?($(".nav-toggle").removeClass("toon"),$("#offcanvas-menu").css("right","-240px")):($(".nav-toggle").addClass("toon"),$("#offcanvas-menu").css("right","0px"))})),$("#offcanvas-menu").css("height",$(window).height()),$("#offcanvas-menu").css("right","-240px"),$(window).resize((()=>{const e=$(window);$("#offcanvas-menu").css("height",e.height()),e.width()>769&&$(".nav-toggle").hasClass("toon")&&($(".nav-toggle").removeClass("toon"),$("#offcanvas-menu").css("right","-240px"))}))})(),$(document).click((e=>{const t=$("#offcanvas-menu,.js-kratos-nav-toggle");t.is(e.target)||0!==t.has(e.target).length||$(".nav-toggle").hasClass("toon")&&($(".nav-toggle").removeClass("toon"),$("#offcanvas-menu").css("right","-240px"))})),e(),$(document).on("click",".share",(()=>{$(".share-wrap").fadeToggle("slow")})),n()}),{once:!0}),window.onload=()=>{window.dispatchEvent(new Event("window:onload")),console.log("页面加载完毕!消耗了 %c"+Math.round(100*performance.now())/100+" ms","background:#282c34;color:#51aded;")}})(); +let kr={};window.requestIdleCallback=window.requestIdleCallback||function(e){let t=Date.now();return setTimeout((function(){e({didTimeout:!1,timeRemaining:function(){return Math.max(0,50-(Date.now()-t))}})}),1)},window.cancelIdleCallback=window.cancelIdleCallback||function(e){clearTimeout(e)},(()=>{const e=()=>{$(document).on("click",".xHeading",(function(e){$(this).next().slideToggle(300),$(this).parent(".xControl").hasClass("active")?$(this).parent(".xControl").removeClass("active"):$(this).parent(".xControl").addClass("active"),e.preventDefault()}))},t=()=>{$(document).on("click",".donate",(()=>{layer.open({type:1,area:["300px","370px"],title:kr.donateBtn,resize:!1,scrollbar:!1,content:''}),$(".choose-pay input[type='radio']").click((function(){const e=$(this).attr("id");"alipay"==e&&($(".qr-pay #alipay_qr").removeClass("d-none"),$(".qr-pay #wechat_qr").addClass("d-none")),"wechatpay"==e&&($(".qr-pay #alipay_qr").addClass("d-none"),$(".qr-pay #wechat_qr").removeClass("d-none"))}))}))},n=()=>{void 0!==$.fancybox&&($.fancybox.defaults.hash=!1,$(".kratos-hentry").each((function(e){$(this).find("img").each((function(){if($(this).parent().hasClass("fancybox")||$(this).parent().hasClass("qrcode")||$(this).parent().is("a"))return;const e=this.alt;e&&$(this).after(''+e+""),$(this).wrap('')}))})),$(".fancybox").fancybox())},o=()=>{$(document).on("click","a[class=toc-link]",(function(){return $("html, body").animate({scrollTop:$(decodeURI($(this).attr("href"))).offset().top-60},500),!1}))};let a;let s="";const r=(e,t=!0)=>{let n;const o=e/1e3,a=Math.floor(o/60/60/24),s=Math.floor(o/60/60-24*a),r=Math.floor(o/60-1440*a-60*s),i=Math.floor(o-86400*a-3600*s-60*r);let l=a.toString(),c=s.toString(),d=r.toString(),m=i.toString();return t?(l&&1===l.length&&(l="0"+l),c&&1===c.length&&(c="0"+c),d&&1===d.length&&(d="0"+d),m&&1===m.length&&(m="0"+m),n=l+"天"+c+"小时"+d+"分"+m+"秒"):n=a<540?a<60?l+"天":Math.floor(a/30).toString()+"个月":Math.floor(a/365).toString()+"年",n},i=()=>{(()=>{const e=document.getElementsByClassName("kratos-entry-thumb-new-img");let t=window.kr?.siteRoot||"/";(kr.picCDN||kr.pic?.CDN)&&(t="unpkg"===kr.picCDN?"//unpkg.com/kratos-rebirth@latest/source/":"//cdn.jsdelivr.net/npm/kratos-rebirth@latest/source/");const n=parseInt(kr.pic?.random_amount)||20;let o="images/thumb/thumb_{no}.webp";kr.pic&&kr.pic.filename&&(o=kr.pic.filename.includes("//")?kr.pic.filename:t+kr.pic.filename);const a=new Array(n+1),s=()=>{let e,t=5;for(;t>0&&(e=Math.floor(Math.random()*n+1),a[e]);)t--;if(t<=0){e=-1;for(let t=1;t<=n;t++)if(!a[t]){e=t;break}if(-1===e){for(let e=1;e<=n;e++)a[e]=!1;e=Math.floor(Math.random()*n+1)}}return a[e]=!0,e};for(let t=0,n=e.length;t{e.getElementsByTagName("table")[0].getElementsByTagName("tbody")[0].getElementsByTagName("tr")[0].getElementsByClassName("code")[0].setAttribute("id",`code-${t}`),e.innerHTML+=``})),new ClipboardJS("button.copy").on("success",(e=>{const t=e.trigger.innerHTML;e.trigger.innerHTML=' 成功~',setTimeout((()=>{e.trigger.innerHTML=t}),3e3),e.clearSelection()})),(()=>{const e="undefined"!=typeof window,t=e&&!("onscroll"in window)||"undefined"!=typeof navigator&&/(gle|ing|ro|msn)bot|crawl|spider|yand|duckgo/i.test(navigator.userAgent),n=e&&"IntersectionObserver"in window,o=document.querySelector(".post-comments.lazy-load"),a=()=>{window.loadCommentsEventHandler&&window.cancelIdleCallback(window.loadCommentsEventHandler),window.loadCommentsEventHandler=window.requestIdleCallback(load_comm),load_comm=null};if(e&&!t&&n&&null!==o){const e=new IntersectionObserver((t=>{t[0].isIntersecting&&(a(),e.disconnect())}),{threshold:0});e.observe(o)}else"undefined"!=typeof load_comm&&null!==load_comm&&a()})(),(()=>{if(kr.expire_day){const e=document.getElementById("expire-alert");if(e){const t=e.querySelector("time"),n=new Date(parseInt(t.getAttribute("datetime"))),o=Date.now()-n;o>24*kr.expire_day*3600*1e3&&(t.innerText=r(o,!1),e.classList.remove("hidden"))}}})(),(()=>{if(null!==document.getElementById("krw-toc")){const e=document.getElementById("krw-toc").getElementsByClassName("toc-item"),t=[];try{Array.from(e).forEach((e=>{const n=e.getElementsByClassName("toc-link")[0],o=decodeURI(n.getAttribute("href"));if(!o.includes("#"))throw new Error("TOC 小标题链接无效,进行回落处理");const a=document.getElementById(o.replace("#","")).offsetTop;t.push({h:a,el:e})}))}catch(t){return console.log("错误:",t.message),void Array.from(e).forEach((e=>{e.classList.add("show")}))}t.sort(((e,t)=>e.h-t.h));const n=(e=-1)=>{let n;n=!Number.isInteger(e)||e<0||e>t.length-1?0:e;const o=window.scrollY;if(t[0].h>o)n=-1;else if(t[t.length-1].h<=o)n=t.length-1;else for(;!(t[n].h<=o&&t[n+1].h>o);)t[n].h>o&&n>0?n--:t[n+1].h<=o&&n{if(e!==n){if(-1!==e){t[e].el.classList.remove("active"),t[e].el.classList.remove("show");let n=t[e].el;for(;!n.classList.contains("toc");)n.classList.contains("toc-item")&&n.classList.remove("show"),n=n.parentNode}if(-1!==n){t[n].el.classList.add("active"),t[n].el.classList.add("show");let e=t[n].el;for(;!e.classList.contains("toc");)e.classList.contains("toc-item")&&e.classList.add("show"),e=e.parentNode}}};let a=-1;const s=()=>{const e=n(a);o(a,e),a=e},r=()=>{let e=0;window.requestAnimationFrame((()=>{e&&clearTimeout(e),e=setTimeout((e=>{e===window.scrollY&&s()}),100,window.scrollY)}))};window.addEventListener("scroll",r),s(),window.addEventListener("pjax:before",(()=>{t.length=0,window.removeEventListener("scroll",r)}),{once:!0});const i=document.getElementsByClassName("toc-progress-bar")[0],l=()=>{i.style.width=(window.scrollY/document.body.clientHeight*100).toString()+"%"};window.addEventListener("scroll",(()=>{window.requestAnimationFrame(l)})),l()}})()},l=()=>{i(),kr.copyrightNotice&&(document.body.oncopy=e=>{const t=window.getSelection().toString();t.length>150&&(e.preventDefault(),e.clipboardData&&e.clipboardData.setData("text/plain",t+a))}),(()=>{if(kr.siteLeaveEvent){let e;const t=$('[rel="icon"]').attr("href");document.addEventListener("visibilitychange",(()=>{document.hidden?(document.title=kr.leaveTitle,kr.leaveLogo&&$('[rel="icon"]').attr("href",kr.leaveLogo),clearTimeout(e)):(document.title=kr.returnTitle+" "+s,kr.leaveLogo&&$('[rel="icon"]').attr("href",t),e=setTimeout((()=>{document.title=s,e=0}),2e3))}))}})(),(()=>{const e=new Date(kr.createTime),t=document.getElementById("span_dt");setInterval((()=>{t.innerText=r(Date.now()-e)}),1e3)})(),t(),(()=>{if(!kr.topNavScrollToggle)return;let e=window.innerHeight,t=!1;window.addEventListener("wheel",(()=>{window.requestAnimationFrame((()=>{ewindow.scrollY&&t&&(document.body.classList.remove("nav-up"),t=!1),e=window.scrollY}))}))})()};window.addEventListener("pjax:complete",i),window.addEventListener("window:onload",(()=>{var t;t=l,fetch((window.kr?.siteRoot||"/")+"config/main.json").then((e=>e.json())).then((e=>{kr=e})).then((()=>{t()})),(()=>{let e=!1;const t=()=>{window.requestAnimationFrame((()=>{window.scrollY>200?e||(document.body.classList.add("scroll-down"),e=!0):e&&(document.body.classList.remove("scroll-down"),e=!1)}))};$(".gotop-box").on("click",(function(e){return $("html, body").animate({scrollTop:$("html").offset().top},500),!1})),t(),window.addEventListener("scroll",t)})(),(()=>{let e=$("#kratos-menu-wrap").clone();e.attr({id:"offcanvas-menu"}),e.filter("> ul").attr({class:"ul-me",id:""}),$("#kratos-page").prepend(e),$(".js-kratos-nav-toggle").on("click",(()=>{$(".nav-toggle").hasClass("toon")?($(".nav-toggle").removeClass("toon"),$("#offcanvas-menu").css("right","-240px")):($(".nav-toggle").addClass("toon"),$("#offcanvas-menu").css("right","0px"))})),$("#offcanvas-menu").css("height",$(window).height()),$("#offcanvas-menu").css("right","-240px"),$(window).resize((()=>{const e=$(window);$("#offcanvas-menu").css("height",e.height()),e.width()>769&&$(".nav-toggle").hasClass("toon")&&($(".nav-toggle").removeClass("toon"),$("#offcanvas-menu").css("right","-240px"))}))})(),$(document).click((e=>{const t=$("#offcanvas-menu,.js-kratos-nav-toggle");t.is(e.target)||0!==t.has(e.target).length||$(".nav-toggle").hasClass("toon")&&($(".nav-toggle").removeClass("toon"),$("#offcanvas-menu").css("right","-240px"))})),e(),$(document).on("click",".share",(()=>{$(".share-wrap").fadeToggle("slow")})),o()}),{once:!0}),window.onload=()=>{window.dispatchEvent(new Event("window:onload")),console.log("页面加载完毕!消耗了 %c"+Math.round(100*performance.now())/100+" ms","background:#282c34;color:#51aded;")}})(); //# sourceMappingURL=../maps/kratosr.min.js.map diff --git a/source/maps/kratosr.min.js.map b/source/maps/kratosr.min.js.map index 563c0dae..81c39579 100644 --- a/source/maps/kratosr.min.js.map +++ b/source/maps/kratosr.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["kratosr.js"],"names":["kr","window","requestIdleCallback","handler","startTime","Date","now","setTimeout","didTimeout","timeRemaining","Math","max","cancelIdleCallback","id","clearTimeout","xControl","$","document","on","event","this","next","slideToggle","parent","hasClass","removeClass","addClass","preventDefault","donateConfig","layer","open","type","area","title","donateBtn","resize","scrollbar","content","scanNotice","qr_alipay","qr_wechat","click","attr","fancyboxInit","fancybox","defaults","hash","each","i","find","is","alt","after","wrap","src","tocNavInit","animate","scrollTop","decodeURI","offset","top","copyrightString","docTitle","getTimeString","msec","exact","tString","sec","dnum","floor","hnum","mnum","snum","dstr","toString","hstr","mstr","sstr","length","pjaxReload","imageboxs","getElementsByClassName","prefix","siteRoot","picCDN","pic","CDN","randomAmount","parseInt","random_amount","picFileNameTemplate","filename","includes","usedPics","Array","generateNewPicID","picNo","remailFailCounts","random","len","picFileName","replace","setrandpic","copyrightNotice","querySelector","getAttribute","location","href","MathJax","Hub","Typeset","querySelectorAll","forEach","figure","count","getElementsByTagName","setAttribute","innerHTML","ClipboardJS","e","origInner","trigger","clearSelection","runningOnBrowser","isBot","navigator","test","userAgent","supportsIntersectionObserver","commsArea","loadwork","loadCommentsEventHandler","load_comm","observer","IntersectionObserver","entries","isIntersecting","disconnect","threshold","observe","commentsLazyLoad","expire_day","expireAlert","getElementById","dateTimeTag","updateDateTime","gap","innerText","classList","remove","expireNotify","tocDOMs","tocHeightMap","from","tocItem","linkItem","titleText","Error","titleHeight","offsetTop","push","h","el","console","log","message","add","sort","a","b","tocGetId","startPos","newPos","Number","isInteger","nowY","scrollY","tocActivate","oldId","newId","nCur","contains","parentNode","curTocId","toggleToc","newTocId","handleTocAnim","nowEvent","requestAnimationFrame","addEventListener","removeEventListener","once","readProgBar","setPercent","style","width","body","clientHeight","tocAnimInit","funcUsingConfig","oncopy","copiedContent","getSelection","clipboardData","setData","siteLeaveEvent","titleTime","OriginLogo","hidden","leaveTitle","leaveLogo","returnTitle","leaveEventInit","createTime","upTimeNode","setInterval","initTime","topNavScrollToggle","lastHeight","innerHeight","isTopNavHidden","topNavScrollToggleInit","cb","fetch","then","res","json","cfg","isScrolledDown","pageScrollDownClass","pageScrollDownInit","$clone","clone","filter","class","prepend","css","height","w","offcanvas","container","target","has","fadeToggle","onload","dispatchEvent","Event","round","performance"],"mappings":"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","file":"../js/kratosr.min.js","sourcesContent":["let kr = {};\n\n/**\n * 因为后台任务API还是相当新的,而你的代码可能需要在那些仍不支持此API的浏览器上运行。\n * 你可以把 setTimeout() 用作回调选项来做这样的事。\n * 这个并不是 polyfill ,因为它在功能上并不相同; \n * setTimeout() 并不会让你利用空闲时段,而是使你的代码在情况允许时执行你的代码,\n * 以使我们可以尽可能地避免造成用户体验性能表现延迟的后果。\n */\n// https://developer.mozilla.org/zh-CN/docs/Web/API/Background_Tasks_API \nwindow.requestIdleCallback = window.requestIdleCallback || function(handler) {\n let startTime = Date.now();\n return setTimeout(function() {\n handler({\n didTimeout: false,\n timeRemaining: function() {\n return Math.max(0, 50.0 - (Date.now() - startTime));\n }\n });\n }, 1);\n};\n\nwindow.cancelIdleCallback = window.cancelIdleCallback || function(id) {\n clearTimeout(id);\n};\n\n(()=>{\n const loadConfig = (cb) => {\n // 读取配置文件\n fetch((window.kr?.siteRoot || '/') + 'config/main.json')\n .then((res) => {\n return res.json();\n })\n .then((cfg) => {\n kr = cfg;\n })\n .then(()=>{\n cb();\n });\n };\n const pageScrollDownInit = ()=>{\n let isScrolledDown = false;\n const pageScrollDownClass = () => {\n window.requestAnimationFrame(() => {\n if (window.scrollY > 200){\n if (!isScrolledDown) {\n document.body.classList.add('scroll-down');\n isScrolledDown = true;\n }\n } else {\n if (isScrolledDown) {\n document.body.classList.remove('scroll-down');\n isScrolledDown = false;\n }\n }\n });\n };\n $('.gotop-box').on('click',function(event){\n // event.preventDefault();\n $('html, body').animate({\n scrollTop:$('html').offset().top\n },500);\n return false;\n });\n pageScrollDownClass();\n window.addEventListener('scroll', pageScrollDownClass);\n };\n const offcanvas = ()=>{\n let $clone = $('#kratos-menu-wrap').clone();\n $clone.attr({\n 'id':'offcanvas-menu'\n });\n $clone.filter('> ul').attr({\n 'class':'ul-me',\n 'id':''\n });\n $('#kratos-page').prepend($clone);\n $('.js-kratos-nav-toggle').on('click',()=>{\n if($('.nav-toggle').hasClass('toon')){\n $('.nav-toggle').removeClass('toon');\n $('#offcanvas-menu').css('right','-240px');\n }else{\n $('.nav-toggle').addClass('toon');\n $('#offcanvas-menu').css('right','0px');\n }\n });\n $('#offcanvas-menu').css('height',$(window).height());\n $('#offcanvas-menu').css('right','-240px');\n $(window).resize(()=>{\n const w = $(window);\n $('#offcanvas-menu').css('height',w.height());\n if(w.width()>769){\n if($('.nav-toggle').hasClass('toon')){\n $('.nav-toggle').removeClass('toon');\n $('#offcanvas-menu').css('right','-240px');\n }\n }\n });\n };\n const mobiClick = ()=>{\n $(document).click((e)=>{\n const container = $(\"#offcanvas-menu,.js-kratos-nav-toggle\");\n if (!container.is(e.target) && container.has(e.target).length === 0) {\n if ($('.nav-toggle').hasClass('toon')) {\n $('.nav-toggle').removeClass('toon');\n $('#offcanvas-menu').css('right','-240px');\n }\n }\n });\n };\n const xControl = ()=>{\n $(document).on(\"click\",\".xHeading\", function(event){\n $(this).next().slideToggle(300);\n if ($(this).parent('.xControl').hasClass('active')) {\n $(this).parent('.xControl').removeClass('active');\n } else {\n $(this).parent('.xControl').addClass('active');\n }\n event.preventDefault();\n });\n };\n\n const donateConfig = ()=>{\n $(document).on(\"click\",\".donate\",()=>{\n layer.open({\n type:1,\n area:['300px', '370px'],\n title:kr.donateBtn,\n resize:false,\n scrollbar:false,\n content:'
'+kr.scanNotice+'
'\n });\n $(\".choose-pay input[type='radio']\").click(function(){\n const id = $(this).attr(\"id\");\n if (id == 'alipay') {\n $(\".qr-pay #alipay_qr\").removeClass('d-none');\n $(\".qr-pay #wechat_qr\").addClass('d-none');\n }\n if (id == 'wechatpay') {\n $(\".qr-pay #alipay_qr\").addClass('d-none');\n $(\".qr-pay #wechat_qr\").removeClass('d-none');\n }\n });\n });\n };\n\n const shareMenu = ()=>{\n $(document).on(\"click\",\".share\",()=>{$(\".share-wrap\").fadeToggle(\"slow\");});\n };\n\n const setrandpic = ()=>{\n // 图片\n const imageboxs = document.getElementsByClassName(\"kratos-entry-thumb-new-img\");\n let prefix = window.kr?.siteRoot || '/';\n if (kr.picCDN || kr.pic?.CDN) {\n switch (kr.picCDN) {\n case 'unpkg':\n prefix = \"//unpkg.com/kratos-rebirth@latest/source/\";\n break;\n case 'jsdelivr':\n default:\n prefix = \"//cdn.jsdelivr.net/npm/kratos-rebirth@latest/source/\";\n break;\n }\n }\n const randomAmount = parseInt(kr.pic?.random_amount) || 20;\n let picFileNameTemplate = \"images/thumb/thumb_{no}.webp\";\n if (kr.pic && kr.pic.filename) {\n if (kr.pic.filename.includes('//')) {\n // 是绝对路径,那么忽略 CDN 选项\n picFileNameTemplate = kr.pic.filename;\n } else {\n // 是相对主题根目录的路径\n picFileNameTemplate = prefix + kr.pic.filename;\n }\n }\n const usedPics = new Array(randomAmount + 1);\n\n const generateNewPicID = () => {\n let remailFailCounts = 5; // set max fail counts\n let picNo;\n while (remailFailCounts > 0) {\n // rand one\n picNo = Math.floor(Math.random() * randomAmount + 1);\n if (!usedPics[picNo]) {\n // valid\n break;\n } else {\n // fails\n remailFailCounts--;\n }\n }\n\n if (remailFailCounts <= 0) {\n // rand failed, find one manually\n picNo = -1;\n for (let i = 1; i <= randomAmount; i++) {\n if (!usedPics[i]) {\n // use first\n picNo = i;\n break;\n }\n }\n if (picNo === -1) {\n // All used\n // clear all\n for (let i = 1; i <= randomAmount; i++) {\n usedPics[i] = false;\n }\n // rand one\n picNo = Math.floor(Math.random() * randomAmount + 1);\n }\n }\n\n // mark as used\n usedPics[picNo] = true;\n \n // return\n return picNo;\n }\n\n for (let i = 0, len = imageboxs.length; i < len; i++) {\n if (!($(imageboxs[i]).attr(\"src\"))) {\n const picNo = generateNewPicID();\n const picFileName = picFileNameTemplate.replace(\"{no}\", picNo.toString());\n $(imageboxs[i]).attr(\"src\", picFileName);\n } \n }\n };\n\n const initMathjax = ()=>{\n if (typeof MathJax !== 'undefined') {\n // 渲染Mathjax的初始化函数(用于处理ajax后的情况)\n // 使用了同步处理的方式,可惜第一次加载页面时会双倍触发\n // (MathJax载入时会自动初始化一次)\n MathJax.Hub.Typeset();\n }\n };\n\n const fancyboxInit = ()=>{\n if (typeof $.fancybox !== 'undefined'){\n $.fancybox.defaults.hash = false;\n $('.kratos-hentry').each(function(i){\n $(this).find('img').each(function(){\n if ($(this).parent().hasClass('fancybox') || $(this).parent().hasClass('qrcode') || $(this).parent().is('a')) return;\n const alt = this.alt;\n if (alt) $(this).after('' + alt + '');\n $(this).wrap('')\n });\n });\n $('.fancybox').fancybox();\n }\n };\n\n const tocNavInit = ()=>{\n $(document).on(\"click\", 'a[class=toc-link]', function(){\n $('html, body').animate({\n scrollTop:$(decodeURI($(this).attr(\"href\"))).offset().top - 60\n },500);\n return false;\n });\n };\n\n let copyrightString;\n const setCopyright = ()=>{\n copyrightString = `\n\n-------------------------\n${kr.copyrightNotice}\n作者:${document.querySelector(\"meta[name='author']\").getAttribute('content')}\n来源:${document.title}\n链接:${window.location.href}\n`;\n }\n\n const copyEventInit = ()=>{\n if (kr.copyrightNotice) {\n document.body.oncopy = (e)=>{\n const copiedContent = window.getSelection().toString();\n if (copiedContent.length > 150) {\n e.preventDefault();\n if (e.clipboardData) {\n e.clipboardData.setData(\"text/plain\", copiedContent + copyrightString);\n }\n }\n };\n }\n };\n\n let docTitle = '';\n const saveTitle = () => {\n docTitle = document.title;\n };\n\n const leaveEventInit = () => {\n if (kr.siteLeaveEvent) {\n let titleTime;\n const OriginLogo = $('[rel=\"icon\"]').attr(\"href\");\n document.addEventListener('visibilitychange', ()=>{\n if (document.hidden) {\n document.title = kr.leaveTitle;\n if (kr.leaveLogo) {\n $('[rel=\"icon\"]').attr(\"href\", kr.leaveLogo);\n }\n clearTimeout(titleTime);\n } else {\n document.title = kr.returnTitle + \" \" + docTitle;\n if (kr.leaveLogo) {\n $('[rel=\"icon\"]').attr(\"href\", OriginLogo);\n }\n titleTime = setTimeout(()=>{\n document.title = docTitle;\n titleTime = 0;\n }, 2000);\n }\n });\n }\n };\n\n const getTimeString = (msec, exact = true) => {\n let tString;\n const sec = msec / 1000;\n const dnum = Math.floor(sec / 60 / 60 / 24);\n const hnum = Math.floor(sec / 60 / 60 - (24 * dnum));\n const mnum = Math.floor(sec / 60 - (24 * 60 * dnum) - (60 * hnum));\n const snum = Math.floor(sec - (24 * 60 * 60 * dnum) - (60 * 60 * hnum) - (60 * mnum));\n let dstr = dnum.toString();\n let hstr = hnum.toString();\n let mstr = mnum.toString();\n let sstr = snum.toString();\n if (exact) {\n if (dstr && dstr.length === 1) {\n dstr = '0' + dstr;\n }\n if (hstr && hstr.length === 1) {\n hstr = '0' + hstr;\n }\n if (mstr && mstr.length === 1) {\n mstr = '0' + mstr;\n }\n if (sstr && sstr.length === 1) {\n sstr = '0' + sstr;\n }\n tString = dstr + \"天\" + hstr + \"小时\" + mstr + \"分\" + sstr + \"秒\";\n } else {\n // 大概值\n if (dnum < 540) {\n // 一年半内\n if (dnum < 60) {\n // 两个月内\n tString = dstr + \"天\";\n } else {\n // 年内月外\n tString = Math.floor(dnum / 30).toString() + '个月';\n }\n } else {\n // 年外\n tString = Math.floor(dnum / 365).toString() + '年';\n }\n }\n return tString;\n };\n\n const initTime = () => {\n const createTime = new Date(kr.createTime);\n const upTimeNode = document.getElementById(\"span_dt\");\n setInterval(() => {\n upTimeNode.innerText = getTimeString(Date.now() - createTime);\n }, 1000);\n };\n\n const codeCopyInit = () => {\n // 使用了clipboard.js,所以非常的简洁,只需在前端生成对应的按钮和指定代码框的ID即可\n const codeFigures = document.querySelectorAll('figure.highlight');\n codeFigures.forEach((figure, count) => {\n figure\n .getElementsByTagName('table')[0]\n .getElementsByTagName('tbody')[0]\n .getElementsByTagName('tr')[0]\n .getElementsByClassName('code')[0]\n .setAttribute('id', `code-${count}`);\n\n figure.innerHTML += \n ``;\n });\n\n const clipboard = new ClipboardJS('button.copy');\n\n clipboard.on('success', (e) => {\n const origInner = e.trigger.innerHTML;\n e.trigger.innerHTML = ` 成功~`;\n setTimeout(() => {\n e.trigger.innerHTML = origInner;\n }, 3000);\n\n e.clearSelection();\n });\n };\n\n const commentsLazyLoad = () => {\n // 检查当前是否在浏览器中运行\n const runningOnBrowser = typeof window !== \"undefined\";\n // 通过检查 scroll 事件 API 和 User-Agent 来匹配爬虫\n const isBot = runningOnBrowser && !(\"onscroll\" in window) || typeof navigator !== \"undefined\" && /(gle|ing|ro|msn)bot|crawl|spider|yand|duckgo/i.test(navigator.userAgent);\n // 检查当前浏览器是否支持 IntersectionObserver API\n const supportsIntersectionObserver = runningOnBrowser && \"IntersectionObserver\" in window;\n // 需要懒加载的评论区块\n const commsArea = document.querySelector('.post-comments.lazy-load');\n // 加载评论的函数\n const loadwork = () => {\n if (window.loadCommentsEventHandler) {\n // 取消上一个加载事件\n window.cancelIdleCallback(window.loadCommentsEventHandler);\n }\n // 加载新评论模块\n window.loadCommentsEventHandler = window.requestIdleCallback(load_comm);\n // 防止二次加载,清理掉函数\n load_comm = null;\n };\n if (runningOnBrowser && !isBot && supportsIntersectionObserver && commsArea !== null) {\n const observer = new IntersectionObserver((entries) => {\n if (entries[0].isIntersecting) {\n loadwork();\n observer.disconnect();\n }\n }, { threshold: 0 });\n observer.observe(commsArea);\n } else if (typeof load_comm !== 'undefined' && load_comm !== null) {\n // 直接加载\n loadwork();\n }\n };\n\n const expireNotify = () => {\n if (kr.expire_day) {\n const expireAlert = document.getElementById('expire-alert');\n if (expireAlert) {\n const dateTimeTag = expireAlert.querySelector('time');\n const updateDateTime = new Date(parseInt(dateTimeTag.getAttribute('datetime')));\n const nowDateTime = Date.now();\n const gap = nowDateTime - updateDateTime;\n if (gap > kr.expire_day * 24 * 3600 * 1000) {\n // 内容可能过期,需要提示\n dateTimeTag.innerText = getTimeString(gap, false);\n expireAlert.classList.remove('hidden');\n }\n }\n \n }\n };\n\n const tocAnimInit = () => {\n if (document.getElementById('krw-toc') !== null) {\n // 有toc的页面\n // 获取侧边栏所有的toc项\n const tocDOMs = document.getElementById(\"krw-toc\").getElementsByClassName('toc-item');\n // 元素高度映射记录\n const tocHeightMap = [];\n try {\n Array.from(tocDOMs).forEach((tocItem) => {\n // 获取链接子元素\n const linkItem = tocItem.getElementsByClassName('toc-link')[0];\n // 获取链接地址\n const titleText = decodeURI(linkItem.getAttribute('href'));\n // 检测链接是否有效:无效则进行回落处理\n if (!titleText.includes('#')) {\n throw new Error('TOC 小标题链接无效,进行回落处理');\n }\n // 获取目标标题高度\n const titleHeight = document.getElementById(titleText.replace('#', '')).offsetTop;\n // 压入记录\n tocHeightMap.push({\n h: titleHeight,\n el: tocItem\n });\n });\n } catch (e) {\n console.log('错误:', e.message);\n Array.from(tocDOMs).forEach((tocItem) => {\n tocItem.classList.add('show');\n });\n return;\n }\n\n // 排序\n tocHeightMap.sort((a, b) => {\n return a.h - b.h;\n });\n\n console.log(tocHeightMap);\n\n // 标题定位函数\n const tocGetId = (startPos = -1) => {\n let newPos;\n if (!Number.isInteger(startPos) || startPos < 0 || startPos > tocHeightMap.length - 1) {\n newPos = 0;\n } else {\n newPos = startPos;\n }\n const nowY = window.scrollY;\n console.log(nowY);\n if (tocHeightMap[0].h > nowY) {\n // 还没到第一级标题\n newPos = -1;\n } else if (tocHeightMap[tocHeightMap.length - 1].h <= nowY) {\n // 最后一级标题\n newPos = tocHeightMap.length - 1;\n } else {\n while (!(tocHeightMap[newPos].h <= nowY && tocHeightMap[newPos+1].h > nowY)) {\n if (tocHeightMap[newPos].h > nowY && newPos > 0) {\n newPos--;\n } else if (tocHeightMap[newPos+1].h <= nowY && newPos < tocHeightMap.length - 1) {\n newPos++;\n }\n }\n }\n return newPos;\n }\n\n // 标题激活状态修改函数\n const tocActivate = (oldId, newId) => {\n if (oldId === newId) {\n // Do nothing...\n return;\n }\n if (oldId !== -1) {\n // 清除旧标题激活状态\n tocHeightMap[oldId].el.classList.remove('active');\n tocHeightMap[oldId].el.classList.remove('show');\n // 清除旧元素层级展示状态\n let nCur = tocHeightMap[oldId].el\n while (!nCur.classList.contains('toc')) {\n if (nCur.classList.contains('toc-item')) {\n nCur.classList.remove('show');\n }\n nCur = nCur.parentNode;\n }\n }\n if (newId !== -1) {\n // 构建新标题激活状态\n tocHeightMap[newId].el.classList.add('active');\n tocHeightMap[newId].el.classList.add('show');\n // 建立新元素层级展示状态\n let nCur = tocHeightMap[newId].el\n while (!nCur.classList.contains('toc')) {\n if (nCur.classList.contains('toc-item')) {\n nCur.classList.add('show');\n }\n nCur = nCur.parentNode;\n }\n }\n };\n\n // 初始化为不存在的标题\n let curTocId = -1;\n // 切换 toc 状态的处理函数\n const toggleToc = () => {\n const newTocId = tocGetId(curTocId);\n tocActivate(curTocId, newTocId);\n curTocId = newTocId;\n };\n\n // 处理事件的函数\n const handleTocAnim = () => {\n // 现在的检测事件ID\n let nowEvent = 0;\n window.requestAnimationFrame(() => {\n if (nowEvent) {\n // 为避免高频触发,使用检测事件来控制频率\n clearTimeout(nowEvent);\n }\n nowEvent = setTimeout((nowY) => {\n if (nowY === window.scrollY) {\n // 0.1s位置没有变化,视为页面停止\n toggleToc();\n }\n }, 100, window.scrollY);\n });\n }\n\n window.addEventListener('scroll', handleTocAnim);\n\n // 初始化完成运行一次\n toggleToc();\n\n // pjax前销毁\n window.addEventListener('pjax:before', () => {\n tocHeightMap.length = 0; // 奇妙的数组清空方式\n window.removeEventListener('scroll', handleTocAnim);\n }, { once: true });\n\n // 阅读进度\n const readProgBar = document.getElementsByClassName('toc-progress-bar')[0];\n const setPercent = () => {\n readProgBar.style.width = (window.scrollY / document.body.clientHeight * 100).toString() + '%';\n }\n window.addEventListener('scroll', () => {\n window.requestAnimationFrame(setPercent);\n });\n setPercent(); // 初始运行一次\n\n /**\n * 现在的问题:\n * 首次打开页面时候由于会有 window.onload 事件的等待存在,\n * 所以会等待所有图片加载完成再调用核心的函数,因而基本保证\n * 各标题间的位置不会乱动,但代价就是要等页面加载完成才能加\n * 载toc样式,问题不是太大;\n * pjax后则会由于没有 window.onload 事件的限制,因而容易\n * 出现图片还没加载但是标题已经计算完成的情况,进而导致标题\n * 定位乱飘,失去引导意义;\n * 有一种解决方案是每次触发定位事件时都重新计算各元素高度,\n * 但是怀疑那样会非常耗费时间,降低用户使用体验;\n * 或者就是定时检测变化,但总觉得也非常不优雅,比较难受;\n * 之后会考虑重载 hexo 的辅助函数,重写 asset_img 标签\n * 用来内置 fancybox 的调用、计算图片大小进行格式转换与预\n * 设置大小,但不知道 hexo 是否支持这样的操作,是否会报错,\n * 还是说需要提交一个 PR 才能正确运行(猫咪摊手.jpg\n */\n }\n };\n\n const topNavScrollToggleInit = () => {\n // 判断设置参数\n if (!kr.topNavScrollToggle) {\n return; // 没有启用\n }\n // 记录上一次滚动高度,用于判断滚动方向\n let lastHeight = window.innerHeight;\n // 记录顶部栏隐藏状态\n let isTopNavHidden = false;\n\n // 处理事件的函数\n const handleTopNavScrollToggle = () => {\n window.requestAnimationFrame(() => {\n if (lastHeight < window.scrollY) {\n // 向下滚动\n if (!isTopNavHidden) {\n document.body.classList.add('nav-up');\n isTopNavHidden = true;\n }\n } else if (lastHeight > window.scrollY) {\n // 向上滚动\n if (isTopNavHidden) {\n document.body.classList.remove('nav-up');\n isTopNavHidden = false;\n }\n }\n // 相等则不做处理\n lastHeight = window.scrollY;\n });\n };\n\n // 仅处理鼠标滚动\n window.addEventListener('wheel', handleTopNavScrollToggle);\n\n };\n\n const pjaxReload = () => {\n setrandpic();\n fancyboxInit();\n setCopyright();\n saveTitle();\n initMathjax();\n codeCopyInit();\n commentsLazyLoad();\n expireNotify();\n tocAnimInit();\n };\n\n const funcUsingConfig = () => {\n // 因为涉及到配置文件,所以这些是只有在完成配置加载后才能调用的函数\n pjaxReload();\n\n copyEventInit();\n leaveEventInit();\n initTime();\n donateConfig();\n topNavScrollToggleInit();\n };\n\n window.addEventListener('pjax:complete', pjaxReload);\n\n window.addEventListener('window:onload', () => {\n loadConfig(funcUsingConfig);\n pageScrollDownInit();\n offcanvas();\n mobiClick();\n xControl();\n shareMenu();\n tocNavInit();\n }, { once: true });\n\n window.onload = () => {\n window.dispatchEvent(new Event('window:onload'));\n console.log('页面加载完毕!消耗了 %c'+Math.round(performance.now()*100)/100+' ms','background:#282c34;color:#51aded;');\n };\n\n})();\n"]} \ No newline at end of file +{"version":3,"sources":["kratosr.js"],"names":["kr","window","requestIdleCallback","handler","startTime","Date","now","setTimeout","didTimeout","timeRemaining","Math","max","cancelIdleCallback","id","clearTimeout","xControl","$","document","on","event","this","next","slideToggle","parent","hasClass","removeClass","addClass","preventDefault","donateConfig","layer","open","type","area","title","donateBtn","resize","scrollbar","content","scanNotice","qr_alipay","qr_wechat","click","attr","fancyboxInit","fancybox","defaults","hash","each","i","find","is","alt","after","wrap","src","tocNavInit","animate","scrollTop","decodeURI","offset","top","copyrightString","docTitle","getTimeString","msec","exact","tString","sec","dnum","floor","hnum","mnum","snum","dstr","toString","hstr","mstr","sstr","length","pjaxReload","imageboxs","getElementsByClassName","prefix","siteRoot","picCDN","pic","CDN","randomAmount","parseInt","random_amount","picFileNameTemplate","filename","includes","usedPics","Array","generateNewPicID","picNo","remailFailCounts","random","len","picFileName","replace","setrandpic","copyrightNotice","querySelector","getAttribute","location","href","MathJax","Hub","Typeset","querySelectorAll","forEach","figure","count","getElementsByTagName","setAttribute","innerHTML","ClipboardJS","e","origInner","trigger","clearSelection","runningOnBrowser","isBot","navigator","test","userAgent","supportsIntersectionObserver","commsArea","loadwork","loadCommentsEventHandler","load_comm","observer","IntersectionObserver","entries","isIntersecting","disconnect","threshold","observe","commentsLazyLoad","expire_day","expireAlert","getElementById","dateTimeTag","updateDateTime","gap","innerText","classList","remove","expireNotify","tocDOMs","tocHeightMap","from","tocItem","linkItem","titleText","Error","titleHeight","offsetTop","push","h","el","console","log","message","add","sort","a","b","tocGetId","startPos","newPos","Number","isInteger","nowY","scrollY","tocActivate","oldId","newId","nCur","contains","parentNode","curTocId","toggleToc","newTocId","handleTocAnim","nowEvent","requestAnimationFrame","addEventListener","removeEventListener","once","readProgBar","setPercent","style","width","body","clientHeight","tocAnimInit","funcUsingConfig","oncopy","copiedContent","getSelection","clipboardData","setData","siteLeaveEvent","titleTime","OriginLogo","hidden","leaveTitle","leaveLogo","returnTitle","leaveEventInit","createTime","upTimeNode","setInterval","initTime","topNavScrollToggle","lastHeight","innerHeight","isTopNavHidden","topNavScrollToggleInit","cb","fetch","then","res","json","cfg","isScrolledDown","pageScrollDownClass","pageScrollDownInit","$clone","clone","filter","class","prepend","css","height","w","offcanvas","container","target","has","fadeToggle","onload","dispatchEvent","Event","round","performance"],"mappings":"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","file":"../js/kratosr.min.js","sourcesContent":["let kr = {};\n\n/**\n * 因为后台任务API还是相当新的,而你的代码可能需要在那些仍不支持此API的浏览器上运行。\n * 你可以把 setTimeout() 用作回调选项来做这样的事。\n * 这个并不是 polyfill ,因为它在功能上并不相同; \n * setTimeout() 并不会让你利用空闲时段,而是使你的代码在情况允许时执行你的代码,\n * 以使我们可以尽可能地避免造成用户体验性能表现延迟的后果。\n */\n// https://developer.mozilla.org/zh-CN/docs/Web/API/Background_Tasks_API \nwindow.requestIdleCallback = window.requestIdleCallback || function(handler) {\n let startTime = Date.now();\n return setTimeout(function() {\n handler({\n didTimeout: false,\n timeRemaining: function() {\n return Math.max(0, 50.0 - (Date.now() - startTime));\n }\n });\n }, 1);\n};\n\nwindow.cancelIdleCallback = window.cancelIdleCallback || function(id) {\n clearTimeout(id);\n};\n\n(()=>{\n const loadConfig = (cb) => {\n // 读取配置文件\n fetch((window.kr?.siteRoot || '/') + 'config/main.json')\n .then((res) => {\n return res.json();\n })\n .then((cfg) => {\n kr = cfg;\n })\n .then(()=>{\n cb();\n });\n };\n const pageScrollDownInit = ()=>{\n let isScrolledDown = false;\n const pageScrollDownClass = () => {\n window.requestAnimationFrame(() => {\n if (window.scrollY > 200){\n if (!isScrolledDown) {\n document.body.classList.add('scroll-down');\n isScrolledDown = true;\n }\n } else {\n if (isScrolledDown) {\n document.body.classList.remove('scroll-down');\n isScrolledDown = false;\n }\n }\n });\n };\n $('.gotop-box').on('click',function(event){\n // event.preventDefault();\n $('html, body').animate({\n scrollTop:$('html').offset().top\n },500);\n return false;\n });\n pageScrollDownClass();\n window.addEventListener('scroll', pageScrollDownClass);\n };\n const offcanvas = ()=>{\n let $clone = $('#kratos-menu-wrap').clone();\n $clone.attr({\n 'id':'offcanvas-menu'\n });\n $clone.filter('> ul').attr({\n 'class':'ul-me',\n 'id':''\n });\n $('#kratos-page').prepend($clone);\n $('.js-kratos-nav-toggle').on('click',()=>{\n if($('.nav-toggle').hasClass('toon')){\n $('.nav-toggle').removeClass('toon');\n $('#offcanvas-menu').css('right','-240px');\n }else{\n $('.nav-toggle').addClass('toon');\n $('#offcanvas-menu').css('right','0px');\n }\n });\n $('#offcanvas-menu').css('height',$(window).height());\n $('#offcanvas-menu').css('right','-240px');\n $(window).resize(()=>{\n const w = $(window);\n $('#offcanvas-menu').css('height',w.height());\n if(w.width()>769){\n if($('.nav-toggle').hasClass('toon')){\n $('.nav-toggle').removeClass('toon');\n $('#offcanvas-menu').css('right','-240px');\n }\n }\n });\n };\n const mobiClick = ()=>{\n $(document).click((e)=>{\n const container = $(\"#offcanvas-menu,.js-kratos-nav-toggle\");\n if (!container.is(e.target) && container.has(e.target).length === 0) {\n if ($('.nav-toggle').hasClass('toon')) {\n $('.nav-toggle').removeClass('toon');\n $('#offcanvas-menu').css('right','-240px');\n }\n }\n });\n };\n const xControl = ()=>{\n $(document).on(\"click\",\".xHeading\", function(event){\n $(this).next().slideToggle(300);\n if ($(this).parent('.xControl').hasClass('active')) {\n $(this).parent('.xControl').removeClass('active');\n } else {\n $(this).parent('.xControl').addClass('active');\n }\n event.preventDefault();\n });\n };\n\n const donateConfig = ()=>{\n $(document).on(\"click\",\".donate\",()=>{\n layer.open({\n type:1,\n area:['300px', '370px'],\n title:kr.donateBtn,\n resize:false,\n scrollbar:false,\n content:'
'+kr.scanNotice+'
'\n });\n $(\".choose-pay input[type='radio']\").click(function(){\n const id = $(this).attr(\"id\");\n if (id == 'alipay') {\n $(\".qr-pay #alipay_qr\").removeClass('d-none');\n $(\".qr-pay #wechat_qr\").addClass('d-none');\n }\n if (id == 'wechatpay') {\n $(\".qr-pay #alipay_qr\").addClass('d-none');\n $(\".qr-pay #wechat_qr\").removeClass('d-none');\n }\n });\n });\n };\n\n const shareMenu = ()=>{\n $(document).on(\"click\",\".share\",()=>{$(\".share-wrap\").fadeToggle(\"slow\");});\n };\n\n const setrandpic = ()=>{\n // 图片\n const imageboxs = document.getElementsByClassName(\"kratos-entry-thumb-new-img\");\n let prefix = window.kr?.siteRoot || '/';\n if (kr.picCDN || kr.pic?.CDN) {\n switch (kr.picCDN) {\n case 'unpkg':\n prefix = \"//unpkg.com/kratos-rebirth@latest/source/\";\n break;\n case 'jsdelivr':\n default:\n prefix = \"//cdn.jsdelivr.net/npm/kratos-rebirth@latest/source/\";\n break;\n }\n }\n const randomAmount = parseInt(kr.pic?.random_amount) || 20;\n let picFileNameTemplate = \"images/thumb/thumb_{no}.webp\";\n if (kr.pic && kr.pic.filename) {\n if (kr.pic.filename.includes('//')) {\n // 是绝对路径,那么忽略 CDN 选项\n picFileNameTemplate = kr.pic.filename;\n } else {\n // 是相对主题根目录的路径\n picFileNameTemplate = prefix + kr.pic.filename;\n }\n }\n const usedPics = new Array(randomAmount + 1);\n\n const generateNewPicID = () => {\n let remailFailCounts = 5; // set max fail counts\n let picNo;\n while (remailFailCounts > 0) {\n // rand one\n picNo = Math.floor(Math.random() * randomAmount + 1);\n if (!usedPics[picNo]) {\n // valid\n break;\n } else {\n // fails\n remailFailCounts--;\n }\n }\n\n if (remailFailCounts <= 0) {\n // rand failed, find one manually\n picNo = -1;\n for (let i = 1; i <= randomAmount; i++) {\n if (!usedPics[i]) {\n // use first\n picNo = i;\n break;\n }\n }\n if (picNo === -1) {\n // All used\n // clear all\n for (let i = 1; i <= randomAmount; i++) {\n usedPics[i] = false;\n }\n // rand one\n picNo = Math.floor(Math.random() * randomAmount + 1);\n }\n }\n\n // mark as used\n usedPics[picNo] = true;\n \n // return\n return picNo;\n }\n\n for (let i = 0, len = imageboxs.length; i < len; i++) {\n if (!($(imageboxs[i]).attr(\"src\"))) {\n const picNo = generateNewPicID();\n const picFileName = picFileNameTemplate.replace(\"{no}\", picNo.toString());\n $(imageboxs[i]).attr(\"src\", picFileName);\n } \n }\n };\n\n const initMathjax = ()=>{\n if (typeof MathJax !== 'undefined') {\n // 渲染Mathjax的初始化函数(用于处理ajax后的情况)\n // 使用了同步处理的方式,可惜第一次加载页面时会双倍触发\n // (MathJax载入时会自动初始化一次)\n MathJax.Hub.Typeset();\n }\n };\n\n const fancyboxInit = ()=>{\n if (typeof $.fancybox !== 'undefined'){\n $.fancybox.defaults.hash = false;\n $('.kratos-hentry').each(function(i){\n $(this).find('img').each(function(){\n if ($(this).parent().hasClass('fancybox') || $(this).parent().hasClass('qrcode') || $(this).parent().is('a')) return;\n const alt = this.alt;\n if (alt) $(this).after('' + alt + '');\n $(this).wrap('')\n });\n });\n $('.fancybox').fancybox();\n }\n };\n\n const tocNavInit = ()=>{\n $(document).on(\"click\", 'a[class=toc-link]', function(){\n $('html, body').animate({\n scrollTop:$(decodeURI($(this).attr(\"href\"))).offset().top - 60\n },500);\n return false;\n });\n };\n\n let copyrightString;\n const setCopyright = ()=>{\n copyrightString = `\n\n-------------------------\n${kr.copyrightNotice}\n作者:${document.querySelector(\"meta[name='author']\").getAttribute('content')}\n来源:${document.title}\n链接:${window.location.href}\n`;\n }\n\n const copyEventInit = ()=>{\n if (kr.copyrightNotice) {\n document.body.oncopy = (e)=>{\n const copiedContent = window.getSelection().toString();\n if (copiedContent.length > 150) {\n e.preventDefault();\n if (e.clipboardData) {\n e.clipboardData.setData(\"text/plain\", copiedContent + copyrightString);\n }\n }\n };\n }\n };\n\n let docTitle = '';\n const saveTitle = () => {\n docTitle = document.title;\n };\n\n const leaveEventInit = () => {\n if (kr.siteLeaveEvent) {\n let titleTime;\n const OriginLogo = $('[rel=\"icon\"]').attr(\"href\");\n document.addEventListener('visibilitychange', ()=>{\n if (document.hidden) {\n document.title = kr.leaveTitle;\n if (kr.leaveLogo) {\n $('[rel=\"icon\"]').attr(\"href\", kr.leaveLogo);\n }\n clearTimeout(titleTime);\n } else {\n document.title = kr.returnTitle + \" \" + docTitle;\n if (kr.leaveLogo) {\n $('[rel=\"icon\"]').attr(\"href\", OriginLogo);\n }\n titleTime = setTimeout(()=>{\n document.title = docTitle;\n titleTime = 0;\n }, 2000);\n }\n });\n }\n };\n\n const getTimeString = (msec, exact = true) => {\n let tString;\n const sec = msec / 1000;\n const dnum = Math.floor(sec / 60 / 60 / 24);\n const hnum = Math.floor(sec / 60 / 60 - (24 * dnum));\n const mnum = Math.floor(sec / 60 - (24 * 60 * dnum) - (60 * hnum));\n const snum = Math.floor(sec - (24 * 60 * 60 * dnum) - (60 * 60 * hnum) - (60 * mnum));\n let dstr = dnum.toString();\n let hstr = hnum.toString();\n let mstr = mnum.toString();\n let sstr = snum.toString();\n if (exact) {\n if (dstr && dstr.length === 1) {\n dstr = '0' + dstr;\n }\n if (hstr && hstr.length === 1) {\n hstr = '0' + hstr;\n }\n if (mstr && mstr.length === 1) {\n mstr = '0' + mstr;\n }\n if (sstr && sstr.length === 1) {\n sstr = '0' + sstr;\n }\n tString = dstr + \"天\" + hstr + \"小时\" + mstr + \"分\" + sstr + \"秒\";\n } else {\n // 大概值\n if (dnum < 540) {\n // 一年半内\n if (dnum < 60) {\n // 两个月内\n tString = dstr + \"天\";\n } else {\n // 年内月外\n tString = Math.floor(dnum / 30).toString() + '个月';\n }\n } else {\n // 年外\n tString = Math.floor(dnum / 365).toString() + '年';\n }\n }\n return tString;\n };\n\n const initTime = () => {\n const createTime = new Date(kr.createTime);\n const upTimeNode = document.getElementById(\"span_dt\");\n setInterval(() => {\n upTimeNode.innerText = getTimeString(Date.now() - createTime);\n }, 1000);\n };\n\n const codeCopyInit = () => {\n // 使用了clipboard.js,所以非常的简洁,只需在前端生成对应的按钮和指定代码框的ID即可\n const codeFigures = document.querySelectorAll('figure.highlight');\n codeFigures.forEach((figure, count) => {\n figure\n .getElementsByTagName('table')[0]\n .getElementsByTagName('tbody')[0]\n .getElementsByTagName('tr')[0]\n .getElementsByClassName('code')[0]\n .setAttribute('id', `code-${count}`);\n\n figure.innerHTML += \n ``;\n });\n\n const clipboard = new ClipboardJS('button.copy');\n\n clipboard.on('success', (e) => {\n const origInner = e.trigger.innerHTML;\n e.trigger.innerHTML = ` 成功~`;\n setTimeout(() => {\n e.trigger.innerHTML = origInner;\n }, 3000);\n\n e.clearSelection();\n });\n };\n\n const commentsLazyLoad = () => {\n // 检查当前是否在浏览器中运行\n const runningOnBrowser = typeof window !== \"undefined\";\n // 通过检查 scroll 事件 API 和 User-Agent 来匹配爬虫\n const isBot = runningOnBrowser && !(\"onscroll\" in window) || typeof navigator !== \"undefined\" && /(gle|ing|ro|msn)bot|crawl|spider|yand|duckgo/i.test(navigator.userAgent);\n // 检查当前浏览器是否支持 IntersectionObserver API\n const supportsIntersectionObserver = runningOnBrowser && \"IntersectionObserver\" in window;\n // 需要懒加载的评论区块\n const commsArea = document.querySelector('.post-comments.lazy-load');\n // 加载评论的函数\n const loadwork = () => {\n if (window.loadCommentsEventHandler) {\n // 取消上一个加载事件\n window.cancelIdleCallback(window.loadCommentsEventHandler);\n }\n // 加载新评论模块\n window.loadCommentsEventHandler = window.requestIdleCallback(load_comm);\n // 防止二次加载,清理掉函数\n load_comm = null;\n };\n if (runningOnBrowser && !isBot && supportsIntersectionObserver && commsArea !== null) {\n const observer = new IntersectionObserver((entries) => {\n if (entries[0].isIntersecting) {\n loadwork();\n observer.disconnect();\n }\n }, { threshold: 0 });\n observer.observe(commsArea);\n } else if (typeof load_comm !== 'undefined' && load_comm !== null) {\n // 直接加载\n loadwork();\n }\n };\n\n const expireNotify = () => {\n if (kr.expire_day) {\n const expireAlert = document.getElementById('expire-alert');\n if (expireAlert) {\n const dateTimeTag = expireAlert.querySelector('time');\n const updateDateTime = new Date(parseInt(dateTimeTag.getAttribute('datetime')));\n const nowDateTime = Date.now();\n const gap = nowDateTime - updateDateTime;\n if (gap > kr.expire_day * 24 * 3600 * 1000) {\n // 内容可能过期,需要提示\n dateTimeTag.innerText = getTimeString(gap, false);\n expireAlert.classList.remove('hidden');\n }\n }\n \n }\n };\n\n const tocAnimInit = () => {\n if (document.getElementById('krw-toc') !== null) {\n // 有toc的页面\n // 获取侧边栏所有的toc项\n const tocDOMs = document.getElementById(\"krw-toc\").getElementsByClassName('toc-item');\n // 元素高度映射记录\n const tocHeightMap = [];\n try {\n Array.from(tocDOMs).forEach((tocItem) => {\n // 获取链接子元素\n const linkItem = tocItem.getElementsByClassName('toc-link')[0];\n // 获取链接地址\n const titleText = decodeURI(linkItem.getAttribute('href'));\n // 检测链接是否有效:无效则进行回落处理\n if (!titleText.includes('#')) {\n throw new Error('TOC 小标题链接无效,进行回落处理');\n }\n // 获取目标标题高度\n const titleHeight = document.getElementById(titleText.replace('#', '')).offsetTop;\n // 压入记录\n tocHeightMap.push({\n h: titleHeight,\n el: tocItem\n });\n });\n } catch (e) {\n console.log('错误:', e.message);\n Array.from(tocDOMs).forEach((tocItem) => {\n tocItem.classList.add('show');\n });\n return;\n }\n\n // 排序\n tocHeightMap.sort((a, b) => {\n return a.h - b.h;\n });\n\n // 标题定位函数\n const tocGetId = (startPos = -1) => {\n let newPos;\n if (!Number.isInteger(startPos) || startPos < 0 || startPos > tocHeightMap.length - 1) {\n newPos = 0;\n } else {\n newPos = startPos;\n }\n const nowY = window.scrollY;\n if (tocHeightMap[0].h > nowY) {\n // 还没到第一级标题\n newPos = -1;\n } else if (tocHeightMap[tocHeightMap.length - 1].h <= nowY) {\n // 最后一级标题\n newPos = tocHeightMap.length - 1;\n } else {\n while (!(tocHeightMap[newPos].h <= nowY && tocHeightMap[newPos+1].h > nowY)) {\n if (tocHeightMap[newPos].h > nowY && newPos > 0) {\n newPos--;\n } else if (tocHeightMap[newPos+1].h <= nowY && newPos < tocHeightMap.length - 1) {\n newPos++;\n }\n }\n }\n return newPos;\n }\n\n // 标题激活状态修改函数\n const tocActivate = (oldId, newId) => {\n if (oldId === newId) {\n // Do nothing...\n return;\n }\n if (oldId !== -1) {\n // 清除旧标题激活状态\n tocHeightMap[oldId].el.classList.remove('active');\n tocHeightMap[oldId].el.classList.remove('show');\n // 清除旧元素层级展示状态\n let nCur = tocHeightMap[oldId].el\n while (!nCur.classList.contains('toc')) {\n if (nCur.classList.contains('toc-item')) {\n nCur.classList.remove('show');\n }\n nCur = nCur.parentNode;\n }\n }\n if (newId !== -1) {\n // 构建新标题激活状态\n tocHeightMap[newId].el.classList.add('active');\n tocHeightMap[newId].el.classList.add('show');\n // 建立新元素层级展示状态\n let nCur = tocHeightMap[newId].el\n while (!nCur.classList.contains('toc')) {\n if (nCur.classList.contains('toc-item')) {\n nCur.classList.add('show');\n }\n nCur = nCur.parentNode;\n }\n }\n };\n\n // 初始化为不存在的标题\n let curTocId = -1;\n // 切换 toc 状态的处理函数\n const toggleToc = () => {\n const newTocId = tocGetId(curTocId);\n tocActivate(curTocId, newTocId);\n curTocId = newTocId;\n };\n\n // 处理事件的函数\n const handleTocAnim = () => {\n // 现在的检测事件ID\n let nowEvent = 0;\n window.requestAnimationFrame(() => {\n if (nowEvent) {\n // 为避免高频触发,使用检测事件来控制频率\n clearTimeout(nowEvent);\n }\n nowEvent = setTimeout((nowY) => {\n if (nowY === window.scrollY) {\n // 0.1s位置没有变化,视为页面停止\n toggleToc();\n }\n }, 100, window.scrollY);\n });\n }\n\n window.addEventListener('scroll', handleTocAnim);\n\n // 初始化完成运行一次\n toggleToc();\n\n // pjax前销毁\n window.addEventListener('pjax:before', () => {\n tocHeightMap.length = 0; // 奇妙的数组清空方式\n window.removeEventListener('scroll', handleTocAnim);\n }, { once: true });\n\n // 阅读进度\n const readProgBar = document.getElementsByClassName('toc-progress-bar')[0];\n const setPercent = () => {\n readProgBar.style.width = (window.scrollY / document.body.clientHeight * 100).toString() + '%';\n }\n window.addEventListener('scroll', () => {\n window.requestAnimationFrame(setPercent);\n });\n setPercent(); // 初始运行一次\n\n /**\n * 现在的问题:\n * 首次打开页面时候由于会有 window.onload 事件的等待存在,\n * 所以会等待所有图片加载完成再调用核心的函数,因而基本保证\n * 各标题间的位置不会乱动,但代价就是要等页面加载完成才能加\n * 载toc样式,问题不是太大;\n * pjax后则会由于没有 window.onload 事件的限制,因而容易\n * 出现图片还没加载但是标题已经计算完成的情况,进而导致标题\n * 定位乱飘,失去引导意义;\n * 有一种解决方案是每次触发定位事件时都重新计算各元素高度,\n * 但是怀疑那样会非常耗费时间,降低用户使用体验;\n * 或者就是定时检测变化,但总觉得也非常不优雅,比较难受;\n * 之后会考虑重载 hexo 的辅助函数,重写 asset_img 标签\n * 用来内置 fancybox 的调用、计算图片大小进行格式转换与预\n * 设置大小,但不知道 hexo 是否支持这样的操作,是否会报错,\n * 还是说需要提交一个 PR 才能正确运行(猫咪摊手.jpg\n */\n }\n };\n\n const topNavScrollToggleInit = () => {\n // 判断设置参数\n if (!kr.topNavScrollToggle) {\n return; // 没有启用\n }\n // 记录上一次滚动高度,用于判断滚动方向\n let lastHeight = window.innerHeight;\n // 记录顶部栏隐藏状态\n let isTopNavHidden = false;\n\n // 处理事件的函数\n const handleTopNavScrollToggle = () => {\n window.requestAnimationFrame(() => {\n if (lastHeight < window.scrollY) {\n // 向下滚动\n if (!isTopNavHidden) {\n document.body.classList.add('nav-up');\n isTopNavHidden = true;\n }\n } else if (lastHeight > window.scrollY) {\n // 向上滚动\n if (isTopNavHidden) {\n document.body.classList.remove('nav-up');\n isTopNavHidden = false;\n }\n }\n // 相等则不做处理\n lastHeight = window.scrollY;\n });\n };\n\n // 仅处理鼠标滚动\n window.addEventListener('wheel', handleTopNavScrollToggle);\n\n };\n\n const pjaxReload = () => {\n setrandpic();\n fancyboxInit();\n setCopyright();\n saveTitle();\n initMathjax();\n codeCopyInit();\n commentsLazyLoad();\n expireNotify();\n tocAnimInit();\n };\n\n const funcUsingConfig = () => {\n // 因为涉及到配置文件,所以这些是只有在完成配置加载后才能调用的函数\n pjaxReload();\n\n copyEventInit();\n leaveEventInit();\n initTime();\n donateConfig();\n topNavScrollToggleInit();\n };\n\n window.addEventListener('pjax:complete', pjaxReload);\n\n window.addEventListener('window:onload', () => {\n loadConfig(funcUsingConfig);\n pageScrollDownInit();\n offcanvas();\n mobiClick();\n xControl();\n shareMenu();\n tocNavInit();\n }, { once: true });\n\n window.onload = () => {\n window.dispatchEvent(new Event('window:onload'));\n console.log('页面加载完毕!消耗了 %c'+Math.round(performance.now()*100)/100+' ms','background:#282c34;color:#51aded;');\n };\n\n})();\n"]} \ No newline at end of file diff --git a/src/js/kratosr.js b/src/js/kratosr.js index fc9b862a..fd424e23 100644 --- a/src/js/kratosr.js +++ b/src/js/kratosr.js @@ -489,8 +489,6 @@ ${kr.copyrightNotice} return a.h - b.h; }); - console.log(tocHeightMap); - // 标题定位函数 const tocGetId = (startPos = -1) => { let newPos; @@ -500,7 +498,6 @@ ${kr.copyrightNotice} newPos = startPos; } const nowY = window.scrollY; - console.log(nowY); if (tocHeightMap[0].h > nowY) { // 还没到第一级标题 newPos = -1;