template
This commit is contained in:
17
ODOO4projects/themes/editor-hugo/.gitignore
vendored
Executable file
17
ODOO4projects/themes/editor-hugo/.gitignore
vendored
Executable 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
ODOO4projects/themes/editor-hugo/.markdownlint.json
Executable file
5
ODOO4projects/themes/editor-hugo/.markdownlint.json
Executable file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"MD033": false,
|
||||
"MD034": false,
|
||||
"MD013": false
|
||||
}
|
||||
12
ODOO4projects/themes/editor-hugo/.prettierrc
Executable file
12
ODOO4projects/themes/editor-hugo/.prettierrc
Executable file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"overrides": [
|
||||
{
|
||||
"files": ["*.html"],
|
||||
"options": {
|
||||
"parser": "go-template",
|
||||
"goTemplateBracketSpacing": true,
|
||||
"bracketSameLine": true
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
7
ODOO4projects/themes/editor-hugo/archetypes/default.md
Normal file
7
ODOO4projects/themes/editor-hugo/archetypes/default.md
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: "{{ replace .Name "-" " " | title }}"
|
||||
date: {{ .Date }}
|
||||
draft: true
|
||||
# description
|
||||
description: "This is meta description"
|
||||
---
|
||||
90
ODOO4projects/themes/editor-hugo/assets/js/script.js
Normal file
90
ODOO4projects/themes/editor-hugo/assets/js/script.js
Normal file
@@ -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);
|
||||
7
ODOO4projects/themes/editor-hugo/assets/plugins/bootstrap/bootstrap.min.css
vendored
Normal file
7
ODOO4projects/themes/editor-hugo/assets/plugins/bootstrap/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
7
ODOO4projects/themes/editor-hugo/assets/plugins/bootstrap/bootstrap.min.js
vendored
Normal file
7
ODOO4projects/themes/editor-hugo/assets/plugins/bootstrap/bootstrap.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
2
ODOO4projects/themes/editor-hugo/assets/plugins/jquery/jquery.min.js
vendored
Normal file
2
ODOO4projects/themes/editor-hugo/assets/plugins/jquery/jquery.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
9
ODOO4projects/themes/editor-hugo/assets/plugins/search/fuse.min.js
vendored
Normal file
9
ODOO4projects/themes/editor-hugo/assets/plugins/search/fuse.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
101
ODOO4projects/themes/editor-hugo/assets/plugins/search/search.js
Normal file
101
ODOO4projects/themes/editor-hugo/assets/plugins/search/search.js
Normal file
@@ -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}
|
||||
1
ODOO4projects/themes/editor-hugo/assets/plugins/slick/slick.min.js
vendored
Normal file
1
ODOO4projects/themes/editor-hugo/assets/plugins/slick/slick.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
63
ODOO4projects/themes/editor-hugo/assets/scss/_buttons.scss
Normal file
63
ODOO4projects/themes/editor-hugo/assets/scss/_buttons.scss
Normal file
@@ -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;
|
||||
}
|
||||
478
ODOO4projects/themes/editor-hugo/assets/scss/_common.scss
Normal file
478
ODOO4projects/themes/editor-hugo/assets/scss/_common.scss
Normal file
@@ -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}
|
||||
34
ODOO4projects/themes/editor-hugo/assets/scss/_mixins.scss
Normal file
34
ODOO4projects/themes/editor-hugo/assets/scss/_mixins.scss
Normal file
@@ -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;
|
||||
}
|
||||
34
ODOO4projects/themes/editor-hugo/assets/scss/style.scss
Normal file
34
ODOO4projects/themes/editor-hugo/assets/scss/style.scss
Normal file
@@ -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
ODOO4projects/themes/editor-hugo/layouts/404.html
Normal file
0
ODOO4projects/themes/editor-hugo/layouts/404.html
Normal file
38
ODOO4projects/themes/editor-hugo/layouts/_default/about.html
Normal file
38
ODOO4projects/themes/editor-hugo/layouts/_default/about.html
Normal file
@@ -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 }}
|
||||
14
ODOO4projects/themes/editor-hugo/layouts/_default/index.json
Normal file
14
ODOO4projects/themes/editor-hugo/layouts/_default/index.json
Normal file
@@ -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 -}}
|
||||
123
ODOO4projects/themes/editor-hugo/layouts/_default/list.html
Normal file
123
ODOO4projects/themes/editor-hugo/layouts/_default/list.html
Normal file
@@ -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>
|
||||
137
ODOO4projects/themes/editor-hugo/layouts/index.html
Normal file
137
ODOO4projects/themes/editor-hugo/layouts/index.html
Normal file
@@ -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>
|
||||
28
ODOO4projects/themes/editor-hugo/layouts/partials/head.html
Normal file
28
ODOO4projects/themes/editor-hugo/layouts/partials/head.html
Normal file
@@ -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 }}
|
||||
139
ODOO4projects/themes/editor-hugo/layouts/partials/header.html
Normal file
139
ODOO4projects/themes/editor-hugo/layouts/partials/header.html
Normal file
@@ -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 }}
|
||||
53
ODOO4projects/themes/editor-hugo/layouts/partials/style.html
Normal file
53
ODOO4projects/themes/editor-hugo/layouts/partials/style.html
Normal file
@@ -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
ODOO4projects/themes/editor-hugo/netlify.toml
Executable file
8
ODOO4projects/themes/editor-hugo/netlify.toml
Executable 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 = "/"
|
||||
77
ODOO4projects/themes/editor-hugo/scripts/projectSetup.js
Normal file
77
ODOO4projects/themes/editor-hugo/scripts/projectSetup.js
Normal file
@@ -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();
|
||||
90
ODOO4projects/themes/editor-hugo/scripts/themeSetup.js
Normal file
90
ODOO4projects/themes/editor-hugo/scripts/themeSetup.js
Normal file
@@ -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
ODOO4projects/themes/editor-hugo/vercel-build.sh
Executable file
43
ODOO4projects/themes/editor-hugo/vercel-build.sh
Executable 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
ODOO4projects/themes/editor-hugo/vercel.json
Executable file
11
ODOO4projects/themes/editor-hugo/vercel.json
Executable file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"builds": [
|
||||
{
|
||||
"src": "vercel-build.sh",
|
||||
"use": "@vercel/static-build",
|
||||
"config": {
|
||||
"distDir": "public"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user