docsify-dashboard
Version:
<div align="center">
18 lines • 11.8 kB
JavaScript
function plugin(t,e){const a="\x3c!-- toc --\x3e";const n='<div class=\'toc-page-div\'></div><div class=\'toc-paginator-div\'><div class=\'tocPaginatorLeftButtonDiv toc-paginator-button-div\'><?xml version="1.0" encoding="UTF-8"?><svg width="20px" height="20px" stroke-width="1.5" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="var(--theme-color,#ea6f5a)"><path d="M15 6l-6 6 6 6" stroke="var(--theme-color,#ea6f5a)" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg></div><div class=\'toc-paginator-input\'></div><div class=\'tocPaginatorRightButtonDiv toc-paginator-button-div\'><?xml version="1.0" encoding="UTF-8"?><svg width="20px" height="20px" stroke-width="1.5" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="var(--theme-color,#ea6f5a)"><path d="M9 6l6 6-6 6" stroke="var(--theme-color,#ea6f5a)" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg></div></div>';const i=["README","PersonalTen","PersonalRecords"];const s=["jpg","gif","png","webp","jpeg"];const r=8;let o=false;let l=[];let c=1;let d=1;function g(t,e){return Math.floor(Math.random()*(e-t+1))+t}function u(t){if(Number.isNaN(t-"0")){return" "}if(t.length!==8){return" "}return t.substring(0,4)+"-"+t.substring(4,6)+"-"+t.substring(6,8)}function f(){if(o){document.body.classList.add("force-close")}else{document.body.classList.remove("force-close")}}function p(t){var e=new XMLHttpRequest;e.open("HEAD",t,false);e.send();return e.status!=404}function h(a){var n="";s.some(t=>{var e=p(a+"."+t);if(e){n=t}return e});return n}function v(){o=false}function b(t,e){return t.replace(a,n)}function m(){pages=Array.from(document.getElementsByClassName("sidebar-nav")[0].getElementsByTagName("a"));pages.shift();pages=pages.filter(e=>{var a=false;i.forEach(t=>{if(e.href.indexOf(t)>0){a=true}});return!a});pages.sort((t,e)=>{aDate=t.href.substring(t.href.length-8);bDate=e.href.substring(e.href.length-8);if(Number.isNaN(aDate-"0")){aDate="-1"}if(Number.isNaN(bDate-"0")){bDate="-1"}return bDate-aDate});l=pages;d=Math.ceil(pages.length/r);y()}function y(){tocPageDiv=document.getElementsByClassName("toc-page-div")[0];tocPageDiv.innerHTML="";if(c<1){c=1}if(c>d){c=d}let t=l.slice((c-1)*r,c*r);t.forEach(t=>{pageHref=t.href;tmp=pageHref.replace("#/","");pagePictureHref=tmp.substring(0,tmp.lastIndexOf("/"))+"/_media"+tmp.substring(tmp.lastIndexOf("/"))+"/cover-picture";pagePictureHref+="."+"jpg";pageHrefDiv="<a class='toc-page-display-a' href="+pageHref+"><div class='toc-page-display-div'><div class='toc-page-display-title-img'><img class='ignore-view-full-image-img' src='"+pagePictureHref+"' loading='lazy' onerror='this.src=\"_media/defaultImg/picture-2.gif\"'></div><div class='toc-page-display-title-div'>"+t.innerHTML+"</div><div class='toc-page-display-date-div'>"+u(tmp.substr(tmp.length-8))+"</div></div></a>";tocPageDiv.innerHTML+=pageHrefDiv});tocPaginatorInputDiv=document.getElementsByClassName("toc-paginator-input");if(tocPaginatorInputDiv.length>0){tocPaginatorInputDiv=tocPaginatorInputDiv[0];if(tocPaginatorInputDiv.hasChildNodes()){tocPaginatorInputDiv.childNodes[0].value=c}}document.scrollingElement.scrollTop=0}function D(){tocPaginatorDiv=document.getElementsByClassName("toc-paginator-div")[0];tocPaginatorInputDiv=document.getElementsByClassName("toc-paginator-input")[0];tocPaginatorLeftButtonDiv=document.getElementsByClassName("tocPaginatorLeftButtonDiv")[0];tocPaginatorRightButtonDiv=document.getElementsByClassName("tocPaginatorRightButtonDiv")[0];tocPaginatorLeftButtonDiv.onclick=function(t){if(c>1){c-=1;y()}};tocPaginatorRightButtonDiv.onclick=function(t){if(c<d){c+=1;y()}};tocPaginatorInputDiv.innerHTML="<input class='tocPaginatorInputBox' type='number' value='"+c+"' min='1' max='"+d+"'></input><span>/</span><span>"+d+"</span>";tocPaginatorInput=tocPaginatorInputDiv.childNodes[0];tocPaginatorInput.onchange=function(){c=this.value;y();this.value=c}}t.beforeEach(function(t){o=t.includes(a);if(o){t=b(t,e)}return t});t.doneEach(function(){if(o){m();D()}f();v();document.scrollingElement.scrollTop=0;let e=location.href.split("#")[1];if(e!="/"){Array.from(document.getElementsByClassName("sidebar-nav")[0].getElementsByTagName("a")).some(t=>{if(t.href.split("#")[1]===e){if(document.title!=t.textContent){document.title=t.textContent}return true}return false})}})}function dashboardPlugin(t,e){let i;let c=false;const a=e.config.dashboard||{};const s=a.numTabContent||3;const n=a.metadataUrl||"metadata/posts";const r=a.sort||false;const o=a.theme||"default";const l=a.tagboardTheme||"default";const d=a.categoryTheme||{};const g=a.pagination||false;const u=t=>{let e=new XMLHttpRequest;e.open("GET",`${t}.json`,false);e.send(null);return JSON.parse(e.response)};function f(t){t.sort((t,e)=>{let a=t.time.replace(/\./g,"/");let n=e.time.replace(/\./g,"/");let i=new Date(a);let s=new Date(n);return s-i});return t}function p(t,e){if(Object.keys(t).indexOf(e)>-1){return true}return false}function h(t,e){c=p(t,"subtitle");let a="";if(c){var{time:n,title:i,subtitle:s,tag:r,image:o,href:l}=t}else{var{time:n,title:i,tag:r,image:o,href:l}=t;if(e==="list"){s=" ";c=true}}if(Array.isArray(r)){r=r.join(" ⋅ ")}a+=` <a class="toc-page-display-a" id="${e}" href="${l}" target="_blank">
<div class="toc-page-display-div" id="${e}">
<div class="toc-page-display-title-img" id="${e}">
<center>
<img class="ignore-view-full-image-img" src="${o}">
</center>
</div>
<div class="toc-page-display-title-div" id="${e}">
${i}
</div>`;if(c){a+=`
<div class="toc-page-display-subtitle-div" id="${e}">
${s}
</div>`}a+=`
<div class="toc-page-display-date-div" id="${e}">
${n} ${r}
</div>
</div>
</a>\n`;return a}function v(e){return i.filter(t=>{if(!t||!t.tag)return false;return t.tag.includes(e)})}function b(e){return i.filter(t=>{if(!t||!t.href)return false;return t.href.includes(e)})}function m(t){const e=[];t.forEach(t=>{if(typeof t.tag==="object"&&t.tag.length>0){t.tag.forEach(t=>{if(!e.includes(t)){e.push(t)}})}else if(typeof t.tag==="string"&&t.tag.length>0){if(!e.includes(t.tag)){e.push(t.tag)}}});return e}t.init(()=>{try{i=u(n);if(r){i=f(i)}}catch(t){console.error(`Failed to fetch ${n}.json.`,t)}tagList=m(i)});function y(a,n){let i="";let t=1;for(let e=0;e<a.length;e++){i+=`\n\n#### **<span id="dashboard-tab">${t}</span>**\n\n`;i+=`<div class="toc-page-div">\n`;for(let t=0;t<s;t++){jsonIndex=e*s+t;if(jsonIndex>=a.length){break}i+=h(a[jsonIndex],n)}i+=`</div>\n\n`;t++;if(jsonIndex+1>=a.length){break}}return i}t.beforeEach(t=>{const e=/<!--\s*dashboard(.*?) -->/gm;const a=t.match(e)||[];hasDashboard=a.length>0;if(hasDashboard){return t.replace(e,(t,e)=>{let a=i;let n=o;if(e&&e.trim()){e=e.replace(/^:/,"");a=i.filter(t=>t.category&&t.category.includes(e.trim()));if(d[e]){n=d[e]}}return t.replace(t,y(a,n))})}});function D(t){if(!hasDashboard)return t;let e="docsify-tabs docsify-tabs--material docsify-dashboard";if(g)e+=" pagination";const a=new RegExp(`<!-- tabs:replace <div class="docsify-tabs (.*?)"> -->`,"g");return t.replace(a,`<!-- tabs:replace <div class="${e}"> -->`)}t.afterEach(function(t,e){t=D(t);e(t)});function $(e,a){if(!hasDashboard)return;const n=`prev-tabs-${a}`;const i=`next-tabs-${a}`;const t=e.querySelector(`#${n}`);const s=e.hasAttribute("data-pagination-initialized");if(t){t.remove();e.querySelector(`#${i}`)?.remove();e.querySelectorAll(".current-tabs").forEach(t=>t.classList.remove("current-tabs"))}const r=`<button class="docsify-tabs__slide-buttons prev-tabs" id="${n}"><i class="fa-solid fa-caret-left"></i></button>\n`;const o=`<button class="docsify-tabs__slide-buttons next-tabs" id="${i}"><i class="fa-solid fa-caret-right"></i></button>\n`;e.innerHTML=e.innerHTML+r+o;const l=e.querySelectorAll("*");l.forEach(t=>{t.classList.add("pagination")});const c=window.innerWidth<768?5:10;let d=1;let g=JSON.parse(sessionStorage.getItem(`docsify-tabs.persist.${window.location.pathname}`))||{};if(g[a]){d=parseInt(g[a].replace(/^\d+-/,""))||1}let u=(d-1)/c;let f=Math.floor(u)*c+1;const p=e.querySelectorAll(".docsify-tabs__tab");let h=p.length;for(let t=0;t<c;t++){if(p[f+t-1]){p[f+t-1].classList.add("current-tabs")}}for(let t=0;t<h;t++){const $=p[t].getAttribute("data-tab");if(!$.startsWith(`${a}-`)){p[t].setAttribute("data-tab",`${a}-${$}`)}}const v=e.querySelector(`#${i}`);const b=e.querySelector(`#${n}`);if(h>f+c)v.style.display="block";if(f>c)b.style.display="block";const m=()=>{const t=e.querySelectorAll(".docsify-tabs__tab.current-tabs");const a=parseInt(t[0].getAttribute("data-tab").replace(/^\d+-/,""));b.style.display="block";if(a+c*2>h){v.style.display="none"}for(let e=0;e<t.length;e++){let t=a+e;p[t-1].classList.remove("current-tabs")}for(let e=0;e<c;e++){let t=a+c+e;if(t>h)break;p[t-1].classList.add("current-tabs")}p[a+c-1].click()};const y=()=>{const t=e.querySelectorAll(".docsify-tabs__tab.current-tabs");const a=parseInt(t[0].getAttribute("data-tab").replace(/^\d+-/,""));if(a===1)return;v.style.display="block";if(a-c===1)b.style.display="none";for(let e=0;e<t.length;e++){let t=a+e;p[t-1].classList.remove("current-tabs")}for(let t=0;t<c;t++){p[a-c+t-1].classList.add("current-tabs")}p[a-c-1].click()};const D=()=>{const t=e.querySelector(".docsify-tabs__tab--active");if(!t)return;if(!t.classList.contains("current-tabs")){t.classList.add("current-tabs")}};if(!s){e.setAttribute("data-pagination-initialized","true");e.addEventListener("click",t=>{if(t.target.id===`${i}`){m();D()}else if(t.target.id===`${n}`){y();D()}})}}function w(){const t=window.location.href;hasTags=t.includes("tags");tagPageDiv=document.getElementsByClassName("markdown-section")[0];if(!hasTags){return}var a=t.split("?tag=")[1];if(a.includes("%20")){a=a.replace(/%20/g," ")}const n=v(a);if(n&&n.length>0){let e=`<h1 id="tag-dashboard-title">tag: ${a}</h1>\n<hr>`;e+=`\n<div class="toc-page-div">\n`;for(let t=0;t<n.length;t++){e+=h(n[t],l)}e+=`\n</div>\n`;tagPageDiv.innerHTML=e+tagPageDiv.innerHTML}else{tagBoardContent=`<h1 id="tag-dashboard-title">Tags</h1>\n<hr>`;tagBoardContent+=`\n${tagList.map(t=>`<a href="#/tags?tag=${t}" target="_blank">${t}</a>`).join(" | ")}\n`;tagPageDiv.innerHTML=tagBoardContent+tagPageDiv.innerHTML}window.addEventListener("hashchange",()=>{location.reload()})}function L(){let e=document.querySelector(".sidebar-nav");if(e.innerHTML.includes("\x3c!-- tag-list --\x3e")){let t=`<div class="tag-container"><div class="tag-list">`;t+=`${tagList.map(t=>`<a class="tag-element" id="sidebar" href="#/tags?tag=${t}" target="_blank">${t}</a>`).join("\n")}`;t+=`</div></div>`;e.innerHTML=e.innerHTML.replace("\x3c!-- tag-list --\x3e",t)}}function P(){let e=document.querySelector(".markdown-section");let a=`#/${window.location.href.split("/#/")[1]}`;if(e.innerHTML.includes("\x3c!-- tag-list --\x3e")){const i=b(a)[0];if(!i)return;var n=m([i]);let t=`<div class="tag-container"><div class="tag-list">`;t+=`${n.map(t=>`<a class="tag-element" href="#/tags?tag=${t}" target="_blank">${t}</a>`).join("\n")}`;t+=`</div></div>`;e.innerHTML=e.innerHTML.replace("\x3c!-- tag-list --\x3e",t)}}function E(t,a){const e=t.querySelectorAll(".docsify-tabs__tab");e.forEach((t,e)=>{t.setAttribute("data-tab",`${a}-${e+1}`)})}t.doneEach(()=>{w();L();P();if(!hasDashboard)return;const e=document.getElementsByClassName("docsify-dashboard");if(e.length===0)return;if(g){for(let t=0;t<e.length;t++){$(e[t],t)}}else{for(let t=0;t<e.length;t++){E(e[t],t)}}})}window.$docsify.plugins=[].concat([plugin,dashboardPlugin],window.$docsify.plugins);