diff --git a/archetypes/default.md b/archetypes/default.md index fc3ba0d..3fa8440 100644 --- a/archetypes/default.md +++ b/archetypes/default.md @@ -7,32 +7,22 @@ draft: true author: "" authorLink: "" description: "" -license: "" tags: [] categories: [] + hiddenFromHomePage: false hiddenFromSearch: false featuredImage: "" featuredImagePreview: "" -toc: false -autoCollapseToc: true -math: false -mapbox: - accessToken: "" - lightStyle: "" - darkStyle: "" - navigation: true - geolocate: true - scale: true - fullscreen: true -lightgallery: true -linkToMarkdown: true -share: +toc: enable: true -comment: true +math: + enable: false +lightgallery: false +license: "" --- diff --git a/assets/css/_partial/_footer.scss b/assets/css/_partial/_footer.scss index 8e51b36..29d783c 100644 --- a/assets/css/_partial/_footer.scss +++ b/assets/css/_partial/_footer.scss @@ -5,10 +5,10 @@ footer { line-height: 1.5rem; padding-top: 2rem; - .copyright { + .footer-container { font-size: .875rem; - .copyright-line { + .footer-line { width: 100%; .icp-br { diff --git a/assets/css/_partial/_single/_code.scss b/assets/css/_partial/_single/_code.scss index 079cc3d..30058dd 100644 --- a/assets/css/_partial/_single/_code.scss +++ b/assets/css/_partial/_single/_code.scss @@ -4,8 +4,8 @@ code { color: $code-color; img, .version img { - min-height: 1.1 * $code-font-size; - height: 1.1 * $code-font-size; + min-height: 1.2 * $code-font-size; + height: 1.2 * $code-font-size; } .dark & { @@ -25,7 +25,7 @@ pre { .copy-button { font-size: $code-font-size; - line-height: $code-font-size; + line-height: 1.4 * $code-font-size; position: absolute; top: 0; right: 0; @@ -129,7 +129,7 @@ code, pre, .highlight table, .highlight tr, .highlight td { .highlight { font-family: $code-font-family; font-size: $code-font-size; - line-height: round($code-font-size * 1.4); + line-height: 1.4 * $code-font-size; /* Comment */ .c, /* CommentHashbang */ .ch, /* CommentMultiline */ .cm, diff --git a/assets/css/_variables.scss b/assets/css/_variables.scss index d1841e7..bf16cb5 100644 --- a/assets/css/_variables.scss +++ b/assets/css/_variables.scss @@ -127,7 +127,7 @@ $code-info-color-dark: #b1b0b0 !default; $code-font-size: .875rem !default; // Font family of the code -$code-font-family: Source Code Pro, Menlo, Consolas, Monaco, monospace !default; +$code-font-family: Source Code Pro, Menlo, Consolas, Monaco, monospace, $global-font-family !default; // Code type map $code-type-map: ( diff --git a/assets/js/theme.min.js b/assets/js/theme.min.js index d2a446c..40ee2a8 100644 --- a/assets/js/theme.min.js +++ b/assets/js/theme.min.js @@ -1,4 +1,4 @@ -"use strict";function _objectDestructuringEmpty(a){if(null==a)throw new TypeError("Cannot destructure undefined")}function _createForOfIteratorHelper(a){if("undefined"==typeof Symbol||null==a[Symbol.iterator]){if(Array.isArray(a)||(a=_unsupportedIterableToArray(a))){var b=0,c=function(){};return{s:c,n:function n(){return b>=a.length?{done:!0}:{done:!1,value:a[b++]}},e:function e(a){throw a},f:c}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var d,e,f=!0,g=!1;return{s:function s(){d=a[Symbol.iterator]()},n:function n(){var a=d.next();return f=a.done,a},e:function e(a){g=!0,e=a},f:function f(){try{f||null==d.return||d.return()}finally{if(g)throw e}}}}function _toConsumableArray(a){return _arrayWithoutHoles(a)||_iterableToArray(a)||_unsupportedIterableToArray(a)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(a,b){if(a){if("string"==typeof a)return _arrayLikeToArray(a,b);var c=Object.prototype.toString.call(a).slice(8,-1);return"Object"===c&&a.constructor&&(c=a.constructor.name),"Map"===c||"Set"===c?Array.from(c):"Arguments"===c||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(c)?_arrayLikeToArray(a,b):void 0}}function _iterableToArray(a){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(a))return Array.from(a)}function _arrayWithoutHoles(a){if(Array.isArray(a))return _arrayLikeToArray(a)}function _arrayLikeToArray(a,b){(null==b||b>a.length)&&(b=a.length);for(var c=0,d=Array(b);c$1"),g=g.replace(new RegExp("(".concat(a,")"),"gi"),"$1")}),{uri:e.uri,title:f,date:e.date,context:g}})};a._index?e(f()):fetch(b.lunrIndexURL).then(function(a){return a.json()}).then(function(c){var d={};a._index=lunr(function(){var a=this;b.lunrLanguageCode&&this.use(lunr[b.lunrLanguageCode]),this.ref("uri"),this.field("title",{boost:50}),this.field("tags",{boost:20}),this.field("description",{boost:10}),this.field("content",{boost:5}),this.metadataWhitelist=["position"],c.forEach(function(b){d[b.uri]=b,a.add(b)})}),a._indexData=d,e(f())}).catch(function(a){console.error(a),e([])})}else"algolia"===b.type&&(h.style.display="inline",i.style.display="none",a._algoliaIndex=a._algoliaIndex||algoliasearch(b.algoliaAppID,b.algoliaSearchKey).initIndex(b.algoliaIndex),a._algoliaIndex.search(c,{offset:0,length:12,attributesToHighlight:["title","content"]}).then(function(a){var b=a.hits;e(b.map(function(a){var b=a.uri,c=a.date,d=a._highlightResult,e=d.title,f=d.content;return{uri:b,title:e.value,date:c,context:f.value}}))}).catch(function(a){console.error(a),e([])}))},templates:{suggestion:function suggestion(a){var b=a.title,c=a.date,d=a.context;return"
".concat(b,"").concat(c,"
").concat(d,"
")},empty:function empty(a){var c=a.query;return"
".concat(b.noResultsFound,": \"").concat(c,"\"
")},footer:function footer(a){_objectDestructuringEmpty(a);var c="algolia"===b.type?{searchType:"algolia",icon:"",href:"https://www.algolia.com/"}:{searchType:"Lunr.js",icon:"",href:"https://lunrjs.com/"},d=c.searchType,e=c.icon,f=c.href;return"
Search by ").concat(e," ").concat(d,"
")}}});e.on("autocomplete:selected",function(a,b){window.location.assign(b.uri)}),c?a._searchMobile=e:a._searchDesktop=e};if(b.lunrSegmentitURL&&!document.getElementById("lunr-segmentit")){var k=document.createElement("script");k.id="lunr-segmentit",k.type="text/javascript",k.src=b.lunrSegmentitURL,k.async=!0,k.readyState?k.onreadystatechange=function(){("loaded"==k.readyState||"complete"==k.readyState)&&(k.onreadystatechange=null,j())}:k.onload=function(){j()},document.body.appendChild(k)}else j()}}},{key:"initLightGallery",value:function initLightGallery(){this.config.lightGallery&&lightGallery(document.getElementById("content"),this.config.lightGallery)}},{key:"initHighlight",value:function initHighlight(){var a=this;this.util.forEach(document.querySelectorAll(".highlight > .chroma"),function(a){var b=a.querySelectorAll("pre.chroma > code");b.length&&(a.className+=" "+b[b.length-1].className.toLowerCase(),b[0].classList.add("lnc"),b[b.length-1].classList.remove("lnc"))}),this.util.forEach(document.querySelectorAll(".highlight > pre.chroma"),function(a){var b=document.createElement("div");b.className=a.className;var c=document.createElement("table");b.appendChild(c);var d=document.createElement("tbody");c.appendChild(d);var e=document.createElement("tr");d.appendChild(e);var f=document.createElement("td");e.appendChild(f),a.parentElement.replaceChild(b,a),f.appendChild(a)}),this.util.forEach(document.querySelectorAll("pre > code"),function(b){if(b.classList.add("block"),!b.classList.contains("lnc")&&a.config.clipboard){var c=document.createElement("div");c.classList.add("copy-button"),c.innerHTML="",c.setAttribute("data-clipboard-text",b.innerText),c.title=a.config.clipboard.title;var d=new ClipboardJS(c);d.on("success",function(){a.util.animateCSS(b,"flash")}),b.after(c)}})}},{key:"initTable",value:function initTable(){this.util.forEach(document.querySelectorAll(".content table"),function(a){var b=document.createElement("div");b.className="table-wrapper",a.parentElement.replaceChild(b,a),b.appendChild(a)})}},{key:"initHeaderLink",value:function initHeaderLink(){for(var a=1;6>=a;a++)this.util.forEach(document.querySelectorAll(".page.single .content > h"+a),function(a){a.classList.add("headerLink"),a.innerHTML="").concat(a.innerHTML)})}},{key:"initToc",value:function initToc(){var a=this,b=document.getElementById("TableOfContents");if(null!==b)if(this.util.isTocStatic()){var o=document.getElementById("toc-content-static");b.parentElement!==o&&(b.parentElement.removeChild(b),o.appendChild(b)),this._tocOnScroll&&this.scrollEventSet.delete(this._tocOnScroll)}else{var p=document.getElementById("toc-content-auto");b.parentElement!==p&&(b.parentElement.removeChild(b),p.appendChild(b));var c=document.getElementById("toc-auto"),d=document.getElementsByClassName("page")[0],e=d.getBoundingClientRect();c.style.left="".concat(e.left+e.width+20,"px"),c.style.maxWidth="".concat(d.getBoundingClientRect().left-20,"px");var f=b.getElementsByTagName("a"),g=b.getElementsByTagName("li"),h=document.getElementsByClassName("headerLink"),j="normal"!==this.config.desktopHeaderMode,k=document.getElementById("header-desktop").offsetHeight,l=20+(j?k:0),m=c.offsetTop,n=m-l+(j?0:k);this._tocOnScroll=this._tocOnScroll||function(){var d=document.getElementById("post-footer").offsetTop,e=d-c.getBoundingClientRect().height,o=e-l+(j?0:k);a.newScrollTopo?(c.style.position="absolute",c.style.top="".concat(e,"px")):(c.style.position="fixed",c.style.top="".concat(l,"px")),a.util.forEach(f,function(a){a.classList.remove("active")}),a.util.forEach(g,function(a){a.classList.remove("has-active")});for(var p=20+(j?k:0),q=h.length-1,r=0;rp||s<=p&&t>p){q=r;break}}if(-1!==q){f[q].classList.add("active");for(var u=f[q].parentElement;u!==b;)u.classList.add("has-active"),u=u.parentElement.parentElement}},this._tocOnScroll(),this.scrollEventSet.add(this._tocOnScroll)}}},{key:"initMath",value:function initMath(){this.config.math&&renderMathInElement(document.body,this.config.math)}},{key:"initMermaid",value:function initMermaid(){var a=this,b=document.getElementsByClassName("mermaid");b.length&&(mermaid.initialize({startOnLoad:!1,theme:"null"}),this.util.forEach(b,function(b){mermaid.mermaidAPI.render("svg-"+b.id,a.contentData[b.id],function(a){b.innerHTML=a},b)}))}},{key:"initEcharts",value:function initEcharts(){var a=this;this._echartsOnSwitchTheme=this._echartsOnSwitchTheme||function(){a._echartsArr=a._echartsArr||[];for(var b=0;bd?(b.classList.remove("fadeInDown"),a.util.animateCSS(b,["fadeOutUp","faster"],!0)):e<-d&&(b.classList.remove("fadeOutUp"),a.util.animateCSS(b,["fadeInDown","faster"],!0))}),a.newScrollTop>d?e>d?(c.classList.remove("fadeIn"),a.util.animateCSS(c,["fadeOut","faster"],!0)):e<-d&&(c.style.display="block",c.classList.remove("fadeOut"),a.util.animateCSS(c,["fadeIn","faster"],!0)):c.style.display="none";var f,g=_createForOfIteratorHelper(a.scrollEventSet);try{for(g.s();!(f=g.n()).done;){var h=f.value;h()}}catch(a){g.e(a)}finally{g.f()}a.oldScrollTop=a.newScrollTop},!1)}},{key:"onResize",value:function onResize(){var a=this;window.addEventListener("resize",function(){a._resizeTimeout||(a._resizeTimeout=window.setTimeout(function(){a._resizeTimeout=null;var b,c=_createForOfIteratorHelper(a.resizeEventSet);try{for(c.s();!(b=c.n()).done;){var d=b.value;d()}}catch(a){c.e(a)}finally{c.f()}a.initToc(),a.initSmoothScroll(),a.initMermaid(),a.initSearch()},100))},!1)}},{key:"onClickMask",value:function onClickMask(){var a=this;document.getElementById("mask").addEventListener("click",function(){var b,c=_createForOfIteratorHelper(a.clickMaskEventSet);try{for(c.s();!(b=c.n()).done;){var d=b.value;d()}}catch(a){c.e(a)}finally{c.f()}document.body.classList.remove("blur")},!1)}},{key:"init",value:function init(){this.initMenuMobile(),this.initSwitchTheme(),this.initSearch(),this.initLightGallery(),this.initHighlight(),this.initTable(),this.initHeaderLink(),this.initMath(),this.initMermaid(),this.initEcharts(),this.initMapbox(),this.initTypeit(),this.initToc(),this.initComment(),this.initSmoothScroll(),this.onScroll(),this.onResize(),this.onClickMask()}}]),a}(),themeInit=function(){var a=new Theme;a.init()};"loading"===document.readyState?document.addEventListener("DOMContentLoaded",themeInit,!1):themeInit(); +"use strict";function _objectDestructuringEmpty(a){if(null==a)throw new TypeError("Cannot destructure undefined")}function _createForOfIteratorHelper(a){if("undefined"==typeof Symbol||null==a[Symbol.iterator]){if(Array.isArray(a)||(a=_unsupportedIterableToArray(a))){var b=0,c=function(){};return{s:c,n:function n(){return b>=a.length?{done:!0}:{done:!1,value:a[b++]}},e:function e(a){throw a},f:c}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var d,e,f=!0,g=!1;return{s:function s(){d=a[Symbol.iterator]()},n:function n(){var a=d.next();return f=a.done,a},e:function e(a){g=!0,e=a},f:function f(){try{f||null==d.return||d.return()}finally{if(g)throw e}}}}function _toConsumableArray(a){return _arrayWithoutHoles(a)||_iterableToArray(a)||_unsupportedIterableToArray(a)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(a,b){if(a){if("string"==typeof a)return _arrayLikeToArray(a,b);var c=Object.prototype.toString.call(a).slice(8,-1);return"Object"===c&&a.constructor&&(c=a.constructor.name),"Map"===c||"Set"===c?Array.from(c):"Arguments"===c||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(c)?_arrayLikeToArray(a,b):void 0}}function _iterableToArray(a){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(a))return Array.from(a)}function _arrayWithoutHoles(a){if(Array.isArray(a))return _arrayLikeToArray(a)}function _arrayLikeToArray(a,b){(null==b||b>a.length)&&(b=a.length);for(var c=0,d=Array(b);c$1"),g=g.replace(new RegExp("(".concat(a,")"),"gi"),"$1")}),{uri:e.uri,title:f,date:e.date,context:g}})};a._index?e(f()):fetch(b.lunrIndexURL).then(function(a){return a.json()}).then(function(c){var d={};a._index=lunr(function(){var a=this;b.lunrLanguageCode&&this.use(lunr[b.lunrLanguageCode]),this.ref("uri"),this.field("title",{boost:50}),this.field("tags",{boost:20}),this.field("description",{boost:10}),this.field("content",{boost:5}),this.metadataWhitelist=["position"],c.forEach(function(b){d[b.uri]=b,a.add(b)})}),a._indexData=d,e(f())}).catch(function(a){console.error(a),e([])})}else"algolia"===b.type&&(h.style.display="inline",i.style.display="none",a._algoliaIndex=a._algoliaIndex||algoliasearch(b.algoliaAppID,b.algoliaSearchKey).initIndex(b.algoliaIndex),a._algoliaIndex.search(c,{offset:0,length:12,attributesToHighlight:["title","content"]}).then(function(a){var b=a.hits;e(b.map(function(a){var b=a.uri,c=a.date,d=a._highlightResult,e=d.title,f=d.content;return{uri:b,title:e.value,date:c,context:f.value}}))}).catch(function(a){console.error(a),e([])}))},templates:{suggestion:function suggestion(a){var b=a.title,c=a.date,d=a.context;return"
".concat(b,"").concat(c,"
").concat(d,"
")},empty:function empty(a){var c=a.query;return"
".concat(b.noResultsFound,": \"").concat(c,"\"
")},footer:function footer(a){_objectDestructuringEmpty(a);var c="algolia"===b.type?{searchType:"algolia",icon:"",href:"https://www.algolia.com/"}:{searchType:"Lunr.js",icon:"",href:"https://lunrjs.com/"},d=c.searchType,e=c.icon,f=c.href;return"")}}});e.on("autocomplete:selected",function(a,b){window.location.assign(b.uri)}),c?a._searchMobile=e:a._searchDesktop=e};if(b.lunrSegmentitURL&&!document.getElementById("lunr-segmentit")){var k=document.createElement("script");k.id="lunr-segmentit",k.type="text/javascript",k.src=b.lunrSegmentitURL,k.async=!0,k.readyState?k.onreadystatechange=function(){("loaded"==k.readyState||"complete"==k.readyState)&&(k.onreadystatechange=null,j())}:k.onload=function(){j()},document.body.appendChild(k)}else j()}}},{key:"initLightGallery",value:function initLightGallery(){this.config.lightGallery&&lightGallery(document.getElementById("content"),this.config.lightGallery)}},{key:"initHighlight",value:function initHighlight(){var a=this;this.util.forEach(document.querySelectorAll(".highlight > .chroma"),function(a){var b=a.querySelectorAll("pre.chroma > code");b.length&&(a.className+=" "+b[b.length-1].className.toLowerCase(),b[0].classList.add("lnc"),b[b.length-1].classList.remove("lnc"))}),this.util.forEach(document.querySelectorAll(".highlight > pre.chroma"),function(a){var b=document.createElement("div");b.className=a.className;var c=document.createElement("table");b.appendChild(c);var d=document.createElement("tbody");c.appendChild(d);var e=document.createElement("tr");d.appendChild(e);var f=document.createElement("td");e.appendChild(f),a.parentElement.replaceChild(b,a),f.appendChild(a)}),this.util.forEach(document.querySelectorAll("pre > code"),function(b){if(b.classList.add("block"),!b.classList.contains("lnc")&&a.config.clipboard){var c=document.createElement("div");c.classList.add("copy-button"),c.innerHTML="",c.setAttribute("data-clipboard-text",b.innerText),c.title=a.config.clipboard.title;var d=new ClipboardJS(c);d.on("success",function(){a.util.animateCSS(b,"flash")}),b.after(c)}})}},{key:"initTable",value:function initTable(){this.util.forEach(document.querySelectorAll(".content table"),function(a){var b=document.createElement("div");b.className="table-wrapper",a.parentElement.replaceChild(b,a),b.appendChild(a)})}},{key:"initHeaderLink",value:function initHeaderLink(){for(var a=1;6>=a;a++)this.util.forEach(document.querySelectorAll(".page.single .content > h"+a),function(a){a.classList.add("headerLink"),a.innerHTML="").concat(a.innerHTML)})}},{key:"initToc",value:function initToc(){var a=this,b=document.getElementById("TableOfContents");if(null!==b)if(this.util.isTocStatic()){var o=document.getElementById("toc-content-static");b.parentElement!==o&&(b.parentElement.removeChild(b),o.appendChild(b)),this._tocOnScroll&&this.scrollEventSet.delete(this._tocOnScroll)}else{var p=document.getElementById("toc-content-auto");b.parentElement!==p&&(b.parentElement.removeChild(b),p.appendChild(b));var c=document.getElementById("toc-auto"),d=document.getElementsByClassName("page")[0],e=d.getBoundingClientRect();c.style.left="".concat(e.left+e.width+20,"px"),c.style.maxWidth="".concat(d.getBoundingClientRect().left-20,"px");var f=b.getElementsByTagName("a"),g=b.getElementsByTagName("li"),h=document.getElementsByClassName("headerLink"),j="normal"!==this.config.headerMode.desktop,k=document.getElementById("header-desktop").offsetHeight,l=20+(j?k:0),m=c.offsetTop,n=m-l+(j?0:k);this._tocOnScroll=this._tocOnScroll||function(){var d=document.getElementById("post-footer").offsetTop,e=d-c.getBoundingClientRect().height,o=e-l+(j?0:k);a.newScrollTopo?(c.style.position="absolute",c.style.top="".concat(e,"px")):(c.style.position="fixed",c.style.top="".concat(l,"px")),a.util.forEach(f,function(a){a.classList.remove("active")}),a.util.forEach(g,function(a){a.classList.remove("has-active")});for(var p=20+(j?k:0),q=h.length-1,r=0;rp||s<=p&&t>p){q=r;break}}if(-1!==q){f[q].classList.add("active");for(var u=f[q].parentElement;u!==b;)u.classList.add("has-active"),u=u.parentElement.parentElement}},this._tocOnScroll(),this.scrollEventSet.add(this._tocOnScroll)}}},{key:"initMath",value:function initMath(){this.config.math&&renderMathInElement(document.body,this.config.math)}},{key:"initMermaid",value:function initMermaid(){var a=this,b=document.getElementsByClassName("mermaid");b.length&&(mermaid.initialize({startOnLoad:!1,theme:"null"}),this.util.forEach(b,function(b){mermaid.mermaidAPI.render("svg-"+b.id,a.data[b.id],function(a){b.innerHTML=a},b)}))}},{key:"initEcharts",value:function initEcharts(){var a=this;this._echartsOnSwitchTheme=this._echartsOnSwitchTheme||function(){a._echartsArr=a._echartsArr||[];for(var b=0;bd?(b.classList.remove("fadeInDown"),a.util.animateCSS(b,["fadeOutUp","faster"],!0)):e<-d&&(b.classList.remove("fadeOutUp"),a.util.animateCSS(b,["fadeInDown","faster"],!0))}),a.newScrollTop>d?e>d?(c.classList.remove("fadeIn"),a.util.animateCSS(c,["fadeOut","faster"],!0)):e<-d&&(c.style.display="block",c.classList.remove("fadeOut"),a.util.animateCSS(c,["fadeIn","faster"],!0)):c.style.display="none";var f,g=_createForOfIteratorHelper(a.scrollEventSet);try{for(g.s();!(f=g.n()).done;){var h=f.value;h()}}catch(a){g.e(a)}finally{g.f()}a.oldScrollTop=a.newScrollTop},!1)}},{key:"onResize",value:function onResize(){var a=this;window.addEventListener("resize",function(){a._resizeTimeout||(a._resizeTimeout=window.setTimeout(function(){a._resizeTimeout=null;var b,c=_createForOfIteratorHelper(a.resizeEventSet);try{for(c.s();!(b=c.n()).done;){var d=b.value;d()}}catch(a){c.e(a)}finally{c.f()}a.initToc(),a.initSmoothScroll(),a.initMermaid(),a.initSearch()},100))},!1)}},{key:"onClickMask",value:function onClickMask(){var a=this;document.getElementById("mask").addEventListener("click",function(){var b,c=_createForOfIteratorHelper(a.clickMaskEventSet);try{for(c.s();!(b=c.n()).done;){var d=b.value;d()}}catch(a){c.e(a)}finally{c.f()}document.body.classList.remove("blur")},!1)}},{key:"init",value:function init(){this.initMenuMobile(),this.initSwitchTheme(),this.initSearch(),this.initLightGallery(),this.initHighlight(),this.initTable(),this.initHeaderLink(),this.initToc(),this.initComment(),this.initSmoothScroll(),this.initMath(),this.initMermaid(),this.initEcharts(),this.initTypeit(),this.initMapbox(),this.onScroll(),this.onResize(),this.onClickMask()}}]),a}(),themeInit=function(){var a=new Theme;a.init()};"loading"===document.readyState?document.addEventListener("DOMContentLoaded",themeInit,!1):themeInit(); //# sourceMappingURL=theme.min.js.map \ No newline at end of file diff --git a/assets/js/theme.min.js.map b/assets/js/theme.min.js.map index e1afb77..214cdf1 100644 --- a/assets/js/theme.min.js.map +++ b/assets/js/theme.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../src/js/theme.js"],"names":[],"mappings":"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","file":"theme.min.js","sourcesContent":["class Util {\n forEach(elements, handler) {\n elements = elements || [];\n for (let i = 0; i < elements.length; i++) handler(elements[i]);\n }\n\n getScrollTop() {\n return (document.documentElement && document.documentElement.scrollTop) || document.body.scrollTop;\n }\n\n isMobile() {\n return window.matchMedia('only screen and (max-width: 680px)').matches;\n }\n\n isTocStatic() {\n return window.matchMedia('only screen and (max-width: 960px)').matches;\n }\n\n animateCSS(element, animation, reserved, callback) {\n if (!Array.isArray(animation)) animation = [animation];\n element.classList.add('animated', ...animation);\n const handler = () => {\n element.classList.remove('animated', ...animation);\n element.removeEventListener('animationend', handler);\n if (typeof callback === 'function') callback();\n };\n if (!reserved) element.addEventListener('animationend', handler, false);\n }\n}\n\nclass Theme {\n constructor() {\n this.config = window.config;\n this.contentData = this.config.content;\n this.isDark = document.body.classList.contains('dark');\n this.util = new Util();\n this.newScrollTop = this.util.getScrollTop();\n this.oldScrollTop = this.newScrollTop;\n this.scrollEventSet = new Set();\n this.resizeEventSet = new Set();\n this.switchThemeEventSet = new Set();\n this.clickMaskEventSet = new Set();\n }\n\n initMenuMobile() {\n const $menuToggleMobile = document.getElementById('menu-toggle-mobile');\n const $menuMobile = document.getElementById('menu-mobile');\n $menuToggleMobile.addEventListener('click', () => {\n document.body.classList.toggle('blur');\n $menuToggleMobile.classList.toggle('active');\n $menuMobile.classList.toggle('active');\n }, false);\n this._menuMobileOnClickMask = this._menuMobileOnClickMask || (() => {\n $menuToggleMobile.classList.remove('active');\n $menuMobile.classList.remove('active');\n });\n this.clickMaskEventSet.add(this._menuMobileOnClickMask);\n }\n\n initSwitchTheme() {\n this.util.forEach(document.getElementsByClassName('theme-switch'), $themeSwitch => {\n $themeSwitch.addEventListener('click', () => {\n document.body.classList.toggle('dark');\n this.isDark = !this.isDark;\n window.localStorage && localStorage.setItem('theme', this.isDark ? 'dark' : 'light');\n for (let event of this.switchThemeEventSet) event();\n }, false);\n });\n }\n\n initSearch() {\n const searchConfig = this.config.search;\n const isMobile = this.util.isMobile();\n if (!searchConfig || isMobile && this._searchMobileOnce || !isMobile && this._searchDesktopOnce) return;\n const classSuffix = isMobile ? 'mobile' : 'desktop';\n const $header = document.getElementById(`header-${classSuffix}`);\n const $searchInput = document.getElementById(`search-input-${classSuffix}`);\n const $searchToggle = document.getElementById(`search-toggle-${classSuffix}`);\n const $searchLoading = document.getElementById(`search-loading-${classSuffix}`);\n const $searchClear = document.getElementById(`search-clear-${classSuffix}`);\n if (isMobile) {\n this._searchMobileOnce = true;\n $searchInput.addEventListener('focus', () => {\n document.body.classList.add('blur');\n $header.classList.add('open');\n }, false);\n document.getElementById('search-cancel-mobile').addEventListener('click', () => {\n $header.classList.remove('open');\n document.body.classList.remove('blur');\n document.getElementById('menu-toggle-mobile').classList.remove('active');\n document.getElementById('menu-mobile').classList.remove('active');\n $searchLoading.style.display = 'none';\n $searchClear.style.display = 'none';\n this._searchMobile && this._searchMobile.autocomplete.setVal('');\n }, false);\n $searchClear.addEventListener('click', () => {\n $searchClear.style.display = 'none';\n this._searchMobile && this._searchMobile.autocomplete.setVal('');\n }, false);\n this._searchMobileOnClickMask = this._searchMobileOnClickMask || (() => {\n $header.classList.remove('open');\n $searchLoading.style.display = 'none';\n $searchClear.style.display = 'none';\n this._searchMobile && this._searchMobile.autocomplete.setVal('');\n });\n this.clickMaskEventSet.add(this._searchMobileOnClickMask);\n } else {\n this._searchDesktopOnce = true;\n $searchToggle.addEventListener('click', () => {\n document.body.classList.add('blur');\n $header.classList.add('open');\n $searchInput.focus();\n }, false);\n $searchClear.addEventListener('click', () => {\n $searchClear.style.display = 'none';\n this._searchDesktop && this._searchDesktop.autocomplete.setVal('');\n }, false);\n this._searchDesktopOnClickMask = this._searchDesktopOnClickMask || (() => {\n $header.classList.remove('open');\n $searchLoading.style.display = 'none';\n $searchClear.style.display = 'none';\n this._searchDesktop && this._searchDesktop.autocomplete.setVal('');\n });\n this.clickMaskEventSet.add(this._searchDesktopOnClickMask);\n }\n $searchInput.addEventListener('input', () => {\n if ($searchInput.value === '') $searchClear.style.display = 'none';\n else $searchClear.style.display = 'inline';\n }, false);\n\n const CONTEXT_LENGTH = 200;\n const initAutosearch = () => {\n const autosearch = autocomplete(`#search-input-${classSuffix}`, {\n hint: false,\n autoselect: true,\n dropdownMenuContainer: `#search-dropdown-${classSuffix}`,\n clearOnSelected: true,\n cssClasses: { noPrefix: true },\n // debug: true,\n }, {\n name: 'search',\n source: (query, callback) => {\n $searchLoading.style.display = 'inline';\n $searchClear.style.display = 'none';\n const finish = (results) => {\n $searchLoading.style.display = 'none';\n $searchClear.style.display = 'inline';\n callback(results);\n };\n if (searchConfig.type === 'lunr') {\n const search = () => {\n if (lunr.queryHandler) query = lunr.queryHandler(query);\n return this._index.search(query).slice(0, 12).map(({ ref, matchData: { metadata } }) => {\n const matchData = this._indexData[ref];\n let { title, content: context } = matchData;\n let position = 0;\n Object.values(metadata).forEach(({ description, content }) => {\n if (description) {\n context = matchData.description;\n position = -1;\n } else if (content) {\n const matchPosition = content.position[0][0];\n if (matchPosition < position || position === 0) position = matchPosition;\n }\n });\n position -= CONTEXT_LENGTH / 5;\n if (position > 0) {\n position += context.substr(position, 25).lastIndexOf(' ') + 1;\n context = '...' + context.substr(position, CONTEXT_LENGTH);\n } else {\n context = context.substr(0, CONTEXT_LENGTH);\n }\n Object.keys(metadata).forEach(key => {\n title = title.replace(new RegExp(`(${key})`, 'gi'), '$1');\n context = context.replace(new RegExp(`(${key})`, 'gi'), '$1');\n });\n return {\n 'uri': matchData.uri,\n 'title' : title,\n 'date' : matchData.date,\n 'context' : context,\n };\n });\n }\n if (!this._index) {\n fetch(searchConfig.lunrIndexURL)\n .then(response => response.json())\n .then(data => {\n const indexData = {};\n this._index = lunr(function () {\n if (searchConfig.lunrLanguageCode) this.use(lunr[searchConfig.lunrLanguageCode]);\n this.ref('uri');\n this.field('title', { boost: 50 });\n this.field('tags', { boost: 20 });\n this.field('description', { boost: 10 });\n this.field('content', { boost: 5 });\n this.metadataWhitelist = ['position'];\n data.forEach((record) => {\n indexData[record.uri] = record;\n this.add(record);\n });\n });\n this._indexData = indexData;\n finish(search());\n }).catch(err => {\n console.error(err);\n finish([]);\n });\n } else finish(search());\n } else if (searchConfig.type === 'algolia') {\n $searchLoading.style.display = 'inline';\n $searchClear.style.display = 'none';\n this._algoliaIndex = this._algoliaIndex || algoliasearch(searchConfig.algoliaAppID, searchConfig.algoliaSearchKey).initIndex(searchConfig.algoliaIndex);\n this._algoliaIndex\n .search(query, { offset: 0, length: 12, attributesToHighlight: ['title', 'content'] })\n .then(({ hits }) => {\n finish(hits.map(({ uri, date, _highlightResult: { title, content } }) => ({\n uri: uri,\n title: title.value,\n date: date,\n context: content.value,\n })));\n })\n .catch(err => {\n console.error(err);\n finish([]);\n });\n }\n },\n templates: {\n suggestion: ({ title, date, context }) => `
${title}${date}
${context}
`,\n empty: ({ query }) => `
${searchConfig.noResultsFound}: \"${query}\"
`,\n footer: ({}) => {\n const { searchType, icon, href } = searchConfig.type === 'algolia' ? {\n searchType: 'algolia',\n icon: '',\n href: 'https://www.algolia.com/',\n } : {\n searchType: 'Lunr.js',\n icon: '',\n href: 'https://lunrjs.com/',\n };\n return ``;},\n },\n });\n autosearch.on('autocomplete:selected', (event, suggestion, dataset, context) => {\n window.location.assign(suggestion.uri);\n });\n if (isMobile) this._searchMobile = autosearch;\n else this._searchDesktop = autosearch;\n };\n if (searchConfig.lunrSegmentitURL && !document.getElementById('lunr-segmentit')) {\n const script = document.createElement('script');\n script.id = 'lunr-segmentit';\n script.type = 'text/javascript';\n script.src = searchConfig.lunrSegmentitURL;\n script.async = true;\n if (script.readyState) {\n script.onreadystatechange = () => {\n if (script.readyState == 'loaded' || script.readyState == 'complete'){\n script.onreadystatechange = null;\n initAutosearch();\n }\n };\n } else {\n script.onload = () => {\n initAutosearch();\n };\n }\n document.body.appendChild(script);\n } else initAutosearch();\n }\n\n initLightGallery() {\n if (this.config.lightGallery) lightGallery(document.getElementById('content'), this.config.lightGallery);\n }\n\n initHighlight() {\n this.util.forEach(document.querySelectorAll('.highlight > .chroma'), $chroma => {\n const $elements = $chroma.querySelectorAll('pre.chroma > code');\n if ($elements.length) {\n $chroma.className += ' ' + $elements[$elements.length - 1].className.toLowerCase();\n $elements[0].classList.add('lnc');\n $elements[$elements.length - 1].classList.remove('lnc');\n }\n });\n this.util.forEach(document.querySelectorAll('.highlight > pre.chroma'), $preChroma => {\n const $chroma = document.createElement('div');\n $chroma.className = $preChroma.className;\n const $table = document.createElement('table');\n $chroma.appendChild($table);\n const $tbody = document.createElement('tbody');\n $table.appendChild($tbody);\n const $tr = document.createElement('tr');\n $tbody.appendChild($tr);\n const $td = document.createElement('td');\n $tr.appendChild($td);\n $preChroma.parentElement.replaceChild($chroma, $preChroma);\n $td.appendChild($preChroma);\n });\n this.util.forEach(document.querySelectorAll('pre > code'), $code => {\n $code.classList.add('block');\n if ($code.classList.contains('lnc') || !this.config.clipboard) return;\n const $button = document.createElement('div');\n $button.classList.add('copy-button');\n $button.innerHTML = '';\n $button.setAttribute('data-clipboard-text', $code.innerText);\n $button.title = this.config.clipboard.title;\n const clipboard = new ClipboardJS($button);\n clipboard.on('success', e => {\n this.util.animateCSS($code, 'flash');\n });\n $code.after($button);\n });\n }\n\n initTable() {\n this.util.forEach(document.querySelectorAll('.content table'), $table => {\n const $wrapper = document.createElement('div');\n $wrapper.className = 'table-wrapper';\n $table.parentElement.replaceChild($wrapper, $table);\n $wrapper.appendChild($table);\n });\n }\n\n initHeaderLink() {\n for (let num = 1; num <= 6; num++) {\n this.util.forEach(document.querySelectorAll('.page.single .content > h' + num), $header => {\n $header.classList.add('headerLink');\n $header.innerHTML = `${$header.innerHTML}`;\n });\n }\n }\n\n initToc() {\n const $tocCore = document.getElementById('TableOfContents');\n if ($tocCore === null) return;\n if (this.util.isTocStatic()) {\n const $tocContentStatic = document.getElementById('toc-content-static');\n if ($tocCore.parentElement !== $tocContentStatic) {\n $tocCore.parentElement.removeChild($tocCore);\n $tocContentStatic.appendChild($tocCore);\n }\n if (this._tocOnScroll) this.scrollEventSet.delete(this._tocOnScroll);\n } else {\n const $tocContentAuto = document.getElementById('toc-content-auto');\n if ($tocCore.parentElement !== $tocContentAuto) {\n $tocCore.parentElement.removeChild($tocCore);\n $tocContentAuto.appendChild($tocCore);\n }\n const $toc = document.getElementById('toc-auto');\n const $page = document.getElementsByClassName('page')[0];\n const rect = $page.getBoundingClientRect();\n $toc.style.left = `${rect.left + rect.width + 20}px`;\n $toc.style.maxWidth = `${$page.getBoundingClientRect().left - 20}px`;\n const $tocLinkElements = $tocCore.getElementsByTagName('a');\n const $tocLiElements = $tocCore.getElementsByTagName('li');\n const $headerLinkElements = document.getElementsByClassName('headerLink');\n const headerIsFixed = this.config.desktopHeaderMode !== 'normal';\n const headerHeight = document.getElementById('header-desktop').offsetHeight;\n const TOP_SPACING = 20 + (headerIsFixed ? headerHeight : 0);\n const minTocTop = $toc.offsetTop;\n const minScrollTop = minTocTop - TOP_SPACING + (headerIsFixed ? 0 : headerHeight);\n this._tocOnScroll = this._tocOnScroll || (() => {\n const footerTop = document.getElementById('post-footer').offsetTop;\n const maxTocTop = footerTop - $toc.getBoundingClientRect().height;\n const maxScrollTop = maxTocTop - TOP_SPACING + (headerIsFixed ? 0 : headerHeight);\n if (this.newScrollTop < minScrollTop) {\n $toc.style.position = 'absolute';\n $toc.style.top = `${minTocTop}px`;\n } else if (this.newScrollTop > maxScrollTop) {\n $toc.style.position = 'absolute';\n $toc.style.top = `${maxTocTop}px`;\n } else {\n $toc.style.position = 'fixed';\n $toc.style.top = `${TOP_SPACING}px`;\n }\n\n this.util.forEach($tocLinkElements, $tocLink => { $tocLink.classList.remove('active'); });\n this.util.forEach($tocLiElements, $tocLi => { $tocLi.classList.remove('has-active'); });\n const INDEX_SPACING = 20 + (headerIsFixed ? headerHeight : 0);\n let activeTocIndex = $headerLinkElements.length - 1;\n for (let i = 0; i < $headerLinkElements.length - 1; i++) {\n const thisTop = $headerLinkElements[i].getBoundingClientRect().top;\n const nextTop = $headerLinkElements[i + 1].getBoundingClientRect().top;\n if ((i == 0 && thisTop > INDEX_SPACING)\n || (thisTop <= INDEX_SPACING && nextTop > INDEX_SPACING)) {\n activeTocIndex = i;\n break;\n }\n }\n if (activeTocIndex !== -1) {\n $tocLinkElements[activeTocIndex].classList.add('active');\n let $parent = $tocLinkElements[activeTocIndex].parentElement;\n while ($parent !== $tocCore) {\n $parent.classList.add('has-active');\n $parent = $parent.parentElement.parentElement;\n }\n }\n });\n this._tocOnScroll();\n this.scrollEventSet.add(this._tocOnScroll);\n }\n }\n\n initMath() {\n if (this.config.math) renderMathInElement(document.body, this.config.math);\n }\n\n initMermaid() {\n const $mermaidElements = document.getElementsByClassName('mermaid');\n if ($mermaidElements.length) {\n mermaid.initialize({startOnLoad: false, theme: 'null'});\n this.util.forEach($mermaidElements, $mermaid => {\n mermaid.mermaidAPI.render('svg-' + $mermaid.id, this.contentData[$mermaid.id], svgCode => {\n $mermaid.innerHTML = svgCode;\n }, $mermaid);\n });\n }\n }\n\n initEcharts() {\n this._echartsOnSwitchTheme = this._echartsOnSwitchTheme || (() => {\n this._echartsArr = this._echartsArr || [];\n for (let i = 0; i < this._echartsArr.length; i++) {\n this._echartsArr[i].dispose();\n }\n this._echartsArr = [];\n this.util.forEach(document.getElementsByClassName('echarts'), $echarts => {\n const chart = echarts.init($echarts, this.isDark ? 'dark' : 'macarons', {renderer: 'svg'});\n chart.setOption(JSON.parse(this.contentData[$echarts.id]));\n this._echartsArr.push(chart);\n });\n });\n this.switchThemeEventSet.add(this._echartsOnSwitchTheme);\n this._echartsOnSwitchTheme();\n this._echartsOnResize = this._echartsOnResize || (() => {\n for (let i = 0; i < this._echartsArr.length; i++) {\n this._echartsArr[i].resize();\n }\n });\n this.resizeEventSet.add(this._echartsOnResize);\n }\n\n initMapbox() {\n if (this.config.mapbox) {\n mapboxgl.accessToken = this.config.mapbox.accessToken;\n mapboxgl.setRTLTextPlugin(this.config.mapbox.RTLTextPlugin);\n this._mapboxArr = this._mapboxArr || [];\n this.util.forEach(document.getElementsByClassName('mapbox'), $mapbox => {\n const { lng, lat, zoom, lightStyle, darkStyle, marked, navigation, geolocate, scale, fullscreen } = this.contentData[$mapbox.id];\n const mapbox = new mapboxgl.Map({\n container: $mapbox,\n center: [lng, lat],\n zoom: zoom,\n minZoom: .2,\n style: this.isDark ? darkStyle : lightStyle,\n attributionControl: false,\n });\n if (marked) {\n new mapboxgl.Marker().setLngLat([lng, lat]).addTo(mapbox);\n }\n if (navigation) {\n mapbox.addControl(new mapboxgl.NavigationControl(), 'bottom-right');\n }\n if (geolocate) {\n mapbox.addControl(new mapboxgl.GeolocateControl({\n positionOptions: {\n enableHighAccuracy: true,\n },\n showUserLocation: true,\n trackUserLocation: true,\n }), 'bottom-right');\n }\n if (scale) {\n mapbox.addControl(new mapboxgl.ScaleControl());\n }\n if (fullscreen) {\n mapbox.addControl(new mapboxgl.FullscreenControl());\n }\n mapbox.addControl(new MapboxLanguage());\n this._mapboxArr.push(mapbox);\n });\n this._mapboxOnSwitchTheme = this._mapboxOnSwitchTheme || (() => {\n this.util.forEach(this._mapboxArr, mapbox => {\n const $mapbox = mapbox.getContainer();\n const { lightStyle, darkStyle } = this.contentData[$mapbox.id];\n mapbox.setStyle(this.isDark ? darkStyle : lightStyle);\n mapbox.addControl(new MapboxLanguage());\n });\n });\n this.switchThemeEventSet.add(this._mapboxOnSwitchTheme);\n }\n }\n\n initTypeit() {\n if (this.config.typeit) {\n const typeitData = this.config.typeit;\n for (let i = 0; i < typeitData.length; i++) {\n const group = typeitData[i];\n ((i) => {\n const id = group[i];\n if (i === group.length - 1) {\n new TypeIt(`#${id}`, {\n strings: this.contentData[id],\n }).go();\n return;\n }\n let instance = new TypeIt(`#${id}`, {\n strings: this.contentData[id],\n afterComplete: () => {\n instance.destroy();\n typeone(i + 1);\n },\n }).go();\n })(0);\n }\n }\n }\n\n initComment() {\n if (this.config.comment && this.config.comment.gitalk) {\n this.config.comment.gitalk.body = decodeURI(window.location.href);\n const gitalk = new Gitalk(this.config.comment.gitalk.body);\n gitalk.render('gitalk');\n }\n if (this.config.comment && this.config.comment.valine) new Valine(this.config.comment.valine);\n }\n\n initSmoothScroll() {\n if ((!this.util.isMobile() && this.config.desktopHeaderMode === 'normal')\n || (this.util.isMobile() && this.config.mobileHeaderMode === 'normal')) {\n new SmoothScroll('[href^=\"#\"]', {speed: 300, speedAsDuration: true});\n } else {\n new SmoothScroll('[href^=\"#\"]', {speed: 300, speedAsDuration: true, header: '#header-desktop'});\n }\n }\n\n onScroll() {\n const $headers = [];\n if (this.config.desktopHeaderMode === 'auto') $headers.push(document.getElementById('header-desktop'));\n if (this.config.mobileHeaderMode === 'auto') $headers.push(document.getElementById('header-mobile'));\n if (document.getElementById('comments')) {\n const $viewComments = document.getElementById('view-comments');\n $viewComments.href = `#comments`;\n $viewComments.style.display = 'block';\n }\n const $fixedButtons = document.getElementById('fixed-buttons');\n const MIN_SCROLL = 20;\n window.addEventListener('scroll', () => {\n this.newScrollTop = this.util.getScrollTop();\n const scroll = this.newScrollTop - this.oldScrollTop;\n this.util.forEach($headers, $header => {\n if (scroll > MIN_SCROLL) {\n $header.classList.remove('fadeInDown');\n this.util.animateCSS($header, ['fadeOutUp', 'faster'], true);\n } else if (scroll < - MIN_SCROLL) {\n $header.classList.remove('fadeOutUp');\n this.util.animateCSS($header, ['fadeInDown', 'faster'], true);\n }\n });\n if (this.newScrollTop > MIN_SCROLL) {\n if (scroll > MIN_SCROLL) {\n $fixedButtons.classList.remove('fadeIn');\n this.util.animateCSS($fixedButtons, ['fadeOut', 'faster'], true);\n } else if (scroll < - MIN_SCROLL) {\n $fixedButtons.style.display = 'block';\n $fixedButtons.classList.remove('fadeOut');\n this.util.animateCSS($fixedButtons, ['fadeIn', 'faster'], true);\n }\n } else {\n $fixedButtons.style.display = 'none';\n }\n for (let event of this.scrollEventSet) event();\n this.oldScrollTop = this.newScrollTop;\n }, false);\n }\n\n onResize() {\n window.addEventListener('resize', () => {\n if (!this._resizeTimeout) {\n this._resizeTimeout = window.setTimeout(() => {\n this._resizeTimeout = null;\n for (let event of this.resizeEventSet) event();\n this.initToc();\n this.initSmoothScroll();\n this.initMermaid();\n this.initSearch();\n }, 100);\n }\n }, false);\n }\n\n onClickMask() {\n document.getElementById('mask').addEventListener('click', () => {\n for (let event of this.clickMaskEventSet) event();\n document.body.classList.remove('blur');\n }, false);\n }\n\n init() {\n this.initMenuMobile();\n this.initSwitchTheme();\n this.initSearch();\n this.initLightGallery();\n this.initHighlight();\n this.initTable();\n this.initHeaderLink();\n this.initMath();\n this.initMermaid();\n this.initEcharts();\n this.initMapbox();\n this.initTypeit();\n this.initToc();\n this.initComment();\n this.initSmoothScroll();\n\n this.onScroll();\n this.onResize();\n this.onClickMask();\n }\n}\n\nconst themeInit = () => {\n const theme = new Theme();\n theme.init();\n};\n\nif (document.readyState !== 'loading') {\n themeInit();\n} else {\n document.addEventListener('DOMContentLoaded', themeInit, false);\n}\n"]} \ No newline at end of file +{"version":3,"sources":["../../src/js/theme.js"],"names":[],"mappings":"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","file":"theme.min.js","sourcesContent":["class Util {\n forEach(elements, handler) {\n elements = elements || [];\n for (let i = 0; i < elements.length; i++) handler(elements[i]);\n }\n\n getScrollTop() {\n return (document.documentElement && document.documentElement.scrollTop) || document.body.scrollTop;\n }\n\n isMobile() {\n return window.matchMedia('only screen and (max-width: 680px)').matches;\n }\n\n isTocStatic() {\n return window.matchMedia('only screen and (max-width: 960px)').matches;\n }\n\n animateCSS(element, animation, reserved, callback) {\n if (!Array.isArray(animation)) animation = [animation];\n element.classList.add('animated', ...animation);\n const handler = () => {\n element.classList.remove('animated', ...animation);\n element.removeEventListener('animationend', handler);\n if (typeof callback === 'function') callback();\n };\n if (!reserved) element.addEventListener('animationend', handler, false);\n }\n}\n\nclass Theme {\n constructor() {\n this.config = window.config;\n this.data = this.config.data;\n this.isDark = document.body.classList.contains('dark');\n this.util = new Util();\n this.newScrollTop = this.util.getScrollTop();\n this.oldScrollTop = this.newScrollTop;\n this.scrollEventSet = new Set();\n this.resizeEventSet = new Set();\n this.switchThemeEventSet = new Set();\n this.clickMaskEventSet = new Set();\n }\n\n initMenuMobile() {\n const $menuToggleMobile = document.getElementById('menu-toggle-mobile');\n const $menuMobile = document.getElementById('menu-mobile');\n $menuToggleMobile.addEventListener('click', () => {\n document.body.classList.toggle('blur');\n $menuToggleMobile.classList.toggle('active');\n $menuMobile.classList.toggle('active');\n }, false);\n this._menuMobileOnClickMask = this._menuMobileOnClickMask || (() => {\n $menuToggleMobile.classList.remove('active');\n $menuMobile.classList.remove('active');\n });\n this.clickMaskEventSet.add(this._menuMobileOnClickMask);\n }\n\n initSwitchTheme() {\n this.util.forEach(document.getElementsByClassName('theme-switch'), $themeSwitch => {\n $themeSwitch.addEventListener('click', () => {\n document.body.classList.toggle('dark');\n this.isDark = !this.isDark;\n window.localStorage && localStorage.setItem('theme', this.isDark ? 'dark' : 'light');\n for (let event of this.switchThemeEventSet) event();\n }, false);\n });\n }\n\n initSearch() {\n const searchConfig = this.config.search;\n const isMobile = this.util.isMobile();\n if (!searchConfig || isMobile && this._searchMobileOnce || !isMobile && this._searchDesktopOnce) return;\n const classSuffix = isMobile ? 'mobile' : 'desktop';\n const $header = document.getElementById(`header-${classSuffix}`);\n const $searchInput = document.getElementById(`search-input-${classSuffix}`);\n const $searchToggle = document.getElementById(`search-toggle-${classSuffix}`);\n const $searchLoading = document.getElementById(`search-loading-${classSuffix}`);\n const $searchClear = document.getElementById(`search-clear-${classSuffix}`);\n if (isMobile) {\n this._searchMobileOnce = true;\n $searchInput.addEventListener('focus', () => {\n document.body.classList.add('blur');\n $header.classList.add('open');\n }, false);\n document.getElementById('search-cancel-mobile').addEventListener('click', () => {\n $header.classList.remove('open');\n document.body.classList.remove('blur');\n document.getElementById('menu-toggle-mobile').classList.remove('active');\n document.getElementById('menu-mobile').classList.remove('active');\n $searchLoading.style.display = 'none';\n $searchClear.style.display = 'none';\n this._searchMobile && this._searchMobile.autocomplete.setVal('');\n }, false);\n $searchClear.addEventListener('click', () => {\n $searchClear.style.display = 'none';\n this._searchMobile && this._searchMobile.autocomplete.setVal('');\n }, false);\n this._searchMobileOnClickMask = this._searchMobileOnClickMask || (() => {\n $header.classList.remove('open');\n $searchLoading.style.display = 'none';\n $searchClear.style.display = 'none';\n this._searchMobile && this._searchMobile.autocomplete.setVal('');\n });\n this.clickMaskEventSet.add(this._searchMobileOnClickMask);\n } else {\n this._searchDesktopOnce = true;\n $searchToggle.addEventListener('click', () => {\n document.body.classList.add('blur');\n $header.classList.add('open');\n $searchInput.focus();\n }, false);\n $searchClear.addEventListener('click', () => {\n $searchClear.style.display = 'none';\n this._searchDesktop && this._searchDesktop.autocomplete.setVal('');\n }, false);\n this._searchDesktopOnClickMask = this._searchDesktopOnClickMask || (() => {\n $header.classList.remove('open');\n $searchLoading.style.display = 'none';\n $searchClear.style.display = 'none';\n this._searchDesktop && this._searchDesktop.autocomplete.setVal('');\n });\n this.clickMaskEventSet.add(this._searchDesktopOnClickMask);\n }\n $searchInput.addEventListener('input', () => {\n if ($searchInput.value === '') $searchClear.style.display = 'none';\n else $searchClear.style.display = 'inline';\n }, false);\n\n const CONTEXT_LENGTH = 200;\n const initAutosearch = () => {\n const autosearch = autocomplete(`#search-input-${classSuffix}`, {\n hint: false,\n autoselect: true,\n dropdownMenuContainer: `#search-dropdown-${classSuffix}`,\n clearOnSelected: true,\n cssClasses: { noPrefix: true },\n // debug: true,\n }, {\n name: 'search',\n source: (query, callback) => {\n $searchLoading.style.display = 'inline';\n $searchClear.style.display = 'none';\n const finish = (results) => {\n $searchLoading.style.display = 'none';\n $searchClear.style.display = 'inline';\n callback(results);\n };\n if (searchConfig.type === 'lunr') {\n const search = () => {\n if (lunr.queryHandler) query = lunr.queryHandler(query);\n return this._index.search(query).slice(0, 12).map(({ ref, matchData: { metadata } }) => {\n const matchData = this._indexData[ref];\n let { title, content: context } = matchData;\n let position = 0;\n Object.values(metadata).forEach(({ description, content }) => {\n if (description) {\n context = matchData.description;\n position = -1;\n } else if (content) {\n const matchPosition = content.position[0][0];\n if (matchPosition < position || position === 0) position = matchPosition;\n }\n });\n position -= CONTEXT_LENGTH / 5;\n if (position > 0) {\n position += context.substr(position, 25).lastIndexOf(' ') + 1;\n context = '...' + context.substr(position, CONTEXT_LENGTH);\n } else {\n context = context.substr(0, CONTEXT_LENGTH);\n }\n Object.keys(metadata).forEach(key => {\n title = title.replace(new RegExp(`(${key})`, 'gi'), '$1');\n context = context.replace(new RegExp(`(${key})`, 'gi'), '$1');\n });\n return {\n 'uri': matchData.uri,\n 'title' : title,\n 'date' : matchData.date,\n 'context' : context,\n };\n });\n }\n if (!this._index) {\n fetch(searchConfig.lunrIndexURL)\n .then(response => response.json())\n .then(data => {\n const indexData = {};\n this._index = lunr(function () {\n if (searchConfig.lunrLanguageCode) this.use(lunr[searchConfig.lunrLanguageCode]);\n this.ref('uri');\n this.field('title', { boost: 50 });\n this.field('tags', { boost: 20 });\n this.field('description', { boost: 10 });\n this.field('content', { boost: 5 });\n this.metadataWhitelist = ['position'];\n data.forEach((record) => {\n indexData[record.uri] = record;\n this.add(record);\n });\n });\n this._indexData = indexData;\n finish(search());\n }).catch(err => {\n console.error(err);\n finish([]);\n });\n } else finish(search());\n } else if (searchConfig.type === 'algolia') {\n $searchLoading.style.display = 'inline';\n $searchClear.style.display = 'none';\n this._algoliaIndex = this._algoliaIndex || algoliasearch(searchConfig.algoliaAppID, searchConfig.algoliaSearchKey).initIndex(searchConfig.algoliaIndex);\n this._algoliaIndex\n .search(query, { offset: 0, length: 12, attributesToHighlight: ['title', 'content'] })\n .then(({ hits }) => {\n finish(hits.map(({ uri, date, _highlightResult: { title, content } }) => ({\n uri: uri,\n title: title.value,\n date: date,\n context: content.value,\n })));\n })\n .catch(err => {\n console.error(err);\n finish([]);\n });\n }\n },\n templates: {\n suggestion: ({ title, date, context }) => `
${title}${date}
${context}
`,\n empty: ({ query }) => `
${searchConfig.noResultsFound}: \"${query}\"
`,\n footer: ({}) => {\n const { searchType, icon, href } = searchConfig.type === 'algolia' ? {\n searchType: 'algolia',\n icon: '',\n href: 'https://www.algolia.com/',\n } : {\n searchType: 'Lunr.js',\n icon: '',\n href: 'https://lunrjs.com/',\n };\n return ``;},\n },\n });\n autosearch.on('autocomplete:selected', (event, suggestion, dataset, context) => {\n window.location.assign(suggestion.uri);\n });\n if (isMobile) this._searchMobile = autosearch;\n else this._searchDesktop = autosearch;\n };\n if (searchConfig.lunrSegmentitURL && !document.getElementById('lunr-segmentit')) {\n const script = document.createElement('script');\n script.id = 'lunr-segmentit';\n script.type = 'text/javascript';\n script.src = searchConfig.lunrSegmentitURL;\n script.async = true;\n if (script.readyState) {\n script.onreadystatechange = () => {\n if (script.readyState == 'loaded' || script.readyState == 'complete'){\n script.onreadystatechange = null;\n initAutosearch();\n }\n };\n } else {\n script.onload = () => {\n initAutosearch();\n };\n }\n document.body.appendChild(script);\n } else initAutosearch();\n }\n\n initLightGallery() {\n if (this.config.lightGallery) lightGallery(document.getElementById('content'), this.config.lightGallery);\n }\n\n initHighlight() {\n this.util.forEach(document.querySelectorAll('.highlight > .chroma'), $chroma => {\n const $elements = $chroma.querySelectorAll('pre.chroma > code');\n if ($elements.length) {\n $chroma.className += ' ' + $elements[$elements.length - 1].className.toLowerCase();\n $elements[0].classList.add('lnc');\n $elements[$elements.length - 1].classList.remove('lnc');\n }\n });\n this.util.forEach(document.querySelectorAll('.highlight > pre.chroma'), $preChroma => {\n const $chroma = document.createElement('div');\n $chroma.className = $preChroma.className;\n const $table = document.createElement('table');\n $chroma.appendChild($table);\n const $tbody = document.createElement('tbody');\n $table.appendChild($tbody);\n const $tr = document.createElement('tr');\n $tbody.appendChild($tr);\n const $td = document.createElement('td');\n $tr.appendChild($td);\n $preChroma.parentElement.replaceChild($chroma, $preChroma);\n $td.appendChild($preChroma);\n });\n this.util.forEach(document.querySelectorAll('pre > code'), $code => {\n $code.classList.add('block');\n if ($code.classList.contains('lnc') || !this.config.clipboard) return;\n const $button = document.createElement('div');\n $button.classList.add('copy-button');\n $button.innerHTML = '';\n $button.setAttribute('data-clipboard-text', $code.innerText);\n $button.title = this.config.clipboard.title;\n const clipboard = new ClipboardJS($button);\n clipboard.on('success', e => {\n this.util.animateCSS($code, 'flash');\n });\n $code.after($button);\n });\n }\n\n initTable() {\n this.util.forEach(document.querySelectorAll('.content table'), $table => {\n const $wrapper = document.createElement('div');\n $wrapper.className = 'table-wrapper';\n $table.parentElement.replaceChild($wrapper, $table);\n $wrapper.appendChild($table);\n });\n }\n\n initHeaderLink() {\n for (let num = 1; num <= 6; num++) {\n this.util.forEach(document.querySelectorAll('.page.single .content > h' + num), $header => {\n $header.classList.add('headerLink');\n $header.innerHTML = `${$header.innerHTML}`;\n });\n }\n }\n\n initToc() {\n const $tocCore = document.getElementById('TableOfContents');\n if ($tocCore === null) return;\n if (this.util.isTocStatic()) {\n const $tocContentStatic = document.getElementById('toc-content-static');\n if ($tocCore.parentElement !== $tocContentStatic) {\n $tocCore.parentElement.removeChild($tocCore);\n $tocContentStatic.appendChild($tocCore);\n }\n if (this._tocOnScroll) this.scrollEventSet.delete(this._tocOnScroll);\n } else {\n const $tocContentAuto = document.getElementById('toc-content-auto');\n if ($tocCore.parentElement !== $tocContentAuto) {\n $tocCore.parentElement.removeChild($tocCore);\n $tocContentAuto.appendChild($tocCore);\n }\n const $toc = document.getElementById('toc-auto');\n const $page = document.getElementsByClassName('page')[0];\n const rect = $page.getBoundingClientRect();\n $toc.style.left = `${rect.left + rect.width + 20}px`;\n $toc.style.maxWidth = `${$page.getBoundingClientRect().left - 20}px`;\n const $tocLinkElements = $tocCore.getElementsByTagName('a');\n const $tocLiElements = $tocCore.getElementsByTagName('li');\n const $headerLinkElements = document.getElementsByClassName('headerLink');\n const headerIsFixed = this.config.headerMode.desktop !== 'normal';\n const headerHeight = document.getElementById('header-desktop').offsetHeight;\n const TOP_SPACING = 20 + (headerIsFixed ? headerHeight : 0);\n const minTocTop = $toc.offsetTop;\n const minScrollTop = minTocTop - TOP_SPACING + (headerIsFixed ? 0 : headerHeight);\n this._tocOnScroll = this._tocOnScroll || (() => {\n const footerTop = document.getElementById('post-footer').offsetTop;\n const maxTocTop = footerTop - $toc.getBoundingClientRect().height;\n const maxScrollTop = maxTocTop - TOP_SPACING + (headerIsFixed ? 0 : headerHeight);\n if (this.newScrollTop < minScrollTop) {\n $toc.style.position = 'absolute';\n $toc.style.top = `${minTocTop}px`;\n } else if (this.newScrollTop > maxScrollTop) {\n $toc.style.position = 'absolute';\n $toc.style.top = `${maxTocTop}px`;\n } else {\n $toc.style.position = 'fixed';\n $toc.style.top = `${TOP_SPACING}px`;\n }\n\n this.util.forEach($tocLinkElements, $tocLink => { $tocLink.classList.remove('active'); });\n this.util.forEach($tocLiElements, $tocLi => { $tocLi.classList.remove('has-active'); });\n const INDEX_SPACING = 20 + (headerIsFixed ? headerHeight : 0);\n let activeTocIndex = $headerLinkElements.length - 1;\n for (let i = 0; i < $headerLinkElements.length - 1; i++) {\n const thisTop = $headerLinkElements[i].getBoundingClientRect().top;\n const nextTop = $headerLinkElements[i + 1].getBoundingClientRect().top;\n if ((i == 0 && thisTop > INDEX_SPACING)\n || (thisTop <= INDEX_SPACING && nextTop > INDEX_SPACING)) {\n activeTocIndex = i;\n break;\n }\n }\n if (activeTocIndex !== -1) {\n $tocLinkElements[activeTocIndex].classList.add('active');\n let $parent = $tocLinkElements[activeTocIndex].parentElement;\n while ($parent !== $tocCore) {\n $parent.classList.add('has-active');\n $parent = $parent.parentElement.parentElement;\n }\n }\n });\n this._tocOnScroll();\n this.scrollEventSet.add(this._tocOnScroll);\n }\n }\n\n initMath() {\n if (this.config.math) renderMathInElement(document.body, this.config.math);\n }\n\n initMermaid() {\n const $mermaidElements = document.getElementsByClassName('mermaid');\n if ($mermaidElements.length) {\n mermaid.initialize({startOnLoad: false, theme: 'null'});\n this.util.forEach($mermaidElements, $mermaid => {\n mermaid.mermaidAPI.render('svg-' + $mermaid.id, this.data[$mermaid.id], svgCode => {\n $mermaid.innerHTML = svgCode;\n }, $mermaid);\n });\n }\n }\n\n initEcharts() {\n this._echartsOnSwitchTheme = this._echartsOnSwitchTheme || (() => {\n this._echartsArr = this._echartsArr || [];\n for (let i = 0; i < this._echartsArr.length; i++) {\n this._echartsArr[i].dispose();\n }\n this._echartsArr = [];\n this.util.forEach(document.getElementsByClassName('echarts'), $echarts => {\n const chart = echarts.init($echarts, this.isDark ? 'dark' : 'macarons', {renderer: 'svg'});\n chart.setOption(JSON.parse(this.data[$echarts.id]));\n this._echartsArr.push(chart);\n });\n });\n this.switchThemeEventSet.add(this._echartsOnSwitchTheme);\n this._echartsOnSwitchTheme();\n this._echartsOnResize = this._echartsOnResize || (() => {\n for (let i = 0; i < this._echartsArr.length; i++) {\n this._echartsArr[i].resize();\n }\n });\n this.resizeEventSet.add(this._echartsOnResize);\n }\n\n initMapbox() {\n if (this.config.mapbox) {\n mapboxgl.accessToken = this.config.mapbox.accessToken;\n mapboxgl.setRTLTextPlugin(this.config.mapbox.RTLTextPlugin);\n this._mapboxArr = this._mapboxArr || [];\n this.util.forEach(document.getElementsByClassName('mapbox'), $mapbox => {\n const { lng, lat, zoom, lightStyle, darkStyle, marked, navigation, geolocate, scale, fullscreen } = this.data[$mapbox.id];\n const mapbox = new mapboxgl.Map({\n container: $mapbox,\n center: [lng, lat],\n zoom: zoom,\n minZoom: .2,\n style: this.isDark ? darkStyle : lightStyle,\n attributionControl: false,\n });\n if (marked) {\n new mapboxgl.Marker().setLngLat([lng, lat]).addTo(mapbox);\n }\n if (navigation) {\n mapbox.addControl(new mapboxgl.NavigationControl(), 'bottom-right');\n }\n if (geolocate) {\n mapbox.addControl(new mapboxgl.GeolocateControl({\n positionOptions: {\n enableHighAccuracy: true,\n },\n showUserLocation: true,\n trackUserLocation: true,\n }), 'bottom-right');\n }\n if (scale) {\n mapbox.addControl(new mapboxgl.ScaleControl());\n }\n if (fullscreen) {\n mapbox.addControl(new mapboxgl.FullscreenControl());\n }\n mapbox.addControl(new MapboxLanguage());\n this._mapboxArr.push(mapbox);\n });\n this._mapboxOnSwitchTheme = this._mapboxOnSwitchTheme || (() => {\n this.util.forEach(this._mapboxArr, mapbox => {\n const $mapbox = mapbox.getContainer();\n const { lightStyle, darkStyle } = this.data[$mapbox.id];\n mapbox.setStyle(this.isDark ? darkStyle : lightStyle);\n mapbox.addControl(new MapboxLanguage());\n });\n });\n this.switchThemeEventSet.add(this._mapboxOnSwitchTheme);\n }\n }\n\n initTypeit() {\n if (this.config.typeit) {\n this.config.typeit.forEach(group => {\n const typeone = (i) => {\n const id = group[i];\n if (i === group.length - 1) {\n new TypeIt(`#${id}`, {\n strings: this.data[id],\n }).go();\n return;\n }\n let instance = new TypeIt(`#${id}`, {\n strings: this.data[id],\n afterComplete: () => {\n instance.destroy();\n typeone(i + 1);\n },\n }).go();\n };\n typeone(0);\n });\n }\n }\n\n initComment() {\n if (this.config.comment && this.config.comment.gitalk) {\n this.config.comment.gitalk.body = decodeURI(window.location.href);\n const gitalk = new Gitalk(this.config.comment.gitalk.body);\n gitalk.render('gitalk');\n }\n if (this.config.comment && this.config.comment.valine) new Valine(this.config.comment.valine);\n }\n\n initSmoothScroll() {\n if ((!this.util.isMobile() && this.config.headerMode.desktop === 'normal')\n || (this.util.isMobile() && this.config.headerMode.mobile === 'normal')) {\n new SmoothScroll('[href^=\"#\"]', {speed: 300, speedAsDuration: true});\n } else {\n new SmoothScroll('[href^=\"#\"]', {speed: 300, speedAsDuration: true, header: '#header-desktop'});\n }\n }\n\n onScroll() {\n const $headers = [];\n if (this.config.headerMode.desktop === 'auto') $headers.push(document.getElementById('header-desktop'));\n if (this.config.headerMode.mobile === 'auto') $headers.push(document.getElementById('header-mobile'));\n if (document.getElementById('comments')) {\n const $viewComments = document.getElementById('view-comments');\n $viewComments.href = `#comments`;\n $viewComments.style.display = 'block';\n }\n const $fixedButtons = document.getElementById('fixed-buttons');\n const MIN_SCROLL = 20;\n window.addEventListener('scroll', () => {\n this.newScrollTop = this.util.getScrollTop();\n const scroll = this.newScrollTop - this.oldScrollTop;\n this.util.forEach($headers, $header => {\n if (scroll > MIN_SCROLL) {\n $header.classList.remove('fadeInDown');\n this.util.animateCSS($header, ['fadeOutUp', 'faster'], true);\n } else if (scroll < - MIN_SCROLL) {\n $header.classList.remove('fadeOutUp');\n this.util.animateCSS($header, ['fadeInDown', 'faster'], true);\n }\n });\n if (this.newScrollTop > MIN_SCROLL) {\n if (scroll > MIN_SCROLL) {\n $fixedButtons.classList.remove('fadeIn');\n this.util.animateCSS($fixedButtons, ['fadeOut', 'faster'], true);\n } else if (scroll < - MIN_SCROLL) {\n $fixedButtons.style.display = 'block';\n $fixedButtons.classList.remove('fadeOut');\n this.util.animateCSS($fixedButtons, ['fadeIn', 'faster'], true);\n }\n } else {\n $fixedButtons.style.display = 'none';\n }\n for (let event of this.scrollEventSet) event();\n this.oldScrollTop = this.newScrollTop;\n }, false);\n }\n\n onResize() {\n window.addEventListener('resize', () => {\n if (!this._resizeTimeout) {\n this._resizeTimeout = window.setTimeout(() => {\n this._resizeTimeout = null;\n for (let event of this.resizeEventSet) event();\n this.initToc();\n this.initSmoothScroll();\n this.initMermaid();\n this.initSearch();\n }, 100);\n }\n }, false);\n }\n\n onClickMask() {\n document.getElementById('mask').addEventListener('click', () => {\n for (let event of this.clickMaskEventSet) event();\n document.body.classList.remove('blur');\n }, false);\n }\n\n init() {\n this.initMenuMobile();\n this.initSwitchTheme();\n this.initSearch();\n this.initLightGallery();\n this.initHighlight();\n this.initTable();\n this.initHeaderLink();\n this.initToc();\n this.initComment();\n this.initSmoothScroll();\n this.initMath();\n this.initMermaid();\n this.initEcharts();\n this.initTypeit();\n this.initMapbox();\n\n this.onScroll();\n this.onResize();\n this.onClickMask();\n }\n}\n\nconst themeInit = () => {\n const theme = new Theme();\n theme.init();\n};\n\nif (document.readyState !== 'loading') {\n themeInit();\n} else {\n document.addEventListener('DOMContentLoaded', themeInit, false);\n}\n"]} \ No newline at end of file diff --git a/assets/svg/version.template.svg b/assets/svg/version.template.svg index ffcbeab..32ce06d 100644 --- a/assets/svg/version.template.svg +++ b/assets/svg/version.template.svg @@ -1,5 +1,5 @@ {{- /* https://img.shields.io/badge/$label-$version-$color?style=flat-square&labelColor=403c3d */ -}} -{{- $labelLength := strings.RuneCount .label | mul 60 | add 120 -}} +{{- $labelLength := strings.RuneCount .label | mul 64 | add 100 -}} {{- $versionLength := strings.RuneCount .version | mul 60 -}} diff --git a/exampleSite/config.toml b/exampleSite/config.toml index 959ddae..f5163d6 100644 --- a/exampleSite/config.toml +++ b/exampleSite/config.toml @@ -38,9 +38,7 @@ enableEmoji = true googleAnalytics = "" # copyright description used only for seo schema copyright = "This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License." - # date format - dateFormatToUse = "2006-01-02" - # Menu Info + # Menu config [languages.en.menu] [[languages.en.menu.main]] identifier = "posts" @@ -91,22 +89,22 @@ enableEmoji = true description = "About LoveIt Theme" # site keywords keywords = ["Theme", "Hugo"] - # site default theme ("light", "dark", "auto") - defaultTheme = "auto" - # Search + # Search config [languages.en.params.search] enable = true # type of search engine ("lunr", "algolia") type = "algolia" # index length of the content contentLength = 5000 + # placeholder of the search bar + placeholder = "" [languages.en.params.search.algolia] index = "index.en" appID = "PASDMWALPK" searchKey = "b42948e51daaa93df92381c8e2ac0f93" - # Home Page Info + # Home page config [languages.en.params.home] - # Home Page Profile + # Home page profile [languages.en.params.home.profile] enable = true # Gravatar Email for preferred avatar in home page @@ -121,14 +119,12 @@ enableEmoji = true social = true # disclaimer (HTML format is supported) disclaimer = "" - # Home Page Posts + # Home page posts [languages.en.params.home.posts] enable = true # special amount of posts in each home posts page paginate = 6 - # default behavior when you don't set "hiddenFromHomePage" in front matter - defaultHiddenFromHomePage = false - # Social Info in home page + # Social config in home page [languages.en.params.social] GitHub = "xxxx" Linkedin = "xxxx" @@ -194,82 +190,6 @@ enableEmoji = true # XMPP = "xxxx" # Matrix = "xxxx" # Bilibili = "xxxx" - # Social Share Links in post page - [languages.en.params.share] - enable = true - Twitter = true - Facebook = true - Linkedin = true - Whatsapp = true - Pinterest = true - # Tumblr = true - HackerNews = true - # Reddit = true - # VK = true - # Buffer = true - # Xing = true - # Line = true - # Instapaper = true - # Pocket = true - # Digg = true - # Stumbleupon = true - # Flipboard = true - # Weibo = true - # Renren = true - # Myspace = true - # Blogger = true - # Baidu = true - # Odnoklassniki = true - # Evernote = true - # Skype = true - # Trello = true - # Mix = true - # Comment Config - [languages.en.params.comment] - enable = true - # Disqus Comment Config (https://disqus.com/) - [languages.en.params.comment.disqus] - enable = false - # Disqus shortname to use Disqus in posts - shortname = "" - # Gitalk Comment Config (https://github.com/gitalk/gitalk) - [languages.en.params.comment.gitalk] - enable = false - owner = "" - repo = "" - clientId = "" - clientSecret = "" - # Valine Comment Config (https://github.com/xCss/Valine) - [languages.en.params.comment.valine] - enable = true - appId = "QGzwQXOqs5JOhN4RGPOkR2mR-MdYXbMMI" - appKey = "WBmoGyJtbqUswvfLh6L8iEBr" - placeholder = "Your comment ..." - notify = false - verify = true - avatar = "mp" - meta= "" - pageSize = 10 - lang = "en" - visitor = true - recordIP = true - # Facebook Comment Config (https://developers.facebook.com/docs/plugins/comments) - [languages.en.params.comment.facebook] - enable = false - width = "100%" - numPosts = 10 - appId = "" - languageCode = "en_US" - # Telegram Comments Config (https://comments.app/) - [languages.en.params.comment.telegram] - enable = false - siteID = "" - limit = 5 - height = "" - color = "" - colorful = true - dislikes = false - outlined = false [languages.zh-cn] weight = 2 @@ -285,9 +205,7 @@ enableEmoji = true googleAnalytics = "" # 版权描述,仅仅用于 SEO copyright = "This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License." - # 日期格式 - dateFormatToUse = "2006-01-02" - # 菜单信息 + # 菜单配置 [languages.zh-cn.menu] [[languages.zh-cn.menu.main]] identifier = "posts" @@ -336,15 +254,15 @@ enableEmoji = true description = "关于 LoveIt 主题" # 网站关键词 keywords = ["Theme", "Hugo"] - # 网站默认主题 ("light", "dark", "auto") - defaultTheme = "auto" - # 搜索 + # 搜索配置 [languages.zh-cn.params.search] enable = true # 搜索引擎的类型 ("lunr", "algolia") type = "algolia" # 文章内容索引长度 contentLength = 5000 + # 搜索框的占位提示语 + placeholder = "" [languages.zh-cn.params.search.algolia] index = "index.zh-cn" appID = "PASDMWALPK" @@ -371,8 +289,6 @@ enableEmoji = true enable = true # 主页每页显示文章数量 paginate = 6 - # 当你没有在文章前面设置 "hiddenFromHomePage" 时的默认行为 - defaultHiddenFromHomePage = false # 主页的社交信息设置 [languages.zh-cn.params.social] GitHub = "xxxx" @@ -439,82 +355,6 @@ enableEmoji = true # XMPP = "xxxx@example.com" # Matrix = "xxxx" Bilibili = "xxxx" - # 文章页面的分享信息设置 - [languages.zh-cn.params.share] - enable = true - Twitter = true - Facebook = true - # Linkedin = true - # Whatsapp = true - # Pinterest = true - # Tumblr = true - # HackerNews = true - # Reddit = true - # VK = true - # Buffer = true - # Xing = true - # Line = true - # Instapaper = true - # Pocket = true - # Digg = true - # Stumbleupon = true - # Flipboard = true - Weibo = true - Renren = true - # Myspace = true - # Blogger = true - Baidu = true - # Odnoklassniki = true - Evernote = true - # Skype = true - # Trello = true - # Mix = true - # 评论系统设置 - [languages.zh-cn.params.comment] - enable = true - # Disqus 评论系统设置 (https://disqus.com/) - [languages.zh-cn.params.comment.disqus] - enable = false - # Disqus 的 shortname,用来在文章中启用 Disqus 评论系统 - shortname = "" - # Gitalk 评论系统设置 (https://github.com/gitalk/gitalk) - [languages.zh-cn.params.comment.gitalk] - enable = false - owner = "" - repo = "" - clientId = "" - clientSecret = "" - # Valine 评论系统设置 (https://github.com/xCss/Valine) - [languages.zh-cn.params.comment.valine] - enable = true - appId = "QGzwQXOqs5JOhN4RGPOkR2mR-MdYXbMMI" - appKey = "WBmoGyJtbqUswvfLh6L8iEBr" - placeholder = "你的评论 ..." - notify = false - verify = true - avatar = "mp" - meta= "" - pageSize = 10 - lang = "zh-cn" - visitor = true - recordIP = true - # Facebook 评论系统设置 (https://developers.facebook.com/docs/plugins/comments) - [languages.zh-cn.params.comment.facebook] - enable = false - width = "100%" - numPosts = 10 - appId = "" - languageCode = "zh_CN" - # Telegram Comments 评论系统设置 (https://comments.app/) - [languages.zh-cn.params.comment.telegram] - enable = false - siteID = "" - limit = 5 - height = "" - color = "" - colorful = true - dislikes = false - outlined = false [languages.fr] weight = 3 @@ -530,9 +370,7 @@ enableEmoji = true googleAnalytics = "" # copyright description used only for seo schema copyright = "This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License." - # date format - dateFormatToUse = "2006-01-02" - # Menu Info + # Menu config [languages.fr.menu] [[languages.fr.menu.main]] identifier = "posts" @@ -581,22 +419,22 @@ enableEmoji = true description = "À propos du thème LoveIt" # site keywords keywords = ["Thème", "Hugo"] - # site default theme ("light", "dark", "auto") - defaultTheme = "auto" - # Search + # Search config [languages.fr.params.search] enable = true # type of search engine ("lunr", "algolia") type = "algolia" # index length of the content contentLength = 5000 + # placeholder of the search bar + placeholder = "" [languages.fr.params.search.algolia] index = "index.fr" appID = "PASDMWALPK" searchKey = "b42948e51daaa93df92381c8e2ac0f93" - # Home Page Info + # Home page config [languages.fr.params.home] - # Home Page Profile + # Home page profile [languages.fr.params.home.profile] enable = true # Gravatar Email for preferred avatar in home page @@ -611,14 +449,12 @@ enableEmoji = true social = true # disclaimer (HTML format is supported) disclaimer = "" - # Home Page Posts + # Home page posts [languages.fr.params.home.posts] enable = true # special amount of posts in each home posts page paginate = 6 - # default behavior when you don't set "hiddenFromHomePage" in front matter - defaultHiddenFromHomePage = false - # Social Info in home page + # Social config in home page [languages.fr.params.social] GitHub = "xxxx" Linkedin = "xxxx" @@ -684,95 +520,25 @@ enableEmoji = true # XMPP = "xxxx" # Matrix = "xxxx" # Bilibili = "xxxx" - # Social Share Links in post page - [languages.fr.params.share] - enable = true - Twitter = true - Facebook = true - Linkedin = true - Whatsapp = true - Pinterest = true - # Tumblr = true - HackerNews = true - # Reddit = true - # VK = true - # Buffer = true - # Xing = true - # Line = true - # Instapaper = true - # Pocket = true - # Digg = true - # Stumbleupon = true - # Flipboard = true - # Weibo = true - # Renren = true - # Myspace = true - # Blogger = true - # Baidu = true - # Odnoklassniki = true - # Evernote = true - # Skype = true - # Trello = true - # Mix = true - # Comment Config - [languages.fr.params.comment] - enable = true - # Disqus Comment Config (https://disqus.com/) - [languages.fr.params.comment.disqus] - enable = false - # Disqus shortname to use Disqus in posts - shortname = "" - # Gitalk Comment Config (https://github.com/gitalk/gitalk) - [languages.fr.params.comment.gitalk] - enable = false - owner = "" - repo = "" - clientId = "" - clientSecret = "" - # Valine Comment Config (https://github.com/xCss/Valine) - [languages.fr.params.comment.valine] - enable = true - appId = "QGzwQXOqs5JOhN4RGPOkR2mR-MdYXbMMI" - appKey = "WBmoGyJtbqUswvfLh6L8iEBr" - placeholder = "Votre commentaire ..." - notify = false - verify = true - avatar = "mp" - meta= "" - pageSize = 10 - lang = "en" - visitor = true - recordIP = true - # Facebook Comment Config (https://developers.facebook.com/docs/plugins/comments) - [languages.fr.params.comment.facebook] - enable = false - width = "100%" - numPosts = 10 - appId = "" - languageCode = "fr" - # Telegram Comments Config (https://comments.app/) - [languages.fr.params.comment.telegram] - enable = false - siteID = "" - limit = 5 - height = "" - color = "" - colorful = true - dislikes = false - outlined = false [params] # LoveIt theme version # LoveIt 主题版本 version = "0.2.X" + # site default theme ("light", "dark", "auto") + # 网站默认主题 ("light", "dark", "auto") + defaultTheme = "auto" # public git repo url only then enableGitInfo is true # 公共 git 仓库路径,仅在 enableGitInfo 设为 true 时有效 gitRepo = "https://github.com/dillonzq/LoveIt" # which hash function used for SRI, when empty, no SRI is used ("sha256", "sha384", "sha512", "md5") # 哪种哈希函数用来 SRI, 为空时表示不使用 SRI ("sha256", "sha384", "sha512", "md5") fingerprint = "" - # Header info - # 页面头部导航栏信息 + # date format + # 日期格式 + dateFormat = "2006-01-02" + # Header config + # 页面头部导航栏配置 [params.header] # desktop header mode ("fixed", "normal", "auto") # 桌面端导航栏模式 ("fixed", "normal", "auto") @@ -780,10 +546,23 @@ enableEmoji = true # mobile header mode ("fixed", "normal", "auto") # 移动端导航栏模式 ("fixed", "normal", "auto") mobileMode = "auto" - # Footer Copyright Info - # 页面底部版权信息设置 + # Footer config + # 页面底部信息配置 [params.footer] - # Site creation time + enable = true + # Custom content (HTML format is supported) + # 自定义内容 (支持 HTML 格式) + custom = '' + # whether to show Hugo and theme info + # 是否显示 Hugo 和主题信息 + hugo = true + # whether to show copyright info + # 是否显示版权信息 + copyright = true + # whether to show the author + # 是否显示作者 + author = true + # site creation time # 网站创立年份 since = 2019 # ICP info only in China (HTML format is supported) @@ -792,57 +571,209 @@ enableEmoji = true # license info (HTML format is supported) # 许可协议信息 (支持 HTML 格式) license= 'CC BY-NC 4.0' + # Section (all posts) page config + # Section (所有文章) 页面配置 + [params.section] + # special amount of posts in each section page + # section 页面每页显示文章数量 + paginate = 20 + # date format (month and day) + # 日期格式 (月和日) + dateFormat = "01-02" + # List (category or tag) page config + # List (目录或标签) 页面配置 + [params.list] + # special amount of posts in each list page + # list 页面每页显示文章数量 + paginate = 20 + # date format (month and day) + # 日期格式 (月和日) + dateFormat = "01-02" # Page config # 文章页面配置 [params.page] - # whether to use lightgallery in the page - # 是否在文章页面使用 lightgallery - lightgallery = true - # whether to show link to Raw Markdown content of the post - # 是否在文章页面显示原始 Markdown 文档链接 + # whether to hide a page from home page + # 是否在主页隐藏一篇文章 + hiddenFromHomePage = false + # whether to hide a page from search results + # 是否在搜索结果中隐藏一篇文章 + hiddenFromSearch = false + # whether to enable lightgallery + # 是否使用 lightgallery + lightgallery = false + # whether to show the copy button of the code block + # 是否显示代码块的复制按钮 + copyCode = true + # whether to enable the ruby extended syntax + # 是否使用 ruby 扩展语法 + ruby = true + # whether to enable the fraction extended syntax + # 是否使用 fraction 扩展语法 + fraction = true + # whether to enable the fontawesome extended syntax + # 是否使用 fontawesome 扩展语法 + fontawesome = true + # whether to show link to Raw Markdown content of the content + # 是否显示原始 Markdown 文档内容的链接 linkToMarkdown = true - # KaTeX mathematical formulas config (KaTeX https://katex.org/) - # KaTeX 数学公式配置 (KaTeX https://katex.org/) - [params.math] - enable = true - # default block delimiter is $$ ... $$ and \\[ ... \\] - # 默认块定界符是 $$ ... $$ 和 \\[ ... \\] - blockLeftDelimiter = "" - blockRightDelimiter = "" - # default inline delimiter is $ ... $ and \\( ... \\) - # 默认内联定界符是 $ ... $ 和 \\( ... \\) - inlineLeftDelimiter = "" - inlineRightDelimiter = "" - # KaTeX extension copy_tex - # KaTeX 插件 copy_tex - copyTex = true - # KaTeX extension mhchem - # KaTeX 插件 mhchem - mhchem = true - # Mapbox GL JS config (Mapbox GL JS https://docs.mapbox.com/mapbox-gl-js) - # Mapbox GL JS 配置 (Mapbox GL JS https://docs.mapbox.com/mapbox-gl-js) - [params.mapbox] - # access token of Mapbox GL JS - # Mapbox GL JS 的 access token - accessToken = "pk.eyJ1IjoiZGlsbG9uenEiLCJhIjoiY2s2czd2M2x3MDA0NjNmcGxmcjVrZmc2cyJ9.aSjv2BNuZUfARvxRYjSVZQ" - # style for the light theme - # 浅色主题的地图样式 - lightStyle = "mapbox://styles/mapbox/light-v9?optimize=true" - # style for the dark theme - # 深色主题的地图样式 - darkStyle = "mapbox://styles/mapbox/dark-v9?optimize=true" - # whether to add NavigationControl (https://docs.mapbox.com/mapbox-gl-js/api/#navigationcontrol) - # 是否添加 NavigationControl (https://docs.mapbox.com/mapbox-gl-js/api/#navigationcontrol) - navigation = true - # whether to add GeolocateControl (https://docs.mapbox.com/mapbox-gl-js/api/#geolocatecontrol) - # 是否添加 GeolocateControl (https://docs.mapbox.com/mapbox-gl-js/api/#geolocatecontrol) - geolocate = true - # whether to add ScaleControl (https://docs.mapbox.com/mapbox-gl-js/api/#scalecontrol) - # 是否添加 ScaleControl (https://docs.mapbox.com/mapbox-gl-js/api/#scalecontrol) - scale = true - # whether to add FullscreenControl (https://docs.mapbox.com/mapbox-gl-js/api/#fullscreencontrol) - # 是否添加 FullscreenControl (https://docs.mapbox.com/mapbox-gl-js/api/#fullscreencontrol) - fullscreen = true + # Table of the contents config + # 目录配置 + [params.page.toc] + # whether to enable the table of the contents + # 是否使用目录 + enable = true + # whether to make the table of the contents automatically collapsed + # 是否使目录自动折叠展开 + auto = true + # KaTeX mathematical formulas config (KaTeX https://katex.org/) + # KaTeX 数学公式配置 (KaTeX https://katex.org/) + [params.page.math] + enable = false + # default block delimiter is $$ ... $$ and \\[ ... \\] + # 默认块定界符是 $$ ... $$ 和 \\[ ... \\] + blockLeftDelimiter = "" + blockRightDelimiter = "" + # default inline delimiter is $ ... $ and \\( ... \\) + # 默认内联定界符是 $ ... $ 和 \\( ... \\) + inlineLeftDelimiter = "" + inlineRightDelimiter = "" + # KaTeX extension copy_tex + # KaTeX 插件 copy_tex + copyTex = true + # KaTeX extension mhchem + # KaTeX 插件 mhchem + mhchem = true + # Mapbox GL JS config (Mapbox GL JS https://docs.mapbox.com/mapbox-gl-js) + # Mapbox GL JS 配置 (Mapbox GL JS https://docs.mapbox.com/mapbox-gl-js) + [params.page.mapbox] + # access token of Mapbox GL JS + # Mapbox GL JS 的 access token + accessToken = "pk.eyJ1IjoiZGlsbG9uenEiLCJhIjoiY2s2czd2M2x3MDA0NjNmcGxmcjVrZmc2cyJ9.aSjv2BNuZUfARvxRYjSVZQ" + # style for the light theme + # 浅色主题的地图样式 + lightStyle = "mapbox://styles/mapbox/light-v9?optimize=true" + # style for the dark theme + # 深色主题的地图样式 + darkStyle = "mapbox://styles/mapbox/dark-v9?optimize=true" + # whether to add NavigationControl (https://docs.mapbox.com/mapbox-gl-js/api/#navigationcontrol) + # 是否添加 NavigationControl (https://docs.mapbox.com/mapbox-gl-js/api/#navigationcontrol) + navigation = true + # whether to add GeolocateControl (https://docs.mapbox.com/mapbox-gl-js/api/#geolocatecontrol) + # 是否添加 GeolocateControl (https://docs.mapbox.com/mapbox-gl-js/api/#geolocatecontrol) + geolocate = true + # whether to add ScaleControl (https://docs.mapbox.com/mapbox-gl-js/api/#scalecontrol) + # 是否添加 ScaleControl (https://docs.mapbox.com/mapbox-gl-js/api/#scalecontrol) + scale = true + # whether to add FullscreenControl (https://docs.mapbox.com/mapbox-gl-js/api/#fullscreencontrol) + # 是否添加 FullscreenControl (https://docs.mapbox.com/mapbox-gl-js/api/#fullscreencontrol) + fullscreen = true + # Social share links in post page + # 文章页面的分享信息设置 + [params.page.share] + enable = true + Twitter = true + Facebook = true + # Linkedin = true + # Whatsapp = true + # Pinterest = true + # Tumblr = true + # HackerNews = true + # Reddit = true + # VK = true + # Buffer = true + # Xing = true + # Line = true + # Instapaper = true + # Pocket = true + # Digg = true + # Stumbleupon = true + # Flipboard = true + Weibo = true + Renren = true + # Myspace = true + # Blogger = true + Baidu = true + # Odnoklassniki = true + Evernote = true + # Skype = true + # Trello = true + # Mix = true + # Comment config + # 评论系统设置 + [params.page.comment] + enable = true + # Disqus comment config (https://disqus.com/) + # Disqus 评论系统设置 (https://disqus.com/) + [params.page.comment.disqus] + enable = false + # Disqus shortname to use Disqus in posts + # Disqus 的 shortname,用来在文章中启用 Disqus 评论系统 + shortname = "" + # Gitalk comment config (https://github.com/gitalk/gitalk) + # Gitalk 评论系统设置 (https://github.com/gitalk/gitalk) + [params.page.comment.gitalk] + enable = false + owner = "" + repo = "" + clientId = "" + clientSecret = "" + # Valine comment config (https://github.com/xCss/Valine) + # Valine 评论系统设置 (https://github.com/xCss/Valine) + [params.page.comment.valine] + enable = true + appId = "QGzwQXOqs5JOhN4RGPOkR2mR-MdYXbMMI" + appKey = "WBmoGyJtbqUswvfLh6L8iEBr" + placeholder = "" + notify = false + verify = true + avatar = "mp" + meta= "" + pageSize = 10 + lang = "" + visitor = true + recordIP = true + # Facebook comment config (https://developers.facebook.com/docs/plugins/comments) + # Facebook 评论系统设置 (https://developers.facebook.com/docs/plugins/comments) + [params.page.comment.facebook] + enable = false + width = "100%" + numPosts = 10 + appId = "" + languageCode = "" + # Telegram comments config (https://comments.app/) + # Telegram Comments 评论系统设置 (https://comments.app/) + [params.page.comment.telegram] + enable = false + siteID = "" + limit = 5 + height = "" + color = "" + colorful = true + dislikes = false + outlined = false + # SEO config + # SEO 配置 + [params.page.seo] + # Publisher info + # 出版者信息 + [params.page.seo.publisher] + name = "xxxx" + [params.page.seo.publisher.logo] + url = "logo.png" + width = 127 + height = 40 + # Logo info + # Logo 信息 + [params.page.seo.logo] + url = "logo.png" + width = 127 + height = 40 + # Image info + # 图片信息 + [params.page.seo.image] + url = "cover.png" + width = 800 + height = 600 # site verification code for Google/Bing/Yandex/Pinterest/Baidu # 网站验证代码,用于 Google/Bing/Yandex/Pinterest/Baidu [params.verification] @@ -851,26 +782,6 @@ enableEmoji = true yandex = "" pinterest = "" baidu = "" - # Publisher Info just for SEO - # 出版者信息,仅用于 SEO - [params.publisher] - name = "xxxx" - [params.publisher.logo] - url = "logo.png" - width = 127 - height = 40 - # Website Log Info just for SEO - # 网站 Logo 信息,仅用于 SEO - [params.logo] - url = "logo.png" - width = 127 - height = 40 - # Website Image Info just for SEO - # 网站图标信息,仅用于 SEO - [params.image] - url = "cover.png" - width = 800 - height = 600 # CSS and JS Files CDN # CSS 和 JS 文件的 CDN 设置 [params.cdn] @@ -961,31 +872,30 @@ enableEmoji = true startLevel = 2 endLevel = 6 -# Author Info -# 作者信息 +# Author config +# 作者配置 [author] name = "xxxx" link = "" -# Sitemap Info -# 网站地图信息 +# Sitemap config +# 网站地图配置 [sitemap] changefreq = "weekly" filename = "sitemap.xml" priority = 0.5 -# Permalinks Info (https://gohugo.io/content-management/urls/#permalinks) -# Permalinks 信息 (https://gohugo.io/content-management/urls/#permalinks) +# Permalinks config (https://gohugo.io/content-management/urls/#permalinks) +# Permalinks 配置 (https://gohugo.io/content-management/urls/#permalinks) [Permalinks] # posts = ":year/:month/:filename" posts = ":filename" -# Privacy Info (https://gohugo.io/about/hugo-and-gdpr/) -# 隐私信息设置 (https://gohugo.io/about/hugo-and-gdpr/) +# Privacy config (https://gohugo.io/about/hugo-and-gdpr/) +# 隐私信息配置 (https://gohugo.io/about/hugo-and-gdpr/) [privacy] [privacy.googleAnalytics] anonymizeIP = true - [privacy.youtube] privacyEnhanced = true diff --git a/exampleSite/content/about.en.md b/exampleSite/content/about.en.md index ee29e4f..17a22d4 100644 --- a/exampleSite/content/about.en.md +++ b/exampleSite/content/about.en.md @@ -3,7 +3,8 @@ title: "About LoveIt" date: 2019-08-02T11:04:49+08:00 draft: false -math: true +math: + enable: true lightgallery: true --- diff --git a/exampleSite/content/about.fr.md b/exampleSite/content/about.fr.md index 57886ff..d1f6aa5 100644 --- a/exampleSite/content/about.fr.md +++ b/exampleSite/content/about.fr.md @@ -3,7 +3,8 @@ title: "À propos de LoveIt" date: 2019-08-02T11:04:49+08:00 draft: false -math: true +math: + enable: true lightgallery: true --- diff --git a/exampleSite/content/about.zh-cn.md b/exampleSite/content/about.zh-cn.md index 38d4714..13ecde8 100644 --- a/exampleSite/content/about.zh-cn.md +++ b/exampleSite/content/about.zh-cn.md @@ -3,7 +3,8 @@ title: "关于 LoveIt" date: 2019-08-02T11:04:49+08:00 draft: false -math: true +math: + enable: true lightgallery: true --- diff --git a/exampleSite/content/posts/basic-markdown-syntax.en.md b/exampleSite/content/posts/basic-markdown-syntax.en.md index cb923b1..26456b1 100644 --- a/exampleSite/content/posts/basic-markdown-syntax.en.md +++ b/exampleSite/content/posts/basic-markdown-syntax.en.md @@ -1,38 +1,19 @@ --- weight: 4 title: "Basic Markdown Syntax" -subtitle: "" date: 2019-12-01T21:57:40+08:00 lastmod: 2020-01-01T16:45:40+08:00 draft: false author: "Dillon" authorLink: "https://dillonzq.com" description: "This article shows the basic Markdown syntax and format." -license: "" tags: ["markdown"] categories: ["markdown"] -hiddenFromHomePage: false featuredImage: "/images/basic-markdown-syntax/featured-image.png" -featuredImagePreview: "" -toc: true -autoCollapseToc: true -math: false -mapbox: - accessToken: "" - lightStyle: "" - darkStyle: "" - navigation: true - geolocate: true - scale: true - fullscreen: true lightgallery: true -linkToMarkdown: true -share: - enable: true -comment: true --- This article offers a sample of basic Markdown syntax that can be used in Hugo content files. diff --git a/exampleSite/content/posts/basic-markdown-syntax.fr.md b/exampleSite/content/posts/basic-markdown-syntax.fr.md index f1c0f89..13ce18d 100644 --- a/exampleSite/content/posts/basic-markdown-syntax.fr.md +++ b/exampleSite/content/posts/basic-markdown-syntax.fr.md @@ -1,38 +1,19 @@ --- weight: 4 title: "Syntaxe de Markdown de Base" -subtitle: "" date: 2019-12-01T21:57:40+08:00 lastmod: 2020-01-01T16:45:40+08:00 draft: false author: "Dillon" authorLink: "https://dillonzq.com" description: "Cet article présente la syntaxe et le format de base de Markdown." -license: "" tags: ["markdown"] categories: ["markdown"] -hiddenFromHomePage: false featuredImage: "/images/basic-markdown-syntax/featured-image.png" -featuredImagePreview: "" -toc: true -autoCollapseToc: true -math: false -mapbox: - accessToken: "" - lightStyle: "" - darkStyle: "" - navigation: true - geolocate: true - scale: true - fullscreen: true lightgallery: true -linkToMarkdown: true -share: - enable: true -comment: true --- Cet article propose un exemple de syntaxe Markdown de base qui peut être utilisée dans les fichiers de contenu Hugo. diff --git a/exampleSite/content/posts/basic-markdown-syntax.zh-cn.md b/exampleSite/content/posts/basic-markdown-syntax.zh-cn.md index a981ae6..9dd866f 100644 --- a/exampleSite/content/posts/basic-markdown-syntax.zh-cn.md +++ b/exampleSite/content/posts/basic-markdown-syntax.zh-cn.md @@ -1,38 +1,19 @@ --- weight: 4 title: "Markdown 基本语法" -subtitle: "" date: 2019-12-01T21:57:40+08:00 lastmod: 2020-01-01T16:45:40+08:00 draft: false author: "Dillon" authorLink: "https://dillonzq.com" description: "这篇文章展示了基本的 Markdown 语法和格式." -license: "" tags: ["markdown"] categories: ["markdown"] -hiddenFromHomePage: false featuredImage: "/images/basic-markdown-syntax/featured-image.png" -featuredImagePreview: "" -toc: true -autoCollapseToc: true -math: false -mapbox: - accessToken: "" - lightStyle: "" - darkStyle: "" - navigation: true - geolocate: true - scale: true - fullscreen: true lightgallery: true -linkToMarkdown: true -share: - enable: true -comment: true --- 这篇文章提供了可以在 Hugo 的文章中使用的基本 Markdown 语法示例. diff --git a/exampleSite/content/posts/emoji-support.en.md b/exampleSite/content/posts/emoji-support.en.md index ab21b58..d214a6f 100644 --- a/exampleSite/content/posts/emoji-support.en.md +++ b/exampleSite/content/posts/emoji-support.en.md @@ -1,38 +1,19 @@ --- weight: 5 title: "Emoji Support" -subtitle: "" date: 2019-10-01T17:55:28+08:00 lastmod: 2019-10-01T17:55:28+08:00 draft: false author: "Dillon" authorLink: "https://dillonzq.com" description: "Guide to emoji usage in Hugo and LoveIt." -license: "" tags: ["emoji"] categories: ["markdown"] -hiddenFromHomePage: false featuredImage: "/images/emoji-support/featured-image.jpg" -featuredImagePreview: "" -toc: true -autoCollapseToc: true -math: false -mapbox: - accessToken: "" - lightStyle: "" - darkStyle: "" - navigation: true - geolocate: true - scale: true - fullscreen: true lightgallery: true -linkToMarkdown: true -share: - enable: true -comment: true --- Emoji can be enabled in a Hugo project in a number of ways. diff --git a/exampleSite/content/posts/emoji-support.fr.md b/exampleSite/content/posts/emoji-support.fr.md index 89fe282..590f874 100644 --- a/exampleSite/content/posts/emoji-support.fr.md +++ b/exampleSite/content/posts/emoji-support.fr.md @@ -1,14 +1,12 @@ --- weight: 5 title: "Emoji Support" -subtitle: "" date: 2019-10-01T17:55:28+08:00 lastmod: 2019-10-01T17:55:28+08:00 draft: false author: "Dillon" authorLink: "https://dillonzq.com" description: "Guide d'utilisation des emoji dans Hugo et LoveIt." -license: "" tags: ["emoji"] categories: ["markdown"] @@ -17,22 +15,7 @@ hiddenFromHomePage: false featuredImage: "/images/emoji-support/featured-image.jpg" featuredImagePreview: "" -toc: true -autoCollapseToc: true -math: false -mapbox: - accessToken: "" - lightStyle: "" - darkStyle: "" - navigation: true - geolocate: true - scale: true - fullscreen: true lightgallery: true -linkToMarkdown: true -share: - enable: true -comment: true --- Emoji peut être activé dans un projet Hugo de plusieurs façons. diff --git a/exampleSite/content/posts/emoji-support.zh-cn.md b/exampleSite/content/posts/emoji-support.zh-cn.md index 28b5082..aee970f 100644 --- a/exampleSite/content/posts/emoji-support.zh-cn.md +++ b/exampleSite/content/posts/emoji-support.zh-cn.md @@ -1,38 +1,19 @@ --- weight: 5 title: "Emoji 支持" -subtitle: "" date: 2019-10-01T17:55:28+08:00 lastmod: 2019-10-01T17:55:28+08:00 draft: false author: "Dillon" authorLink: "https://dillonzq.com" description: "Hugo 和 LoveIt 中的 Emoji 的用法指南." -license: "" tags: ["emoji"] categories: ["markdown"] -hiddenFromHomePage: false featuredImage: "/images/emoji-support/featured-image.jpg" -featuredImagePreview: "" -toc: true -autoCollapseToc: true -math: false -mapbox: - accessToken: "" - lightStyle: "" - darkStyle: "" - navigation: true - geolocate: true - scale: true - fullscreen: true lightgallery: true -linkToMarkdown: true -share: - enable: true -comment: true --- Emoji 可以通过多种方式在 Hugo 项目中启用. diff --git a/exampleSite/content/posts/theme-documentation-basics.en.md b/exampleSite/content/posts/theme-documentation-basics.en.md index 3dca60a..4a6525a 100644 --- a/exampleSite/content/posts/theme-documentation-basics.en.md +++ b/exampleSite/content/posts/theme-documentation-basics.en.md @@ -1,38 +1,21 @@ --- weight: 1 title: "Theme Documentation - Basics" -subtitle: "" date: 2020-03-06T21:29:01+08:00 lastmod: 2020-03-06T21:29:01+08:00 draft: false author: "Dillon" authorLink: "https://dillonzq.com" description: "Discover what the Hugo - LoveIt theme is all about and the core-concepts behind it." -license: "" tags: ["installation", "configuration"] categories: ["documentation"] -hiddenFromHomePage: false featuredImage: "/images/theme-documentation-basics/featured-image.jpg" -featuredImagePreview: "" -toc: true -autoCollapseToc: false -math: false -mapbox: - accessToken: "" - lightStyle: "" - darkStyle: "" - navigation: true - geolocate: true - scale: true - fullscreen: true +toc: + auto: false lightgallery: true -linkToMarkdown: true -share: - enable: true -comment: true --- Discover what the Hugo - **LoveIt** theme is all about and the core-concepts behind it. @@ -50,7 +33,7 @@ Since [Markdown Render Hooks](https://gohugo.io/getting-started/configuration-ma {{< /admonition >}} {{< admonition note "Why need the Hugo extended version?" >}} -Since this theme processes SCSS to CSS, Hugo needs to be the **extended** version. +Since the theme processes SCSS to CSS, Hugo needs to be the **extended** version. {{< /admonition >}} ## 2 Installation @@ -102,7 +85,7 @@ theme = "LoveIt" [params] # LoveIt theme version - version = "0.1.X" + version = "0.2.X" [menu] [[menu.main]] @@ -145,7 +128,7 @@ hugo new posts/first_post.md Feel free to edit the post file by adding some sample content and replacing the title value in the beginning of the file. {{< admonition >}} -By default all posts and pages are created as a draft. If you want to render these pages, remove the property `draft: true` from the metadata or set the property `draft: false`. +By default all posts and pages are created as a draft. If you want to render these pages, remove the property `draft: true` from the metadata, set the property `draft: false` or add `-D`/`--buildDrafts` parameter to `hugo` command. {{< /admonition >}} ### 2.5 Launching the Website Locally @@ -164,6 +147,15 @@ Go to `http://localhost:1313`. When you run `hugo serve`, when the contents of the files change, the page automatically refreshes with the changes. {{< /admonition >}} +{{< admonition >}} +Since the theme use `.Scratch` in Hugo to implement some features, +it is highly recommended that you add `--disableFastRender` parameter to `hugo server` command for the live preview of the page you are editing. + +```bash +hugo serve --disableFastRender +``` +{{< /admonition >}} + ### 2.6 Build the Website When your site is ready to deploy, run the following command: @@ -191,8 +183,8 @@ Note that some of these parameters are explained in details in other sections of ```toml [params] - # LoveIt theme version - version = "0.1.X" + # {{< version 0.2.0 changed >}} LoveIt theme version + version = "0.2.X" # site description description = "This is My New Hugo Site" # site keywords @@ -204,34 +196,65 @@ Note that some of these parameters are explained in details in other sections of # {{< version 0.1.1 >}} which hash function used for SRI, when empty, no SRI is used # ("sha256", "sha384", "sha512", "md5") fingerprint = "" - # {{< version 0.2.0 >}} Search + # {{< version 0.2.0 >}} date format + dateFormat = "2006-01-02" + + # {{< version 0.2.0 >}} Search config [params.search] enable = true # type of search engine ("lunr", "algolia") type = "lunr" # index length of the content contentLength = 5000 + # placeholder of the search bar + placeholder = "" [params.search.algolia] index = "" appID = "" searchKey = "" - # Header info + + # Header config [params.header] # desktop header mode ("fixed", "normal", "auto") desktopMode = "fixed" # mobile header mode ("fixed", "normal", "auto") mobileMode = "auto" - # Footer Copyright Info + + # Footer config [params.footer] + enable = true + # {{< version 0.2.0 >}} Custom content (HTML format is supported) + custom = '' + # {{< version 0.2.0 >}} whether to show Hugo and theme info + hugo = true + # {{< version 0.2.0 >}} whether to show copyright info + copyright = true + # {{< version 0.2.0 >}} whether to show the author + author = true # Site creation time since = 2019 # ICP info only in China (HTML format is supported) icp = "" # license info (HTML format is supported) license = 'CC BY-NC 4.0' - # Home Page Info + + # {{< version 0.2.0 >}} Section (all posts) page config + [params.section] + # special amount of posts in each section page + paginate = 20 + # date format (month and day) + dateFormat = "01-02" + + # {{< version 0.2.0 >}} List (category or tag) page config + [params.list] + # special amount of posts in each list page + paginate = 20 + # date format (month and day) + dateFormat = "01-02" + + # Home page config [params.home] - # Home Page Profile + # Home page profile [params.home.profile] enable = true # Gravatar Email for preferred avatar in home page @@ -246,14 +269,15 @@ Note that some of these parameters are explained in details in other sections of social = true # {{< version 0.2.0 >}} disclaimer (HTML format is supported) disclaimer = "" - # Home Page Posts + # Home page posts [params.home.posts] enable = true # special amount of posts in each home posts page paginate = 6 - # default behavior when you don't set "hiddenFromHomePage" in front matter + # {{< version 0.2.0 deleted >}} default behavior when you don't set "hiddenFromHomePage" in front matter defaultHiddenFromHomePage = false - # Social Info in home page + + # Social config about the author [params.social] GitHub = "xxxx" Linkedin = "xxxx" @@ -320,145 +344,166 @@ Note that some of these parameters are explained in details in other sections of # Matrix = "xxxx" # Bilibili = "xxxx" - # Page config + # {{< version 0.2.0 changed >}} Page config [params.page] - # whether to use lightgallery in the page - lightgallery = true - # whether to show link to Raw Markdown content of the post + # {{< version 0.2.0 >}} whether to hide a page from home page + hiddenFromHomePage = false + # {{< version 0.2.0 >}} whether to hide a page from search results + hiddenFromSearch = false + # whether to enable lightgallery + lightgallery = false + # {{< version 0.2.0 >}} whether to show the copy button of the code block + copyCode = true + # {{< version 0.2.0 >}} whether to enable the ruby extended syntax + ruby = true + # {{< version 0.2.0 >}} whether to enable the fraction extended syntax + fraction = true + # {{< version 0.2.0 >}} whether to enable the fontawesome extended syntax + fontawesome = true + # whether to show link to Raw Markdown content of the content linkToMarkdown = true - # {{< link "https://katex.org/" KaTeX >}} mathematical formulas - [params.math] - enable = true - # default block delimiter is $$ ... $$ and \\[ ... \\] - blockLeftDelimiter = "" - blockRightDelimiter = "" - # default inline delimiter is $ ... $ and \\( ... \\) - inlineLeftDelimiter = "" - inlineRightDelimiter = "" - # KaTeX extension copy_tex - copyTex = true - # KaTeX extension mhchem - mhchem = true - # {{< version 0.2.0 >}} {{< link "https://docs.mapbox.com/mapbox-gl-js" "Mapbox GL JS" >}} config - [params.mapbox] - # access token of Mapbox GL JS - accessToken = "" - # style for the light theme - lightStyle = "mapbox://styles/mapbox/light-v9" - # style for the dark theme - darkStyle = "mapbox://styles/mapbox/dark-v9" - # whether to add {{< link "https://docs.mapbox.com/mapbox-gl-js/api/#navigationcontrol" NavigationControl >}} - navigation = true - # whether to add {{< link "https://docs.mapbox.com/mapbox-gl-js/api/#geolocatecontrol" GeolocateControl >}} - geolocate = true - # whether to add {{< link "https://docs.mapbox.com/mapbox-gl-js/api/#scalecontrol" ScaleControl >}} - scale = true - # whether to add {{< link "https://docs.mapbox.com/mapbox-gl-js/api/#fullscreencontrol" FullscreenControl >}} - fullscreen = true - # Social Share Links in post page - [params.share] - enable = true - Twitter = true - Facebook = true - Linkedin = true - Whatsapp = true - Pinterest = true - # Tumblr = true - HackerNews = true - # Reddit = true - # VK = true - # Buffer = true - # Xing = true - # Line = true - # Instapaper = true - # Pocket = true - # Digg = true - # Stumbleupon = true - # Flipboard = true - # Weibo = true - # Renren = true - # Myspace = true - # Blogger = true - # Baidu = true - # Odnoklassniki = true - # Evernote = true - # Skype = true - # Trello = true - # Mix = true - # Comment Config - [params.comment] - enable = true - # {{< link "https://disqus.com/" Disqus >}} Comment Config - [params.comment.disqus] - # {{< version 0.1.1 >}} - enable = false - # Disqus shortname to use Disqus in posts - shortname = "" - # {{< link "https://github.com/gitalk/gitalk" Gitalk >}} Comment Config - [params.comment.gitalk] - # {{< version 0.1.1 >}} - enable = false - owner = "" - repo = "" - clientId = "" - clientSecret = "" - # {{< link "https://github.com/xCss/Valine" Valine >}} Comment Config - [params.comment.valine] - enable = false - appId = "" - appKey = "" - placeholder = "Your comment ..." - notify = false - verify = true - avatar = "mp" - meta= "" - pageSize = 10 - lang = "en" - visitor = true - recordIP = true - # {{< link "https://developers.facebook.com/docs/plugins/comments" "Facebook Comment" >}} Config - [params.comment.facebook] - enable = false - width = "100%" - numPosts = 10 - appId = "" - languageCode = "en_US" - # {{< version 0.2.0 >}} {{< link "https://comments.app/" "Telegram Comments" >}} Config - [params.comment.telegram] - enable = false - siteID = "" - limit = 5 - height = "" - color = "" - colorful = true - dislikes = false - outlined = false + # {{< version 0.2.0 >}} Table of the contents config + [params.page.toc] + # whether to enable the table of the contents + enable = true + # whether to make the table of the contents automatically collapsed + auto = true + # {{< version 0.2.0 changed >}} {{< link "https://katex.org/" KaTeX >}} mathematical formulas + [params.page.math] + enable = true + # default block delimiter is $$ ... $$ and \\[ ... \\] + blockLeftDelimiter = "" + blockRightDelimiter = "" + # default inline delimiter is $ ... $ and \\( ... \\) + inlineLeftDelimiter = "" + inlineRightDelimiter = "" + # KaTeX extension copy_tex + copyTex = true + # KaTeX extension mhchem + mhchem = true + # {{< version 0.2.0 >}} {{< link "https://docs.mapbox.com/mapbox-gl-js" "Mapbox GL JS" >}} config + [params.page.mapbox] + # access token of Mapbox GL JS + accessToken = "" + # style for the light theme + lightStyle = "mapbox://styles/mapbox/light-v9" + # style for the dark theme + darkStyle = "mapbox://styles/mapbox/dark-v9" + # whether to add {{< link "https://docs.mapbox.com/mapbox-gl-js/api/#navigationcontrol" NavigationControl >}} + navigation = true + # whether to add {{< link "https://docs.mapbox.com/mapbox-gl-js/api/#geolocatecontrol" GeolocateControl >}} + geolocate = true + # whether to add {{< link "https://docs.mapbox.com/mapbox-gl-js/api/#scalecontrol" ScaleControl >}} + scale = true + # whether to add {{< link "https://docs.mapbox.com/mapbox-gl-js/api/#fullscreencontrol" FullscreenControl >}} + fullscreen = true + # {{< version 0.2.0 changed >}} social share links in post page + [params.page.share] + enable = true + Twitter = true + Facebook = true + Linkedin = true + Whatsapp = true + Pinterest = true + # Tumblr = true + HackerNews = true + # Reddit = true + # VK = true + # Buffer = true + # Xing = true + # Line = true + # Instapaper = true + # Pocket = true + # Digg = true + # Stumbleupon = true + # Flipboard = true + # Weibo = true + # Renren = true + # Myspace = true + # Blogger = true + # Baidu = true + # Odnoklassniki = true + # Evernote = true + # Skype = true + # Trello = true + # Mix = true + # {{< version 0.2.0 changed >}} Comment config + [params.page.comment] + enable = true + # {{< link "https://disqus.com/" Disqus >}} comment config + [params.page.comment.disqus] + # {{< version 0.1.1 >}} + enable = false + # Disqus shortname to use Disqus in posts + shortname = "" + # {{< link "https://github.com/gitalk/gitalk" Gitalk >}} comment config + [params.page.comment.gitalk] + # {{< version 0.1.1 >}} + enable = false + owner = "" + repo = "" + clientId = "" + clientSecret = "" + # {{< link "https://github.com/xCss/Valine" Valine >}} comment config + [params.page.comment.valine] + enable = false + appId = "" + appKey = "" + placeholder = "" + notify = false + verify = true + avatar = "mp" + meta= "" + pageSize = 10 + lang = "" + visitor = true + recordIP = true + # {{< link "https://developers.facebook.com/docs/plugins/comments" "Facebook comment" >}} config + [params.page.comment.facebook] + enable = false + width = "100%" + numPosts = 10 + appId = "" + languageCode = "" + # {{< version 0.2.0 >}} {{< link "https://comments.app/" "Telegram comments" >}} config + [params.page.comment.telegram] + enable = false + siteID = "" + limit = 5 + height = "" + color = "" + colorful = true + dislikes = false + outlined = false + # {{< version 0.2.0 >}} SEO config + [params.page.seo] + # Publisher info + [params.page.seo.publisher] + name = "xxxx" + [params.page.seo.publisher.logo] + url = "logo.png" + width = 127 + height = 40 + # Logo info + [params.page.seo.logo] + url = "logo.png" + width = 127 + height = 40 + # Image info + [params.page.seo.image] + url = "cover.png" + width = 800 + height = 600 - # site verification code for Google/Bing/Yandex/Pinterest/Baidu + # Site verification code config for Google/Bing/Yandex/Pinterest/Baidu [params.verification] google = "" bing = "" yandex = "" pinterest = "" baidu = "" - # Publisher Info just for SEO - [params.publisher] - name = "xxxx" - [params.publisher.logo] - url = "logo.png" - width = 127 - height = 40 - # Website Log Info just for SEO - [params.logo] - url = "logo.png" - width = 127 - height = 40 - # Website Image Info just for SEO - [params.image] - url = "cover.png" - width = 800 - height = 600 - # CSS and JS Files CDN + + # CSS and JS Files CDN config [params.cdn] # {{< version 0.2.0 >}} {{< link "https://github.com/necolas/normalize.css" "normalize.css" >}}@8.0.1 normalizeCSS = '' @@ -513,7 +558,7 @@ Note that some of these parameters are explained in details in other sections of # {{< link "https://valine.js.org/" "valine" >}}@1.3.10 valineJS = '' -# Markup related configuration in Hugo +# Markup related config in Hugo [markup] # {{< link "https://gohugo.io/content-management/syntax-highlighting" "Syntax Highlighting" >}} [markup.highlight] @@ -542,27 +587,26 @@ Note that some of these parameters are explained in details in other sections of startLevel = 2 endLevel = 6 -# Author Info +# Author config [author] name = "xxxx" link = "" -# Sitemap Info +# Sitemap config [sitemap] changefreq = "weekly" filename = "sitemap.xml" priority = 0.5 -# {{< link "https://gohugo.io/content-management/urls/#permalinks" "Permalinks Info" >}} +# {{< link "https://gohugo.io/content-management/urls/#permalinks" "Permalinks config" >}} [Permalinks] # posts = ":year/:month/:filename" posts = ":filename" -# {{< link "https://gohugo.io/about/hugo-and-gdpr/" "Privacy Info" >}} +# {{< link "https://gohugo.io/about/hugo-and-gdpr/" "Privacy config" >}} [privacy] [privacy.googleAnalytics] anonymizeIP = true - [privacy.youtube] privacyEnhanced = true diff --git a/exampleSite/content/posts/theme-documentation-basics.fr.md b/exampleSite/content/posts/theme-documentation-basics.fr.md index c5d9715..2fe53e0 100644 --- a/exampleSite/content/posts/theme-documentation-basics.fr.md +++ b/exampleSite/content/posts/theme-documentation-basics.fr.md @@ -1,38 +1,21 @@ --- weight: 1 title: "Thème Documentation - Concepts de Base" -subtitle: "" date: 2020-03-06T21:40:32+08:00 lastmod: 2020-03-06T21:40:32+08:00 draft: false author: "Dillon" authorLink: "https://dillonzq.com" description: "Découvrez en quoi consiste le thème Hugo - LoveIt et les concepts fondamentaux qui le sous-tendent." -license: "" tags: ["installation", "configuration"] categories: ["documentation"] -hiddenFromHomePage: false featuredImage: "/images/theme-documentation-basics/featured-image.jpg" -featuredImagePreview: "" -toc: true -autoCollapseToc: false -math: false -mapbox: - accessToken: "" - lightStyle: "" - darkStyle: "" - navigation: true - geolocate: true - scale: true - fullscreen: true +toc: + auto: false lightgallery: true -linkToMarkdown: true -share: - enable: true -comment: true --- Découvrez en quoi consiste le thème Hugo - **LoveIt** et les concepts fondamentaux qui le sous-tendent. @@ -55,7 +38,7 @@ Since [Markdown Render Hooks](https://gohugo.io/getting-started/configuration-ma {{< /admonition >}} {{< admonition note "Why need the Hugo extended version?" >}} -Since this theme processes SCSS to CSS, Hugo needs to be the **extended** version. +Since the theme processes SCSS to CSS, Hugo needs to be the **extended** version. {{< /admonition >}} ## 2 Installation @@ -107,7 +90,7 @@ theme = "LoveIt" [params] # LoveIt theme version - version = "0.1.X" + version = "0.2.X" [menu] [[menu.main]] @@ -150,7 +133,7 @@ hugo new posts/first_post.md Feel free to edit the post file by adding some sample content and replacing the title value in the beginning of the file. {{< admonition >}} -By default all posts and pages are created as a draft. If you want to render these pages, remove the property `draft: true` from the metadata or set the property `draft: false`. +By default all posts and pages are created as a draft. If you want to render these pages, remove the property `draft: true` from the metadata, set the property `draft: false` or add `-D`/`--buildDrafts` parameter to `hugo` command. {{< /admonition >}} ### 2.5 Launching the Website Locally @@ -169,6 +152,15 @@ Go to `http://localhost:1313`. When you run `hugo serve`, when the contents of the files change, the page automatically refreshes with the changes. {{< /admonition >}} +{{< admonition >}} +Since the theme use `.Scratch` in Hugo to implement some features, +it is highly recommended that you add `--disableFastRender` parameter to `hugo server` command for the live preview of the page you are editing. + +```bash +hugo serve --disableFastRender +``` +{{< /admonition >}} + ### 2.6 Build the Website When your site is ready to deploy, run the following command: @@ -196,8 +188,8 @@ Note that some of these parameters are explained in details in other sections of ```toml [params] - # LoveIt theme version - version = "0.1.X" + # {{< version 0.2.0 changed >}} LoveIt theme version + version = "0.2.X" # site description description = "This is My New Hugo Site" # site keywords @@ -209,34 +201,65 @@ Note that some of these parameters are explained in details in other sections of # {{< version 0.1.1 >}} which hash function used for SRI, when empty, no SRI is used # ("sha256", "sha384", "sha512", "md5") fingerprint = "" - # {{< version 0.2.0 >}} Search + # {{< version 0.2.0 >}} date format + dateFormat = "2006-01-02" + + # {{< version 0.2.0 >}} Search config [params.search] enable = true # type of search engine ("lunr", "algolia") type = "lunr" # index length of the content contentLength = 5000 + # placeholder of the search bar + placeholder = "" [params.search.algolia] index = "" appID = "" searchKey = "" - # Header info + + # Header config [params.header] # desktop header mode ("fixed", "normal", "auto") desktopMode = "fixed" # mobile header mode ("fixed", "normal", "auto") mobileMode = "auto" - # Footer Copyright Info + + # Footer config [params.footer] + enable = true + # {{< version 0.2.0 >}} Custom content (HTML format is supported) + custom = '' + # {{< version 0.2.0 >}} whether to show Hugo and theme info + hugo = true + # {{< version 0.2.0 >}} whether to show copyright info + copyright = true + # {{< version 0.2.0 >}} whether to show the author + author = true # Site creation time since = 2019 # ICP info only in China (HTML format is supported) icp = "" # license info (HTML format is supported) license = 'CC BY-NC 4.0' - # Home Page Info + + # {{< version 0.2.0 >}} Section (all posts) page config + [params.section] + # special amount of posts in each section page + paginate = 20 + # date format (month and day) + dateFormat = "01-02" + + # {{< version 0.2.0 >}} List (category or tag) page config + [params.list] + # special amount of posts in each list page + paginate = 20 + # date format (month and day) + dateFormat = "01-02" + + # Home page config [params.home] - # Home Page Profile + # Home page profile [params.home.profile] enable = true # Gravatar Email for preferred avatar in home page @@ -251,14 +274,15 @@ Note that some of these parameters are explained in details in other sections of social = true # {{< version 0.2.0 >}} disclaimer (HTML format is supported) disclaimer = "" - # Home Page Posts + # Home page posts [params.home.posts] enable = true # special amount of posts in each home posts page paginate = 6 - # default behavior when you don't set "hiddenFromHomePage" in front matter + # {{< version 0.2.0 deleted >}} default behavior when you don't set "hiddenFromHomePage" in front matter defaultHiddenFromHomePage = false - # Social Info in home page + + # Social config about the author [params.social] GitHub = "xxxx" Linkedin = "xxxx" @@ -325,145 +349,166 @@ Note that some of these parameters are explained in details in other sections of # Matrix = "xxxx" # Bilibili = "xxxx" - # Page config + # {{< version 0.2.0 changed >}} Page config [params.page] - # whether to use lightgallery in the page - lightgallery = true - # whether to show link to Raw Markdown content of the post + # {{< version 0.2.0 >}} whether to hide a page from home page + hiddenFromHomePage = false + # {{< version 0.2.0 >}} whether to hide a page from search results + hiddenFromSearch = false + # whether to enable lightgallery + lightgallery = false + # {{< version 0.2.0 >}} whether to show the copy button of the code block + copyCode = true + # {{< version 0.2.0 >}} whether to enable the ruby extended syntax + ruby = true + # {{< version 0.2.0 >}} whether to enable the fraction extended syntax + fraction = true + # {{< version 0.2.0 >}} whether to enable the fontawesome extended syntax + fontawesome = true + # whether to show link to Raw Markdown content of the content linkToMarkdown = true - # {{< link "https://katex.org/" KaTeX >}} mathematical formulas - [params.math] - enable = true - # default block delimiter is $$ ... $$ and \\[ ... \\] - blockLeftDelimiter = "" - blockRightDelimiter = "" - # default inline delimiter is $ ... $ and \\( ... \\) - inlineLeftDelimiter = "" - inlineRightDelimiter = "" - # KaTeX extension copy_tex - copyTex = true - # KaTeX extension mhchem - mhchem = true - # {{< version 0.2.0 >}} {{< link "https://docs.mapbox.com/mapbox-gl-js" "Mapbox GL JS" >}} config - [params.mapbox] - # access token of Mapbox GL JS - accessToken = "" - # style for the light theme - lightStyle = "mapbox://styles/mapbox/light-v9" - # style for the dark theme - darkStyle = "mapbox://styles/mapbox/dark-v9" - # whether to add {{< link "https://docs.mapbox.com/mapbox-gl-js/api/#navigationcontrol" NavigationControl >}} - navigation = true - # whether to add {{< link "https://docs.mapbox.com/mapbox-gl-js/api/#geolocatecontrol" GeolocateControl >}} - geolocate = true - # whether to add {{< link "https://docs.mapbox.com/mapbox-gl-js/api/#scalecontrol" ScaleControl >}} - scale = true - # whether to add {{< link "https://docs.mapbox.com/mapbox-gl-js/api/#fullscreencontrol" FullscreenControl >}} - fullscreen = true - # Social Share Links in post page - [params.share] - enable = true - Twitter = true - Facebook = true - Linkedin = true - Whatsapp = true - Pinterest = true - # Tumblr = true - HackerNews = true - # Reddit = true - # VK = true - # Buffer = true - # Xing = true - # Line = true - # Instapaper = true - # Pocket = true - # Digg = true - # Stumbleupon = true - # Flipboard = true - # Weibo = true - # Renren = true - # Myspace = true - # Blogger = true - # Baidu = true - # Odnoklassniki = true - # Evernote = true - # Skype = true - # Trello = true - # Mix = true - # Comment Config - [params.comment] - enable = true - # {{< link "https://disqus.com/" Disqus >}} Comment Config - [params.comment.disqus] - # {{< version 0.1.1 >}} - enable = false - # Disqus shortname to use Disqus in posts - shortname = "" - # {{< link "https://github.com/gitalk/gitalk" Gitalk >}} Comment Config - [params.comment.gitalk] - # {{< version 0.1.1 >}} - enable = false - owner = "" - repo = "" - clientId = "" - clientSecret = "" - # {{< link "https://github.com/xCss/Valine" Valine >}} Comment Config - [params.comment.valine] - enable = false - appId = "" - appKey = "" - placeholder = "Your comment ..." - notify = false - verify = true - avatar = "mp" - meta= "" - pageSize = 10 - lang = "en" - visitor = true - recordIP = true - # {{< link "https://developers.facebook.com/docs/plugins/comments" "Facebook Comment" >}} Config - [params.comment.facebook] - enable = false - width = "100%" - numPosts = 10 - appId = "" - languageCode = "en_US" - # {{< version 0.2.0 >}} {{< link "https://comments.app/" "Telegram Comments" >}} Config - [params.comment.telegram] - enable = false - siteID = "" - limit = 5 - height = "" - color = "" - colorful = true - dislikes = false - outlined = false + # {{< version 0.2.0 >}} Table of the contents config + [params.page.toc] + # whether to enable the table of the contents + enable = true + # whether to make the table of the contents automatically collapsed + auto = true + # {{< version 0.2.0 changed >}} {{< link "https://katex.org/" KaTeX >}} mathematical formulas + [params.page.math] + enable = true + # default block delimiter is $$ ... $$ and \\[ ... \\] + blockLeftDelimiter = "" + blockRightDelimiter = "" + # default inline delimiter is $ ... $ and \\( ... \\) + inlineLeftDelimiter = "" + inlineRightDelimiter = "" + # KaTeX extension copy_tex + copyTex = true + # KaTeX extension mhchem + mhchem = true + # {{< version 0.2.0 >}} {{< link "https://docs.mapbox.com/mapbox-gl-js" "Mapbox GL JS" >}} config + [params.page.mapbox] + # access token of Mapbox GL JS + accessToken = "" + # style for the light theme + lightStyle = "mapbox://styles/mapbox/light-v9" + # style for the dark theme + darkStyle = "mapbox://styles/mapbox/dark-v9" + # whether to add {{< link "https://docs.mapbox.com/mapbox-gl-js/api/#navigationcontrol" NavigationControl >}} + navigation = true + # whether to add {{< link "https://docs.mapbox.com/mapbox-gl-js/api/#geolocatecontrol" GeolocateControl >}} + geolocate = true + # whether to add {{< link "https://docs.mapbox.com/mapbox-gl-js/api/#scalecontrol" ScaleControl >}} + scale = true + # whether to add {{< link "https://docs.mapbox.com/mapbox-gl-js/api/#fullscreencontrol" FullscreenControl >}} + fullscreen = true + # {{< version 0.2.0 changed >}} social share links in post page + [params.page.share] + enable = true + Twitter = true + Facebook = true + Linkedin = true + Whatsapp = true + Pinterest = true + # Tumblr = true + HackerNews = true + # Reddit = true + # VK = true + # Buffer = true + # Xing = true + # Line = true + # Instapaper = true + # Pocket = true + # Digg = true + # Stumbleupon = true + # Flipboard = true + # Weibo = true + # Renren = true + # Myspace = true + # Blogger = true + # Baidu = true + # Odnoklassniki = true + # Evernote = true + # Skype = true + # Trello = true + # Mix = true + # {{< version 0.2.0 changed >}} Comment config + [params.page.comment] + enable = true + # {{< link "https://disqus.com/" Disqus >}} comment config + [params.page.comment.disqus] + # {{< version 0.1.1 >}} + enable = false + # Disqus shortname to use Disqus in posts + shortname = "" + # {{< link "https://github.com/gitalk/gitalk" Gitalk >}} comment config + [params.page.comment.gitalk] + # {{< version 0.1.1 >}} + enable = false + owner = "" + repo = "" + clientId = "" + clientSecret = "" + # {{< link "https://github.com/xCss/Valine" Valine >}} comment config + [params.page.comment.valine] + enable = false + appId = "" + appKey = "" + placeholder = "" + notify = false + verify = true + avatar = "mp" + meta= "" + pageSize = 10 + lang = "" + visitor = true + recordIP = true + # {{< link "https://developers.facebook.com/docs/plugins/comments" "Facebook comment" >}} config + [params.page.comment.facebook] + enable = false + width = "100%" + numPosts = 10 + appId = "" + languageCode = "" + # {{< version 0.2.0 >}} {{< link "https://comments.app/" "Telegram comments" >}} config + [params.page.comment.telegram] + enable = false + siteID = "" + limit = 5 + height = "" + color = "" + colorful = true + dislikes = false + outlined = false + # {{< version 0.2.0 >}} SEO config + [params.page.seo] + # Publisher info + [params.page.seo.publisher] + name = "xxxx" + [params.page.seo.publisher.logo] + url = "logo.png" + width = 127 + height = 40 + # Logo info + [params.page.seo.logo] + url = "logo.png" + width = 127 + height = 40 + # Image info + [params.page.seo.image] + url = "cover.png" + width = 800 + height = 600 - # site verification code for Google/Bing/Yandex/Pinterest/Baidu + # Site verification code config for Google/Bing/Yandex/Pinterest/Baidu [params.verification] google = "" bing = "" yandex = "" pinterest = "" baidu = "" - # Publisher Info just for SEO - [params.publisher] - name = "xxxx" - [params.publisher.logo] - url = "logo.png" - width = 127 - height = 40 - # Website Log Info just for SEO - [params.logo] - url = "logo.png" - width = 127 - height = 40 - # Website Image Info just for SEO - [params.image] - url = "cover.png" - width = 800 - height = 600 - # CSS and JS Files CDN + + # CSS and JS Files CDN config [params.cdn] # {{< version 0.2.0 >}} {{< link "https://github.com/necolas/normalize.css" "normalize.css" >}}@8.0.1 normalizeCSS = '' @@ -518,7 +563,7 @@ Note that some of these parameters are explained in details in other sections of # {{< link "https://valine.js.org/" "valine" >}}@1.3.10 valineJS = '' -# Markup related configuration in Hugo +# Markup related config in Hugo [markup] # {{< link "https://gohugo.io/content-management/syntax-highlighting" "Syntax Highlighting" >}} [markup.highlight] @@ -547,27 +592,26 @@ Note that some of these parameters are explained in details in other sections of startLevel = 2 endLevel = 6 -# Author Info +# Author config [author] name = "xxxx" link = "" -# Sitemap Info +# Sitemap config [sitemap] changefreq = "weekly" filename = "sitemap.xml" priority = 0.5 -# {{< link "https://gohugo.io/content-management/urls/#permalinks" "Permalinks Info" >}} +# {{< link "https://gohugo.io/content-management/urls/#permalinks" "Permalinks config" >}} [Permalinks] # posts = ":year/:month/:filename" posts = ":filename" -# {{< link "https://gohugo.io/about/hugo-and-gdpr/" "Privacy Info" >}} +# {{< link "https://gohugo.io/about/hugo-and-gdpr/" "Privacy config" >}} [privacy] [privacy.googleAnalytics] anonymizeIP = true - [privacy.youtube] privacyEnhanced = true diff --git a/exampleSite/content/posts/theme-documentation-basics.zh-cn.md b/exampleSite/content/posts/theme-documentation-basics.zh-cn.md index 561f342..31ad7e5 100644 --- a/exampleSite/content/posts/theme-documentation-basics.zh-cn.md +++ b/exampleSite/content/posts/theme-documentation-basics.zh-cn.md @@ -1,38 +1,21 @@ --- weight: 1 title: "主题文档 - 基本概念" -subtitle: "" date: 2020-03-06T21:40:32+08:00 lastmod: 2020-03-06T21:40:32+08:00 draft: false author: "Dillon" authorLink: "https://dillonzq.com" description: "探索 Hugo - LoveIt 主题的全部内容和背后的核心概念." -license: "" tags: ["安装", "配置"] categories: ["documentation"] -hiddenFromHomePage: false featuredImage: "/images/theme-documentation-basics/featured-image.jpg" -featuredImagePreview: "" -toc: true -autoCollapseToc: false -math: false -mapbox: - accessToken: "" - lightStyle: "" - darkStyle: "" - navigation: true - geolocate: true - scale: true - fullscreen: true +toc: + auto: false lightgallery: true -linkToMarkdown: true -share: - enable: true -comment: true --- 探索 Hugo - **LoveIt** 主题的全部内容和背后的核心概念. @@ -105,7 +88,7 @@ theme = "LoveIt" [params] # LoveIt 主题版本 - version = "0.1.X" + version = "0.2.X" [menu] [[menu.main]] @@ -148,7 +131,7 @@ hugo new posts/first_post.md 通过添加一些示例内容并替换文件开头的标题, 你可以随意编辑文章. {{< admonition >}} -默认情况下, 所有文章和页面均作为草稿创建. 如果想要渲染这些页面, 请从元数据中删除属性 `draft: true`, 或者设置属性 `draft: false`. +默认情况下, 所有文章和页面均作为草稿创建. 如果想要渲染这些页面, 请从元数据中删除属性 `draft: true`, 设置属性 `draft: false` 或者为 `hugo` 命令添加 `-D`/`--buildDrafts` 参数. {{< /admonition >}} ### 2.5 在本地启动网站 @@ -167,6 +150,15 @@ hugo serve 当你运行 `hugo serve` 时, 当文件内容更改时, 页面会随着更改自动刷新. {{< /admonition >}} +{{< admonition >}} +由于本主题使用了 Hugo 中的 `.Scratch` 来实现一些特性, +非常建议你为 `hugo server` 命令添加 `--disableFastRender` 参数来实时预览你正在编辑的文章页面. + +```bash +hugo serve --disableFastRender +``` +{{< /admonition >}} + ### 2.6 构建网站 当你准备好部署你的网站时, 运行以下命令: @@ -194,8 +186,8 @@ hugo ```toml [params] - # LoveIt 主题版本 - version = "0.1.X" + # {{< version 0.2.0 changed >}} LoveIt 主题版本 + version = "0.2.X" # 网站描述 description = "这是我的全新 Hugo 网站" # 网站关键词 @@ -207,34 +199,65 @@ hugo # {{< version 0.1.1 >}} 哪种哈希函数用来 SRI, 为空时表示不使用 SRI # ("sha256", "sha384", "sha512", "md5") fingerprint = "" - # {{< version 0.2.0 >}} 搜索 + # {{< version 0.2.0 >}} 日期格式 + dateFormat = "2006-01-02" + + # {{< version 0.2.0 >}} 搜索配置 [params.search] enable = true # 搜索引擎的类型 ("lunr", "algolia") type = "lunr" # 文章内容索引长度 contentLength = 5000 + # 搜索框的占位提示语 + placeholder = "" [params.search.algolia] index = "" appID = "" searchKey = "" - # 页面头部导航栏信息 + + # 页面头部导航栏配置 [params.header] # 桌面端导航栏模式 ("fixed", "normal", "auto") desktopMode = "fixed" # 移动端导航栏模式 ("fixed", "normal", "auto") mobileMode = "auto" - # 页面底部版权信息设置 + + # 页面底部信息配置 [params.footer] + enable = true + # {{< version 0.2.0 >}} 自定义内容 (支持 HTML 格式) + custom = '' + # {{< version 0.2.0 >}} 是否显示 Hugo 和主题信息 + hugo = true + # {{< version 0.2.0 >}} 是否显示版权信息 + copyright = true + # {{< version 0.2.0 >}} 是否显示作者 + author = true # 网站创立年份 since = 2019 # ICP 备案信息,仅在中国使用 (支持 HTML 格式) icp = "" # 许可协议信息 (支持 HTML 格式) license = 'CC BY-NC 4.0' - # 文章页面配置 + + # {{< version 0.2.0 >}} Section (所有文章) 页面配置 + [params.section] + # section 页面每页显示文章数量 + paginate = 20 + # 日期格式 (月和日) + dateFormat = "01-02" + + # {{< version 0.2.0 >}} List (目录或标签) 页面配置 + [params.list] + # list 页面每页显示文章数量 + paginate = 20 + # 日期格式 (月和日) + dateFormat = "01-02" + + # 主页配置 [params.home] - # 主页信息设置 + # 主页个人信息 [params.home.profile] enable = true # Gravatar 邮箱,用于优先在主页显示的头像 @@ -254,9 +277,10 @@ hugo enable = true # 主页每页显示文章数量 paginate = 6 - # 当你没有在文章前置参数中设置 "hiddenFromHomePage" 时的默认行为 + # {{< version 0.2.0 deleted >}} 当你没有在文章前置参数中设置 "hiddenFromHomePage" 时的默认行为 defaultHiddenFromHomePage = false - # 主页的社交信息设置 + + # 作者的社交信息设置 [params.social] GitHub = "xxxx" # Linkedin = "xxxx" @@ -322,119 +346,157 @@ hugo # XMPP = "xxxx" # Matrix = "xxxx" Bilibili = "xxxx" - # 文章页面配置 + + # {{< version 0.2.0 changed >}} 文章页面配置 [params.page] + # {{< version 0.2.0 >}} 是否在主页隐藏一篇文章 + hiddenFromHomePage = false + # {{< version 0.2.0 >}} 是否在搜索结果中隐藏一篇文章 + hiddenFromSearch = false # 是否在文章页面使用 lightgallery lightgallery = true + # {{< version 0.2.0 >}} 是否显示代码块的复制按钮 + copyCode = true + # {{< version 0.2.0 >}} 是否使用 ruby 扩展语法 + ruby = true + # {{< version 0.2.0 >}} 是否使用 fraction 扩展语法 + fraction = true + # {{< version 0.2.0 >}} 是否使用 fontawesome 扩展语法 + fontawesome = true # 是否在文章页面显示原始 Markdown 文档链接 linkToMarkdown = true - # {{< link "https://katex.org/" KaTeX >}} 数学公式 - [params.math] - enable = true - # 默认块定界符是 $$ ... $$ 和 \\[ ... \\] - blockLeftDelimiter = "" - blockRightDelimiter = "" - # 默认内联定界符是 $ ... $ 和 \\( ... \\) - inlineLeftDelimiter = "" - inlineRightDelimiter = "" - # KaTeX 插件 copy_tex - copyTex = true - # KaTeX 插件 mhchem - mhchem = true - # {{< version 0.2.0 >}} {{< link "https://docs.mapbox.com/mapbox-gl-js" "Mapbox GL JS" >}} 配置 - [params.mapbox] - # Mapbox GL JS 的 access token - accessToken = "" - # 浅色主题的地图样式 - lightStyle = "mapbox://styles/mapbox/light-v9" - # 深色主题的地图样式 - darkStyle = "mapbox://styles/mapbox/dark-v9" - # 是否添加 {{< link "https://docs.mapbox.com/mapbox-gl-js/api/#navigationcontrol" NavigationControl >}} - navigation = true - # 是否添加 {{< link "https://docs.mapbox.com/mapbox-gl-js/api/#geolocatecontrol" GeolocateControl >}} - geolocate = true - # 是否添加 {{< link "https://docs.mapbox.com/mapbox-gl-js/api/#scalecontrol" ScaleControl >}} - scale = true - # 是否添加 {{< link "https://docs.mapbox.com/mapbox-gl-js/api/#fullscreencontrol" FullscreenControl >}} - fullscreen = true - # 文章页面的分享信息设置 - [params.share] - enable = true - Twitter = true - Facebook = true - # Linkedin = true - # Whatsapp = true - # Pinterest = true - # Tumblr = true - # HackerNews = true - # Reddit = true - # VK = true - # Buffer = true - # Xing = true - # Line = true - # Instapaper = true - # Pocket = true - # Digg = true - # Stumbleupon = true - # Flipboard = true - Weibo = true - # Renren = true - # Myspace = true - # Blogger = true - # Baidu = true - # Odnoklassniki = true - Evernote = true - # Skype = true - # Trello = true - # Mix = true - # 评论系统设置 - [params.comment] - enable = true - # {{< link "https://disqus.com/" Disqus >}} 评论系统设置 - [params.comment.disqus] - # {{< version 0.1.1 >}} - enable = false - # Disqus 的 shortname,用来在文章中启用 Disqus 评论系统 - shortname = "" - # {{< link "https://github.com/gitalk/gitalk" Gitalk >}} 评论系统设置 - [params.comment.gitalk] - # {{< version 0.1.1 >}} - enable = false - owner = "" - repo = "" - clientId = "" - clientSecret = "" - # {{< link "https://github.com/xCss/Valine" Valine >}} 评论系统设置 - [params.comment.valine] - enable = false - appId = "" - appKey = "" - placeholder = "Your comment ..." - notify = false - verify = true - avatar = "mp" - meta= "" - pageSize = 10 - lang = "en" - visitor = true - recordIP = true - # # {{< link "https://developers.facebook.com/docs/plugins/comments" "Facebook 评论系统" >}}设置 - [params.comment.facebook] - enable = false - width = "100%" - numPosts = 10 - appId = "" - languageCode = "zh_CN" - # {{< version 0.2.0 >}} {{< link "https://comments.app/" "Telegram Comments" >}} 评论系统设置 - [params.comment.telegram] - enable = false - siteID = "" - limit = 5 - height = "" - color = "" - colorful = true - dislikes = false - outlined = false + # {{< version 0.2.0 >}} 目录配置 + [params.page.toc] + # 是否使用目录 + enable = true + # 是否使目录自动折叠展开 + auto = true + # {{< version 0.2.0 changed >}} {{< link "https://katex.org/" KaTeX >}} 数学公式 + [params.page.math] + enable = true + # 默认块定界符是 $$ ... $$ 和 \\[ ... \\] + blockLeftDelimiter = "" + blockRightDelimiter = "" + # 默认内联定界符是 $ ... $ 和 \\( ... \\) + inlineLeftDelimiter = "" + inlineRightDelimiter = "" + # KaTeX 插件 copy_tex + copyTex = true + # KaTeX 插件 mhchem + mhchem = true + # {{< version 0.2.0 >}} {{< link "https://docs.mapbox.com/mapbox-gl-js" "Mapbox GL JS" >}} 配置 + [params.page.mapbox] + # Mapbox GL JS 的 access token + accessToken = "" + # 浅色主题的地图样式 + lightStyle = "mapbox://styles/mapbox/light-v9" + # 深色主题的地图样式 + darkStyle = "mapbox://styles/mapbox/dark-v9" + # 是否添加 {{< link "https://docs.mapbox.com/mapbox-gl-js/api/#navigationcontrol" NavigationControl >}} + navigation = true + # 是否添加 {{< link "https://docs.mapbox.com/mapbox-gl-js/api/#geolocatecontrol" GeolocateControl >}} + geolocate = true + # 是否添加 {{< link "https://docs.mapbox.com/mapbox-gl-js/api/#scalecontrol" ScaleControl >}} + scale = true + # 是否添加 {{< link "https://docs.mapbox.com/mapbox-gl-js/api/#fullscreencontrol" FullscreenControl >}} + fullscreen = true + # {{< version 0.2.0 changed >}} 文章页面的分享信息设置 + [params.page.share] + enable = true + Twitter = true + Facebook = true + # Linkedin = true + # Whatsapp = true + # Pinterest = true + # Tumblr = true + # HackerNews = true + # Reddit = true + # VK = true + # Buffer = true + # Xing = true + # Line = true + # Instapaper = true + # Pocket = true + # Digg = true + # Stumbleupon = true + # Flipboard = true + Weibo = true + # Renren = true + # Myspace = true + # Blogger = true + # Baidu = true + # Odnoklassniki = true + Evernote = true + # Skype = true + # Trello = true + # Mix = true + # {{< version 0.2.0 changed >}} 评论系统设置 + [params.page.comment] + enable = true + # {{< link "https://disqus.com/" Disqus >}} 评论系统设置 + [params.page.comment.disqus] + # {{< version 0.1.1 >}} + enable = false + # Disqus 的 shortname,用来在文章中启用 Disqus 评论系统 + shortname = "" + # {{< link "https://github.com/gitalk/gitalk" Gitalk >}} 评论系统设置 + [params.page.comment.gitalk] + # {{< version 0.1.1 >}} + enable = false + owner = "" + repo = "" + clientId = "" + clientSecret = "" + # {{< link "https://github.com/xCss/Valine" Valine >}} 评论系统设置 + [params.page.comment.valine] + enable = false + appId = "" + appKey = "" + placeholder = "Your comment ..." + notify = false + verify = true + avatar = "mp" + meta= "" + pageSize = 10 + lang = "en" + visitor = true + recordIP = true + # {{< link "https://developers.facebook.com/docs/plugins/comments" "Facebook 评论系统" >}}设置 + [params.page.comment.facebook] + enable = false + width = "100%" + numPosts = 10 + appId = "" + languageCode = "zh_CN" + # {{< version 0.2.0 >}} {{< link "https://comments.app/" "Telegram Comments" >}} 评论系统设置 + [params.page.comment.telegram] + enable = false + siteID = "" + limit = 5 + height = "" + color = "" + colorful = true + dislikes = false + outlined = false + # {{< version 0.2.0 >}} SEO config + [params.page.seo] + # 出版者信息 + [params.page.seo.publisher] + name = "xxxx" + [params.page.seo.publisher.logo] + url = "logo.png" + width = 127 + height = 40 + # Logo 信息 + [params.page.seo.logo] + url = "logo.png" + width = 127 + height = 40 + # 图片信息 + [params.page.seo.image] + url = "cover.png" + width = 800 + height = 600 # 网站验证代码,用于 Google/Bing/Yandex/Pinterest/Baidu [params.verification] @@ -443,23 +505,7 @@ hugo yandex = "" pinterest = "" baidu = "" - # 出版者信息,仅用于 SEO - [params.publisher] - name = "xxxx" - [params.publisher.logo] - url = "logo.png" - width = 127 - height = 40 - # 网站 Logo 信息,仅用于 SEO - [params.logo] - url = "logo.png" - width = 127 - height = 40 - # 网站图标信息,仅用于 SEO - [params.image] - url = "cover.png" - width = 800 - height = 600 + # CSS 和 JS 文件的 CDN 设置 [params.cdn] # {{< version 0.2.0 >}} {{< link "https://github.com/necolas/normalize.css" "normalize.css" >}}@8.0.1 @@ -544,27 +590,26 @@ hugo startLevel = 2 endLevel = 6 -# 作者信息 +# 作者配置 [author] name = "xxxx" link = "" -# 网站地图信息 +# 网站地图配置 [sitemap] changefreq = "weekly" filename = "sitemap.xml" priority = 0.5 -# {{< link "https://gohugo.io/content-management/urls/#permalinks" "Permalinks 信息" >}} +# {{< link "https://gohugo.io/content-management/urls/#permalinks" "Permalinks 配置" >}} [Permalinks] # posts = ":year/:month/:filename" posts = ":filename" -# {{< link "https://gohugo.io/about/hugo-and-gdpr/" "隐私信息设置" >}} +# {{< link "https://gohugo.io/about/hugo-and-gdpr/" "隐私信息配置" >}} [privacy] [privacy.googleAnalytics] anonymizeIP = true - [privacy.youtube] privacyEnhanced = true diff --git a/exampleSite/content/posts/theme-documentation-built-in-shortcodes.en.md b/exampleSite/content/posts/theme-documentation-built-in-shortcodes.en.md index 600cbb8..1c82620 100644 --- a/exampleSite/content/posts/theme-documentation-built-in-shortcodes.en.md +++ b/exampleSite/content/posts/theme-documentation-built-in-shortcodes.en.md @@ -1,38 +1,19 @@ --- weight: 3 title: "Theme Documentation - Built-in Shortcodes" -subtitle: "" date: 2020-03-04T16:29:41+08:00 lastmod: 2020-03-04T16:29:41+08:00 draft: false author: "Dillon" authorLink: "https://dillonzq.com" description: "Hugo provides multiple built-in shortcodes for author convenience and to keep your markdown content clean." -license: "" tags: ["shortcodes"] categories: ["documentation"] -hiddenFromHomePage: false featuredImage: "/images/theme-documentation-built-in-shortcodes/featured-image.png" -featuredImagePreview: "" -toc: true -autoCollapseToc: true -math: false -mapbox: - accessToken: "" - lightStyle: "" - darkStyle: "" - navigation: true - geolocate: true - scale: true - fullscreen: true lightgallery: true -linkToMarkdown: true -share: - enable: true -comment: true --- **Hugo** provides multiple built-in shortcodes for author convenience and to keep your markdown content clean. @@ -48,7 +29,7 @@ A shortcode is a simple snippet that can generate reasonable HTML code and confo Hugo ships with a set of predefined shortcodes that represent very common usage. These shortcodes are provided for author convenience and to keep your markdown content clean. -## `figure` {#figure} +## figure {#figure} [Documentation of `figure`](https://gohugo.io/content-management/shortcodes/#figure) @@ -73,7 +54,7 @@ The HTML looks like this: ``` -## `gist` +## gist [Documentation of `gist`](https://gohugo.io/content-management/shortcodes/#gist) @@ -93,7 +74,7 @@ The HTML looks like this: ``` -## `highlight` +## highlight [Documentation of `highlight`](https://gohugo.io/content-management/shortcodes/#instagram) @@ -125,7 +106,7 @@ The rendered output looks like this: {{< /highlight >}} -## `instagram` +## instagram [Documentation of `instagram`](https://gohugo.io/content-management/shortcodes/#instagram) @@ -139,7 +120,7 @@ The rendered output looks like this: {{< instagram BWNjjyYFxVx hidecaption >}} -## `param` +## param [Documentation of `param`](https://gohugo.io/content-management/shortcodes/#param) @@ -153,11 +134,11 @@ The rendered output looks like this: {{< param description >}} -## `ref` and `relref` {#ref-and-relref} +## ref and relref {#ref-and-relref} [Documentation of `ref` and `relref`](https://gohugo.io/content-management/shortcodes/#ref-and-relref) -## `tweet` +## tweet [Documentation of `tweet`](https://gohugo.io/content-management/shortcodes/#tweet) @@ -171,7 +152,7 @@ The rendered output looks like this: {{< tweet 877500564405444608 >}} -## `vimeo` +## vimeo [Documentation of `vimeo`](https://gohugo.io/content-management/shortcodes/#vimeo) @@ -185,7 +166,7 @@ The rendered output looks like this: {{< vimeo 146022717 >}} -## `youtube` +## youtube [Documentation of `youtube`](https://gohugo.io/content-management/shortcodes/#youtube) diff --git a/exampleSite/content/posts/theme-documentation-built-in-shortcodes.fr.md b/exampleSite/content/posts/theme-documentation-built-in-shortcodes.fr.md index 36f3923..39a3308 100644 --- a/exampleSite/content/posts/theme-documentation-built-in-shortcodes.fr.md +++ b/exampleSite/content/posts/theme-documentation-built-in-shortcodes.fr.md @@ -1,38 +1,19 @@ --- weight: 3 title: "Thème Documentation - Built-in Shortcodes" -subtitle: "" date: 2020-03-04T16:29:59+08:00 lastmod: 2020-03-04T16:29:59+08:00 draft: false author: "Dillon" authorLink: "https://dillonzq.com" description: "Hugo fournit plusieurs shortcodes intégrés pour la commodité de l'auteur et pour garder votre contenu de démarque propre." -license: "" tags: ["shortcodes"] categories: ["documentation"] -hiddenFromHomePage: false featuredImage: "/images/theme-documentation-built-in-shortcodes/featured-image.png" -featuredImagePreview: "" -toc: true -autoCollapseToc: true -math: false -mapbox: - accessToken: "" - lightStyle: "" - darkStyle: "" - navigation: true - geolocate: true - scale: true - fullscreen: true lightgallery: true -linkToMarkdown: true -share: - enable: true -comment: true --- **Hugo** fournit plusieurs shortcodes intégrés pour la commodité de l'auteur et pour garder votre contenu de démarque propre. @@ -53,7 +34,7 @@ A shortcode is a simple snippet that can generate reasonable HTML code and confo Hugo ships with a set of predefined shortcodes that represent very common usage. These shortcodes are provided for author convenience and to keep your markdown content clean. -## `figure` {#figure} +## figure {#figure} [Documentation of `figure`](https://gohugo.io/content-management/shortcodes/#figure) @@ -78,7 +59,7 @@ The HTML looks like this: ``` -## `gist` +## gist [Documentation of `gist`](https://gohugo.io/content-management/shortcodes/#gist) @@ -98,7 +79,7 @@ The HTML looks like this: ``` -## `highlight` +## highlight [Documentation of `highlight`](https://gohugo.io/content-management/shortcodes/#instagram) @@ -130,7 +111,7 @@ The rendered output looks like this: {{< /highlight >}} -## `instagram` +## instagram [Documentation of `instagram`](https://gohugo.io/content-management/shortcodes/#instagram) @@ -144,7 +125,7 @@ The rendered output looks like this: {{< instagram BWNjjyYFxVx hidecaption >}} -## `param` +## param [Documentation of `param`](https://gohugo.io/content-management/shortcodes/#param) @@ -158,11 +139,11 @@ The rendered output looks like this: {{< param description >}} -## `ref` and `relref` {#ref-and-relref} +## ref and relref {#ref-and-relref} [Documentation of `ref` and `relref`](https://gohugo.io/content-management/shortcodes/#ref-and-relref) -## `tweet` +## tweet [Documentation of `tweet`](https://gohugo.io/content-management/shortcodes/#tweet) @@ -176,7 +157,7 @@ The rendered output looks like this: {{< tweet 877500564405444608 >}} -## `vimeo` +## vimeo [Documentation of `vimeo`](https://gohugo.io/content-management/shortcodes/#vimeo) @@ -190,7 +171,7 @@ The rendered output looks like this: {{< vimeo 146022717 >}} -## `youtube` +## youtube [Documentation of `youtube`](https://gohugo.io/content-management/shortcodes/#youtube) diff --git a/exampleSite/content/posts/theme-documentation-built-in-shortcodes.zh-cn.md b/exampleSite/content/posts/theme-documentation-built-in-shortcodes.zh-cn.md index 436e149..4582171 100644 --- a/exampleSite/content/posts/theme-documentation-built-in-shortcodes.zh-cn.md +++ b/exampleSite/content/posts/theme-documentation-built-in-shortcodes.zh-cn.md @@ -1,38 +1,19 @@ --- weight: 3 title: "主题文档 - 内置 Shortcodes" -subtitle: "" date: 2020-03-04T16:29:59+08:00 lastmod: 2020-03-04T16:29:59+08:00 draft: false author: "Dillon" authorLink: "https://dillonzq.com" description: "Hugo 提供了多个内置的 Shortcodes, 以方便作者保持 Markdown 内容的整洁." -license: "" tags: ["shortcodes"] categories: ["documentation"] -hiddenFromHomePage: false featuredImage: "/images/theme-documentation-built-in-shortcodes/featured-image.png" -featuredImagePreview: "" -toc: true -autoCollapseToc: true -math: false -mapbox: - accessToken: "" - lightStyle: "" - darkStyle: "" - navigation: true - geolocate: true - scale: true - fullscreen: true lightgallery: true -linkToMarkdown: true -share: - enable: true -comment: true --- **Hugo** 提供了多个内置的 Shortcodes, 以方便作者保持 Markdown 内容的整洁. @@ -49,7 +30,7 @@ shortcode 是一个简单代码段, 可以生成合理的 HTML 代码, 并且符 Hugo 附带了一组预定义的 shortcodes, 它们实现了一些非常常见的用法. 提供这些 shortcodes 是为了方便保持你的 Markdown 内容简洁. -## `figure` {#figure} +## figure {#figure} [`figure` 的文档](https://gohugo.io/content-management/shortcodes/#figure) @@ -74,7 +55,7 @@ Hugo 附带了一组预定义的 shortcodes, 它们实现了一些非常常见 ``` -## `gist` +## gist [`gist` 的文档](https://gohugo.io/content-management/shortcodes/#gist) @@ -94,7 +75,7 @@ Hugo 附带了一组预定义的 shortcodes, 它们实现了一些非常常见 ``` -## `highlight` +## highlight [`highlight` 的文档](https://gohugo.io/content-management/shortcodes/#instagram) @@ -126,7 +107,7 @@ Hugo 附带了一组预定义的 shortcodes, 它们实现了一些非常常见 {{< /highlight >}} -## `instagram` +## instagram [`instagram` 的文档](https://gohugo.io/content-management/shortcodes/#instagram) @@ -140,7 +121,7 @@ Hugo 附带了一组预定义的 shortcodes, 它们实现了一些非常常见 {{< instagram BWNjjyYFxVx hidecaption >}} -## `param` +## param [`param` 的文档](https://gohugo.io/content-management/shortcodes/#param) @@ -154,11 +135,11 @@ Hugo 附带了一组预定义的 shortcodes, 它们实现了一些非常常见 {{< param description >}} -## `ref` 和 `relref` {#ref-and-relref} +## ref 和 relref {#ref-and-relref} [`ref` 和 `relref` 的文档](https://gohugo.io/content-management/shortcodes/#ref-and-relref) -## `tweet` +## tweet [`tweet` 的文档](https://gohugo.io/content-management/shortcodes/#tweet) @@ -172,7 +153,7 @@ Hugo 附带了一组预定义的 shortcodes, 它们实现了一些非常常见 {{< tweet 877500564405444608 >}} -## `vimeo` +## vimeo [`vimeo` 的文档](https://gohugo.io/content-management/shortcodes/#vimeo) @@ -186,7 +167,7 @@ Hugo 附带了一组预定义的 shortcodes, 它们实现了一些非常常见 {{< vimeo 146022717 >}} -## `youtube` +## youtube [`youtube` 的文档](https://gohugo.io/content-management/shortcodes/#youtube) diff --git a/exampleSite/content/posts/theme-documentation-content.en.md b/exampleSite/content/posts/theme-documentation-content.en.md index 24212a9..5ba6d37 100644 --- a/exampleSite/content/posts/theme-documentation-content.en.md +++ b/exampleSite/content/posts/theme-documentation-content.en.md @@ -1,38 +1,23 @@ --- weight: 2 title: "Theme Documentation - Content" -subtitle: "" date: 2020-03-05T15:58:26+08:00 lastmod: 2020-03-05T15:58:26+08:00 draft: false author: "Dillon" authorLink: "https://dillonzq.com" description: "Find out how to create and organize your content quickly and intuitively in LoveIt theme." -license: "" tags: ["content", "markdown"] categories: ["documentation"] -hiddenFromHomePage: false featuredImage: "/images/theme-documentation-content/featured-image.jpg" -featuredImagePreview: "" -toc: true -autoCollapseToc: false -math: true -mapbox: - accessToken: "" - lightStyle: "" - darkStyle: "" - navigation: true - geolocate: true - scale: true - fullscreen: true -lightgallery: true -linkToMarkdown: true -share: +toc: + auto: false +math: enable: true -comment: true +lightgallery: true --- Find out how to create and organize your content quickly and intuitively in **LoveIt** theme. @@ -51,7 +36,12 @@ A few suggestions to help you get a good looking site quickly: **Hugo** allows you to add front matter in `yaml`, `toml` or `json` to your content files. -Here is a default front matter from the default archetype: +{{< admonition >}} +**Not all** of the below front matters need to be set in each of your posts. +It is necessary only if the front matters and the `page` part in your [site configuration](../theme-documentation-basics/#site-configuration) are inconsistent. +{{< /admonition >}} + +Here is a front matter example: ```yaml --- @@ -67,28 +57,33 @@ license: "" tags: [] categories: [] -hiddenFromHomePage: false -hiddenFromSearch: false - featuredImage: "" featuredImagePreview: "" -toc: false -autoCollapseToc: true -math: true -mapbox: - accessToken: "" - lightStyle: "" - darkStyle: "" - navigation: true - geolocate: true - scale: true - fullscreen: true +hiddenFromHomePage: false +hiddenFromSearch: false lightgallery: true +copyCode: true +ruby: true +fraction: true +fontawesome: true linkToMarkdown: true + +toc: + enable: true + auto: true +math: + enable: true + # ... +mapbox: + accessToken: "" + # ... share: enable: true -comment: true + # ... +comment: + enable: true + # ... --- ``` @@ -101,24 +96,26 @@ comment: true * **authorLink**: the link of the author. * **description**: the description for the content. * **license**: the special lisence for this content. + * **tags**: the tags for the content. * **categories**: the categories for the content. -* **hiddenFromHomePage**: if `true`, the content will not be shown in the home page, but this behaviour is configurabl in the [site configuration](../theme-documentation-basics/#site-configuration). -* **hiddenFromSearch**: {{< version 0.2.0 >}} if `true`, the content will not be shown in the search results. * **featuredImage**: the featured image for the content. * **featuredImagePreview**: the featured image for the content preview in the home page. -* **toc**: if `true`, the content will show the table of the contents. -* **autoCollapseToc**: if `true`, the table of the contents will be automatically collapsed. -* **math**: if `true`, the mathematical formula in the content will be automatically rendered. -* **mapbox**: {{< version 0.2.0 >}} the same as `params.mapbox` in the [site configuration](../theme-documentation-basics/#site-configuration). -* **lightgallery**: if `true`, images in the content will be shown as the gallery. -* **linkToMarkdown**: if `true`, the footer of the content will show the link to the orignal Markdown file. -* **share**: the same as `params.share` in the [site configuration](../theme-documentation-basics/#site-configuration). -* **comment**: if `true`, the comment will be used. -{{< admonition tip >}} -Not all of the above front matters need to be set in each of your posts. It is necessary only if the front matters and your [site configuration](../theme-documentation-basics/#site-configuration) are inconsistent. -{{< /admonition >}} +* **hiddenFromHomePage**: if `true`, the content will not be shown in the home page. +* **hiddenFromSearch**: {{< version 0.2.0 >}} if `true`, the content will not be shown in the search results. +* **copyCode**: {{< version 0.2.0 >}} if `true`, the content will show the copy button of the code block. +* **lightgallery**: if `true`, images in the content will be shown as the gallery. +* **ruby**: {{< version 0.2.0 >}} if `true`, the content will enable the [ruby extended syntax](#ruby). +* **fraction**: {{< version 0.2.0 >}} if `true`, the content will enable the [fraction extended syntax](#fraction). +* **fontawesome**: {{< version 0.2.0 >}} if `true`, the content will enable the [Font Awesome extended syntax](#fontawesome). +* **linkToMarkdown**: if `true`, the footer of the content will show the link to the orignal Markdown file. + +* **toc**: {{< version 0.2.0 changed >}} the same as the `params.page.toc` part in the [site configuration](../theme-documentation-basics/#site-configuration). +* **math**: {{< version 0.2.0 changed >}} the same as the `params.page.math` part in the [site configuration](../theme-documentation-basics/#site-configuration). +* **mapbox**: {{< version 0.2.0 >}} the same as the `params.page.mapbox` part in the [site configuration](../theme-documentation-basics/#site-configuration). +* **share**: the same as the `params.page.share` part in the [site configuration](../theme-documentation-basics/#site-configuration). +* **comment**: {{< version 0.2.0 changed >}} the same as the `params.page.comment` part in the [site configuration](../theme-documentation-basics/#site-configuration). ## 3 Content Summaries @@ -252,7 +249,7 @@ $$ \ce{CO2 + C -> 2 CO} $$ $$ \ce{Hg^2+ ->[I-] HgI2 ->[I-] [Hg^{II}I4]^2-} $$ -### Ruby Annotation +### Ruby Annotation {#ruby} An extended Markdown syntax for **ruby annotation** is supported in **LoveIt** theme: @@ -264,7 +261,7 @@ The rendered output looks like this: [Hugo]^(An open-source static site generator) -### Fraction +### Fraction {#fraction} {{< version 0.2.0 >}} @@ -282,7 +279,7 @@ The rendered output looks like this: [90]/[100] -### Font Awesome +### Font Awesome {#fontawesome} **LoveIt** theme uses [Font Awesome](https://fontawesome.com/) as the icon library. You can easily use these icons in your articles. diff --git a/exampleSite/content/posts/theme-documentation-content.fr.md b/exampleSite/content/posts/theme-documentation-content.fr.md index 4d94f4a..ad079ef 100644 --- a/exampleSite/content/posts/theme-documentation-content.fr.md +++ b/exampleSite/content/posts/theme-documentation-content.fr.md @@ -1,38 +1,23 @@ --- weight: 2 title: "Thème Documentation - Contenu" -subtitle: "" date: 2020-03-05T16:30:05+08:00 lastmod: 2020-03-05T16:30:05+08:00 draft: false author: "Dillon" authorLink: "https://dillonzq.com" description: "Découvrez comment créer et organiser votre contenu rapidement et intuitivement dans le thème LoveIt." -license: "" tags: ["contenu", "markdown"] categories: ["documentation"] -hiddenFromHomePage: false featuredImage: "/images/theme-documentation-content/featured-image.jpg" -featuredImagePreview: "" -toc: true -autoCollapseToc: false -math: true -mapbox: - accessToken: "" - lightStyle: "" - darkStyle: "" - navigation: true - geolocate: true - scale: true - fullscreen: true -lightgallery: true -linkToMarkdown: true -share: +toc: + auto: false +math: enable: true -comment: true +lightgallery: true --- Découvrez comment créer et organiser votre contenu rapidement et intuitivement dans le thème **LoveIt**. @@ -56,7 +41,12 @@ A few suggestions to help you get a good looking site quickly: **Hugo** allows you to add front matter in `yaml`, `toml` or `json` to your content files. -Here is a default front matter from the default archetype: +{{< admonition >}} +**Not all** of the below front matters need to be set in each of your posts. +It is necessary only if the front matters and the `page` part in your [site configuration](../theme-documentation-basics/#site-configuration) are inconsistent. +{{< /admonition >}} + +Here is a front matter example: ```yaml --- @@ -72,28 +62,33 @@ license: "" tags: [] categories: [] -hiddenFromHomePage: false -hiddenFromSearch: false - featuredImage: "" featuredImagePreview: "" -toc: false -autoCollapseToc: true -math: true -mapbox: - accessToken: "" - lightStyle: "" - darkStyle: "" - navigation: true - geolocate: true - scale: true - fullscreen: true +hiddenFromHomePage: false +hiddenFromSearch: false lightgallery: true +copyCode: true +ruby: true +fraction: true +fontawesome: true linkToMarkdown: true + +toc: + enable: true + auto: true +math: + enable: true + # ... +mapbox: + accessToken: "" + # ... share: enable: true -comment: true + # ... +comment: + enable: true + # ... --- ``` @@ -106,24 +101,26 @@ comment: true * **authorLink**: the link of the author. * **description**: the description for the content. * **license**: the special lisence for this content. + * **tags**: the tags for the content. * **categories**: the categories for the content. -* **hiddenFromHomePage**: if `true`, the content will not be shown in the home page, but this behaviour is configurabl in the [site configuration](../theme-documentation-basics/#site-configuration). -* **hiddenFromSearch**: {{< version 0.2.0 >}} if `true`, the content will not be shown in the search results. * **featuredImage**: the featured image for the content. * **featuredImagePreview**: the featured image for the content preview in the home page. -* **toc**: if `true`, the content will show the table of the contents. -* **autoCollapseToc**: if `true`, the table of the contents will be automatically collapsed. -* **math**: if `true`, the mathematical formula in the content will be automatically rendered. -* **mapbox**: {{< version 0.2.0 >}} the same as `params.mapbox` in the [site configuration](../theme-documentation-basics/#site-configuration). -* **lightgallery**: if `true`, images in the content will be shown as the gallery. -* **linkToMarkdown**: if `true`, the footer of the content will show the link to the orignal Markdown file. -* **share**: the same as `params.share` in the [site configuration](../theme-documentation-basics/#site-configuration). -* **comment**: if `true`, the comment will be used. -{{< admonition tip >}} -Not all of the above front matters need to be set in each of your posts. It is necessary only if the front matters and your [site configuration](../theme-documentation-basics/#site-configuration) are inconsistent. -{{< /admonition >}} +* **hiddenFromHomePage**: if `true`, the content will not be shown in the home page. +* **hiddenFromSearch**: {{< version 0.2.0 >}} if `true`, the content will not be shown in the search results. +* **copyCode**: {{< version 0.2.0 >}} if `true`, the content will show the copy button of the code block. +* **lightgallery**: if `true`, images in the content will be shown as the gallery. +* **ruby**: {{< version 0.2.0 >}} if `true`, the content will enable the [ruby extended syntax](#ruby). +* **fraction**: {{< version 0.2.0 >}} if `true`, the content will enable the [fraction extended syntax](#fraction). +* **fontawesome**: {{< version 0.2.0 >}} if `true`, the content will enable the [Font Awesome extended syntax](#fontawesome). +* **linkToMarkdown**: if `true`, the footer of the content will show the link to the orignal Markdown file. + +* **toc**: {{< version 0.2.0 changed >}} the same as the `params.page.toc` part in the [site configuration](../theme-documentation-basics/#site-configuration). +* **math**: {{< version 0.2.0 changed >}} the same as the `params.page.math` part in the [site configuration](../theme-documentation-basics/#site-configuration). +* **mapbox**: {{< version 0.2.0 >}} the same as the `params.page.mapbox` part in the [site configuration](../theme-documentation-basics/#site-configuration). +* **share**: the same as the `params.page.share` part in the [site configuration](../theme-documentation-basics/#site-configuration). +* **comment**: {{< version 0.2.0 changed >}} the same as the `params.page.comment` part in the [site configuration](../theme-documentation-basics/#site-configuration). ## 3 Content Summaries @@ -257,7 +254,7 @@ $$ \ce{CO2 + C -> 2 CO} $$ $$ \ce{Hg^2+ ->[I-] HgI2 ->[I-] [Hg^{II}I4]^2-} $$ -### Ruby Annotation +### Ruby Annotation {#ruby} An extended Markdown syntax for **ruby annotation** is supported in **LoveIt** theme: @@ -269,7 +266,7 @@ The rendered output looks like this: [Hugo]^(An open-source static site generator) -### Fraction +### Fraction {#fraction} {{< version 0.2.0 >}} @@ -287,7 +284,7 @@ The rendered output looks like this: [90]/[100] -### Font Awesome +### Font Awesome {#fontawesome} **LoveIt** theme uses [Font Awesome](https://fontawesome.com/) as the icon library. You can easily use these icons in your articles. diff --git a/exampleSite/content/posts/theme-documentation-content.zh-cn.md b/exampleSite/content/posts/theme-documentation-content.zh-cn.md index 7fcb812..1b25c00 100644 --- a/exampleSite/content/posts/theme-documentation-content.zh-cn.md +++ b/exampleSite/content/posts/theme-documentation-content.zh-cn.md @@ -7,26 +7,17 @@ draft: false author: "Dillon" authorLink: "https://dillonzq.com" description: "了解如何在 LoveIt 主题中快速, 直观地创建和组织内容." -license: "" tags: ["内容", "markdown"] categories: ["documentation"] featuredImage: "/images/theme-documentation-content/featured-image.jpg" -toc: true -autoCollapseToc: false -math: true -mapbox: - navigation: true - geolocate: true - scale: true - fullscreen: true -lightgallery: true -linkToMarkdown: true -share: +toc: + auto: false +math: enable: true -comment: true +lightgallery: true --- 了解如何在 **LoveIt** 主题中快速, 直观地创建和组织内容. @@ -45,7 +36,12 @@ comment: true **Hugo** 允许你在文章内容前面添加 `yaml`, `toml` 或者 `json` 格式的前置参数. -这是默认文章模板中的默认前置参数: +{{< admonition >}} +**不是所有**的上述前置参数都必须在你的每篇文章中设置. +只有在文章的参数和你的 [网站设置](../theme-documentation-basics/#site-configuration) 中的 `page` 部分不一致时才有必要这么做. +{{< /admonition >}} + +这是一个前置参数例子: ```yaml --- @@ -61,28 +57,33 @@ license: "" tags: [] categories: [] -hiddenFromHomePage: false -hiddenFromSearch: false - featuredImage: "" featuredImagePreview: "" -toc: false -autoCollapseToc: true -math: true -mapbox: - accessToken: "" - lightStyle: "" - darkStyle: "" - navigation: true - geolocate: true - scale: true - fullscreen: true +hiddenFromHomePage: false +hiddenFromSearch: false lightgallery: true +copyCode: true +ruby: true +fraction: true +fontawesome: true linkToMarkdown: true + +toc: + enable: true + auto: true +math: + enable: true + # ... +mapbox: + accessToken: "" + # ... share: enable: true -comment: true + # ... +comment: + enable: true + # ... --- ``` @@ -95,25 +96,26 @@ comment: true * **authorLink**: 文章作者的链接. * **description**: 文章内容的描述. * **license**: 这篇文章特殊的许可. + * **tags**: 文章的标签. * **categories**: 文章所属的类别. -* **hiddenFromHomePage**: 如果设为 `true`, 这篇文章将不会显示在主页上, 但是此行为可以在 [网站配置](../theme-documentation-basics/#site-configuration) 中设置的. -* **hiddenFromSearch**: {{< version 0.2.0 >}} 如果设为 `true`, 这篇文章将不会显示在搜索结果中. * **featuredImage**: 文章的特色图片. * **featuredImagePreview**: 用在主页预览的文章特色图片. -* **toc**: 如果设为 `true`, 这篇文章会显示右侧目录. -* **autoCollapseToc**: 如果设为 `true`, 文章目录会自动折叠. -* **math**: 如果设为 `true`, 将自动渲染文章中的数学公式. -* **mapbox**: {{< version 0.2.0 >}} 和 [网站配置](../theme-documentation-basics/#site-configuration) 中的 `params.mapbox` 对象相同. -* **lightgallery**: 如果设为 `true`, 文章中的图片将可以按照画廊形式呈现. -* **linkToMarkdown**: 如果设为 `true`, 内容的页脚将显示指向原始 Markdown 文件的链接. -* **share**: 和 [网站配置](../theme-documentation-basics/#site-configuration) 中的 `params.share` 对象相同. -* **comment**: 如果设为 `true`, 将启用评论系统. -{{< admonition tip >}} -不是所有的上述前置参数都必须在你的每篇文章中设置. -只有在文章的参数和你的 [网站设置](../theme-documentation-basics/#site-configuration) 不一致时才有必要这么做. -{{< /admonition >}} +* **hiddenFromHomePage**: 如果设为 `true`, 这篇文章将不会显示在主页上. +* **hiddenFromSearch**: {{< version 0.2.0 >}} 如果设为 `true`, 这篇文章将不会显示在搜索结果中. +* **copyCode**: {{< version 0.2.0 >}} 如果设为 `true`, 这篇文章会显示代码块的复制按钮. +* **lightgallery**: 如果设为 `true`, 文章中的图片将可以按照画廊形式呈现. +* **ruby**: {{< version 0.2.0 >}} 如果设为 `true`, 这篇文章会使用 [上标注释扩展语法](#ruby). +* **fraction**: {{< version 0.2.0 >}} 如果设为 `true`, 这篇文章会使用 [分数扩展语法](#fraction). +* **fontawesome**: {{< version 0.2.0 >}} 如果设为 `true`, 这篇文章会使用 [Font Awesome 扩展语法](#fontawesome). +* **linkToMarkdown**: 如果设为 `true`, 内容的页脚将显示指向原始 Markdown 文件的链接. + +* **toc**: {{< version 0.2.0 changed >}} 和 [网站配置](../theme-documentation-basics/#site-configuration) 中的 `params.page.toc` 部分相同. +* **math**: {{< version 0.2.0 changed >}} 和 [网站配置](../theme-documentation-basics/#site-configuration) 中的 `params.page.math` 部分相同. +* **mapbox**: {{< version 0.2.0 >}} 和 [网站配置](../theme-documentation-basics/#site-configuration) 中的 `params.page.mapbox` 部分相同. +* **share**: 和 [网站配置](../theme-documentation-basics/#site-configuration) 中的 `params.page.share` 部分相同. +* **comment**: {{< version 0.2.0 changed >}} 和 [网站配置](../theme-documentation-basics/#site-configuration) 中的 `params.page.comment` 部分相同. ## 3 内容摘要 @@ -247,7 +249,7 @@ $$ \ce{CO2 + C -> 2 CO} $$ $$ \ce{Hg^2+ ->[I-] HgI2 ->[I-] [Hg^{II}I4]^2-} $$ -### 字符注音或者注释 +### 字符注音或者注释 {#ruby} **LoveIt** 主题支持一种 **字符注音或者注释** Markdown 扩展语法: @@ -259,7 +261,7 @@ $$ \ce{Hg^2+ ->[I-] HgI2 ->[I-] [Hg^{II}I4]^2-} $$ [Hugo]^(一个开源的静态网站生成工具) -### 分数 +### 分数 {#fraction} {{< version 0.2.0 >}} @@ -277,7 +279,7 @@ $$ \ce{Hg^2+ ->[I-] HgI2 ->[I-] [Hg^{II}I4]^2-} $$ [90]/[100] -### Font Awesome +### Font Awesome {#fontawesome} **LoveIt** 主题使用 [Font Awesome](https://fontawesome.com/) 作为图标库. 你同样可以在文章中轻松使用这些图标. diff --git a/exampleSite/content/posts/theme-documentation-extended-shortcodes.en.md b/exampleSite/content/posts/theme-documentation-extended-shortcodes.en.md index 103aa69..732163a 100644 --- a/exampleSite/content/posts/theme-documentation-extended-shortcodes.en.md +++ b/exampleSite/content/posts/theme-documentation-extended-shortcodes.en.md @@ -1,45 +1,27 @@ --- weight: 4 title: "Theme Documentation - Extended Shortcodes" -subtitle: "" date: 2020-03-03T16:29:41+08:00 lastmod: 2020-03-03T16:29:41+08:00 draft: false author: "Dillon" authorLink: "https://dillonzq.com" description: "LoveIt theme provides multiple shortcodes on top of built-in ones in Hugo." -license: "" tags: ["shortcodes"] categories: ["documentation"] -hiddenFromHomePage: false featuredImage: "/images/theme-documentation-extended-shortcodes/featured-image.jpg" featuredImagePreview: "/images/theme-documentation-extended-shortcodes/featured-image-preview.jpg" -toc: true -autoCollapseToc: true -math: false -mapbox: - accessToken: "" - lightStyle: "" - darkStyle: "" - navigation: true - geolocate: true - scale: true - fullscreen: true lightgallery: true -linkToMarkdown: true -share: - enable: true -comment: true --- **LoveIt** theme provides multiple shortcodes on top of built-in ones in Hugo. -## `style` +## style `style` is a shortcode to insert custom style in your post. @@ -63,7 +45,7 @@ The rendered output looks like this: This is a right-aligned paragraph. {{< /style >}} -## `link` +## link {{< version 0.2.0 >}} @@ -127,7 +109,7 @@ The rendered output looks like this (hover over the link, there should be a tool {{< link "https://github.com/upstage/" Upstage "Visit Upstage!" >}} -## `image` +## image {{< version 0.2.0 changed >}} @@ -197,7 +179,7 @@ The rendered output looks like this: {{< image src="/images/theme-documentation-extended-shortcodes/lighthouse.jpg" caption="Lighthouse (`image`)" src-s="/images/theme-documentation-extended-shortcodes/lighthouse-small.jpg" src-l="/images/theme-documentation-extended-shortcodes/lighthouse-large.jpg" >}} -## `admonition` +## admonition The `admonition` shortcode supports **12** types of banners to help you put notice in your page. @@ -283,7 +265,7 @@ The rendered output looks like this: A **tip** banner {{< /admonition >}} -## `mermaid` +## mermaid [mermaid](https://mermaidjs.github.io/) is a library helping you to generate diagram and flowcharts from text, in a similar manner as Markdown. @@ -531,7 +513,7 @@ pie "Rats" : 15 {{< /mermaid >}} -## `echarts` +## echarts [ECharts](https://echarts.apache.org/) is a library helping you to generate interactive data visualization. @@ -919,7 +901,7 @@ The `echarts` shortcode has also the following named parameters: {{< version 0.2.0 >}} Height of the data visualization, default value is `30rem`. -## `mapbox` +## mapbox {{< version 0.2.0 >}} @@ -993,7 +975,7 @@ The rendered output looks like this: {{< mapbox -122.252 37.453 10 false "mapbox://styles/mapbox/navigation-preview-day-v4?optimize=true" "mapbox://styles/mapbox/navigation-preview-night-v4?optimize=true" >}} -## `music` +## music The `music` shortcode embeds a responsive music player based on [APlayer](https://github.com/MoePlayer/APlayer) and [MetingJS](https://github.com/metowolf/MetingJS). @@ -1132,7 +1114,7 @@ The `music` shortcode has the following named parameters only applying to the ty Max height of the music list, default value is `340px`. -## `bilibili` +## bilibili {{< version 0.2.0 changed >}} @@ -1175,7 +1157,7 @@ The rendered output looks like this: {{< bilibili id=BV1TJ411C7An p=3 >}} -## `typeit` +## typeit The `typeit` shortcode provides typing animation based on [TypeIt](https://typeitjs.com/). diff --git a/exampleSite/content/posts/theme-documentation-extended-shortcodes.fr.md b/exampleSite/content/posts/theme-documentation-extended-shortcodes.fr.md index 057ca83..502c60d 100644 --- a/exampleSite/content/posts/theme-documentation-extended-shortcodes.fr.md +++ b/exampleSite/content/posts/theme-documentation-extended-shortcodes.fr.md @@ -1,38 +1,20 @@ --- weight: 4 title: "Thème Documentation - Extended Shortcodes" -subtitle: "" date: 2020-03-03T16:29:59+08:00 lastmod: 2020-03-03T16:29:59+08:00 draft: false author: "Dillon" authorLink: "https://dillonzq.com" description: "Le thème LoveIt fournit plusieurs shortcodes en plus de ceux intégrés dans Hugo." -license: "" tags: ["shortcodes"] categories: ["documentation"] -hiddenFromHomePage: false featuredImage: "/images/theme-documentation-extended-shortcodes/featured-image.jpg" featuredImagePreview: "/images/theme-documentation-extended-shortcodes/featured-image-preview.jpg" -toc: true -autoCollapseToc: true -math: false -mapbox: - accessToken: "" - lightStyle: "" - darkStyle: "" - navigation: true - geolocate: true - scale: true - fullscreen: true lightgallery: true -linkToMarkdown: true -share: - enable: true -comment: true --- Le thème **LoveIt** fournit plusieurs shortcodes en plus de ceux intégrés dans Hugo. @@ -44,7 +26,7 @@ Sorry, this article has not been completely translated into **French**. Welcome to take the time to propose a translation by [making a PR](https://github.com/dillonzq/LoveIt/pulls) to the theme! {{< /admonition >}} -## `style` +## style `style` is a shortcode to insert custom style in your post. @@ -68,7 +50,7 @@ The rendered output looks like this: This is a right-aligned paragraph. {{< /style >}} -## `link` +## link {{< version 0.2.0 >}} @@ -132,7 +114,7 @@ The rendered output looks like this (hover over the link, there should be a tool {{< link "https://github.com/upstage/" Upstage "Visit Upstage!" >}} -## `image` +## image {{< version 0.2.0 changed >}} @@ -202,7 +184,7 @@ The rendered output looks like this: {{< image src="/images/theme-documentation-extended-shortcodes/lighthouse.jpg" caption="Lighthouse (`image`)" src-s="/images/theme-documentation-extended-shortcodes/lighthouse-small.jpg" src-l="/images/theme-documentation-extended-shortcodes/lighthouse-large.jpg" >}} -## `admonition` +## admonition The `admonition` shortcode supports **12** types of banners to help you put notice in your page. @@ -288,7 +270,7 @@ The rendered output looks like this: A **tip** banner {{< /admonition >}} -## `mermaid` +## mermaid [mermaid](https://mermaidjs.github.io/) is a library helping you to generate diagram and flowcharts from text, in a similar manner as Markdown. @@ -536,7 +518,7 @@ pie "Rats" : 15 {{< /mermaid >}} -## `echarts` +## echarts [ECharts](https://echarts.apache.org/) is a library helping you to generate interactive data visualization. @@ -924,7 +906,7 @@ The `echarts` shortcode has also the following named parameters: {{< version 0.2.0 >}} Height of the data visualization, default value is `30rem`. -## `mapbox` +## mapbox {{< version 0.2.0 >}} @@ -998,7 +980,7 @@ The rendered output looks like this: {{< mapbox -122.252 37.453 10 false "mapbox://styles/mapbox/navigation-preview-day-v4?optimize=true" "mapbox://styles/mapbox/navigation-preview-night-v4?optimize=true" >}} -## `music` +## music The `music` shortcode embeds a responsive music player based on [APlayer](https://github.com/MoePlayer/APlayer) and [MetingJS](https://github.com/metowolf/MetingJS). @@ -1137,7 +1119,7 @@ The `music` shortcode has the following named parameters only applying to the ty Max height of the music list, default value is `340px`. -## `bilibili` +## bilibili {{< version 0.2.0 changed >}} @@ -1180,7 +1162,7 @@ The rendered output looks like this: {{< bilibili id=BV1TJ411C7An p=3 >}} -## `typeit` +## typeit The `typeit` shortcode provides typing animation based on [TypeIt](https://typeitjs.com/). diff --git a/exampleSite/content/posts/theme-documentation-extended-shortcodes.zh-cn.md b/exampleSite/content/posts/theme-documentation-extended-shortcodes.zh-cn.md index 1d68fc1..974d72b 100644 --- a/exampleSite/content/posts/theme-documentation-extended-shortcodes.zh-cn.md +++ b/exampleSite/content/posts/theme-documentation-extended-shortcodes.zh-cn.md @@ -1,14 +1,12 @@ --- weight: 4 title: "主题文档 - 扩展 Shortcodes" -subtitle: "" date: 2020-03-03T16:29:59+08:00 lastmod: 2020-03-03T16:29:59+08:00 draft: false author: "Dillon" authorLink: "https://dillonzq.com" description: "LoveIt 主题在 Hugo 内置的 shortcode 的基础上提供多个扩展的 shortcode." -license: "" tags: ["shortcodes"] categories: ["documentation"] @@ -16,16 +14,14 @@ categories: ["documentation"] featuredImage: "/images/theme-documentation-extended-shortcodes/featured-image.jpg" featuredImagePreview: "/images/theme-documentation-extended-shortcodes/featured-image-preview.jpg" -toc: true -autoCollapseToc: true -math: false +lightgallery: true --- **LoveIt** 主题在 Hugo 内置的 shortcode 的基础上提供多个扩展的 shortcode. -## `style` +## style `style` shortcode 用来在你的文章中插入自定义样式. @@ -49,7 +45,7 @@ This is a right-aligned paragraph. This is a right-aligned paragraph. {{< /style >}} -## `link` +## link {{< version 0.2.0 >}} @@ -114,7 +110,7 @@ This is a right-aligned paragraph. {{< link "https://github.com/upstage/" Upstage "Visit Upstage!" >}} -## `image` +## image {{< version 0.2.0 changed >}} @@ -184,7 +180,7 @@ This is a right-aligned paragraph. {{< image src="/images/theme-documentation-extended-shortcodes/lighthouse.jpg" caption="Lighthouse (`image`)" src-s="/images/theme-documentation-extended-shortcodes/lighthouse-small.jpg" src-l="/images/theme-documentation-extended-shortcodes/lighthouse-large.jpg" >}} -## `admonition` +## admonition `admonition` shortcode 支持 **12** 种 帮助你在页面中插入提示的横幅. @@ -270,7 +266,7 @@ This is a right-aligned paragraph. 一个 **技巧** 横幅 {{< /admonition >}} -## `mermaid` +## mermaid [mermaid](https://mermaidjs.github.io/) 是一个可以帮助你在文章中生成图表和流程图的库, 类似 Markdown 的语法. @@ -518,7 +514,7 @@ pie "Rats" : 15 {{< /mermaid >}} -## `echarts` +## echarts [ECharts](https://echarts.apache.org/) 是一个帮助你生成交互式数据可视化的库. @@ -906,7 +902,7 @@ data = [ {{< version 0.2.0 >}} 数据可视化的高度, 默认值是 `30rem`. -## `mapbox` +## mapbox {{< version 0.2.0 >}} @@ -980,7 +976,7 @@ data = [ {{< mapbox -122.252 37.453 10 false "mapbox://styles/mapbox/navigation-preview-day-v4?optimize=true" "mapbox://styles/mapbox/navigation-preview-night-v4?optimize=true" >}} -## `music` +## music `music` shortcode 基于 [APlayer](https://github.com/MoePlayer/APlayer) 和 [MetingJS](https://github.com/metowolf/MetingJS) 提供了一个内嵌的响应式音乐播放器. @@ -1118,7 +1114,7 @@ data = [ 音乐列表的最大高度, 默认值是 `340px`. -## `bilibili` +## bilibili {{< version 0.2.0 changed >}} @@ -1160,7 +1156,7 @@ https://www.bilibili.com/video/BV1TJ411C7An?p=3 {{< bilibili id=BV1TJ411C7An p=3 >}} -## `typeit` +## typeit `typeit` shortcode 基于 [TypeIt](https://typeitjs.com/) 提供了打字动画. diff --git a/i18n/en.toml b/i18n/en.toml index d914214..8466336 100644 --- a/i18n/en.toml +++ b/i18n/en.toml @@ -52,6 +52,17 @@ other = "Powered by %s" other = "Theme" # === partials/footer.html === +# === partials/comment.html === +[valineLang] +other = "en" + +[valinePlaceholder] +other = "Your comment ..." + +[facebookLanguageCode] +other = "en_US" +# === partials/comment.html === + # === partials/assets.html === [search] other = "Search" diff --git a/i18n/fr.toml b/i18n/fr.toml index bde9a11..694bad8 100644 --- a/i18n/fr.toml +++ b/i18n/fr.toml @@ -52,6 +52,17 @@ other = "Propulsé par %s" other = "Thème" # === partials/footer.html === +# === partials/comment.html === +[valineLang] +other = "en" + +[valinePlaceholder] +other = "Votre commentaire ..." + +[facebookLanguageCode] +other = "fr" +# === partials/comment.html === + # === partials/assets.html === [search] other = "Chercher" diff --git a/i18n/pl.toml b/i18n/pl.toml index 1b7f52e..2605259 100644 --- a/i18n/pl.toml +++ b/i18n/pl.toml @@ -52,6 +52,17 @@ other = "Napędzany przez %s" other = "Szablon" # === partials/footer.html === +# === partials/comment.html === +[valineLang] +other = "en" + +[valinePlaceholder] +other = "Twój komentarz ..." + +[facebookLanguageCode] +other = "pl" +# === partials/comment.html === + # === partials/assets.html === [search] other = "Szukaj" diff --git a/i18n/zh-CN.toml b/i18n/zh-CN.toml index fa46c06..04092b8 100644 --- a/i18n/zh-CN.toml +++ b/i18n/zh-CN.toml @@ -52,6 +52,17 @@ other = "由 %s 强力驱动" other = "主题" # === partials/footer.html === +# === partials/comment.html === +[valineLang] +other = "zh-cn" + +[valinePlaceholder] +other = "你的评论 ..." + +[facebookLanguageCode] +other = "zh_CN" +# === partials/comment.html === + # === partials/assets.html === [search] other = "搜索" diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html index fb97d56..0862dfc 100644 --- a/layouts/_default/baseof.html +++ b/layouts/_default/baseof.html @@ -1,20 +1,26 @@ -{{- $scratch := newScratch -}} -{{- .Scratch.Set "scratch" $scratch -}} -{{- if eq hugo.Environment "production" -}} - {{- $scratch.Set "CDN" .Site.Params.cdn -}} - {{- $scratch.Set "fingerprint" .Site.Params.fingerprint -}} -{{- end -}} - -{{- $scratch.Set "major-version" "0.2.X" -}} -{{- $scratch.Set "version" "0.2.0" -}} +{{- $version := "0.2.X" -}} {{- /* LoveIt theme version detection */ -}} {{- if not .Site.Params.version -}} {{- errorf "\n\nYou haven't configured the LoveIt version param correctly yet. See https://hugoloveit.com/theme-documentation-basics/#basic-configuration \n你还没有正确配置 LoveIt 的版本参数 参考 https://hugoloveit.com/zh-cn/theme-documentation-basics/#basic-configuration \n" -}} -{{- else if ne .Site.Params.version ($scratch.Get "major-version") -}} - {{- errorf (printf "\n\n%s -> %s:\nYou have an incompatible update. See https://github.com/dillonzq/LoveIt/releases \n你进行了一次不兼容的更新 参考 https://github.com/dillonzq/LoveIt/releases \n" .Site.Params.version ($scratch.Get "major-version")) -}} +{{- else if ne .Site.Params.version $version -}} + {{- errorf (printf "\n\n%s -> %s:\nYou have an incompatible update. See https://github.com/dillonzq/LoveIt/releases \n你进行了一次不兼容的更新 参考 https://github.com/dillonzq/LoveIt/releases \n" .Site.Params.version $version) -}} {{- end -}} +{{- $params := .Params | merge .Site.Params.page -}} +{{- .Scratch.Set "version" "0.2.0" -}} + +{{- if eq hugo.Environment "production" -}} + {{- .Scratch.Set "cdn" .Site.Params.cdn -}} + {{- .Scratch.Set "fingerprint" .Site.Params.fingerprint -}} +{{- else -}} + {{- $params = dict "comment" nil | merge $params -}} +{{- end -}} + +{{- .Scratch.Set "params" $params -}} +{{- $this := dict "desktop" .Site.Params.header.desktopMode "mobile" .Site.Params.header.mobileMode | dict "headerMode" | dict "config" -}} +{{- .Scratch.Set "this" $this -}} + @@ -25,7 +31,7 @@ {{- block "title" . }}{{ .Site.Title }}{{ end -}} - + {{- partial "head/meta.html" . -}} {{- partial "head/link.html" . -}} @@ -33,8 +39,8 @@ {{- /* Check theme isDark before body rendering */ -}} - {{- $theme := .Site.Params.defaultTheme -}} - + {{- $theme := .Site.Params.defaulttheme -}} +
diff --git a/layouts/_default/section.html b/layouts/_default/section.html index 415314b..2d037bc 100644 --- a/layouts/_default/section.html +++ b/layouts/_default/section.html @@ -10,7 +10,8 @@ {{- /* Paginate */ -}} - {{- range (.Paginate (.Pages.GroupByDate "2006")).PageGroups -}} + {{- $pages := .Pages.GroupByDate "2006" -}} + {{- range (.Site.Params.section.paginate | default .Site.Params.paginate | .Paginate $pages).PageGroups -}}

{{ .Key }}

{{- range .Pages -}}
@@ -18,7 +19,7 @@ {{- .Title -}} - {{- .Date.Format (.Site.Params.dateFormatToUse | default "01-02") -}} + {{- .Date.Format ($.Site.Params.section.dateFormat | default "01-02") -}}
{{- end -}} diff --git a/layouts/_default/single.html b/layouts/_default/single.html index 4f19da8..cf0815a 100644 --- a/layouts/_default/single.html +++ b/layouts/_default/single.html @@ -1,18 +1,21 @@ {{- define "title" }}{{ .Title }} | {{ .Site.Title }}{{ end -}} {{- define "content" -}} + {{- $params := .Scratch.Get "params" -}}
{{- /* Title */ -}}

{{- .Title -}}

- {{- with .Params.subtitle -}} + + {{- /* Subtitle */ -}} + {{- with $params.subtitle -}}

{{ . }}

{{- end -}} {{- /* Content */ -}}
- {{- partial "function/content.html" .Content | safeHTML -}} + {{- dict "content" .Content "ruby" $params.ruby "fraction" $params.fraction "fontawesome" $params.fontawesome | partial "function/content.html" | safeHTML -}}
{{- end -}} diff --git a/layouts/_default/summary.html b/layouts/_default/summary.html index df7ef02..c8a33a6 100644 --- a/layouts/_default/summary.html +++ b/layouts/_default/summary.html @@ -1,10 +1,9 @@ -{{- $scratch := .Scratch.Get "scratch" -}} - +{{- $params := .Params | merge .Site.Params.page -}}
{{- /* Featured image */ -}} - {{- with .Params.featuredImage -}} + {{- with $params.featuredimage -}} {{- end -}} @@ -16,19 +15,19 @@ {{- /* Meta */ -}}