This commit is contained in:
Oliver committed 2025-05-02 06:48:19 -03:00
commit 4afcf970b3
307 files changed
+66607

No files matched your search

+17
View File
@@ -0,0 +1,17 @@
Thumbs.db
.DS_Store
.dist
.tmp
.lock
.sass-cache
npm-debug.log
node_modules
builds
package-lock.json
public
resources
.hugo_build.lock
jsconfig.json
hugo_stats.json
go.sum
yarn.lock
+5
View File
@@ -0,0 +1,5 @@
{
"MD033": false,
"MD034": false,
"MD013": false
}
+12
View File
@@ -0,0 +1,12 @@
{
"overrides": [
{
"files": ["*.html"],
"options": {
"parser": "go-template",
"goTemplateBracketSpacing": true,
"bracketSameLine": true
}
}
]
}
@@ -0,0 +1,7 @@
---
title: "{{ replace .Name "-" " " | title }}"
date: {{ .Date }}
draft: true
# description
description: "This is meta description"
---
@@ -0,0 +1,90 @@
(function ($) {
'use strict';
// prelaoder
$('.preloader').delay(100).fadeOut(10);
// sidenav-menu
function sidenav() {
$('[data-toggle="sidenav-menu"]').on('click', function () {
$('.sidenav-menu, .sidenav-overlay').toggleClass('show');
});
}
sidenav();
// search-popup
function searchPopup() {
$('[data-toggle="search"]').on('click', function () {
$('.search-block').fadeIn(200);
setTimeout(function () {
$('.search-block').addClass('is-visible');
var value = $('#search-field').val();
$('#search-field').focus().val('').val(value);
}, 250);
});
$('[data-toggle="search-close"]').on('click', function () {
$('.search-block').fadeOut(200).removeClass('is-visible');
});
}
searchPopup();
// menuHumBurger icon toggle Init
function menuHumBurgerIcon() {
$('.navbar-toggler').on('click', function () {
$('i').toggleClass('d-inline d-none');
});
}
menuHumBurgerIcon();
// tab
$('.tab-content').find('.tab-pane').each(function (idx, item) {
var navTabs = $(this).closest('.code-tabs').find('.nav-tabs'),
title = $(this).attr('title');
navTabs.append('<li class="nav-item"><a class="nav-link" href="#">' + title + '</a></li>');
});
$('.code-tabs ul.nav-tabs').each(function () {
$(this).find("li:first").addClass('active');
})
$('.code-tabs .tab-content').each(function () {
$(this).find("div:first").addClass('active');
});
$('.nav-tabs a').click(function (e) {
e.preventDefault();
var tab = $(this).parent(),
tabIndex = tab.index(),
tabPanel = $(this).closest('.code-tabs'),
tabPane = tabPanel.find('.tab-pane').eq(tabIndex);
tabPanel.find('.active').removeClass('active');
tab.addClass('active');
tabPane.addClass('active');
});
// Accordions
$('.collapse').on('shown.bs.collapse', function () {
$(this).parent().find('.fas fa-plus').removeClass('fas fa-plus').addClass('fas fa-minus');
}).on('hidden.bs.collapse', function () {
$(this).parent().find('.fas fa-minus').removeClass('fas fa-minus').addClass('fas fa-plus');
});
//post slider
$('.post-slider').slick({
slidesToShow: 1,
slidesToScroll: 1,
autoplay: true,
autoplaySpeed: 1500,
fade: true,
cssEase: 'linear',
dots: false,
arrows: true,
prevArrow: '<button type=\'button\' class=\'prevArrow\'><i class=\'fas fa-angle-left\'></i></button>',
nextArrow: '<button type=\'button\' class=\'nextArrow\'><i class=\'fas fa-angle-right\'></i></button>'
});
})(jQuery);
@@ -0,0 +1,7 @@
/*!
* Bootstrap v4.5.0 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors
* Copyright 2011-2020 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]){color:inherit;text-decoration:none}a:not([href]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inlinLine truncated
/*# sourceMappingURL=bootstrap.min.css.map */
@@ -0,0 +1,7 @@
/*!
* Bootstrap v4.5.0 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery"),require("popper.js")):"function"==typeof define&&define.amd?define(["exports","jquery","popper.js"],e):e((t=t||self).bootstrap={},t.jQuery,t.Popper)}(this,(function(t,e,n){"use strict";function i(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function o(t,e,n){return e&&i(t.prototype,e),n&&i(t,n),t}function s(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function r(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function a(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?r(Object(n),!0).forEach((function(e){s(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}e=e&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e,n=n&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n;function l(t){var n=this,i=!1;return e(this).one(c.TRANSITION_END,(function(){i=!0})),setTimeout((function(){i||c.triggerTransitionEnd(n)}),t),this}var c={TRANSITION_END:"bsTransitionEnd",getUID:function(t){do{t+=~~(1e6*Math.random())}while(document.getElementById(t));return t},getSelectorFromElement:function(t){var e=t.getAttribute("data-target");if(!e||"#"===e){var n=t.getAttribute("href");e=n&&"#"!==n?n.trim():""}try{return document.querySelector(e)?e:null}catch(t){return null}},getTransitionDurationFromElement:function(t){if(!t)return 0;var n=e(t).css("transition-duration"),i=e(t).css("transition-delay"),o=parseFloat(n),s=parseFloat(i);return o||s?(n=n.split(",")[0],i=i.split(",")[0],1e3*(parseFloat(n)+parseFloat(i))):0},reflow:function(t){return t.offsetHeight},triggerTransitionEnd:function(t){e(t).trigger("transitionend")},supportsTransitionEnd:function(){return Boolean("transitionend")},isElement:function(t){return(t[0]||t).nodeType},typeCheckConfig:function(t,e,n){for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)){var o=n[i],s=e[i],r=s&&c.isElement(s)?"element":null===(a=s)||"undefined"==typeof a?""+a:{}.toString.call(a).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(o).test(r))throw new Error(t.toUpperCase()+': Option "'+i+'" provided type "'+r+'" but expected type "'+o+'".')}var a},findShadowRoot:function(t){if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){var e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?c.findShadowRoot(t.parentNode):null},jQueryDetection:function(){if("undefined"==typeof e)throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");var t=e.fn.jquery.split(" ")[0].split(".");if(t[0]<2&&t[1]<9||1===t[0]&&9===t[1]&&t[2]<1||t[0]>=4)throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}};c.jQueryDetection(),e.fn.emulateTransitionEnd=l,e.event.special[c.TRANSITION_END]={bindType:"transitionend",delegateType:"transitionend",handle:function(t){if(e(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}};var h="alert",u=e.fn[h],d=function(){function t(t){this._element=t}var n=t.prototype;return n.close=function(t){var e=this._element;t&&(e=this._getRootElement(t)),this._triggerCloseEvent(e).isDefaultPrevented()||this._removeElement(e)},n.dispose=function(){e.removeData(this._element,"bs.alert"),this._element=null},n._getRootElement=function(t){var n=c.getSelectorFromElement(t),i=!1;return n&&(i=document.querySelector(n)),i||(i=e(t).closest(".alert")[0]),i},n._triggerCloseEvent=function(t){var n=e.Event("close.bs.alert");return e(t).trigger(n),n},n._removeElement=function(t){var n=this;if(e(t).removeClass("show"),e(t).hasClass("fade")){var i=c.getTransitionDurationFromElement(t);e(t).one(c.TRANSITION_END,(function(e){return n._destroyElement(t,e)})).emulateTransitionEnd(i)}else this._destroyElement(t)},n._destroyElement=function(t){e(t).detach().trigger("closed.bs.alert").remove()},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.alert");o||(o=new t(this),i.data("bs.alert",o)),"close"===n&&o[n](this)}))},t._handleDismiss=function(t){return function(e){e&&e.preventDefault(),t.close(this)}},o(t,null,[{key:"VERSION",get:function(){return"4.5.0"}}]),t}();e(document).on("click.bs.alert.data-api",'[data-dismiss="alert"]',d._handleDismiss(new d)),e.fn[h]=d._jQueryInterface,e.fn[h].Constructor=d,e.fn[h].noConflict=function(){return e.fn[h]=u,d._jQueryInterface};var f=e.fn.button,g=function(){function t(t){this._element=t}var nLine truncated
//# sourceMappingURL=bootstrap.min.js.map
@@ -0,0 +1,2 @@
/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */
!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:y}),"function"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,S="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),D=function(e,t){return e===t&&(l=!0),0},j={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",B=new RegExp(M+"+","g"),$=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-lLine truncated
@@ -0,0 +1,9 @@
/*!
* Fuse.js v3.4.6 - Lightweight fuzzy-search (http://fusejs.io)
*
* Copyright (c) 2012-2017 Kirollos Risk (http://kiro.me)
* All Rights Reserved. Apache Software License 2.0
*
* http://www.apache.org/licenses/LICENSE-2.0
*/
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Fuse",[],t):"object"==typeof exports?exports.Fuse=t():e.Fuse=t()}(this,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1)}([function(e,t){e.exports=function(e){return Array.isArray?Array.isArray(e):"[object Array]"===Object.prototype.toString.call(e)}},function(e,t,n){function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function o(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var i=n(2),a=n(8),s=n(0),c=function(){function e(t,n){var r=n.location,o=void 0===r?0:r,i=n.distance,s=void 0===i?100:i,c=n.threshold,h=void 0===c?.6:c,l=n.maxPatternLength,u=void 0===l?32:l,f=n.caseSensitive,d=void 0!==f&&f,v=n.tokenSeparator,p=void 0===v?/ +/g:v,g=n.findAllMatches,y=void 0!==g&&g,m=n.minMatchCharLength,k=void 0===m?1:m,S=n.id,x=void 0===S?null:S,b=n.keys,M=void 0===b?[]:b,_=n.shouldSort,L=void 0===_||_,w=n.getFn,A=void 0===w?a:w,C=n.sortFn,I=void 0===C?function(e,t){return e.score-t.score}:C,O=n.tokenize,j=void 0!==O&&O,P=n.matchAllTokens,F=void 0!==P&&P,T=n.includeMatches,z=void 0!==T&&T,E=n.includeScore,K=void 0!==E&&E,$=n.verbose,J=void 0!==$&&$;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.options={location:o,distance:s,threshold:h,maxPatternLength:u,isCaseSensitive:d,tokenSeparator:p,findAllMatches:y,minMatchCharLength:k,id:x,keys:M,includeMatches:z,includeScore:K,shouldSort:L,getFn:A,sortFn:I,verbose:J,tokenize:j,matchAllTokens:F},this.setCollection(t)}var t,n,c;return t=e,(n=[{key:"setCollection",value:function(e){return this.list=e,e}},{key:"search",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{limit:!1};this._log('---------\nSearch pattern: "'.concat(e,'"'));var n=this._prepareSearchers(e),r=n.tokenSearchers,o=n.fullSearcher,i=this._search(r,o),a=i.weights,s=i.results;return this._computeScore(a,s),this.options.shouldSort&&this._sort(s),t.limit&&"number"==typeof t.limit&&(s=s.slice(0,t.limit)),this._format(s)}},{key:"_prepareSearchers",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=[];if(this.options.tokenize)for(var n=e.split(this.options.tokenSeparator),r=0,o=n.length;r<o;r+=1)t.push(new i(n[r],this.options));return{tokenSearchers:t,fullSearcher:new i(e,this.options)}}},{key:"_search",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1?arguments[1]:void 0,n=this.list,r={},o=[];if("string"==typeof n[0]){for(var i=0,a=n.length;i<a;i+=1)this._analyze({key:"",value:n[i],record:i,index:i},{resultMap:r,results:o,tokenSearchers:e,fullSearcher:t});return{weights:null,results:o}}for(var s={},c=0,h=n.length;c<h;c+=1)for(var l=n[c],u=0,f=this.options.keys.length;u<f;u+=1){var d=this.options.keys[u];if("string"!=typeof d){if(s[d.name]={weight:1-d.weight||1},d.weight<=0||d.weight>1)throw new Error("Key weight has to be > 0 and <= 1");d=d.name}else s[d]={weight:1};this._analyze({key:d,value:this.options.getFn(l,d),record:l,index:c},{resultMap:r,results:o,tokenSearchers:e,fullSearcher:t})}return{weights:s,results:o}}},{key:"_analyze",value:function(e,t){var n=e.key,r=e.arrayIndex,o=void 0===r?-1:r,i=e.value,a=e.record,c=e.index,h=t.tokenSearchers,l=void 0===h?[]:h,u=t.fullSearcher,f=void 0===u?[]:u,d=t.resultMap,v=void 0===d?{}:d,p=t.results,g=void 0===p?[]:p;if(null!=i){var y=!1,m=-1,k=0;if("string"==typeof i){this._log("\nKey: ".concat(""===n?"-":n));var S=f.search(i);if(this._log('Full text: "'.concat(i,'", score: ').concat(S.score)),this.options.tokenize){for(var x=i.split(this.options.tokenSeparator),b=[],M=0;M<l.length;M+=1){var _=l[M];this._log('\nPattern: "'.concat(_.pattern,'"'));for(var L=!1,w=0;w<x.length;w+=1){var A=x[w],C=_.search(A),I={};C.isMatch?(I[A]=C.Line truncated
@@ -0,0 +1,7 @@
/*!***************************************************
* mark.js v8.11.1
* https://markjs.io/
* Copyright (c) 2014–2018, Julian Kühnel
* Released under the MIT license https://git.io/vwTVl
*****************************************************/
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],t):e.Mark=t(e.jQuery)}(this,function(e){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},o=function(){function e(t){var r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:5e3;n(this,e),this.ctx=t,this.iframes=r,this.exclude=i,this.iframesTimeout=o}return r(e,[{key:"getContexts",value:function(){var e=[];return(void 0!==this.ctx&&this.ctx?NodeList.prototype.isPrototypeOf(this.ctx)?Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?this.ctx:"string"==typeof this.ctx?Array.prototype.slice.call(document.querySelectorAll(this.ctx)):[this.ctx]:[]).forEach(function(t){var n=e.filter(function(e){return e.contains(t)}).length>0;-1!==e.indexOf(t)||n||e.push(t)}),e}},{key:"getIframeContents",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},r=void 0;try{var i=e.contentWindow;if(r=i.document,!i||!r)throw new Error("iframe inaccessible")}catch(e){n()}r&&t(r)}},{key:"isIframeBlank",value:function(e){var t=e.getAttribute("src").trim();return"about:blank"===e.contentWindow.location.href&&"about:blank"!==t&&t}},{key:"observeIframeLoad",value:function(e,t,n){var r=this,i=!1,o=null,a=function a(){if(!i){i=!0,clearTimeout(o);try{r.isIframeBlank(e)||(e.removeEventListener("load",a),r.getIframeContents(e,t,n))}catch(e){n()}}};e.addEventListener("load",a),o=setTimeout(a,this.iframesTimeout)}},{key:"onIframeReady",value:function(e,t,n){try{"complete"===e.contentWindow.document.readyState?this.isIframeBlank(e)?this.observeIframeLoad(e,t,n):this.getIframeContents(e,t,n):this.observeIframeLoad(e,t,n)}catch(e){n()}}},{key:"waitForIframes",value:function(e,t){var n=this,r=0;this.forEachIframe(e,function(){return!0},function(e){r++,n.waitForIframes(e.querySelector("html"),function(){--r||t()})},function(e){e||t()})}},{key:"forEachIframe",value:function(t,n,r){var i=this,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},a=t.querySelectorAll("iframe"),s=a.length,c=0;a=Array.prototype.slice.call(a);var u=function(){--s<=0&&o(c)};s||u(),a.forEach(function(t){e.matches(t,i.exclude)?u():i.onIframeReady(t,function(e){n(t)&&(c++,r(e)),u()},u)})}},{key:"createIterator",value:function(e,t,n){return document.createNodeIterator(e,t,n,!1)}},{key:"createInstanceOnIframe",value:function(t){return new e(t.querySelector("html"),this.iframes)}},{key:"compareNodeIframe",value:function(e,t,n){if(e.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_PRECEDING){if(null===t)return!0;if(t.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_FOLLOWING)return!0}return!1}},{key:"getIteratorNode",value:function(e){var t=e.previousNode();return{prevNode:t,node:null===t?e.nextNode():e.nextNode()&&e.nextNode()}}},{key:"checkIframeFilter",value:function(e,t,n,r){var i=!1,o=!1;return r.forEach(function(e,t){e.val===n&&(i=t,o=e.handled)}),this.compareNodeIframe(e,t,n)?(!1!==i||o?!1===i||o||(r[i].handled=!0):r.push({val:n,handled:!0}),!0):(!1===i&&r.push({val:n,handled:!1}),!1)}},{key:"handleOpenIframes",value:function(e,t,n,r){var i=this;e.forEach(function(e){e.handled||i.getIframeContents(e.val,function(e){i.createInstanceOnIframe(e).forEachNode(t,n,r)})})}},{key:"iterateThroughNodes",value:function(e,t,n,r,i){for(var o,a=this,s=this.createIterator(t,e,r),c=[],u=[],l=void 0,h=void 0;void 0,o=a.getIteratorNode(s),h=o.prevNode,l=o.node;)this.iframes&&this.forEachIframe(t,function(e){return a.checkIframeFilter(l,h,e,c)},function(t){a.createInstanceOnIframe(t).forEachNode(e,function(e){return u.push(e)},r)}),u.push(l);u.forEach(function(e){n(e)}),this.iframes&&this.handleOpenIframes(c,e,n,r),i()}},{key:"forEachNode",value:function(e,t,n){var r=this,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},o=this.getContexts(),a=o.length;a||i(),o.forEach(function(o){var s=function(){r.iterateThroughNodes(e,o,t,n,function(){--a<=0&&i()})};r.iframes?r.waitForIframes(o,s):s()})}}],[{key:"matches",value:function(e,t){var n="string"==typeof t?[t]:t,r=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatcLine truncated
@@ -0,0 +1,101 @@
summaryInclude=60;
var fuseOptions = {
shouldSort: true,
includeMatches: true,
threshold: 0.0,
tokenize:true,
location: 0,
distance: 100,
maxPatternLength: 32,
minMatchCharLength: 1,
keys: [
{name:"title",weight:0.8},
{name:"contents",weight:0.5},
{name:"tags",weight:0.3},
{name:"categories",weight:0.3}
]
};
var searchQuery = param("s");
if(searchQuery){
$("#search-query").val(searchQuery);
executeSearch(searchQuery);
}
function executeSearch(searchQuery){
$.getJSON( indexURL, function( data ) {
var pages = data;
var fuse = new Fuse(pages, fuseOptions);
var result = fuse.search(searchQuery);
console.log({"matches":result});
if(result.length > 0){
populateResults(result);
}else{
$('#search-results').append("<div class=\"text-center mx-auto\"><img class=\"img-fluid mb-5\" src=\"https://user-images.githubusercontent.com/17677384/110205559-d77c9580-7ea2-11eb-82b4-f1334db99530.png\"><h3 class=\"mb-5\">No Search Found</h3></div>");
}
});
}
function populateResults(result){
$.each(result,function(key,value){
var contents= value.item.contents;
var snippet = "";
var snippetHighlights=[];
var tags =[];
if( fuseOptions.tokenize ){
snippetHighlights.push(searchQuery);
}else{
$.each(value.matches,function(matchKey,mvalue){
if(mvalue.key == "tags" || mvalue.key == "categories" ){
snippetHighlights.push(mvalue.value);
}else if(mvalue.key == "contents"){
start = mvalue.indices[0][0]-summaryInclude>0?mvalue.indices[0][0]-summaryInclude:0;
end = mvalue.indices[0][1]+summaryInclude<contents.length?mvalue.indices[0][1]+summaryInclude:contents.length;
snippet += contents.substring(start,end);
snippetHighlights.push(mvalue.value.substring(mvalue.indices[0][0],mvalue.indices[0][1]-mvalue.indices[0][0]+1));
}
});
}
if(snippet.length<1){
snippet += contents.substring(0,summaryInclude*2);
}
//pull template from hugo templarte definition
var templateDefinition = $('#search-result-template').html();
var output = render(templateDefinition,{key:key,title:value.item.title,image:value.item.image,date:value.item.date,month:value.item.month,link:value.item.permalink,tags:value.item.tags,categories:value.item.categories,snippet:snippet});
$('#search-results').append(output);
$.each(snippetHighlights,function(snipkey,snipvalue){
$("#summary-"+key).mark(snipvalue);
});
});
}
function param(name) {
return decodeURIComponent((location.search.split(name + '=')[1] || '').split('&')[0]).replace(/\+/g, ' ');
}
function render(templateString, data) {
var conditionalMatches,conditionalPattern,copy;
conditionalPattern = /\$\{\s*isset ([a-zA-Z]*) \s*\}(.*)\$\{\s*end\s*}/g;
//since loop below depends on re.lastInxdex, we use a copy to capture any manipulations whilst inside the loop
copy = templateString;
while ((conditionalMatches = conditionalPattern.exec(templateString)) !== null) {
if(data[conditionalMatches[1]]){
//valid key, remove conditionals, leave contents.
copy = copy.replace(conditionalMatches[0],conditionalMatches[2]);
}else{
//not valid, remove entire section
copy = copy.replace(conditionalMatches[0],'');
}
}
templateString = copy;
//now any conditionals removed we can do simple substitution
var key, find, re;
for (key in data) {
find = '\\$\\{\\s*' + key + '\\s*\\}';
re = new RegExp(find, 'g');
templateString = templateString.replace(re, data[key]);
}
return templateString;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

@@ -0,0 +1,14 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>Generated by Fontastic.me</metadata>
<defs>
<font id="slick" horiz-adv-x="512">
<font-face font-family="slick" units-per-em="512" ascent="480" descent="-32"/>
<missing-glyph horiz-adv-x="512" />
<glyph unicode="&#8594;" d="M241 113l130 130c4 4 6 8 6 13 0 5-2 9-6 13l-130 130c-3 3-7 5-12 5-5 0-10-2-13-5l-29-30c-4-3-6-7-6-12 0-5 2-10 6-13l87-88-87-88c-4-3-6-8-6-13 0-5 2-9 6-12l29-30c3-3 8-5 13-5 5 0 9 2 12 5z m234 143c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/>
<glyph unicode="&#8592;" d="M296 113l29 30c4 3 6 7 6 12 0 5-2 10-6 13l-87 88 87 88c4 3 6 8 6 13 0 5-2 9-6 12l-29 30c-3 3-8 5-13 5-5 0-9-2-12-5l-130-130c-4-4-6-8-6-13 0-5 2-9 6-13l130-130c3-3 7-5 12-5 5 0 10 2 13 5z m179 143c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/>
<glyph unicode="&#8226;" d="M475 256c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/>
<glyph unicode="&#97;" d="M475 439l0-128c0-5-1-9-5-13-4-4-8-5-13-5l-128 0c-8 0-13 3-17 11-3 7-2 14 4 20l40 39c-28 26-62 39-100 39-20 0-39-4-57-11-18-8-33-18-46-32-14-13-24-28-32-46-7-18-11-37-11-57 0-20 4-39 11-57 8-18 18-33 32-46 13-14 28-24 46-32 18-7 37-11 57-11 23 0 44 5 64 15 20 9 38 23 51 42 2 1 4 3 7 3 3 0 5-1 7-3l39-39c2-2 3-3 3-6 0-2-1-4-2-6-21-25-46-45-76-59-29-14-60-20-93-20-30 0-58 5-85 17-27 12-51 27-70 47-20 19-35 43-47 70-12 27-17 55-17 85 0 30 5 58 17 85 12 27 27 51 47 70 19 20 43 35 70 47 27 12 55 17 85 17 28 0 55-5 81-15 26-11 50-26 70-45l37 37c6 6 12 7 20 4 8-4 11-9 11-17z"/>
</font></defs></svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

@@ -0,0 +1 @@
.slick-list,.slick-slider,.slick-track{position:relative;display:block}.slick-loading .slick-slide,.slick-loading .slick-track{visibility:hidden}.slick-slider{box-sizing:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none;-khtml-user-select:none;-ms-touch-action:pan-y;touch-action:pan-y;-webkit-tap-highlight-color:transparent}.slick-list{overflow:hidden;margin:0;padding:0}.slick-list:focus{outline:0}.slick-list.dragging{cursor:pointer;cursor:hand}.slick-slider .slick-list,.slick-slider .slick-track{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.slick-track{top:0;left:0;margin-left:auto;margin-right:auto}.slick-track:after,.slick-track:before{display:table;content:''}.slick-track:after{clear:both}.slick-slide{display:none;float:left;height:100%;min-height:1px}[dir=rtl] .slick-slide{float:right}.slick-slide img{display:block}.slick-slide.slick-loading img{display:none}.slick-slide.dragging img{pointer-events:none}.slick-initialized .slick-slide{display:block}.slick-vertical .slick-slide{display:block;height:auto;border:1px solid transparent}.slick-arrow.slick-hidden{display:none}
@@ -0,0 +1 @@
!function(i){"use strict";"function"==typeof define&&define.amd?define(["jquery"],i):"undefined"!=typeof exports?module.exports=i(require("jquery")):i(jQuery)}(function(i){"use strict";var e,t=window.Slick||{};(e=0,t=function(t,o){var s,n=this;n.defaults={accessibility:!0,adaptiveHeight:!1,appendArrows:i(t),appendDots:i(t),arrows:!0,asNavFor:null,prevArrow:'<button class="slick-prev" aria-label="Previous" type="button">Previous</button>',nextArrow:'<button class="slick-next" aria-label="Next" type="button">Next</button>',autoplay:!1,autoplaySpeed:3e3,centerMode:!1,centerPadding:"50px",cssEase:"ease",customPaging:function(e,t){return i('<button type="button" />').text(t+1)},dots:!1,dotsClass:"slick-dots",draggable:!0,easing:"linear",edgeFriction:.35,fade:!1,focusOnSelect:!1,focusOnChange:!1,infinite:!0,initialSlide:0,lazyLoad:"ondemand",mobileFirst:!1,pauseOnHover:!0,pauseOnFocus:!0,pauseOnDotsHover:!1,respondTo:"window",responsive:null,rows:1,rtl:!1,slide:"",slidesPerRow:1,slidesToShow:1,slidesToScroll:1,speed:500,swipe:!0,swipeToSlide:!1,touchMove:!0,touchThreshold:5,useCSS:!0,useTransform:!0,variableWidth:!1,vertical:!1,verticalSwiping:!1,waitForAnimate:!0,zIndex:1e3},n.initials={animating:!1,dragging:!1,autoPlayTimer:null,currentDirection:0,currentLeft:null,currentSlide:0,direction:1,$dots:null,listWidth:null,listHeight:null,loadIndex:0,$nextArrow:null,$prevArrow:null,scrolling:!1,slideCount:null,slideWidth:null,$slideTrack:null,$slides:null,sliding:!1,slideOffset:0,swipeLeft:null,swiping:!1,$list:null,touchObject:{},transformsEnabled:!1,unslicked:!1},i.extend(n,n.initials),n.activeBreakpoint=null,n.animType=null,n.animProp=null,n.breakpoints=[],n.breakpointSettings=[],n.cssTransitions=!1,n.focussed=!1,n.interrupted=!1,n.hidden="hidden",n.paused=!0,n.positionProp=null,n.respondTo=null,n.rowCount=1,n.shouldClick=!0,n.$slider=i(t),n.$slidesCache=null,n.transformType=null,n.transitionType=null,n.visibilityChange="visibilitychange",n.windowWidth=0,n.windowTimer=null,s=i(t).data("slick")||{},n.options=i.extend({},n.defaults,o,s),n.currentSlide=n.options.initialSlide,n.originalSettings=n.options,void 0!==document.mozHidden?(n.hidden="mozHidden",n.visibilityChange="mozvisibilitychange"):void 0!==document.webkitHidden&&(n.hidden="webkitHidden",n.visibilityChange="webkitvisibilitychange"),n.autoPlay=i.proxy(n.autoPlay,n),n.autoPlayClear=i.proxy(n.autoPlayClear,n),n.autoPlayIterator=i.proxy(n.autoPlayIterator,n),n.changeSlide=i.proxy(n.changeSlide,n),n.clickHandler=i.proxy(n.clickHandler,n),n.selectHandler=i.proxy(n.selectHandler,n),n.setPosition=i.proxy(n.setPosition,n),n.swipeHandler=i.proxy(n.swipeHandler,n),n.dragHandler=i.proxy(n.dragHandler,n),n.keyHandler=i.proxy(n.keyHandler,n),n.instanceUid=e++,n.htmlExpr=/^(?:\s*(<[\w\W]+>)[^>]*)$/,n.registerBreakpoints(),n.init(!0)}).prototype.activateADA=function(){this.$slideTrack.find(".slick-active").attr({"aria-hidden":"false"}).find("a, input, button, select").attr({tabindex:"0"})},t.prototype.addSlide=t.prototype.slickAdd=function(e,t,o){var s=this;if("boolean"==typeof t)o=t,t=null;else if(t<0||t>=s.slideCount)return!1;s.unload(),"number"==typeof t?0===t&&0===s.$slides.length?i(e).appendTo(s.$slideTrack):o?i(e).insertBefore(s.$slides.eq(t)):i(e).insertAfter(s.$slides.eq(t)):!0===o?i(e).prependTo(s.$slideTrack):i(e).appendTo(s.$slideTrack),s.$slides=s.$slideTrack.children(this.options.slide),s.$slideTrack.children(this.options.slide).detach(),s.$slideTrack.append(s.$slides),s.$slides.each(function(e,t){i(t).attr("data-slick-index",e)}),s.$slidesCache=s.$slides,s.reinit()},t.prototype.animateHeight=function(){var i=this;if(1===i.options.slidesToShow&&!0===i.options.adaptiveHeight&&!1===i.options.vertical){var e=i.$slides.eq(i.currentSlide).outerHeight(!0);i.$list.animate({height:e},i.options.speed)}},t.prototype.animateSlide=function(e,t){var o={},s=this;s.animateHeight(),!0===s.options.rtl&&!1===s.options.vertical&&(e=-e),!1===s.transformsEnabled?!1===s.options.vertical?s.$slideTrack.animate({left:e},s.options.speed,s.options.easing,t):s.$slideTrack.animate({top:e},s.options.speed,s.options.easing,t):!1===s.cssTransitions?(!0===s.options.rtl&&(s.currentLeft=-s.currentLeft),i({animStart:s.currentLeft}).animate({animStart:e},{duration:s.options.speed,easing:s.options.easing,step:function(i){i=Math.ceil(i),!1===s.options.vertical?(o[s.animType]="translate("+i+"px, 0px)",s.$slideTrack.css(o)):(o[s.animType]="translate(0px,"+i+"px)",s.$slideTrack.css(o))},complete:function(){t&&t.call()}})):(s.applyTransition(),e=Math.ceil(e),!1===s.options.vertical?o[s.animType]="translate3d("+e+"px, 0px, 0px)":o[s.animType]="translate3d(0px,"+e+"px, 0px)",s.$slideTrack.css(o),t&&setTimeout(function(){s.disableTransition(),t.call()},s.options.speed))},t.prototype.getNavTarget=function(){var e=this.options.asNavFor;return e&&null!==e&&(e=i(e).not(this.$slider)),e},t.prototype.asNavFor=function(e){var t=this.getNavTarget();null!==t&&"object"==typeof t&&t.each(function(){var t=i(this).sLine truncated
@@ -0,0 +1,63 @@
// button style
.btn {
font-size: 14px;
padding: 15px 24px;
color: $white;
border-radius: 0;
transition: .2s ease-out;
position: relative;
z-index: 1;
overflow: hidden;
border: 0;
&:active,
&:focus {
border: 0;
box-shadow: none !important;
}
&.btn-lg {
font-size: 16px;
padding: 12px 28px;
}
&:hover {
box-shadow: 0px 10px 25px rgba($black, 0.1);
}
&.btn-primary {
background-color: $primary-color !important;
&:hover,
&:active,
&:focus {
color: $white;
background-color: $dark !important;
}
}
&.btn-outline-primary {
color: $primary-color;
border: 1px solid $primary-color;
background-color: transparent !important;
&::after {
background-color: $primary-color !important;
}
&:hover,
&:active,
&:focus {
color: $white;
background-color: $primary-color !important;
}
}
}
.text-underline {
text-decoration: underline;
}
a.text-underline:hover {
color: $primary-color;
text-decoration: underline;
}
@@ -0,0 +1,478 @@
body {
color: $gray;
background-color: $white;
font-family: $secondary-font;
font-weight: 400;
font-size: 16px;
line-height: 1.65;
&::-webkit-scrollbar {
width: 10px;
@extend .bg-primary-light;
}
&::-webkit-scrollbar-thumb {
background-color: rgba($primary-color, .5);
}
}
::selection {
color: $white;
background-color: darken($primary-color, 5);
text-shadow: none;
}
:focus {
outline: 0;
}
mark,
.mark {
padding: 0;
}
.page-header {
mark,
.mark {
padding: 3px 5px;
text-transform: lowercase;
}
.title {
font-weight: bold;
color: $dark;
position: relative;
padding-left: 20px;
margin-bottom: 0;
&::before {
position: absolute;
content: "";
height: 100%;
width: 7px;
border-radius: 50px;
background-color: $primary-color;
left: 0;
top: 0;
}
}
}
/*------------------------------------------------------------------
# default styles
-------------------------------------------------------------------*/
.section {
padding: 24px 0;
}
.section-title {
h1 {
font-size: $h1-lg;
text-transform: capitalize;
margin-bottom: 20px;
position: relative;
padding-top: 25px;
@include desktop-xl {
font-size: 42px;
}
@include tablet {
font-size: 34px;
}
}
}
// social-links
.social-links {
a {
font-size: 15px;
padding: 7px;
color: rgba($black, .8);
&:hover {
color: $primary-color;
}
}
&.is-circled {
a {
padding: 7px 9px;
color: $white;
&:hover {
opacity: .7;
}
}
}
&.is-circled {
a {
display: block;
text-align: center;
font-size: 12px;
text-transform: uppercase;
color: $dark;
.icon {
display: block;
height: 42px;
width: 42px;
padding: 13px;
border: 1px solid $dark;
border-radius: 50%;
margin-left: auto;
margin-right: auto;
margin-bottom: 8px;
font-size: 16px;
transition: .3s;
color: $dark;
}
&:hover svg {
border-color: $primary-color;
background-color: $primary-color;
color: $white;
}
}
}
}
// preloader
.preloader {
position: fixed;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-color: $white;
z-index: 999889898;
img {
vertical-align: middle;
border: 0;
max-width: 100%;
height: auto;
}
}
// card style
.card.post-card {
border-radius: 0px;
border: 0;
text-align: center;
.card-body {
padding: 0;
padding-top: 20px;
}
.card-footer {
margin-bottom: 50px;
background-color: transparent;
padding: 0;
padding-top: 10px;
}
}
.post-title {
font-weight: 600;
color: $dark;
font-family: $primary-font;
display: inline-block;
line-height: 1.3;
}
a.post-title:hover,
.post-title:hover a {
color: $primary-color;
}
.card-meta-tag {
text-transform: uppercase;
.list-inline-item:not(:last-child) {
margin-right: .5rem;
}
a {
font-size: 14px;
font-weight: 500;
color: $primary-color;
&:hover {color: $dark}
}
}
.card-meta {
font-size: 12px;
.list-inline-item:not(:last-child) {
margin-right: 1.2rem;
}
.card-meta-author {
display: inline-block;
&:hover {
color: $primary-color;
}
}
.card-meta-author,
.card-meta-date {
color: #9598a2;
text-transform: uppercase;
}
}
// content
.content {
font-family: $secondary-font;
font-size: 17px;
p {
margin-bottom: 25px;
}
img {
margin-bottom: 30px;
}
h1, h2, h3, h4, h5, h6 {
font-family: $secondary-font;
color: $dark;
font-weight: 600;
margin-bottom: 20px;
margin-top: 30px;
}
ol, ul {
margin-bottom: 25px;
padding-left: 0;
li {
margin-bottom: 10px;
}
}
img {
margin-top: 10px;
margin-bottom: 35px;
}
blockquote {
padding: 20px 30px;
padding-left: 70px;
border: 1px solid rgba($primary-color, .2);
font-family: $primary-font;
color: $dark;
font-weight: 600;
font-size: 18px;
margin: 30px 0;
position: relative;
p {
margin-bottom: 15px;
}
&::before {
content: "\f10d";
font-weight: 900;
}
svg {
position: absolute;
font-size: 28px;
left: 20px;
top: 25px;
opacity: .5;
color: $primary-color;
}
cite {
opacity: .7;
font-style: normal;
text-transform: uppercase;
font-size: 13px;
position: relative;
&::before {
position: absolute;
content: "";
height: 1px;
width: 20px;
left: -30px;
top: 50%;
background-color: $dark;
opacity: .5;
}
}
}
table {
text-align: left;
width: 100%;
max-width: 100%;
margin-bottom: 1rem;
border: 1px solid #dee2e6;
th,
td {
padding: .75rem;
vertical-align: top;
border: 1px solid #dee2e6
}
thead {
background: darken(#f7f7f7, 2);
}
tbody {
background: #f7f7f7;
}
}
a.collapse-head {
border-bottom: 1px solid #dee2e6;
}
.notices {
margin: 2rem 0;
position: relative;
overflow: hidden;
}
.notices p {
padding: 10px;
margin-bottom: 0;
}
.notices.note p {
border-top: 30px solid #6ab0de;
background: #f7f7f7;
}
.notices.note p::after {
content: 'Note';
position: absolute;
top: 2px;
color: $white;
left: 2rem;
}
.notices.tip p {
border-top: 30px solid #78C578;
background: #f7f7f7;
}
.notices.tip p::after {
content: 'Tip';
position: absolute;
top: 2px;
color: $white;
left: 2rem;
}
.notices.info p {
border-top: 30px solid #F0B37E;
background: #f7f7f7;
}
.notices.info p::after {
content: 'Info';
position: absolute;
top: 2px;
color: $white;
left: 2rem;
}
.notices.warning p {
border-top: 30px solid #E06F6C;
background: $light;
}
.notices.warning p::after {
content: 'Warning';
position: absolute;
top: 2px;
color: #fff;
left: 2rem;
}
}
// code-tab
.code-tabs {
border: 1px solid #ddd;
overflow: hidden;
margin-bottom: 20px;
.nav-tabs {
margin-bottom: 0;
padding: 0;
.nav-item {
padding-left: 0;
border-right: 1px solid #ddd;
.nav-link {
text-decoration: none;
font-weight: 500;
border: 0;
text-transform: capitalize;
}
&::before {
display: none;
}
&.active {
background: $primary-color;
.nav-link {
color: $white;
}
}
}
}
.tab-content {
padding: 20px 15px;
}
}
// pagination
.pagination {
.page-link {
padding: 0;
margin-left: 0;
color: $dark;
border: 0;
height: 48px;
width: 48px;
line-height: 48px;
text-align: center;
font-weight: 600;
border-radius: 0 !important;
&.active,
&:focus,
&:hover {
box-shadow: none;
color: $white;
background-color: $primary-color;
}
}
}
// form-control
.form-control {
padding: 0;
border: 0;
border-bottom: 1px solid #999;
border-radius: 0 !important;
height: 56px;
font-size: 17px;
font-weight: 500;
transition: .3s ease;
&:focus {
box-shadow: none;
color: $dark;
border-bottom-color: $dark;
~ .input-group-append {
.input-group-text {
border-bottom-color: $dark;
}
}
}
}
.input-group-text {
background-color: transparent;
border: 0;
border-bottom: 1px solid #999;
border-radius: 0 !important;
transition: .3s ease;
padding-right: 0;
.icon {
font-size: 22px;
}
}
button.input-group-text {
&:hover {
color: $primary-color;
}
}
/*------------------------------------------------------------------
# helper classes
-------------------------------------------------------------------*/
.font-primary {font-family: $primary-font}
.font-secondary {font-family: $secondary-font}
.font-weight-500 {font-weight: 500}
.font-weight-600 {font-weight: 600}
.text-primary {color: $primary-color !important}
a.text-primary:hover {color: darken($primary-color, 10) !important}
.bg-primary {background-color: $primary-color !important}
.bg-primary-light {background-color: rgba($primary-color, .1)}
.text-dark {color: $dark}
.text-light {color: #a8aab2 !important}
a.text-dark:hover, a.text-light:hover {
color: $primary-color !important
}
.bg-light {background-color: $light !important}
.bg-dark {background-color: $dark !important}
@@ -0,0 +1,34 @@
@mixin mobile-xs{
@media(max-width:400px){
@content;
}
}
@mixin mobile{
@media(max-width:575px){
@content;
}
}
@mixin tablet{
@media(max-width:767px){
@content;
}
}
@mixin desktop{
@media(max-width:991px){
@content;
}
}
@mixin desktop-lg{
@media(max-width:1200px){
@content;
}
}
@mixin desktop-xl {
@media(max-width:1466px) {
@content;
}
}
@mixin size($size){
width: $size; height: $size;
}
@@ -0,0 +1,47 @@
h1, .h1 {
font-size: $h1;
@include desktop-xl {
font-size: $h1-lg;
}
@include desktop {
font-size: $h1-md;
}
}
h2, .h2 {
font-size: $h2;
@include desktop {
font-size: $h2-md;
}
}
h3, .h3 {
font-size: $h3;
@include desktop {
font-size: $h3-md;
}
}
h4, .h4 {
font-size: $h4;
}
h5, .h5 {
font-size: $h5;
}
h6, .h6 {
font-size: $h6;
}
a:focus,
button:focus {
outline: 0;
}
a {
color: $gray;
transition: all .3s;
&:hover {
text-decoration: none;
color: #222;
}
}
ul, li {
padding: 0;
margin: 0;
list-style-position: inside;
}
Whitespace-only changes.
@@ -0,0 +1,34 @@
// Color Variables
{{ with site.Params.variables }}
$primary-color: {{.primary_color}};
$secondary-color: {{.secondary_color}};
$white: {{.white}};
$black: {{.black}};
$dark: {{.dark}};
$gray: {{.gray}};
$light: {{.light}};
$h1: {{.h1}};
$h1_lg: {{.h1_lg}};
$h1_md: {{.h1_md}};
$h2: {{.h2}};
$h2_md: {{.h2_md}};
$h3: {{.h3}};
$h3_md: {{.h3_md}};
$h4: {{.h4}};
$h5: {{.h5}};
$h6: {{.h6}};
// Font Variables
$primary-font: '{{ replaceRE ":[ital,]*wght@[0-9,;]+" "" .primary_font }}', sans-serif;
$secondary-font: '{{ replaceRE ":[ital,]*wght@[0-9,;]+" "" .secondary_font }}', sans-serif;
$icon-font: '{{.icon_font}}';
{{ end }}
@import 'mixins';
@import 'typography';
@import 'buttons';
@import 'common';
@import 'templates/navigation.scss';
@import 'templates/main.scss';
@import 'custom.scss';
@@ -0,0 +1,280 @@
// page-content
.page-content {
margin-left: 110px;
@include tablet {
margin-left: 0;
margin-top: 56px;
}
}
// author-banner
.author-banner {
padding: 30px 35px;
height: 100%;
position: fixed;
top: 0;
overflow-y: auto;
width: calc(25% - 60px);
max-width: 100%;
@include desktop-lg {
width: calc(33.333333% - 70px);
}
@include desktop {
position: static;
width: initial;
margin-top: 15px;
padding: 60px 35px;
height: auto;
}
@include tablet {
margin-top: 40px;
}
@media screen and (max-height: 470px) {
display: block !important;
}
&::-webkit-scrollbar {
width: 12px;
}
&::-webkit-scrollbar-thumb {
background-color: rgba($primary-color, .2);
}
}
// partner-logos
.partner-logos {
li {
background-color: $white;
padding: 15px 20px;
border: 1px solid #eee;
margin-top: 14px;
img {
max-height: 25px;
max-width: 130px;
}
}
}
// newsletter-block
.newsletter-block {
color: $dark;
padding: 80px 60px;
@include tablet {
padding: 80px 30px;
}
.input-group-text,
.form-control {
background-color: transparent;
color: $dark;
}
.form-control {
&:focus {
border-bottom-color: $dark;
~ .input-group-append {
.input-group-text {
border-bottom-color: $dark;
}
}
}
}
::-webkit-input-placeholder {
color: rgba($dark, .7);
}
:-ms-input-placeholder {
color: rgba($dark, .7);
}
::placeholder {
color: rgba($dark, .7);
}
button.input-group-text {
color: rgba($dark, .7);
&:hover {
color: $dark;
}
}
}
footer .newsletter-block{
padding: 15px;
.input-group {
max-width: 350px;
margin: auto;
}
}
// blog post
.single-post-meta,
.single-post-similer {
margin-top: 70px;
}
.single-post-author {
margin-top: 50px;
}
.post-meta-tags {
a {
display: inline-block;
background-color: #f7f8fa;
color: $dark;
padding: 6px 13px;
font-weight: 500;
font-size: 15px;
&:hover {
background-color: transparent;
color: $primary-color;
}
}
}
.widget {
margin-bottom: 45px;
.widget-title {
width: calc(100% - 8px);
height: calc(100% - 8px);
background: rgba(#f9f3ef, .5);
display: block;
margin: 4px;
line-height: 40px;
text-align: center;
font-weight: 600;
text-transform: uppercase;
font-size: 14px;
outline: 1px solid #f9f3ef;
border: 1px solid #f9f3ef;
outline-offset: 4px;
padding-top: 2px;
margin-bottom: 35px;
}
}
.sidebar-recent-post {
counter-reset: rc-counter;
.recent-post-item {
margin-top: 35px;
padding: 0 10px;
a {
display: inline-block;
&:hover {
color: $primary-color;
}
}
.recent-post-image {
height: 80px;
width: 80px;
position: relative;
z-index: 1;
img {
height: 100%;
object-fit: cover;
}
&::after {
counter-increment: rc-counter;
content: counter(rc-counter);
position: absolute;
background-color: $primary-color;
border: 2px solid $white;
top: -3px;
right: -3px;
z-index: 222;
height: 30px;
width: 30px;
text-align: center;
font-size: 12px;
font-weight: bold;
color: $white;
border-radius: 50px;
line-height: 26px;
}
}
}
}
.sidebar-post-categories li {
a {
border-top: 1px dotted #ddd;
padding: 8px 0;
display: block;
font-size: 15px;
span {
float: right;
background-color: #ddd;
font-size: 12px;
padding: 5px 8px;
line-height: 1;
border-radius: 50px;
color: black;
}
&:hover {
color: $primary-color;
span {
background-color: $primary-color;
color: $white;
}
}
}
&:last-child a {
border-bottom: 1px dotted #ddd;
}
}
.sidebar-post-tags li a {
border: 1px dotted #ddd;
padding: 4px 10px;
display: block;
font-size: 15px;
margin-bottom: 10px;
&:hover {
border-color: $primary-color;
color: $primary-color;
}
}
// slick slider style
.slick-slide {
outline: 0;
}
.post-slider {
overflow: hidden;
position: relative;
&:hover {
.prevArrow {
left: 20px;
}
.nextArrow {
right: 20px;
}
}
}
.slider-sm {
.slick-arrow {
height: 38px;
width: 38px;
line-height: 38px;
}
}
.slick-arrow {
position: absolute;
top: 50%;
transform: translateY(-50%);
z-index: 9;
height: 50px;
width: 50px;
line-height: 50px;
border-radius: 50%;
background: rgba($primary-color, .5);
color: $white;
border: 0;
transition: 0.3s;
@include mobile {
display: none;
}
&:focus {
outline: 0;
}
&:hover {
background: $primary-color;
}
}
.prevArrow {
left: -60px;
}
.nextArrow {
right: -60px;
}
@@ -0,0 +1,245 @@
// start header style
header.sidenav {
position: fixed;
width: 110px;
height: 100%;
top: 0;
left: 0;
z-index: 1000;
background-color: $white;
transition: .25s ease;
padding-top: 15px;
padding-bottom: 40px;
text-align: center;
display: flex;
flex-direction: column;
justify-content: space-between;
@include tablet {
width: 100%;
height: 80px;
background-color: lighten(desaturate(adjust-hue($primary-color, 4), 2.87), 36.67);
padding: 0;
flex-direction: row;
.is-top {
display: flex;
justify-content: space-between;
width: 100%;
align-items: center;
padding-left: 25px;
> div {
order: 1;
display: flex;
align-items: center;
}
.navbar-brand {
order: 0;
}
}
}
.sidenav-toggler {
background-color: transparent;
border: 0;
margin-bottom: 55px;
&.logo-plain {
margin-bottom: 25px;
}
@include tablet {
margin-bottom: 0;
}
.toggler-icon {
cursor: pointer;
-webkit-tap-highlight-color: transparent;
transition: transform 400ms;
user-select: none;
.line {
fill:none;
transition: stroke-dasharray 400ms, stroke-dashoffset 400ms;
stroke: $dark;
stroke-width:3;
stroke-linecap:round;
}
.top {
stroke-dasharray: 40 139;
}
.bottom {
stroke-dasharray: 40 180;
}
&.active {
transform: rotate(45deg);
.top {
stroke-dashoffset: -98px;
}
.bottom {
stroke-dashoffset: -138px;
}
}
}
}
.navbar-brand {
transform: rotate(-90deg);
display: inline-flex;
padding: 0;
&.plain {
transform: rotate(0);
}
@include tablet {
transform: rotate(0);
}
}
}
.sidenav-overlay {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba($primary-color, 0.2);
z-index: 15;
-webkit-backdrop-filter: blur(2px);
backdrop-filter: blur(2px);
cursor: pointer;
opacity: 0;
visibility: hidden;
transition: .3s ease;
&.show {
opacity: 1;
visibility: visible;
}
}
// sidenav-menu
nav.sidenav-menu {
position: fixed;
top: 0;
left: 110px;
z-index: 99;
background: darken($white, 1);
height: 100%;
width: 280px;
display: flex;
overflow-y: auto;
padding: 15px 30px 44px 30px;
transform: translate3d(-100%, 0, 0);
transition: .2s ease;
&.show {
transform: translate3d(0, 0, 0);
transition: .3s ease;
}
@include tablet {
top: 0;
left: 0;
z-index: 99992;
}
.nav-item {
display: block;
&.active .nav-link {
color: $primary-color !important;
}
&:first-child {
margin-top: 8px;
}
&:last-child {
margin-bottom: 8px;
}
.nav-link {
font-weight: 500;
color: $dark;
position: relative;
padding: 10px;
&:hover {
color: $primary-color;
}
&[data-toggle="collapse"]::after {
content: "+";
float: right;
font-size: 24px;
line-height: 1;
}
&[aria-expanded="true"]::after {
content: "_";
line-height: 0.3;
font-size: 22px;
}
}
}
.nav-item ul li {
a {
font-size: 15px;
padding: 7px 18px;
display: inline-block;
font-weight: 500;
}
}
}
// search block style
.search-toggle {
background-color: transparent;
border: 0;
transition: .3s ease;
padding: 10px;
font-size: 22px;
&:hover {
color: $primary-color;
}
}
.search-block {
position: fixed;
top: 0;
left: 0;
height: 100vh;
width: 100vw;
background-color: $white;
z-index: 9999988999889;
padding: 0 50px;
display: none;
form {
position: relative;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
text-align: center;
}
input {
border: 0;
border-bottom: 1px solid #ddd;
font-size: 22px;
width: 500px;
max-width: 100%;
padding: 15px 0;
margin: auto;
letter-spacing: -1px;
transition: .3s ease;
}
&.is-visible {
input {
border-bottom-color: $primary-color;
}
}
[data-toggle="search-close"] {
cursor: pointer;
position: absolute;
top: 20px;
right: 40px;
}
}
// end header style
Whitespace-only changes.
@@ -0,0 +1,38 @@
{{ define "main" }}
<div class="col-lg-12 my-5">
<div class="row align-items-end mb-4 mb-lg-5">
{{ if .Params.image }}
<div class="col-xl-3 col-lg-4">
<div class="pr-3">
<img loading="lazy" class="img-fluid" style="max-width:250px" src="{{ .Params.image | absURL }}" alt="Author">
</div>
</div>
{{ else if .Params.email }}
<div class="col-xl-3 col-lg-4">
<img loading="lazy" class="img-fluid" style="max-width:250px" src="https://www.gravatar.com/avatar/{{ md5 .Params.email }}?s=250&pg&d=identicon">
</div>
{{ end }}
<div class="col-lg-7 mt-5 mt-lg-0">
<p class="h5 mb-3">{{ i18n `about_me` }}</p>
<h3 class="font-primary text-dark mb-0" style="line-height:1.5">{{ .Params.summary }}</h3>
</div>
</div>
<div class="content mb-5 pb-1">{{ .Content }}</div>
{{ if .Params.partners.enable }}
{{ with .Params.partners }}
<p class="h4 mb-3 text-dark">{{ .title | markdownify}}</p>
<ul class="list-inline partner-logos">
{{ range .partner_logos }}
<li class="list-inline-item"><img loading="lazy" src="{{. | absURL}}"></li>
{{ end }}
</ul>
{{ end }}
{{ end }}
</div>
{{ end }}
@@ -0,0 +1,37 @@
<article class="card post-card">
{{ with .Params.images }}
<div class="post-slider slider-sm">
{{ range . }}
<div><img loading="lazy" class="w-100" src="{{ . | absURL }}" alt=""></div>
{{ end }}
</div>
{{ end }}
<div class="card-body mb-3">
{{ with .Params.tags }}
<ul class="card-meta-tag list-inline mb-1">
{{ range . }}
<li class="list-inline-item"><a href="{{site.BaseURL}}tags/{{.| urlize}}/">{{.}}</a></li>
{{ end }}
</ul>
{{ end }}
<h3 class="h4 mb-2">
<a class="post-title" href="{{ .Permalink }}" title="{{ .Title }}">{{ .Title }}</a>
</h3>
<p class="mb-0">{{ .Plain | truncate 70 }}</p>
</div>
<div class="card-footer">
<ul class="card-meta list-inline mb-0">
{{ with site.GetPage "/about" }}
<li class="list-inline-item">
<span class="text-light">by:</span>
<a href="{{ .Permalink }}" class="card-meta-author">{{ with .Params.name }}{{ index (split . " ") 0 }}{{ end }}</a>
</li>
{{ end }}
<li class="list-inline-item">
<span class="card-meta-date">{{.PublishDate.Format "Jan 02, 2006"}}</span>
</li>
</ul>
</div>
</article>
@@ -0,0 +1,51 @@
<!--
PROJECT: Editor Hugo
VERSION: 1.0.0
AUTHOR: Gethugothemes
AUTHOR WEBSITE: https://gethugothemes.com
-->
<!DOCTYPE html>
<html lang="{{ site.LanguageCode | default `en-US` }}">
<head>
{{ partial "head.html" . }}
{{ partialCached "style.html" . }}
</head>
<body>
{{ partialCached "preloader.html" . }}
{{ partial "header.html" . }}
{{ if .IsHome }}
<section class="page-content">
<div class="container-fluid pl-3 pl-md-0 pr-3 pr-lg-4">
<div class="row no-gutters">
{{ block "main" . }}{{ end }}
</div>
</div>
</section>
{{ else }}
<section class="page-content section" style="border-left:1px solid #eee">
<div class="container px-3 px-lg-4">
<div class="row justify-content-center">
{{ block "main" . }}{{ end }}
</div>
</div>
<div class="container-fluid px-3 px-lg-4">
<div class="row justify-content-center">
<div class="col-12 mt-4 pt-2">
{{ partial "footer.html" . }}
</div>
</div>
</div>
</section>
{{ end }}
{{ partialCached "script.html" . }}
</body>
</html>
@@ -0,0 +1,40 @@
{{ define "main" }}
{{ partial "page-header.html" . }}
<div class="col-12 mb-5">
<div class="row">
<div class="col-lg-4">
<div class="pr-0 pr-lg-4">
<div class="content mb-5">
{{.Content | markdownify}}
</div>
<h4 class="mb-3"><a class="text-underline text-primary" href="mailto:{{site.Params.email}}">{{site.Params.email}}</a></h4>
<p class="mb-2">{{site.Params.address}}</p>
<p class="mb-2"><a href="tel:{{site.Params.mobile}}">{{site.Params.mobile}}</a></p>
</div>
</div>
<div class="col-lg-6 mt-5 mt-lg-0">
<form method="POST" action="{{ site.Params.contact_form_action | safeURL}}" class="row">
<div class="col-md-6">
<input type="text" class="form-control mb-4" placeholder="Name" name="name" id="name">
</div>
<div class="col-md-6">
<input type="email" class="form-control mb-4" placeholder="Email" name="email" id="email">
</div>
<div class="col-12">
<input type="text" class="form-control mb-4" placeholder="Subject" name="subject" id="subject">
</div>
<div class="col-12 mt-3">
<textarea name="message" id="message" class="form-control mb-4" placeholder="Type You Message Here"
rows="5"></textarea>
</div>
<div class="col-12">
<button class="btn btn-primary" type="submit">{{ i18n `send_message` }}</button>
</div>
</form>
</div>
</div>
</div>
{{ end }}
@@ -0,0 +1,14 @@
{{- $.Scratch.Add "index" slice -}}
{{- range where site.RegularPages "Type" "in" site.Params.mainSections -}}
{{ with .Params.images }}
{{ range first 1 . }}
{{ $.Scratch.Set "image" (. | absURL) }}
{{ end }}
{{ end }}
{{ $image:= $.Scratch.Get "image" }}
{{- $.Scratch.Add "index" (dict "title" .Title "tags" .Params.tags "image" $image "categories" .Params.categories "contents" .Plain "permalink" .Permalink) -}}
{{- end -}}
{{- $.Scratch.Get "index" | jsonify -}}
@@ -0,0 +1,123 @@
{{ define "main" }}
<!-- checking blog -->
{{ if or (eq .Section "post") (eq .Section "posts") (eq .Section "blog") (eq .Section "blogs") (eq .Section "news") }}
{{ partial "page-header.html" . }}
<div class="col-12">
<div class="row">
{{ $paginator := .Paginate (where site.RegularPages "Type" "in" site.Params.mainSections) }}
{{ range $paginator.Pages }}
<div class="col-lg-4 col-md-4 col-sm-6">
{{ .Render "article" }}
</div>
{{ end }}
</div>
<div class="row mb-4">
<div class="col-12">
{{"<!-- pagination -->" | safeHTML }}
{{ $paginator := .Paginator }}
<!-- Number of links either side of the current page. -->
{{ $adjacent_links := 2 }}
<!-- $max_links = ($adjacent_links * 2) + 1 -->
{{ $max_links := (add (mul $adjacent_links 2) 1) }}
<!-- $lower_limit = $adjacent_links + 1 -->
{{ $lower_limit := (add $adjacent_links 1) }}
<!-- $upper_limit = $paginator.TotalPages - $adjacent_links -->
{{ $upper_limit := (sub $paginator.TotalPages $adjacent_links) }}
<!-- If there's more than one page. -->
{{ if gt $paginator.TotalPages 1 }}
<nav class="mb-3">
<ul class="pagination justify-content-center">
<!-- Previous page. -->
{{ if $paginator.HasPrev }}
<li class="page-item"><a class="page-link arrow" href="{{ $paginator.Prev.URL }}" aria-label="Pagination Arrow">
<i class="fas fa-angle-left"></i>
</a></li>
{{ end }}
<!-- Page numbers. -->
{{ range $paginator.Pagers }}
{{ $.Scratch.Set "page_number_flag" false }}
<!-- Advanced page numbers. -->
{{ if gt $paginator.TotalPages $max_links }}
<!-- Lower limit pages. -->
<!-- If the user is on a page which is in the lower limit. -->
{{ if le $paginator.PageNumber $lower_limit }}
<!-- If the current loop page is less than max_links. -->
{{ if le .PageNumber $max_links }}
{{ $.Scratch.Set "page_number_flag" true }}
{{ end }}
<!-- Upper limit pages. -->
<!-- If the user is on a page which is in the upper limit. -->
{{ else if ge $paginator.PageNumber $upper_limit }}
<!-- If the current loop page is greater than total pages minus $max_links -->
{{ if gt .PageNumber (sub $paginator.TotalPages $max_links) }}
{{ $.Scratch.Set "page_number_flag" true }}
{{ end }}
<!-- Middle pages. -->
{{ else }}
{{ if and ( ge .PageNumber (sub $paginator.PageNumber $adjacent_links) ) ( le .PageNumber (add $paginator.PageNumber $adjacent_links) ) }}
{{ $.Scratch.Set "page_number_flag" true }}
{{ end }}
{{ end }}
<!-- Simple page numbers. -->
{{ else }}
{{ $.Scratch.Set "page_number_flag" true }}
{{ end }}
<!-- Output page numbers. -->
{{ if eq ($.Scratch.Get "page_number_flag") true }}
<li class="page-item">
<a href="{{ .URL }}" class="page-link{{ if eq . $paginator }} active {{ end }}">
{{ .PageNumber }}
</a>
</li>
{{ end }}
{{ end }}
<!-- Next page. -->
{{ if $paginator.HasNext }}
<li class="page-item"><a class="page-link arrow" href="{{ $paginator.Next.URL }}" aria-label="Pagination Arrow">
<i class="fas fa-angle-right"></i>
</a></li>
{{ end }}
</ul>
</nav>
{{ end }}
</div>
</div>
</div>
<!-- taxonomie page -->
{{ else if or (eq .Section "categories") (eq .Section "tags")}}
{{ partial "page-header.html" . }}
<div class="col-12">
<div class="row">
{{ range .Data.Pages }}
<div class="col-lg-4 col-md-4 col-sm-6">
{{ .Render "article" }}
</div>
{{ end }}
</div>
</div>
<!-- regular page -->
{{ else }}
{{ partial "page-header.html" . }}
<section class="section">
<div class="container">
<div class="row">
<div class="col-lg-10 mx-auto">
<div class="content">
{{.Content}}
</div>
</div>
</div>
</div>
</section>
{{ end }}
<!-- /regular page -->
{{ end }}
@@ -0,0 +1,51 @@
{{ define "main" }}
<div class="col-lg-12">
<section class="page-header">
<div class="my-4 py-5">
<h4 class="title">{{ i18n "search_result_for" }}
<span class="mark">
<script>
var keyword = (window.location.search).substr(3);
var result = keyword.replace("+", " ");
document.write(result);
</script>
</span>
</h4>
</div>
</section>
<div class="row" id="search-results"></div>
<script id="search-result-template" type="text/x-js-template">
<div class="col-lg-4 col-md-4 col-sm-6">
<article class="card post-card" id="summary-${key}">
<a href="${link}">
${ isset image }<img loading="lazy" class="w-100" src="${image}" alt="${title}">${end}
</a>
<div class="card-body mb-3">
<h3 class="h4 mb-2">
<a class="post-title" href="${link}" title="${title}">${title}</a>
</h3>
<p class="mb-0">${snippet}</p>
</div>
<div class="card-footer">
<ul class="card-meta list-inline mb-0">
<li class="list-inline-item">
<span class="card-meta-date">{{ i18n "category" }}: ${categories}</span>
</li>
<li class="list-inline-item">
<span class="card-meta-date">{{ i18n "tag" }}: ${tags}</span>
</li>
</ul>
</div>
</article>
</div>
</script>
</div>
{{ "<!-- Search index -->" | safeHTML }}
<script>
var indexURL = {{"index.json" | absLangURL}}
</script>
{{ end }}
@@ -0,0 +1,84 @@
{{ define "main" }}
<!-- checking blog -->
{{ if or (eq .Section "post") (eq .Section "posts") (eq .Section "blog") (eq .Section "blogs") (eq .Section "news") (eq .Section "categories") (eq .Section "tags") }}
<div class="col-lg-8">
<div class="mb-4 mt-4 mt-md-0">
{{ with .Params.images }}
<div class="post-slider">
{{ range . }}
<div><img loading="lazy" class="w-100" src="{{ . | absURL }}" alt=""></div>
{{ end }}
</div>
{{ end }}
{{ with .Params.tags }}
<ul class="card-meta-tag list-inline mt-3">
{{ range . }}
<li class="list-inline-item"><a href="{{site.BaseURL}}tags/{{.| urlize}}/">{{.}}</a></li>
{{ end }}
</ul>
{{ end }}
<h2 class="h3 mt-2 mb-3 post-title">{{ .Title }}</h2>
<ul class="card-meta list-inline mb-0">
{{ with site.GetPage "/about" }}
<li class="list-inline-item">
<span class="text-light">by:</span>
<a href="{{ .Permalink }}" class="card-meta-author">{{ .Params.name }}</a>
</li>
{{ end }}
<li class="list-inline-item">
<span class="card-meta-date">{{.PublishDate.Format "Jan 02, 2006"}}</span>
</li>
</ul>
</div>
<div class="content">
{{ .Content }}
</div>
<!-- comments -->
{{ if site.Config.Services.Disqus.Shortname }}
<div class="border p-4 mt-5">
{{ template "_internal/disqus.html" . }}
</div>
{{ end }}
</div>
<div class="col-lg-4 mt-5 mt-lg-0">
<div class="pl-0 pl-lg-3">
{{ $widget:= site.Params.widgets.sidebar }}
{{- partial "widgets/widget-wrapper" ( dict "Widgets" $widget "Scope" . ) -}}
</div>
</div>
<div class="col-lg-12">
<div class="single-post-similer">
<div class="row">
<div class="col-12">
<h3 class="text-dark font-weight-bold mb-4 pb-2">{{i18n "you_may_also_like"}}</h3>
</div>
{{ $related := ( where site.RegularPages "Type" "in" site.Params.mainSections ) | intersect (where site.Pages ".Title" "!=" .Title) | union (site.RegularPages.RelatedIndices . "tags" ) }}
{{ range first 3 $related }}
<div class="col-lg-4 col-md-4 col-sm-6">
{{ .Render "article" }}
</div>
{{ end }}
</div>
</div>
</div>
<!-- regular page -->
{{ else }}
<div class="col-lg-12">
<div class="row">{{ partial "page-header.html" . }}</div>
<div class="content">
{{.Content}}
</div>
</div>
{{ end }}
<!-- /regular page -->
{{ end }}
@@ -0,0 +1,2 @@
<!-- Redirect to homepage -->
<script>window.location.replace("{{ site.BaseURL | relLangURL }}");</script>
@@ -0,0 +1,137 @@
{{ define "main" }}
<div class="col-lg-4 col-xl-3">
<div class="author-banner bg-primary-light text-center d-flex flex-column align-items-center justify-content-center">
{{ with site.GetPage "/about" }}
{{ if .Params.image }}
<img loading="lazy" class="mb-4 rounded-circle w-100" style="max-width:280px" src="{{ .Params.image | absURL }}" alt="Author">
{{ else if .Params.email }}
<img loading="lazy" class="mb-4 rounded-circle w-100" style="max-width:280px" src="https://www.gravatar.com/avatar/{{ md5 .Params.email }}?s=220&pg&d=identicon">
{{ end }}
<p class="text-uppercase small mb-2">{{ i18n `my_name_is` }}</p>
<h1 class="h3 text-primary font-primary mb-3">{{ .Params.name }}</h1>
<div class="mb-0 mx-auto" style="max-width:460px">{{ .Params.summary }} <a href="{{ .Permalink }}" aria-label="About me" class="text-underline d-inline-block">{{ i18n `read_more` }}</a></div>
{{ end }}
</div>
</div>
<div class="col-lg-8 col-xl-9">
<div class="section">
<div class="row">
{{ $paginator := .Paginate (where site.RegularPages "Type" "in" site.Params.mainSections) }}
{{ range $paginator.Pages }}
<div class="col-xl-4 col-sm-6">
{{ .Render "article" }}
</div>
{{ end }}
</div>
<div class="row">
<div class="col-12">
{{"<!-- pagination -->" | safeHTML }}
{{ $paginator := .Paginator }}
<!-- Number of links either side of the current page. -->
{{ $adjacent_links := 2 }}
<!-- $max_links = ($adjacent_links * 2) + 1 -->
{{ $max_links := (add (mul $adjacent_links 2) 1) }}
<!-- $lower_limit = $adjacent_links + 1 -->
{{ $lower_limit := (add $adjacent_links 1) }}
<!-- $upper_limit = $paginator.TotalPages - $adjacent_links -->
{{ $upper_limit := (sub $paginator.TotalPages $adjacent_links) }}
<!-- If there's more than one page. -->
{{ if gt $paginator.TotalPages 1 }}
<nav class="mb-3">
<ul class="pagination justify-content-center">
<!-- Previous page. -->
{{ if $paginator.HasPrev }}
<li class="page-item"><a class="page-link arrow" href="{{ $paginator.Prev.URL }}" aria-label="Pagination Arrow">
<i class="fas fa-angle-left"></i>
</a></li>
{{ end }}
<!-- Page numbers. -->
{{ range $paginator.Pagers }}
{{ $.Scratch.Set "page_number_flag" false }}
<!-- Advanced page numbers. -->
{{ if gt $paginator.TotalPages $max_links }}
<!-- Lower limit pages. -->
<!-- If the user is on a page which is in the lower limit. -->
{{ if le $paginator.PageNumber $lower_limit }}
<!-- If the current loop page is less than max_links. -->
{{ if le .PageNumber $max_links }}
{{ $.Scratch.Set "page_number_flag" true }}
{{ end }}
<!-- Upper limit pages. -->
<!-- If the user is on a page which is in the upper limit. -->
{{ else if ge $paginator.PageNumber $upper_limit }}
<!-- If the current loop page is greater than total pages minus $max_links -->
{{ if gt .PageNumber (sub $paginator.TotalPages $max_links) }}
{{ $.Scratch.Set "page_number_flag" true }}
{{ end }}
<!-- Middle pages. -->
{{ else }}
{{ if and ( ge .PageNumber (sub $paginator.PageNumber $adjacent_links) ) ( le .PageNumber (add $paginator.PageNumber $adjacent_links) ) }}
{{ $.Scratch.Set "page_number_flag" true }}
{{ end }}
{{ end }}
<!-- Simple page numbers. -->
{{ else }}
{{ $.Scratch.Set "page_number_flag" true }}
{{ end }}
<!-- Output page numbers. -->
{{ if eq ($.Scratch.Get "page_number_flag") true }}
<li class="page-item">
<a href="{{ .URL }}" class="page-link{{ if eq . $paginator }} active {{ end }}">
{{ .PageNumber }}
</a>
</li>
{{ end }}
{{ end }}
<!-- Next page. -->
{{ if $paginator.HasNext }}
<li class="page-item"><a class="page-link arrow" href="{{ $paginator.Next.URL }}" aria-label="Pagination Arrow">
<i class="fas fa-angle-right"></i>
</a></li>
{{ end }}
</ul>
</nav>
{{ end }}
</div>
</div>
{{ if site.Params.subscription.enable }}
{{ with site.Params.subscription }}
<div class="section pb-0">
<div class="row">
<div class="col-12">
<div class="newsletter-block bg-primary-light font-primary">
<div class="row align-items-center">
<div class="col-12">
<h3 class="mb-0">{{ i18n `subscribe_title` }}</h3>
</div>
<div class="col-12 mt-4">
<form action="{{ .mailchimp_form_action }}" name="{{ .mailchimp_form_name }}" method="post">
<div class="input-group">
<input type="text" class="form-control pl-3" placeholder="{{ i18n `enter_your_email`}}" aria-label="{{ i18n `enter_your_email`}}" required>
<div class="input-group-append">
<button type="submit" class="input-group-text pr-3" aria-label="News-letter"><i class="far fa-paper-plane"></i>
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
{{ end }}
{{ end }}
<div class="mt-4 pt-1">
{{ partial "footer.html" . }}
</div>
</div>
</div>
{{ end }}
@@ -0,0 +1,43 @@
<footer class="bg-primary-light py-5">
<div class="container">
<div class="row">
{{ with site.Params.social }}
<div class="col-12 text-center mb-5">
<ul class="social-links is-circled list-unstyled list-inline font-weight-500">
{{ range . }}
<li class="list-inline-item"><a href="{{.link}}" title="{{.title}}">
<i class="icon {{.icon}}"></i> {{.title}}
</a></li>
{{ end }}
</ul>
</div>
{{ end }}
{{ if not .IsHome }}
{{ if site.Params.subscription.enable }}
{{ with site.Params.subscription }}
<!-- subscription form -->
<form class="newsletter-block mx-auto mb-5" action="{{ .mailchimp_form_action }}" method="post" name="mc-embedded-subscribe-form" target="_blank">
<h5 class="h4 mb-3 text-center font-primary">{{ i18n `subscribe_title` }}</h5>
<div class="input-group">
<input type="text" class="form-control bg-transparent pl-3" placeholder="{{ i18n `enter_your_email`}}" aria-label="{{ i18n `enter_your_email`}}" required>
<div class="input-group-append">
<button type="submit" class="input-group-text pr-3" aria-label="News-letter"><i class="far fa-paper-plane"></i>
</button>
</div>
</div>
<div style="position: absolute; left: -5000px;" aria-hidden="true">
<input type="text" name="{{ .mailchimp_form_name }}" tabindex="-1">
</div>
</form>
{{ end }}
{{ end }}
{{ end }}
<div class="col-12 text-center">
<p class="mb-0 font-weight-500">{{site.Params.copyright | markdownify}}</p>
</div>
</div>
</div>
</footer>
@@ -0,0 +1,28 @@
<meta charset="utf-8">
<title>{{ .Title }}</title>
<!-- mobile responsive meta -->
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=5">
<meta name="description" content="{{ with .Params.Description }}{{ . }}{{ else }}{{ with site.Params.description }}{{ . }}{{ end }}{{ end }}">
{{ with site.Params.author }}
<meta name="author" content="{{ . }}">{{ end }}
<meta name="theme-name" content="editor-hugo" />
<!--Favicon-->
<link rel="shortcut icon" href="{{ site.Params.favicon | absURL }}" type="image/x-icon">
<link rel="icon" href="{{ site.Params.favicon | absURL }}" type="image/x-icon">
<!-- multilingual SEO optimizations -->
{{ if .IsTranslated }}
{{ range .Page.AllTranslations }}
<link rel="alternate" title="{{.Title}}" hreflang="{{.Lang}}" href="{{.RelPermalink}}">
{{ end }}
{{ end }}
{{ with .Params.image }}
<meta property="og:image" content="{{ . | absURL }}" />
{{ end }}
{{ template "_internal/opengraph.html" . }}
{{ template "_internal/google_analytics.html" . }}
{{ site.Params.custom_script | safeHTML }}
@@ -0,0 +1,139 @@
<header class="sidenav">
<div class="is-top">
<div>
<!-- Language List -->
{{ if .IsTranslated }}
<span class="d-inline-block d-md-none mr-1"><select style="cursor:pointer;background:transparent" class="m-2 border-0 text-uppercase" id="select-language" onchange="location = this.value;">
{{ $siteLanguages := site.Languages}}
{{ $pageLang := .Page.Lang}}
{{ range .Page.AllTranslations }}
{{ $translation := .}}
{{ range $siteLanguages }}
{{ if eq $translation.Lang .Lang }}
{{ $selected := false }}
{{ if eq $pageLang .Lang}}
<option id="{{ $translation.Language }}" value="{{ $translation.Permalink }}" selected>{{ .LanguageName }}
</option>
{{ else }}
<option id="{{ $translation.Language }}" value="{{ $translation.Permalink }}">{{ .LanguageName }}</option>
{{ end }}
{{ end }}
{{ end }}
{{ end }}
</select></span>
{{ end }}
{{ if site.Params.search }}
<button class="search-toggle d-inline-block d-md-none" data-toggle="search">
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="currentColor" viewBox="0 0 16 16"><path d="M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001c.03.04.062.078.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1.007 1.007 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0z"/></svg>
</button>
{{ end }}
<button class="sidenav-toggler d-inline-block {{if eq site.Params.logo_rotate false}}logo-plain{{end}}" data-toggle="sidenav-menu">
<svg id="toggler-icon" class="toggler-icon" viewBox="0 0 100 100" width="60" onclick="this.classList.toggle('active')"><path class="line top" d="m 30,33 h 40 c 0,0 9.044436,-0.654587 9.044436,-8.508902 0,-7.854315 -8.024349,-11.958003 -14.89975,-10.85914 -6.875401,1.098863 -13.637059,4.171617 -13.637059,16.368042 v 40" /><path class="line middle" d="m 30,50 h 40" /><path class="line bottom" d="m 30,67 h 40 c 12.796276,0 15.357889,-11.717785 15.357889,-26.851538 0,-15.133752 -4.786586,-27.274118 -16.667516,-27.274118 -11.88093,0 -18.499247,6.994427 -18.435284,17.125656 l 0.252538,40" /></svg>
</button>
</div>
{{ if site.Params.logo_rotate }}
<a class="navbar-brand mr-0" href="{{ site.BaseURL | relLangURL }}">
{{ if site.Params.logo }}
<img height="{{site.Params.logo_height}}" src="{{ site.Params.logo | absURL}}"
alt="{{site.Params.logo_text}}">
{{ else }}
<span class="h3">{{site.Params.logo_text | markdownify}} <span class="text-primary">.</span></span>
{{ end }}
</a>
{{ else }}
<a class="navbar-brand plain mr-0" href="{{ site.BaseURL | relLangURL }}">
{{ if site.Params.logo }}
<img height="{{site.Params.logo_height}}" src="{{ site.Params.logo | absURL}}"
alt="{{site.Params.logo_text}}">
{{ else }}
<span class="h3">{{site.Params.logo_text | markdownify}} <span class="text-primary">.</span></span>
{{ end }}
</a>
{{ end }}
</div>
<div class="d-none d-md-block">
<ul class="social-links list-unstyled">
{{ if site.Params.search }}
<li class="mb-3">
<button class="search-toggle" data-toggle="search">
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="currentColor" viewBox="0 0 16 16"><path d="M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001c.03.04.062.078.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1.007 1.007 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0z"/></svg>
</button>
</li>
{{ end }}
<li>
<a href="mailto:{{ site.Params.email }}">
<svg width="1.15em" height="1.15em" viewBox="0 0 16 16" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" d="M0 4a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V4zm2-1a1 1 0 0 0-1 1v.217l7 4.2 7-4.2V4a1 1 0 0 0-1-1H2zm13 2.383l-4.758 2.855L15 11.114v-5.73zm-.034 6.878L9.271 8.82 8 9.583 6.728 8.82l-5.694 3.44A1 1 0 0 0 2 13h12a1 1 0 0 0 .966-.739zM1 11.114l4.758-2.876L1 5.383v5.73z"/></svg>
</a>
</li>
<!-- Language List -->
{{ if .IsTranslated }}
<li class="mt-3 pt-2"><select style="cursor:pointer" class="m-2 border-0 text-uppercase" id="select-language" onchange="location = this.value;">
{{ $siteLanguages := site.Languages}}
{{ $pageLang := .Page.Lang}}
{{ range .Page.AllTranslations }}
{{ $translation := .}}
{{ range $siteLanguages }}
{{ if eq $translation.Lang .Lang }}
{{ $selected := false }}
{{ if eq $pageLang .Lang}}
<option id="{{ $translation.Language }}" value="{{ $translation.Permalink }}" selected>{{ .LanguageName }}
</option>
{{ else }}
<option id="{{ $translation.Language }}" value="{{ $translation.Permalink }}">{{ .LanguageName }}</option>
{{ end }}
{{ end }}
{{ end }}
{{ end }}
</select></li>
{{ end }}
</ul>
</div>
</header>
<div class="sidenav-overlay" data-toggle="sidenav-menu" onclick="document.getElementById('toggler-icon').classList.remove('active')"></div>
<nav class="sidenav-menu flex-column justify-content-between">
<ul class="w-100 accordion" id="accordionMenu">
{{ range site.Menus.main }}
{{ if .HasChildren }}
<li class="nav-item">
<a class="nav-link" href="#" type="button" data-toggle="collapse" data-target="#dropdown-menu-02">{{ .Name }}</a>
<ul id="dropdown-menu-02" class="collapse list-unstyled" data-parent="#accordionMenu">
{{ range .Children }}
<li><a href="{{if .Pre}}{{if not $.IsHome}}{{site.BaseURL | relLangURL}}{{end}}{{.Pre}}{{ .URL }}{{else}}{{.URL | relLangURL}}{{end}}">{{ .Name }}</a></li>
{{ end }}
</ul>
</li>
{{ else }}
<li class="nav-item">
<a class="nav-link" href="{{if .Pre}}{{if not $.IsHome}}{{site.BaseURL | relLangURL}}{{end}}{{.Pre}}{{ .URL }}{{else}}{{.URL | relLangURL}}{{end}}">{{ .Name }}</a>
</li>
{{ end }}
{{ end }}
</ul>
{{ with site.Params.social }}
<ul class="social-links list-unstyled list-inline mt-5">
{{ range . }}
<li class="list-inline-item"><a href="{{.link}}" title="{{.title}}">
<i class="{{.icon}}"></i>
</a></li>
{{ end }}
</ul>
{{ end }}
</nav>
{{ if site.Params.search }}
<div class="search-block">
<div data-toggle="search-close">
<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" fill="currentColor" class="text-primary" viewBox="0 0 16 16"><path d="M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z"/></svg>
</div>
<form action="{{ `search`| relLangURL }}" method="GET">
<input id="search-field" name="s" type="search" placeholder="{{ i18n `search_placeholder`}}" class="text-center" aria-label="search-query">
</form>
</div>
{{ end }}
@@ -0,0 +1,19 @@
<section class="col-12 page-header">
<div class="section my-4 py-5">
{{ if or (eq .Section "tags") (eq .Section "categories") }}
{{ if eq .Section "tags" }}
<h2 class="h4 title">{{ i18n "showing_posts_from" }} <mark>{{.Title | markdownify}}</mark> {{ i18n "tag" }}</h2>
{{ else if eq .Section "categories" }}
<h2 class="h4 title">{{ i18n "showing_posts_from" }} <mark>{{.Title | markdownify}}</mark> {{ i18n "category" }}</h2>
{{ end }}
{{ else }}
<h2 class="h4 title">{{.Title | markdownify}}</h2>
{{ end }}
</div>
</section>
@@ -0,0 +1,7 @@
{{ if site.Params.preloader.enable }}
<div class="preloader">
{{ with site.Params.preloader.preloader }}
<img src="{{ . | absURL }}" alt="preloader">
{{ end }}
</div>
{{ end }}
@@ -0,0 +1,72 @@
<!-- font family -->
<script src="https://cdn.jsdelivr.net/gh/theprojectsomething/webfontloader@feature/google-fonts-v2/webfontloader.js"></script>
{{$pf:= site.Params.variables.primary_font}}
{{$sf:= site.Params.variables.secondary_font}}
<script>
WebFont.load({
google: {
api: 'https://fonts.googleapis.com/css2',
families: ['{{$pf}}{{if not $sf}}&display=swap{{end}}'{{with $sf}},'{{.}}&display=swap'{{end}}],
version: 2
},
active: () => {
sessionStorage.fontsLoaded = true
}
});
</script>
<!-- JS Plugins + Main script -->
{{ $scripts := slice }}
{{ range site.Params.plugins.js}}
{{ if findRE "^http" .link }}
<script src="{{ .link | absURL }}" type="application/javascript" {{.attributes | safeHTMLAttr}}></script>
{{ else }}
{{ $scripts = $scripts | append (resources.Get .link) }}
{{ end }}
{{ end }}
{{ $scripts := $scripts | append (resources.Get "js/script.js" | minify) }}
{{ $scripts := $scripts | resources.Concat "/js/script.js" | minify | fingerprint "sha512" }}
<script crossorigin="anonymous" defer="defer" data-turbolinks-suppress-warning integrity="{{ $scripts.Data.Integrity }}" type="application/javascript">{{$scripts.Content | safeJS}}</script>
<!-- cookie -->
{{ if site.Params.cookies.enable }}
<script src="https://cdnjs.cloudflare.com/ajax/libs/js-cookie/2.2.1/js.cookie.min.js"></script>
<div id="js-cookie-box" class="cookie-box cookie-box-hide">
This site uses cookies. By continuing to use this website, you agree to their use. <span id="js-cookie-button" class="btn btn-sm btn-outline-primary ml-2">I Accept</span>
</div>
<script>
(function ($) {
const cookieBox = document.getElementById('js-cookie-box');
const cookieButton = document.getElementById('js-cookie-button');
if (!Cookies.get('cookie-box')) {
cookieBox.classList.remove('cookie-box-hide');
cookieButton.onclick = function () {
Cookies.set('cookie-box', true, {
expires: {{ site.Params.cookies.expire_days }}
});
cookieBox.classList.add('cookie-box-hide');
};
}
})(jQuery);
</script>
<!-- cookie style -->
<style>
.cookie-box {
position: fixed;
left: 0;
right: 0;
bottom: 0;
text-align: center;
z-index: 9999;
padding: 1rem 2rem;
background: rgb(71, 71, 71);
transition: all .75s cubic-bezier(.19, 1, .22, 1);
color: #fdfdfd;
}
.cookie-box-hide {
display: none;
}
</style>
{{ end }}
@@ -0,0 +1,53 @@
<!-- plugins + stylesheet -->
<link rel="preconnect" href="https://fonts.gstatic.com">
{{ $styles := slice }}
{{ range site.Params.plugins.css }}
{{ if findRE "^http" .link }}
<link crossorigin="anonymous" media="all" rel="stylesheet" href="{{ .link | absURL }}" {{.attributes | safeHTMLAttr}} >
{{ else }}
{{ $styles = $styles | append (resources.Get .link) }}
{{ end }}
{{ end }}
{{ $styles := $styles | append (resources.Get "scss/style.scss" | resources.ExecuteAsTemplate "style.scss" . | toCSS) }}
{{ $styles := $styles | resources.Concat "/css/style.css" | minify | fingerprint "sha512"}}
<style crossorigin="anonymous" media="all" type="text/css" integrity="{{ $styles.Data.Integrity }}">{{$styles.Content | safeCSS}}</style>
<style>
blockquote::before {
display: none;
font-family: "{{ with site.Params.variables }} {{.icon_font}} {{ end }}";
}
.content ul li:not(.nav-item) {
position: relative;
margin-bottom: 5px;
list-style-type: none;
}
.content ul li:not(.nav-item) svg {
margin-right: 6px;
transform: scale(0.8);
color: {{ with site.Params.variables }} {{.primary_color}} {{ end }};
}
.content ul li:not(.nav-item)::before {
font-size: 14px;
font-family: "{{ with site.Params.variables }} {{.icon_font}} {{ end }}";
font-weight: 900;
content: "\f069";
display: none;
}
.notices p::before {
position: absolute;
top: 2px;
font-family: "{{ with site.Params.variables }} {{.icon_font}} {{ end }}";
font-weight: 900;
content: "\f05a";
left: 10px;
display: none;
}
.notices p svg {
position: absolute;
top: 7px;
left: 10px;
color: {{ with site.Params.variables }} {{.white}} {{ end }};
}
</style>
@@ -0,0 +1,15 @@
{{ "<!-- about me -->" | safeHTML }}
<div class="widget text-center">
{{ with site.GetPage "/about" }}
<span class="widget-title">{{ i18n `about_me` }}</span>
{{ if .Params.image }}
<img loading="lazy" class="mb-4 rounded-circle w-100" style="max-width:150px" src="{{ .Params.image | absURL }}" alt="Author">
{{ else if .Params.email }}
<img loading="lazy" class="mb-4 rounded-circle w-100" style="max-width:150px" src="https://www.gravatar.com/avatar/{{ md5 .Params.email }}?s=150&pg&d=identicon">
{{ end }}
<p class="text-uppercase small mb-2">{{ i18n `my_name_is` }}</p>
<h1 class="h4 text-primary font-primary mb-3">{{ .Params.name }}</h1>
<div class="mb-0 mx-auto" style="max-width:460px">{{ .Summary }} <a href="{{ .Permalink }}" aria-label="About me" class="text-underline d-inline-block">{{ i18n `read_more` }}</a></div>
{{ end }}
</div>
@@ -0,0 +1,14 @@
{{ "<!-- categories -->" | safeHTML }}
<div class="widget">
<span class="widget-title">{{ i18n "categories" }}</span>
{{ if isset site.Taxonomies "categories" }}
{{ if not (eq (len site.Taxonomies.categories) 0) }}
<ul class="sidebar-post-categories list-unstyled">
{{ range $name, $items := site.Taxonomies.categories }}
<li><a href="{{ `categories/` | absLangURL }}{{ $name | urlize | lower }}/">{{ $name | humanize }} <span>{{ len $items }}</span></a></li>
{{ end }}
</ul>
{{ end }}
{{ end }}
</div>
@@ -0,0 +1,25 @@
{{ "<!-- latest post -->" | safeHTML }}
<div class="widget">
<span class="widget-title">{{ i18n `recent_post` }}</span>
<ul class="sidebar-recent-post list-unstyled">
{{ $related := ( where site.RegularPages "Type" "in" site.Params.mainSections ) | intersect (where site.Pages ".Title" "!=" .Title) | union (site.RegularPages.Related . ) }}
{{ range first 3 $related }}
<li class="recent-post-item">
<div class="media">
<div class="media-body mr-2">
<h5><a href="{{ .Permalink }}">{{ .Title }}</a></h5>
<span class="card-meta">
<span class="card-meta-date">{{.PublishDate.Format "Jan 02, 2006"}}</span>
</span>
</div>
<a href="{{ .Permalink }}" class="recent-post-image">
{{ range first 1 .Params.Images }}
<img loading="lazy" class="img-fluid rounded-circle" src="{{ . | absURL }}">
{{ end }}
</a>
</div>
</li>
{{ end }}
</ul>
</div>
@@ -0,0 +1,10 @@
{{ "<!-- Search -->" | safeHTML }}
{{ if site.Params.search }}
<div class="widget">
<h5 class="widget-title"><span>{{ i18n "search" }}</span></h5>
<form action="{{ `search`| relLangURL }}" class="widget-search">
<input id="search-query" name="s" type="search" placeholder="{{ i18n `search_placeholder`}}">
<button type="submit"><i class="ti-search"></i></button>
</form>
</div>
{{ end }}
@@ -0,0 +1,13 @@
{{ "<!-- tags -->" | safeHTML }}
<div class="widget">
<span class="widget-title">{{ i18n "tags" }}</span>
{{ if isset site.Taxonomies "tags" }}
{{ if not (eq (len site.Taxonomies.tags) 0) }}
<ul class="sidebar-post-tags list-unstyled list-inline">
{{ range $name, $items := site.Taxonomies.tags }}
<li class="list-inline-item"><a href="{{ `tags/` | absLangURL }}{{ $name | urlize | lower }}/">{{ $name | humanize }}</a></li>
{{ end }}
</ul>
{{ end }}
{{ end }}
</div>
@@ -0,0 +1,3 @@
{{- range .Widgets -}}
{{- partial ( print "widgets/" . ) $.Scope -}}
{{- end -}}
@@ -0,0 +1,8 @@
{{ $_hugo_config := `{ "version": 1 }` }}
<div class="border border-default collapse-wrapper">
<a class="d-flex p-2 collapse-head" data-toggle="collapse" href="#{{ .Get 0 | urlize }}" role="button">
{{ .Get 0 | markdownify }} <i class="fas fa-plus ml-auto pt-1 mt-1"></i>
</a>
<div class="collapse" id="{{ .Get 0 | urlize }}"><div class="p-2">{{ .Inner | markdownify }}</div></div>
</div>
@@ -0,0 +1,3 @@
{{ $_hugo_config := `{ "version": 1 }` }}
<div class="notices {{ .Get 0 }}" {{ if len .Params | eq 2 }} id="{{ .Get 1 }}" {{ end }}><p>{{ .Inner | markdownify }}</p></div>
@@ -0,0 +1,11 @@
{{ $_hugo_config := `{ "version": 1 }` }}
<div class="quote">
<i class="ti-quote-left"></i>
<div>
<p>{{ .Inner | markdownify }}</p>
{{ with .Get "by"}}
<span class="quote-by"> -{{ . }}</span>
{{ end }}
</div>
</div>
@@ -0,0 +1,5 @@
{{ $_hugo_config := `{ "version": 1 }` }}
<div class="tab-pane" title="{{ .Get 0 }}">
{{ .Inner }}
</div>
@@ -0,0 +1,6 @@
{{ $_hugo_config := `{ "version": 1 }` }}
<div class="code-tabs">
<ul class="nav nav-tabs"></ul>
<div class="tab-content">{{ .Inner }}</div>
</div>
+8
View File
@@ -0,0 +1,8 @@
[build]
publish = "public"
command = "yarn project-setup && yarn build"
[build.environment]
HUGO_VERSION = "0.115.1"
GO_VERSION = "1.20.5"
HUGO_BASEURL = "/"
@@ -0,0 +1,77 @@
const fs = require("fs");
const path = require("path");
const getFolderName = (rootfolder) => {
const configPath = path.join(
rootfolder,
"exampleSite/hugo.toml"
);
const getConfig = fs.readFileSync(configPath, "utf8");
const match = getConfig.match(/theme\s*=\s*\[?"([^"\]]+)"\]?/);
let selectedTheme = null;
if (match && match[1]) {
selectedTheme = match[1];
}
return selectedTheme;
};
const deleteFolder = (folderPath) => {
if (fs.existsSync(folderPath)) {
fs.rmSync(folderPath, { recursive: true, force: true });
}
};
const createNewfolder = (rootfolder, folderName) => {
const newFolder = path.join(rootfolder, folderName);
fs.mkdirSync(newFolder, { recursive: true });
return newFolder;
};
const iterateFilesAndFolders = (rootFolder, { destinationRoot }) => {
const directory = path.join(rootFolder);
const items = fs.readdirSync(directory, { withFileTypes: true });
items.forEach((item) => {
if (item.isDirectory()) {
createNewfolder(destinationRoot, item.name);
iterateFilesAndFolders(path.join(directory, item.name), {
currentFolder: item.name,
destinationRoot: path.join(destinationRoot, item.name),
});
} else {
const sourceFile = path.join(directory, item.name);
const destinationFile = path.join(destinationRoot, item.name);
fs.renameSync(sourceFile, destinationFile);
}
});
};
const setupProject = () => {
const rootfolder = path.join(__dirname, "../");
if (!fs.existsSync(path.join(rootfolder, "themes"))) {
const folderList = ["layouts", "assets", "static"];
const folderName = getFolderName(rootfolder);
const newfolderName = createNewfolder(
path.join(rootfolder, "themes"),
folderName
);
folderList.forEach((folder) => {
const source = path.join(rootfolder, folder);
const destination = path.join(newfolderName, folder);
if (fs.existsSync(source)) {
fs.mkdirSync(destination, { recursive: true });
iterateFilesAndFolders(source, {
currentFolder: folder,
destinationRoot: destination,
});
deleteFolder(source);
}
});
const exampleSite = path.join(rootfolder, "exampleSite");
iterateFilesAndFolders(exampleSite, { destinationRoot: rootfolder });
deleteFolder(exampleSite);
}
};
setupProject();
@@ -0,0 +1,90 @@
const fs = require("fs");
const path = require("path");
const createNewfolder = (rootfolder, folderName) => {
const newFolder = path.join(rootfolder, folderName);
fs.mkdirSync(newFolder, { recursive: true });
return newFolder;
};
const deleteFolder = (folderPath) => {
if (fs.existsSync(folderPath)) {
fs.rmSync(folderPath, { recursive: true, force: true });
}
};
const getFolderName = (rootfolder) => {
const configPath = path.join(
rootfolder,
"exampleSite/hugo.toml"
);
const getConfig = fs.readFileSync(configPath, "utf8");
const match = getConfig.match(/theme\s*=\s*\[?"([^"\]]+)"\]?/);
let selectedTheme = null;
if (match && match[1]) {
selectedTheme = match[1];
}
return selectedTheme;
};
const iterateFilesAndFolders = (rootFolder, { destinationRoot }) => {
const directory = path.join(rootFolder);
const items = fs.readdirSync(directory, { withFileTypes: true });
items.forEach((item) => {
if (item.isDirectory()) {
createNewfolder(destinationRoot, item.name);
iterateFilesAndFolders(path.join(directory, item.name), {
currentFolder: item.name,
destinationRoot: path.join(destinationRoot, item.name),
});
} else {
const sourceFile = path.join(directory, item.name);
const destinationFile = path.join(destinationRoot, item.name);
fs.renameSync(sourceFile, destinationFile);
}
});
};
const setupTheme = () => {
const rootFolder = path.join(__dirname, "../");
if (!fs.existsSync(path.join(rootFolder, "exampleSite"))) {
const includesFiles = [
"hugo.toml",
"assets",
"config",
"data",
"content",
"i18n",
"static",
];
const folder = createNewfolder(rootFolder, "exampleSite");
fs.readdirSync(rootFolder, { withFileTypes: true }).forEach((file) => {
if (includesFiles.includes(file.name)) {
if (file.isDirectory()) {
const destination = path.join(rootFolder, "exampleSite", file.name);
fs.mkdirSync(destination, { recursive: true });
iterateFilesAndFolders(path.join(rootFolder, file.name), {
destinationRoot: destination,
});
deleteFolder(path.join(rootFolder, file.name));
} else {
fs.renameSync(
path.join(rootFolder, file.name),
path.join(folder, file.name)
);
}
}
});
const themes = path.join(rootFolder, "themes");
iterateFilesAndFolders(path.join(themes, getFolderName(rootFolder)), {
destinationRoot: rootFolder,
});
deleteFolder(themes);
}
};
setupTheme();
+43
View File
@@ -0,0 +1,43 @@
#!/bin/bash
# default versions
NODE_VERSION='18.16.1';
GO_VERSION='1.20.5';
HUGO_VERSION='0.115.1';
# install Node.js
# echo "Installing Node.js $NODE_VERSION..."
# curl -sSOL https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}.tar.gz
# tar -xzf node-v${NODE_VERSION}.tar.gz
# export PATH=$PATH:/usr/local/bin
# rm -rf node-v${NODE_VERSION}.tar.gz
echo "USING NODE VERSION: $(node -v)"
# install Go
echo "Installing Go $GO_VERSION..."
curl -sSOL https://dl.google.com/go/go${GO_VERSION}.linux-amd64.tar.gz
tar -C /usr/local -xzf go${GO_VERSION}.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
rm -rf go${GO_VERSION}.linux-amd64.tar.gz
go version
# install Hugo
echo "Installing Hugo $HUGO_VERSION..."
curl -sSOL https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_Linux-64bit.tar.gz
tar -xzf hugo_extended_${HUGO_VERSION}_Linux-64bit.tar.gz
mv hugo /usr/local/bin/
rm -rf hugo_extended_${HUGO_VERSION}_Linux-64bit.tar.gz
hugo version
# project setup
echo "Project setting up..."
npm run project-setup
# install dependencies
echo "Installing project dependencies..."
npm install
# run the build command
echo "Running the build command..."
npm run build
+11
View File
@@ -0,0 +1,11 @@
{
"builds": [
{
"src": "vercel-build.sh",
"use": "@vercel/static-build",
"config": {
"distDir": "public"
}
}
]
}