hexo-theme-kratos-rebirth
Version:
A lovely yet modern theme for Hexo.
2 lines (1 loc) • 3.5 kB
JavaScript
(()=>{(()=>{if(!window.history||!window.history.pushState||!window.history.replaceState)return;let d=()=>{let e=document.getElementById("kratos-blog-post").offsetTop,n=document.getElementById("kratos-desktop-topnav").offsetHeight,r=n?e-n:0;window.scrollTo({top:r,behavior:"smooth"})},i=(e,n,r,t="property")=>{let o=e.querySelector("meta[".concat(t,'="').concat(n,'"]'));o?r?o.setAttribute("content",r):o.parentNode&&o.parentNode.removeChild(o):r&&(o=e.createElement("meta"),o.setAttribute("property",n),o.setAttribute("content",r),e.head.appendChild(o))},c=(e,n,r="property")=>{var t;return(t=e.querySelector("meta[".concat(r,'="').concat(n,'"]')))==null?void 0:t.getAttribute("content")},g=(e,n)=>{if(document.title=e.title||"\u65E0\u6807\u9898",i(document,"og:title",e.ogTitle),i(document,"og:url",e.ogUrl),i(document,"og:description",e.ogDescription),i(document,"author",e.metaAuthor,"name"),i(document,"description",e.metaDescription,"name"),n){let t=document.getElementById("main");typeof t.replaceWith=="function"?t.replaceWith(n.getElementById("main")):document.getElementById("main").innerHTML=e.content}else document.getElementById("main").innerHTML=e.content;let r=document.getElementById("main").getElementsByTagName("script");for(let t of r)if(!t.type||t.type.toLowerCase()==="text/javascript"){let o=document.createElement("script");o.setAttribute("type","text/javascript"),t.src?o.src=t.src:o.appendChild(document.createTextNode(t.text)),typeof t.replaceWith=="function"?t.replaceWith(o):(t.parentNode.insertBefore(o,t),t.parentNode.removeChild(t))}},f=e=>({title:e.title,ogTitle:c(e,"og:title"),ogUrl:c(e,"og:url"),ogDescription:c(e,"og:description"),metaAuthor:c(e,"author","name"),metaDescription:c(e,"description","name"),content:e.getElementById("main").innerHTML}),E=e=>{e.state&&(d(),typeof e.state.content>"u"?h(location.href,!1):g(e.state),window.dispatchEvent(s.complete))};window.addEventListener("popstate",E);let s={before:new Event("pjax:before"),success:new Event("pjax:success"),complete:new Event("pjax:complete"),error:new Event("pjax:error")},h=async(e,n)=>{let r=()=>{window.dispatchEvent(s.error),location.href=e},t=(a,l)=>{window.dispatchEvent(s.success);let p=document.implementation.createHTMLDocument("pjax");if(p.documentElement.innerHTML=a,!!p.getElementById("main")){l&&history.replaceState(f(document),document.title,location.href);let m=f(p);l&&window.history.pushState(m,m.title,e),g(m,p);let u=e.match(/\#(.+)$/);if(u){let y=document.getElementById(u[1])||document.getElementById(decodeURIComponent(u[1]));y&&window.scrollTo({top:y.getBoundingClientRect().top+window.pageYOffset-40,behavior:"smooth"})}}else{r();return}NProgress.done(),window.dispatchEvent(s.complete)};d(),NProgress.start(),window.dispatchEvent(s.before);let o=new AbortController,w=setTimeout(()=>o.abort(),6e3);try{let a=await fetch(e,{signal:o.signal}).then(l=>l.text());clearTimeout(w),t(a,n)}catch(a){console.error(a),r()}},b=3;document.addEventListener("click",e=>{let n=e.target,r=0;for(;n&&n.tagName.toLowerCase()!=="a"&&r<b;)n=n.parentElement,r++;if(!n||n.tagName.toLowerCase()!=="a"||n.getAttribute("target")==="_blank"||n.getAttribute("rel")==="gallery"||n.getAttribute("class")==="toc-link")return;let t=n.getAttribute("href");if(!t||t.startsWith("#"))return;let o;try{if(o=new URL(t,location.origin),!o.protocol.toLowerCase().includes("http")||o.origin!==location.origin)return}catch(w){return}e.preventDefault(),o.href!==location.href&&h(o.toString(),!0)})})();})();