template
This commit is contained in:
Executable
+17
@@ -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
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"MD033": false,
|
||||
"MD034": false,
|
||||
"MD013": false
|
||||
}
|
||||
Executable
+12
@@ -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);
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -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 |
Binary file not shown.
@@ -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="→" 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="←" 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="•" 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="a" 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 |
Binary file not shown.
Binary file not shown.
@@ -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}
|
||||
File diff suppressed because one or more lines are too long
@@ -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;
|
||||
}
|
||||
@@ -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
|
||||
@@ -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
@@ -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
@@ -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
|
||||
Executable
+11
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"builds": [
|
||||
{
|
||||
"src": "vercel-build.sh",
|
||||
"use": "@vercel/static-build",
|
||||
"config": {
|
||||
"distDir": "public"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user