Initial Upload
This commit is contained in:
commit
c81d065c89
|
@ -0,0 +1,2 @@
|
|||
public/**
|
||||
.vscode/**
|
|
@ -0,0 +1,39 @@
|
|||
# Theme Name
|
||||
|
||||
## Features
|
||||
|
||||
### Search
|
||||
Lightweight search functionality based on index file.
|
||||
|
||||
### Mermaid
|
||||
Support for Mermaid schemas.
|
||||
|
||||
### Photos
|
||||
Support photos albums based on Folders.
|
||||
|
||||
### Syntax Hightlighting
|
||||
Required configuration to copy paste code :
|
||||
[markup.highlight]
|
||||
lineNos=true
|
||||
lineNumbersInTable=true
|
||||
noClasses = false
|
||||
|
||||
|
||||
### Curriculum Vitae
|
||||
Copy /layouts/section/cv.html to you local /layouts/section folder and edited the content.
|
||||
Save your own picture under /static/img/avatar.jpeg
|
||||
|
||||
## Installation
|
||||
|
||||
|
||||
## Configuration
|
||||
|
||||
### Favicons
|
||||
Get Icons from [Flaticon](https://www.flaticon.com/).
|
||||
Generate Favicons with [Freepik](https://www.freepik.com/).
|
||||
Uncompress the icons in your /static folder.
|
||||
|
||||
## References
|
||||
* [Bootstrap 5.2.3](https://getbootstrap.com/docs/5.2/getting-started/download/)
|
||||
* [JQuery](https://jquery.com/download/)
|
||||
* [Mermaid](https://cdn.jsdelivr.net/npm/mermaid@11.0.2/dist/)
|
|
@ -0,0 +1,6 @@
|
|||
+++
|
||||
title = '{{ replace .File.ContentBaseName "-" " " | title }}'
|
||||
date = {{ .Date }}
|
||||
draft = true
|
||||
tags: []
|
||||
+++
|
Binary file not shown.
|
@ -0,0 +1,51 @@
|
|||
function createCopyButton(highlightDiv) {
|
||||
const button = document.createElement("button");
|
||||
button.className = "btn-copy";
|
||||
button.type = "button";
|
||||
button.innerText = "Copy";
|
||||
button.addEventListener("click", () => copyCodeToClipboard(button, highlightDiv));
|
||||
highlightDiv.insertBefore(button, highlightDiv.firstChild);
|
||||
|
||||
const wrapper = document.createElement("div");
|
||||
wrapper.className = "highlight-wrapper";
|
||||
highlightDiv.parentNode.insertBefore(wrapper, highlightDiv);
|
||||
wrapper.appendChild(highlightDiv);
|
||||
}
|
||||
|
||||
document.querySelectorAll(".highlight").forEach((highlightDiv) => createCopyButton(highlightDiv));
|
||||
|
||||
async function copyCodeToClipboard(button, highlightDiv) {
|
||||
const codeToCopy = highlightDiv.querySelector(":last-child > .chroma > code").innerText.replace(/\n+\s*\n+/g, "\n");
|
||||
try {
|
||||
var result = await navigator.permissions.query({ name: "clipboard-write" });
|
||||
if (result.state == "granted" || result.state == "prompt") {
|
||||
await navigator.clipboard.writeText(codeToCopy);
|
||||
} else {
|
||||
copyCodeBlockExecCommand(codeToCopy, highlightDiv);
|
||||
}
|
||||
} catch (_) {
|
||||
copyCodeBlockExecCommand(codeToCopy, highlightDiv);
|
||||
} finally {
|
||||
button.blur();
|
||||
button.innerText = "Copied!";
|
||||
setTimeout(function () {
|
||||
button.innerText = "Copy";
|
||||
}, 2000); }
|
||||
}
|
||||
|
||||
function copyCodeBlockExecCommand(codeToCopy, highlightDiv) {
|
||||
const textArea = document.createElement("textArea");
|
||||
textArea.contentEditable = "true";
|
||||
textArea.readOnly = "false";
|
||||
textArea.className = "copyable-text-area";
|
||||
textArea.value = codeToCopy;
|
||||
highlightDiv.insertBefore(textArea, highlightDiv.firstChild);
|
||||
const range = document.createRange();
|
||||
range.selectNodeContents(textArea);
|
||||
const sel = window.getSelection();
|
||||
sel.removeAllRanges();
|
||||
sel.addRange(range);
|
||||
textArea.setSelectionRange(0, 999999);
|
||||
document.execCommand("copy");
|
||||
highlightDiv.removeChild(textArea);
|
||||
}
|
|
@ -0,0 +1,104 @@
|
|||
.highlight-wrapper {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/* Start: Turn off individual column border, margin, and padding when line numbers are showing */
|
||||
.highlight-wrapper .lntd pre {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.chroma .lntd pre {
|
||||
border: 0px solid #ccc;
|
||||
}
|
||||
|
||||
.chroma .lntd:first-child {
|
||||
padding: 7px 7px 7px 10px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.chroma .lntd:last-child {
|
||||
padding: 7px 10px 7px 7px;
|
||||
margin: 0;
|
||||
}
|
||||
/* End: Turn off individual column border, margin, and padding when line numbers are showing */
|
||||
|
||||
.highlight {
|
||||
position: relative;
|
||||
z-index: 0;
|
||||
padding: 0;
|
||||
margin:40px 0 10px 0;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.highlight > .chroma {
|
||||
position: static;
|
||||
z-index: 1;
|
||||
border-top-left-radius: 0px;
|
||||
border-top-right-radius: 0px;
|
||||
border-bottom-left-radius: 4px;
|
||||
border-bottom-right-radius: 4px;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.btn-copy {
|
||||
position: absolute;
|
||||
z-index: 2;
|
||||
right: 0;
|
||||
top: -29px;
|
||||
font-size: 13px;
|
||||
font-weight: 700;
|
||||
line-height: 14px;
|
||||
letter-spacing: 0.5px;
|
||||
width: 65px;
|
||||
color: #ffffff;
|
||||
background-color: #000000;
|
||||
border: 1.25px solid #232326;
|
||||
border-top-left-radius: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
border-bottom-right-radius: 0px;
|
||||
border-bottom-left-radius: 0px;
|
||||
white-space: nowrap;
|
||||
padding: 6px 6px 7px 6px;
|
||||
margin: 0 0 0 1px;
|
||||
cursor: pointer;
|
||||
opacity: 0.6;
|
||||
}
|
||||
|
||||
.btn-copy:hover,
|
||||
.btn-copy:focus,
|
||||
.btn-copy:active,
|
||||
.btn-copy:active:hover {
|
||||
color: #222225;
|
||||
background-color: #b3b3b3;
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
.copyable-text-area {
|
||||
position: absolute;
|
||||
height: 0;
|
||||
z-index: -1;
|
||||
opacity: .01;
|
||||
}
|
||||
.chroma [data-lang]:before {
|
||||
position: absolute;
|
||||
z-index: 0;
|
||||
top: -29px;
|
||||
left: 0;
|
||||
content: attr(data-lang);
|
||||
font-size: 13px;
|
||||
font-weight: 700;
|
||||
color: white;
|
||||
background-color: black;
|
||||
border-top-left-radius: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
border-bottom-left-radius: 0;
|
||||
border-bottom-right-radius: 0;
|
||||
padding: 6px 6px 7px 6px;
|
||||
line-height: 14px;
|
||||
opacity: 0.6;
|
||||
position: absolute;
|
||||
letter-spacing: 0.5px;
|
||||
border: 1.25px solid #232326;
|
||||
margin: 0 0 0 1px;
|
||||
}
|
||||
|
|
@ -0,0 +1,136 @@
|
|||
(function () {
|
||||
const SEARCH_ID = 'search';
|
||||
const ENABLE_SEARCH_ID = 'enable_search';
|
||||
const REGEX_MODE_ID = 'regex_mode';
|
||||
const COUNT_ID = 'count';
|
||||
const LIST_ID = 'listOfUrl';
|
||||
|
||||
let list = null;
|
||||
let filteredList = null;
|
||||
|
||||
const logPerformance = (work, startTime, endTime) => {
|
||||
const duration = (endTime - startTime).toFixed(2);
|
||||
console.log(`${work} took ${duration} ms`);
|
||||
};
|
||||
|
||||
const getSearchEl = () => document.getElementById(SEARCH_ID);
|
||||
const getEnableSearchEl = () => document.getElementById(ENABLE_SEARCH_ID);
|
||||
const getRegexModeEl = () => document.getElementById(REGEX_MODE_ID);
|
||||
const getCountEl = () => document.getElementById(COUNT_ID);
|
||||
const getListEl = () => document.getElementById(LIST_ID);
|
||||
|
||||
const disableSearchEl = placeholder => {
|
||||
getSearchEl().disabled = true;
|
||||
getSearchEl().placeholder = placeholder;
|
||||
};
|
||||
|
||||
const enableSearchEl = () => {
|
||||
getSearchEl().disabled = false;
|
||||
getSearchEl().placeholder =
|
||||
'Case-insensitive search by title, content, or publish date';
|
||||
};
|
||||
|
||||
const disableRegexModeEl = () => {
|
||||
getRegexModeEl().disabled = true;
|
||||
};
|
||||
|
||||
const enableRegexModeEl = () => {
|
||||
getRegexModeEl().disabled = false;
|
||||
};
|
||||
|
||||
const fetchJsonIndex = () => {
|
||||
const startTime = performance.now();
|
||||
disableSearchEl('Loading ...');
|
||||
const url = `${window.location.origin}/index.json`;
|
||||
fetch(url)
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
list = data.post;
|
||||
filteredList = data.post;
|
||||
enableSearchEl();
|
||||
logPerformance('fetchJsonIndex', startTime, performance.now());
|
||||
})
|
||||
.catch(error =>
|
||||
console.error(`Failed to fetch JSON index: ${error.message}`)
|
||||
);
|
||||
};
|
||||
|
||||
const filterList = regexMode => {
|
||||
console.log("filterList");
|
||||
const regexQuery = new RegExp(getSearchEl().value, 'i');
|
||||
const query = getSearchEl().value.toUpperCase();
|
||||
filteredList = list.filter(item => {
|
||||
const title = item.Title.toUpperCase();
|
||||
const content = item.PlainContent.toUpperCase();
|
||||
if (regexMode) {
|
||||
return (
|
||||
regexQuery.test(title) ||
|
||||
regexQuery.test(content)
|
||||
);
|
||||
} else {
|
||||
return (
|
||||
title.includes(query) ||
|
||||
content.includes(query)
|
||||
);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
const renderCount = () => {
|
||||
const count = `Count: ${filteredList.length}`;
|
||||
getCountEl().textContent = count;
|
||||
};
|
||||
|
||||
const renderList = () => {
|
||||
const newList = document.createElement('ul');
|
||||
newList.id = LIST_ID;
|
||||
newList.className = "list-group";
|
||||
filteredList.forEach(item => {
|
||||
const li = document.createElement('li');
|
||||
|
||||
const titleLink = document.createElement('a');
|
||||
titleLink.href = item.RelPermalink;
|
||||
titleLink.textContent = item.Title;
|
||||
li.className ="list-group-item";
|
||||
li.appendChild(titleLink);
|
||||
newList.appendChild(li);
|
||||
});
|
||||
const oldList = getListEl();
|
||||
oldList.replaceWith(newList);
|
||||
};
|
||||
|
||||
const handleSearchEvent = () => {
|
||||
const startTime = performance.now();
|
||||
const regexMode = getRegexModeEl().checked;
|
||||
filterList(regexMode);
|
||||
renderCount();
|
||||
renderList();
|
||||
logPerformance('handleSearchEvent', startTime, performance.now());
|
||||
};
|
||||
|
||||
const handleEnableSearchEvent = () => {
|
||||
if (getEnableSearchEl().checked) {
|
||||
fetchJsonIndex();
|
||||
enableRegexModeEl();
|
||||
} else {
|
||||
disableSearchEl('Disabled ...');
|
||||
disableRegexModeEl();
|
||||
}
|
||||
};
|
||||
|
||||
const addEventListeners = () => {
|
||||
getEnableSearchEl().addEventListener('change', handleEnableSearchEvent);
|
||||
getSearchEl().addEventListener('keydown', handleSearchEvent );
|
||||
getRegexModeEl().addEventListener('change', handleSearchEvent);
|
||||
handleEnableSearchEvent();
|
||||
|
||||
};
|
||||
|
||||
const main = () => {
|
||||
if (getSearchEl()) {
|
||||
addEventListeners();
|
||||
}
|
||||
};
|
||||
|
||||
main();
|
||||
})();
|
|
@ -0,0 +1,9 @@
|
|||
+++
|
||||
title = 'Home'
|
||||
date = 2023-01-01T08:00:00-07:00
|
||||
draft = false
|
||||
+++
|
||||
|
||||
Laborum voluptate pariatur ex culpa magna nostrud est incididunt fugiat
|
||||
pariatur do dolor ipsum enim. Consequat tempor do dolor eu. Non id id anim anim
|
||||
excepteur excepteur pariatur nostrud qui irure ullamco.
|
|
@ -0,0 +1,24 @@
|
|||
---
|
||||
title: "About"
|
||||
date: "2024-09-01"
|
||||
---
|
||||
|
||||
## Hugo
|
||||
|
||||
This template is created to be used with Hugo, a static site generator.
|
||||
Hugo is the **world’s fastest framework for building websites**. It is written in Go.
|
||||
|
||||
Learn more and contribute on [GitHub](https://github.com/gohugoio).
|
||||
Official WebSite : [GoHugo.io](https://gohugo.io/).
|
||||
|
||||
---
|
||||
|
||||
This template is issued from my own blog : [Fha-Notes](https://fhanotes.netlify.app)
|
||||
After a few year using Hugo, enriching my blog with functionalities that I kept copying all over the place, I decided to create my own template.
|
||||
|
||||
## The beginning
|
||||
I started long ago in a WordPress VM hosted in azure, until I received some bills :)
|
||||
Then I have created my blog on [GeeksWithBlogs](http://web.archive.org/web/20101119083715/http://geekswithblogs.net/MoonWalker/Default.aspx) but the website stopped hosting content.
|
||||
Good Old Times! Nostalgia when you hit us !
|
||||
|
||||
_Favicon made by [Freepik](https://www.freepik.com/), from [Flaticon](https://www.flaticon.com/), licensed by [CC 3.0](http://creativecommons.org/licenses/by/3.0/)._
|
|
@ -0,0 +1,7 @@
|
|||
+++
|
||||
title = 'Posts'
|
||||
date = 2023-01-01T08:30:00-07:00
|
||||
draft = false
|
||||
+++
|
||||
|
||||
Tempor est exercitation ad qui pariatur quis adipisicing aliquip nisi ea consequat ipsum occaecat. Nostrud consequat ullamco laboris fugiat esse esse adipisicing velit laborum ipsum incididunt ut enim. Dolor pariatur nulla quis fugiat dolore excepteur. Aliquip ad quis aliqua enim do consequat.
|
|
@ -0,0 +1,38 @@
|
|||
+++
|
||||
title = 'Post 1'
|
||||
date = 2023-01-15T09:00:00-07:00
|
||||
draft = false
|
||||
tags = ['red']
|
||||
+++
|
||||
|
||||
Tempor proident minim aliquip reprehenderit dolor et ad anim Lorem duis sint eiusmod. Labore ut ea duis dolor. Incididunt consectetur proident qui occaecat incididunt do nisi Lorem. Tempor do laborum elit laboris excepteur eiusmod do. Eiusmod nisi excepteur ut amet pariatur adipisicing Lorem.
|
||||
|
||||
Occaecat nulla excepteur dolore excepteur duis eiusmod ullamco officia anim in voluptate ea occaecat officia. Cillum sint esse velit ea officia minim fugiat. Elit ea esse id aliquip pariatur cupidatat id duis minim incididunt ea ea. Anim ut duis sunt nisi. Culpa cillum sit voluptate voluptate eiusmod dolor. Enim nisi Lorem ipsum irure est excepteur voluptate eu in enim nisi. Nostrud ipsum Lorem anim sint labore consequat do.
|
||||
|
||||
```csharp
|
||||
using System;
|
||||
namespace ConsoleApplication1
|
||||
{
|
||||
class Program
|
||||
{
|
||||
static void Main(string[] args)
|
||||
{
|
||||
for (double d = 0; d < 6.0; d += 0.5)
|
||||
{
|
||||
Console.WriteLine("The cosine of {0} = {1}", d, Math.Cos(d));
|
||||
Console.WriteLine("Calculated cosine of {0} = {1}", d, cos(d));
|
||||
Console.WriteLine();
|
||||
}
|
||||
Console.ReadKey();
|
||||
}
|
||||
|
||||
static double cos(double x)
|
||||
{
|
||||
double p = x * x;
|
||||
double q = p * p;
|
||||
return 1.0 - p / 2 + q / 24 - p * q / 720 + q * q / 40320
|
||||
- p * q * q / 3628800;
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
|
@ -0,0 +1,10 @@
|
|||
+++
|
||||
title = 'Post 2'
|
||||
date = 2023-02-15T10:00:00-07:00
|
||||
draft = false
|
||||
tags = ['red','green']
|
||||
+++
|
||||
|
||||
Anim eiusmod irure incididunt sint cupidatat. Incididunt irure irure irure nisi ipsum do ut quis fugiat consectetur proident cupidatat incididunt cillum. Dolore voluptate occaecat qui mollit laborum ullamco et. Ipsum laboris officia anim laboris culpa eiusmod ex magna ex cupidatat anim ipsum aute. Mollit aliquip occaecat qui sunt velit ut cupidatat reprehenderit enim sunt laborum. Velit veniam in officia nulla adipisicing ut duis officia.
|
||||
|
||||
Exercitation voluptate irure in irure tempor mollit Lorem nostrud ad officia. Velit id fugiat occaecat do tempor. Sit officia Lorem aliquip eu deserunt consectetur. Aute proident deserunt in nulla aliquip dolore ipsum Lorem ut cupidatat consectetur sit sint laborum. Esse cupidatat sit sint sunt tempor exercitation deserunt. Labore dolor duis laborum est do nisi ut veniam dolor et nostrud nostrud.
|
Binary file not shown.
After Width: | Height: | Size: 19 KiB |
|
@ -0,0 +1,12 @@
|
|||
+++
|
||||
title = 'Post 3'
|
||||
date = 2023-03-15T11:00:00-07:00
|
||||
draft = false
|
||||
tags = ['red','green','blue']
|
||||
+++
|
||||
|
||||
Occaecat aliqua consequat laborum ut ex aute aliqua culpa quis irure esse magna dolore quis. Proident fugiat labore eu laboris officia Lorem enim. Ipsum occaecat cillum ut tempor id sint aliqua incididunt nisi incididunt reprehenderit. Voluptate ad minim sint est aute aliquip esse occaecat tempor officia qui sunt. Aute ex ipsum id ut in est velit est laborum incididunt. Aliqua qui id do esse sunt eiusmod id deserunt eu nostrud aute sit ipsum. Deserunt esse cillum Lorem non magna adipisicing mollit amet consequat.
|
||||
|
||||
![Bryce Canyon National Park](bryce-canyon.jpg)
|
||||
|
||||
Sit excepteur do velit veniam mollit in nostrud laboris incididunt ea. Amet eu cillum ut reprehenderit culpa aliquip labore laborum amet sit sit duis. Laborum id proident nostrud dolore laborum reprehenderit quis mollit nulla amet veniam officia id id. Aliquip in deserunt qui magna duis qui pariatur officia sunt deserunt.
|
|
@ -0,0 +1,138 @@
|
|||
baseURL = 'https://example.org/'
|
||||
languageCode = 'en-us'
|
||||
title = 'My New Hugo Site'
|
||||
enableEmoji = true
|
||||
|
||||
[permalinks]
|
||||
post = "/:filename/"
|
||||
|
||||
[params]
|
||||
description = "FHA's Tech-Notes to not forget what took me ages to troubleshoot !"
|
||||
includeBootstrapJs = true
|
||||
search = true
|
||||
search_minify = true
|
||||
contentBackgroundColor = "#fff"
|
||||
contentTextColor = "#212529"
|
||||
contentLinkColor = "#5e807fff"
|
||||
contentLinkHoverColor = "#5e807fff"
|
||||
navbarBackgroundColor = "#2a2d34ff"
|
||||
navbarForegroundColor = "#5e807fff"
|
||||
navbarLinkColor = "rgba(236, 200, 175, 0.75)"
|
||||
navbarLinkHoverColor = "rgba(206, 121, 107, 1)"
|
||||
wrapperMaxWidth = "1280px"
|
||||
customDateFormat = "Jan 2, 2006"
|
||||
customCodeStyle = true
|
||||
customBlockquoteStyle = true
|
||||
showPostSummary = false
|
||||
|
||||
[menu]
|
||||
[[menu.nav]]
|
||||
name = 'Home'
|
||||
pageRef = '/'
|
||||
weight = 10
|
||||
[[menu.nav]]
|
||||
name = 'Posts'
|
||||
pageRef = '/posts'
|
||||
weight = 20
|
||||
[[menu.nav]]
|
||||
name = 'Tags'
|
||||
pageRef = '/tags'
|
||||
weight = 30
|
||||
[[menu.nav]]
|
||||
name = 'About'
|
||||
pageRef = '/about'
|
||||
weight = 100
|
||||
[[menu.nav]]
|
||||
identifier = "pAbout"
|
||||
name = "About"
|
||||
url = "/about"
|
||||
parent = "About"
|
||||
weight = 10
|
||||
[[menu.nav]]
|
||||
identifier = "pCv"
|
||||
name = "CV"
|
||||
url = "/cv"
|
||||
parent = "About"
|
||||
weight = 20
|
||||
|
||||
|
||||
[module]
|
||||
[module.hugoVersion]
|
||||
extended = false
|
||||
min = "0.116.0"
|
||||
|
||||
[markup]
|
||||
[markup.goldmark]
|
||||
duplicateResourceFiles = false
|
||||
[markup.goldmark.extensions]
|
||||
definitionList = true
|
||||
footnote = true
|
||||
linkify = true
|
||||
linkifyProtocol = 'https'
|
||||
strikethrough = true
|
||||
table = true
|
||||
taskList = true
|
||||
[markup.goldmark.extensions.cjk]
|
||||
eastAsianLineBreaks = false
|
||||
eastAsianLineBreaksStyle = 'simple'
|
||||
enable = false
|
||||
escapedSpace = false
|
||||
[markup.goldmark.extensions.extras]
|
||||
[markup.goldmark.extensions.extras.delete]
|
||||
enable = false
|
||||
[markup.goldmark.extensions.extras.insert]
|
||||
enable = false
|
||||
[markup.goldmark.extensions.extras.mark]
|
||||
enable = false
|
||||
[markup.goldmark.extensions.extras.subscript]
|
||||
enable = false
|
||||
[markup.goldmark.extensions.extras.superscript]
|
||||
enable = false
|
||||
[markup.goldmark.extensions.passthrough]
|
||||
enable = false
|
||||
[markup.goldmark.extensions.passthrough.delimiters]
|
||||
block = []
|
||||
inline = []
|
||||
[markup.goldmark.extensions.typographer]
|
||||
apostrophe = '’'
|
||||
disable = false
|
||||
ellipsis = '…'
|
||||
emDash = '—'
|
||||
enDash = '–'
|
||||
leftAngleQuote = '«'
|
||||
leftDoubleQuote = '“'
|
||||
leftSingleQuote = '‘'
|
||||
rightAngleQuote = '»'
|
||||
rightDoubleQuote = '”'
|
||||
rightSingleQuote = '’'
|
||||
[markup.goldmark.parser]
|
||||
autoHeadingID = true
|
||||
autoHeadingIDType = 'github'
|
||||
wrapStandAloneImageWithinParagraph = true
|
||||
[markup.goldmark.parser.attribute]
|
||||
block = false
|
||||
title = true
|
||||
[markup.goldmark.renderHooks]
|
||||
[markup.goldmark.renderHooks.image]
|
||||
enableDefault = false
|
||||
[markup.goldmark.renderHooks.link]
|
||||
enableDefault = false
|
||||
[markup.goldmark.renderer]
|
||||
hardWraps = false
|
||||
unsafe = false
|
||||
xhtml = false
|
||||
[markup.highlight]
|
||||
anchorLineNos = false
|
||||
codeFences = true
|
||||
guessSyntax = false
|
||||
lineAnchors = ' '
|
||||
lineNoStart = 1
|
||||
lineNos=true
|
||||
lineNumbersInTable=true
|
||||
noClasses = false
|
||||
noHl = false
|
||||
style = 'monokai'
|
||||
tabWidth = 4
|
||||
|
||||
[outputs]
|
||||
home = ["HTML", "RSS", "JSON"]
|
|
@ -0,0 +1,4 @@
|
|||
<div class="mermaid">
|
||||
{{- .Inner | safeHTML }}
|
||||
</div>
|
||||
{{ .Page.Store.Set "hasMermaid" true }}
|
|
@ -0,0 +1,5 @@
|
|||
<a href="{{ .Destination | safeURL }}"
|
||||
{{ with .Title}} title="{{ . }}" {{ end }}
|
||||
{{ if strings.HasPrefix .Destination "http" }} target="_blank" rel="noopener noreferrer" {{ end }}>
|
||||
{{ .Text | safeHTML }}
|
||||
</a>
|
|
@ -0,0 +1,43 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
{{ partial "head.html" . }}
|
||||
<div class="container-xxl">
|
||||
|
||||
<body class="mb-5">
|
||||
{{ partial "nav.html" . }}
|
||||
<div class="container">
|
||||
{{ if or
|
||||
(eq .Page.Section "cv" )
|
||||
}}
|
||||
<div class="row mt-3">
|
||||
{{ block "main" . }}{{ end }}
|
||||
</div>
|
||||
{{ else }}
|
||||
<div class="container mt-2">
|
||||
<div class="row">
|
||||
<div class="col-lg-9 mt-5">
|
||||
<article>
|
||||
{{ block "main" . }}{{ end }}
|
||||
</article>
|
||||
</div>
|
||||
<div class="col-lg-3 ">
|
||||
<div class="row mt-5">
|
||||
{{ partial "cloudtag.html" . }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
{{ partial "footer.html" . }}
|
||||
{{ if .Page.Store.Get "hasMermaid" }}
|
||||
<script src="/js/mermaid.min.js"></script>
|
||||
<script>
|
||||
mermaid.initialize({ startOnLoad: true });
|
||||
</script>
|
||||
{{ end }}
|
||||
{{ partial "cookie-consent.html" . }}
|
||||
</body>
|
||||
|
||||
|
||||
</html>
|
|
@ -0,0 +1,7 @@
|
|||
{{ define "main" }}
|
||||
{{ .Content }}
|
||||
{{ range site.RegularPages }}
|
||||
<h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
|
||||
{{ .Summary }}
|
||||
{{ end }}
|
||||
{{ end }}
|
|
@ -0,0 +1,21 @@
|
|||
{{- define "main" -}}
|
||||
|
||||
<h1>{{ .Title }}</h1>
|
||||
|
||||
{{ $pages := .Pages }}
|
||||
{{ range $pages.ByPublishDate.Reverse }}
|
||||
<p>
|
||||
<a href="{{ .Permalink }}">{{ .Title | markdownify }}</a>
|
||||
{{ $customDateFormat := "January 2, 2006" }}
|
||||
{{ with .Site.Params.customDateFormat }}{{ $customDateFormat = . }}{{ end }}
|
||||
<br>
|
||||
<small class="text-secondary">{{ .PublishDate.Format $customDateFormat }}</small>
|
||||
{{ partialCached "tags" . }}
|
||||
{{ if eq .Site.Params.showPostSummary true }}
|
||||
<br>
|
||||
{{ .Summary }}
|
||||
{{ end }}
|
||||
</p>
|
||||
{{ end }}
|
||||
|
||||
{{- end -}}
|
|
@ -0,0 +1,10 @@
|
|||
{{ define "main" }}
|
||||
<h1>{{ .Title }}</h1>
|
||||
|
||||
{{ $dateMachine := .Date | time.Format "2006-01-02T15:04:05-07:00" }}
|
||||
{{ $dateHuman := .Date | time.Format ":date_long" }}
|
||||
<h4><time datetime="{{ $dateMachine }}">{{ $dateHuman }}</time></h4>
|
||||
|
||||
{{ .Content }}
|
||||
{{ partial "terms.html" (dict "taxonomy" "tags" "page" .) }}
|
||||
{{ end }}
|
|
@ -0,0 +1,10 @@
|
|||
{{- define "main" -}}
|
||||
|
||||
<h1>{{ .Title }}</h1>
|
||||
<div class="d-flex flex-wrap flex-row">
|
||||
{{ range .Data.Terms.Alphabetical }}
|
||||
<div class="w-25 m-1"><a href="{{ .Page.RelPermalink }}"><code>{{ .Page.Title }}</code></a> {{ .Count }}</div>
|
||||
{{ end }}
|
||||
</div>
|
||||
|
||||
{{- end -}}
|
|
@ -0,0 +1,19 @@
|
|||
{{- $post := slice -}}
|
||||
|
||||
{{- range where site.RegularPages.ByDate.Reverse "Section" "==" "posts" -}}
|
||||
{{- $item := dict
|
||||
"Title" .Title
|
||||
"PlainContent" .Plain
|
||||
"RelPermalink" .RelPermalink
|
||||
-}}
|
||||
{{- $post = $post | append $item -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- $object := dict "post" $post -}}
|
||||
|
||||
{{- if (eq site.Params.search_minify true) -}}
|
||||
{{- $object | jsonify -}}
|
||||
{{- else -}}
|
||||
{{- $jsonifyOptions := dict "indent" " " -}}
|
||||
{{- $object | jsonify $jsonifyOptions -}}
|
||||
{{- end -}}
|
|
@ -0,0 +1,6 @@
|
|||
{{ if eq .Site.Params.includeBootstrapJs true}}
|
||||
{{ $jqueryJs := "js/jquery-3.7.1.min.js" -}}
|
||||
<script src="{{ $jqueryJs | absURL }}"></script>
|
||||
{{ $bootstrapJs := "js/bootstrap.bundle.min.js" -}}
|
||||
<script src="{{ $bootstrapJs | absURL }}"></script>
|
||||
{{ end }}
|
|
@ -0,0 +1,31 @@
|
|||
{{ if not (eq (len $.Site.Taxonomies.tags) 0) }}
|
||||
{{ $fontUnit := "rem" }}
|
||||
{{ $largestFontSize := 2.0 }}
|
||||
{{ $largestFontSize := 2.5 }}
|
||||
{{ $smallestFontSize := 0.8 }}
|
||||
{{ $fontSpread := sub $largestFontSize $smallestFontSize }}
|
||||
{{ $max := add (len (index $.Site.Taxonomies.tags.ByCount 0).Pages) 1 }}
|
||||
{{ $min := len (index $.Site.Taxonomies.tags.ByCount.Reverse 0).Pages }}
|
||||
{{ $spread := sub $max $min }}
|
||||
{{ $fontStep := div $fontSpread $spread }}
|
||||
|
||||
|
||||
<div id="tag-cloud col" class="card" style="margin:0;padding:0;">
|
||||
<div class="card-header card-titl text-bg-secondary mb-3">
|
||||
<h3>Tags</h3>
|
||||
</div>
|
||||
<div class="card-body card-text" style="margin:0;padding:0.4em;text-align: center;">
|
||||
{{ range $name, $taxonomy := $.Site.Taxonomies.tags }}
|
||||
{{ $currentTagCount := len $taxonomy.Pages }}
|
||||
{{ $currentFontSize := (add $smallestFontSize (mul (sub $currentTagCount $min) $fontStep) ) }}
|
||||
{{ $count := len $taxonomy.Pages }}
|
||||
{{ $weigth := div (sub (math.Log $count) (math.Log $min)) (sub (math.Log $max) (math.Log $min)) }}
|
||||
{{ $currentFontSize := (add $smallestFontSize (mul (sub $largestFontSize $smallestFontSize) $weigth) ) }}
|
||||
<!--Current font size: {{$currentFontSize}}-->
|
||||
<a href="{{ "tags/" | relLangURL }}{{ $name | urlize }}"
|
||||
style="font-size:{{$currentFontSize}}{{$fontUnit}}">{{ $name }}</a>
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{ end }}
|
|
@ -0,0 +1,18 @@
|
|||
{{ if eq .Site.Params.cookieConsent true }}
|
||||
<link rel="stylesheet" type="text/css" href="//cdnjs.cloudflare.com/ajax/libs/cookieconsent2/3.1.0/cookieconsent.min.css" />
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/cookieconsent2/3.1.0/cookieconsent.min.js"></script>
|
||||
<script>
|
||||
window.addEventListener("load", function(){
|
||||
window.cookieconsent.initialise({
|
||||
"palette": {
|
||||
"popup": {
|
||||
"background": "#216942",
|
||||
"text": "#b2d192"
|
||||
},
|
||||
"button": {
|
||||
"background": "#afed71"
|
||||
}
|
||||
}
|
||||
})});
|
||||
</script>
|
||||
{{ end }}
|
|
@ -0,0 +1,42 @@
|
|||
<div class="container-xxl">
|
||||
<footer>
|
||||
<nav class="navbar fixed-bottom navbar-expand-lg bg-dark mt-auto py-3">
|
||||
<div class="text-muted container-xl">Last Update : {{ dateFormat "2006-01-02 15:04 MST" now.Local }}</div>
|
||||
</nav>
|
||||
</footer>
|
||||
</div>
|
||||
{{ partialCached "bootstrap-js.html" . }}
|
||||
{{ if (findRE "<code" .Content 1) }} {{ $jsCopy :=resources.Get "copycode.js" | minify }}
|
||||
<script src="{{ $jsCopy.RelPermalink }}"></script>
|
||||
{{ end }}
|
||||
|
||||
{{ if site.Params.search }}
|
||||
{{ $searchJs := resources.Get "search.js"
|
||||
| resources.ExecuteAsTemplate "search.js" .
|
||||
| fingerprint
|
||||
}}
|
||||
<script src="{{ $searchJs.RelPermalink }}"></script>
|
||||
<script>
|
||||
$(document).ready(function () {
|
||||
|
||||
// Show the Modal on load
|
||||
$("#searchBtn").click(function () {
|
||||
$("#searchModal").modal("show");
|
||||
});
|
||||
|
||||
// Hide the Modal
|
||||
$("#hideBtn").click(function () {
|
||||
$("#searchModal").modal("hide");
|
||||
});
|
||||
// Show the Modal on pressing enter
|
||||
$("#search").keypress(function (event) {
|
||||
var keycode = (event.keyCode ? event.keyCode : event.which);
|
||||
if (keycode == '13') {
|
||||
$("#searchBtn").click();
|
||||
event.preventDefault();
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
{{ end }}
|
||||
{{ partial "google-analytics-async.html" . }}
|
|
@ -0,0 +1,10 @@
|
|||
{{ if not hugo.IsServer }}
|
||||
{{ with .Site.Params.googleAnalytics }}
|
||||
<script>
|
||||
window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
|
||||
ga('create', '{{ . }}', 'auto');
|
||||
ga('send', 'pageview');
|
||||
</script>
|
||||
<script async src='https://www.google-analytics.com/analytics.js'></script>
|
||||
{{ end }}
|
||||
{{ end }}
|
|
@ -0,0 +1,13 @@
|
|||
{{ if not hugo.IsServer }}
|
||||
{{ with .Site.Params.googleAnalytics }}
|
||||
<script>
|
||||
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
||||
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
||||
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
||||
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
|
||||
|
||||
ga('create', '{{ . }}', 'auto');
|
||||
ga('send', 'pageview');
|
||||
</script>
|
||||
{{ end }}
|
||||
{{ end }}
|
|
@ -0,0 +1,45 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
|
||||
{{ hugo.Generator }}
|
||||
|
||||
{{ with .Site.Params.description }}
|
||||
<meta name="description" content="{{ . }}">
|
||||
{{ end }}
|
||||
|
||||
{{ $appleTouchIcon := "apple-touch-icon.png" }}
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="{{ $appleTouchIcon | absURL }}">
|
||||
|
||||
{{ $favicon32x32 := "favicon-32x32.png" }}
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="{{ $favicon32x32 | absURL }}">
|
||||
|
||||
{{ $favicon16x16 := "favicon-16x16.png" }}
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="{{ $favicon16x16 | absURL }}">
|
||||
|
||||
{{ $siteWebmanifest := "site.webmanifest" }}
|
||||
<link rel="manifest" href="{{ $siteWebmanifest | absURL }}">
|
||||
|
||||
{{ $safariPinnedTab := "safari-pinned-tab.svg" }}
|
||||
<link rel="mask-icon" href="{{ $safariPinnedTab | absURL }}" color="{{ .Site.Params.faviconSafariPinnedTabColor }}">
|
||||
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.7.2/font/bootstrap-icons.css">
|
||||
|
||||
<meta name="msapplication-TileColor" content="{{ .Site.Params.faviconMsApplicationTileColor }}">
|
||||
|
||||
<meta name="theme-color" content="{{ .Site.Params.faviconThemeColor }}">
|
||||
|
||||
{{ if (findRE "<code" .Content 1) }}
|
||||
{{ $syntax := resources.Get "chroma.css" | minify }}
|
||||
<link href="{{ $syntax.RelPermalink }}" rel="stylesheet">
|
||||
|
||||
{{ $copyCss := resources.Get "copycodebtn.css" | minify }}
|
||||
<link href="{{ $copyCss.RelPermalink }}" rel="stylesheet">
|
||||
{{ end }}
|
||||
|
||||
{{ $bootstrapCss := "css/bootstrap.min.css" }}
|
||||
<link rel="stylesheet" href="{{ $bootstrapCss | absURL }}" />
|
||||
|
||||
{{ partial "style.html" . }}
|
||||
</head>
|
||||
|
|
@ -0,0 +1,79 @@
|
|||
<nav class="navbar fixed-top navbar-expand-lg bg-dark mt-auto py-3">
|
||||
<div class="container" style="color: #5e807fff">
|
||||
<a class="navbar-brand" style="color: #5e807fff" href="/">{{ .Site.Title}}</a>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarTogglerDemo03"
|
||||
aria-controls="navbarTogglerDemo03" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarTogglerDemo03">
|
||||
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
|
||||
{{- $currentNode := . }}
|
||||
{{- range .Site.Menus.nav }}
|
||||
{{- if .Name }}
|
||||
{{- if .HasChildren }}
|
||||
<li class="nav_item dropdown">
|
||||
<a class="nav-link dropdown-toggle" style="color: #5e807fff" href="#" id="dropdown08" data-bs-toggle="dropdown" aria-expanded="false">{{ .Name }}</a>
|
||||
<ul class="dropdown-menu" aria-labelledby="dropdown08">
|
||||
{{ range .Children }}
|
||||
<li><a class="dropdown-item {{ if or ($currentNode.IsMenuCurrent "nav" .) ($currentNode.HasMenuCurrent "nav" .)}} active{{ end }}" aria-current="page" href="{{ .URL }}" {{ if ( and ( strings.HasPrefix .URL "http") ( strings.Contains .URL "globe")) }} target="_blank" rel="noopener noreferrer" {{ end }}>{{ .Name }}</a></li>
|
||||
{{- end }}
|
||||
</ul>
|
||||
</li>
|
||||
{{- else }}
|
||||
<li class="nav-item">
|
||||
<a class="nav-link {{ if or ($currentNode.IsMenuCurrent "nav" .) ($currentNode.HasMenuCurrent "nav" .)}} active{{ end }}" aria-current="page" style="color: #5e807fff" href="{{ .URL }}">{{ .Name }}</a>
|
||||
</li>
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
</ul>
|
||||
</div>
|
||||
<div class="bd-search" id="docsearch" data-bd-docs-version="5.2" style="margin-left: auto;">
|
||||
<form class="d-flex" role="search">
|
||||
<input id="search" class="form-control me-2" type="text" placeholder="press '/' to search"
|
||||
aria-label="Search" >
|
||||
<button id="searchBtn" class="btn btn-outline-secondary" type="button" data-bs-toggle="modal"
|
||||
style="margin-left: 1em;" data-bs-target="#searchModal">Search</button>
|
||||
<div class="form-check d-none">
|
||||
<input class="form-check-input" type="checkbox" value="" id="enable_search" checked>
|
||||
<label class="form-check-label" for="enable_search">Search</label>
|
||||
</div>
|
||||
<div class="form-check d-none">
|
||||
<input class="form-check-input" type="checkbox" value="" id="regex_mode" >
|
||||
<label class="form-check-label" for="regex_mode">Regex</label>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</nav>
|
||||
<nav class="navbar navbar-expand-lg navbar-dark bg-dark px-3 py-1 d-flex flex-row mt-0">
|
||||
<ol class="breadcrumb m-0 text-secondary">
|
||||
{{- range .Ancestors.Reverse }}
|
||||
<li class="breadcrumb-item"><a class="text-decoration-none text-secondary" href="{{ .RelPermalink }}">{{ .Title }}</a> >> </li>
|
||||
<span class="" aria-hidden="true"> </span>
|
||||
{{- end }}
|
||||
<li class="breadcrumb-item active "><a class="text-decoration-none text-secondary" href="{{ .RelPermalink }}">{{ .Title }}</a></li>
|
||||
</ol></div>
|
||||
</nav>
|
||||
|
||||
|
||||
<!-- Modal -->
|
||||
<div class="modal fade" id="searchModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1"
|
||||
aria-labelledby="staticBackdropLabel" aria-hidden="true">
|
||||
<div class="modal-dialog modal-lg">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="staticBackdropLabel">Search Result</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p id="count">
|
||||
results :
|
||||
</p>
|
||||
<ul id="listOfUrl" class="list-group" />
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button id="hideBtn" type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,195 @@
|
|||
<style>
|
||||
body {
|
||||
min-width: 300px;
|
||||
min-height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.custom-navbar,
|
||||
.custom-footer {
|
||||
margin-bottom: 1em;
|
||||
height: 60px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.custom-navbar a {
|
||||
display: inline-block;
|
||||
padding: 18px 0;
|
||||
margin-right: 1em;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.custom-navbar a:hover,
|
||||
.custom-navbar a:focus {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
@media print {
|
||||
.custom-navbar {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
table {width: 80%;}
|
||||
|
||||
tr {
|
||||
padding-left: 5px;
|
||||
padding-right: 5px;}
|
||||
tr:nth-child(even){background-color: #f2f2f2;}
|
||||
|
||||
th {
|
||||
padding-top: 12px;
|
||||
padding-bottom: 12px;
|
||||
padding-left: 5px;
|
||||
padding-right: 5px;
|
||||
text-align: middle;
|
||||
background-color: #6c757d;
|
||||
color: white;
|
||||
}
|
||||
|
||||
article {
|
||||
padding-bottom: 1em;
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
{{ with .Site.Params.contentBackgroundColor }}
|
||||
body {
|
||||
background-color: {{ . | safeCSS }};
|
||||
}
|
||||
{{ else }}
|
||||
body {
|
||||
background-color: #fff;
|
||||
}
|
||||
{{ end }}
|
||||
|
||||
{{ with .Site.Params.contentTextColor }}
|
||||
body {
|
||||
color: {{ . | safeCSS }};
|
||||
}
|
||||
{{ else }}
|
||||
body {
|
||||
color: #212529;
|
||||
}
|
||||
{{ end }}
|
||||
|
||||
{{ with .Site.Params.contentLinkColor }}
|
||||
a {
|
||||
color: {{ . | safeCSS }};
|
||||
}
|
||||
{{ else }}
|
||||
a {
|
||||
color: #007bff;
|
||||
}
|
||||
{{ end }}
|
||||
|
||||
{{ with .Site.Params.contentLinkHoverColor }}
|
||||
a:hover,
|
||||
a:focus {
|
||||
color: {{ . | safeCSS }};
|
||||
}
|
||||
{{ else }}
|
||||
a:hover,
|
||||
a:focus {
|
||||
color: #0056b3;
|
||||
}
|
||||
{{ end }}
|
||||
|
||||
{{ with .Site.Params.navbarBackgroundColor }}
|
||||
.navbar,
|
||||
.footer {
|
||||
background-color: {{ . | safeCSS }};
|
||||
}
|
||||
{{ else }}
|
||||
.navbar,
|
||||
.footer {
|
||||
background-color: #212529;
|
||||
}
|
||||
{{ end }}
|
||||
|
||||
{{ with .Site.Params.navbarForegroundColor }}
|
||||
:root {
|
||||
--bs-navbar-color: {{ . | safeCSS }};
|
||||
}
|
||||
{{ else }}
|
||||
:root {
|
||||
--bs-navbar-color: #5e807fff;
|
||||
}
|
||||
{{ end }}
|
||||
|
||||
{{ with .Site.Params.navbarLinkColor }}
|
||||
.custom-navbar a {
|
||||
color: {{ . | safeCSS }};
|
||||
}
|
||||
{{ else }}
|
||||
.custom-navbar a {
|
||||
color: rgba(255,255,255,.75);
|
||||
}
|
||||
{{ end }}
|
||||
|
||||
{{ with .Site.Params.navbarLinkHoverColor }}
|
||||
.custom-navbar a:hover,
|
||||
.custom-navbar a:focus {
|
||||
color: {{ . | safeCSS }};
|
||||
}
|
||||
{{ else }}
|
||||
.custom-navbar a:hover,
|
||||
.custom-navbar a:focus {
|
||||
color: rgba(255,255,255,1);
|
||||
}
|
||||
{{ end }}
|
||||
|
||||
{{ with .Site.Params.wrapperMaxWidth }}
|
||||
.container {
|
||||
max-width: {{ . | safeCSS }};
|
||||
}
|
||||
{{ else }}
|
||||
.container {
|
||||
max-width: 800px;
|
||||
}
|
||||
{{ end }}
|
||||
|
||||
{{ if eq .Site.Params.customCodeStyle true }}
|
||||
pre {
|
||||
display: block;
|
||||
padding: 9.5px;
|
||||
word-break: break-all;
|
||||
word-wrap: break-word;
|
||||
background-color: #f5f5f5;
|
||||
border: 1px solid #ccc;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
pre code {
|
||||
padding: 0;
|
||||
font-size: inherit;
|
||||
color: inherit;
|
||||
white-space: pre-wrap;
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
code {
|
||||
padding: 2px 4px;
|
||||
color: inherit;
|
||||
background-color: #f5f5f5;
|
||||
border: 1px solid #ccc;
|
||||
border-radius: 4px;
|
||||
font-size: .9em;
|
||||
}
|
||||
{{ end }}
|
||||
|
||||
{{ if eq .Site.Params.customBlockquoteStyle true }}
|
||||
blockquote,
|
||||
.blockquote {
|
||||
padding: 10px 20px;
|
||||
margin: 0 0 20px;
|
||||
font-size: 1em;
|
||||
border-left: 5px solid #6c757d;
|
||||
}
|
||||
{{ end }}
|
||||
</style>
|
|
@ -0,0 +1,4 @@
|
|||
{{ range .Params.tags }}
|
||||
{{ $href := print (absURL "tags/") (urlize .) }}
|
||||
<small><code><a href="{{ $href }}" class="text-decoration-none">{{ . }}</a></code></small>
|
||||
{{ end }}
|
|
@ -0,0 +1,21 @@
|
|||
{{- /*
|
||||
For a given taxonomy, renders a list of terms assigned to the page.
|
||||
|
||||
@context {page} page The current page.
|
||||
@context {string} taxonomy The taxonomy.
|
||||
|
||||
@example: {{ partial "terms.html" (dict "taxonomy" "tags" "page" .) }}
|
||||
*/}}
|
||||
|
||||
{{- $page := .page }}
|
||||
{{- $taxonomy := .taxonomy }}
|
||||
|
||||
{{- with $page.GetTerms $taxonomy }}
|
||||
{{- $label := (index . 0).Parent.LinkTitle }}
|
||||
<div>
|
||||
<div>{{ $label }}:</div>
|
||||
{{- range . }}
|
||||
<small><code><a href="{{ .RelPermalink }}" class="text-decoration-none">{{ .LinkTitle }}</a></code></small>
|
||||
{{- end }}
|
||||
</div>
|
||||
{{- end }}
|
|
@ -0,0 +1,111 @@
|
|||
{{- define "main" -}}
|
||||
<div class=" d-flex flex-column col-lg-4 min-vh-100" style="box-shadow: 0 4px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); background-color: #4472C4;color: white;">
|
||||
<img class="portait my-5 mx-auto " style="border-radius: 50%; max-width: 200px; display: block;box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 4px 4px rgba(0,0,0,0.24); border:6px solid white;" alt="Portrait" src="/img/avatar.jpeg" />
|
||||
<a class="text-decoration-none text-white" href="https://www.linkedin.com/in/xxx/"><i class="bi bi-linkedin"></i> John Doe</a>
|
||||
<p></p>
|
||||
<h3>About me</h3>
|
||||
<p>Donec et eros nunc. Etiam laoreet facilisis lacus, et dictum neque malesuada sit amet. Vestibulum vitae viverra lacus. Etiam risus dolor, placerat quis enim eget, dictum placerat nisi. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Morbi eu lacinia mauris. Pellentesque faucibus vestibulum turpis quis pellentesque.</p>
|
||||
<p>Suspendisse varius quis sapien sed tincidunt. Cras tempor metus eget tellus varius rutrum. Phasellus et sodales tellus.</p>
|
||||
<p>Aenean sem risus, tincidunt vitae dapibus quis, iaculis et est.</p>
|
||||
<br>
|
||||
<h3>Competences</h3>
|
||||
<ul>
|
||||
<li>Microsoft Biztalk</li>
|
||||
<li>.Net, C#, WCF</li>
|
||||
<li>Microsoft SQL</li>
|
||||
<li>SAP Cloud Integration</li>
|
||||
<li>XML, XSLT, XPath, XQuery</li>
|
||||
<li>Git, Jira</li>
|
||||
</ul>
|
||||
<br>
|
||||
<h3>Languages</h3>
|
||||
<ul>
|
||||
<li>French, mother tongue</li>
|
||||
<li>English, Professional</li>
|
||||
</ul>
|
||||
<br>
|
||||
<h3>Center of Interest</h3>
|
||||
<ul>
|
||||
<li>Friends</li>
|
||||
<li>Travel</li>
|
||||
<li>Rugby</li>
|
||||
<li>Aviation and Planes</li>
|
||||
<li>Spatial Discoveries</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-8 mx-0 px-0 ">
|
||||
<div class="pt-5 pb-3 px-5" style = "background-color: #e6e6e4;">
|
||||
<h2 class="text-black">John <span class="text-uppercase" style="color:#4472C4">Doe</span></h2>
|
||||
<p>My Title / Profession</p>
|
||||
<ul class="list-unstyled">
|
||||
<li><i class="bi bi-envelope"></i> <a href="mailto:john.doe@somegmail.com">john.doe@somegmail.com</a></li>
|
||||
<li><i class="bi bi-telephone"></i> +1 23 456 7890</li>
|
||||
<li><i class="bi bi-pin-map-fill"></i> some address</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="d-flex flex-column container px-5 py-4 shadow-sm min-vh-100">
|
||||
<h3>Professional Experiences</h3>
|
||||
<p>
|
||||
<strong>Since Month Year : Company (Country)</strong>
|
||||
<br>
|
||||
Position / title
|
||||
</p>
|
||||
<ul class="experience-list">
|
||||
<li>Responsabilities</li>
|
||||
<li>Activity 1</li>
|
||||
<li>Activity 2</li>
|
||||
<li>Activity 3</li>
|
||||
<li>Activity 4</li>
|
||||
<li>Activity 5</li>
|
||||
<li>Technologies : Tech1. Tech2, Tech3</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
<strong>Month Year <i class="bi bi-arrow-right"></i> Month Year : Company (Country)</strong>
|
||||
<br>
|
||||
Position / Title
|
||||
</p>
|
||||
<ul class="experience-list">
|
||||
<li>Responsabilities</li>
|
||||
<li>Activity 1</li>
|
||||
<li>Activity 2</li>
|
||||
<li>Activity 3</li>
|
||||
<li>Activity 4</li>
|
||||
<li>Activity 5</li>
|
||||
<li>Technologies : Tech1. Tech2, Tech3</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
<strong>Month Year <i class="bi bi-arrow-right"></i> Month Year : Company (Country)</strong>
|
||||
<br>
|
||||
Position / Title
|
||||
</p>
|
||||
<ul class="experience-list">
|
||||
<li>Responsabilities</li>
|
||||
<li>Activity 1</li>
|
||||
<li>Activity 2</li>
|
||||
<li>Activity 3</li>
|
||||
<li>Activity 4</li>
|
||||
<li>Activity 5</li>
|
||||
<li>Technologies : Tech1. Tech2, Tech3</li>
|
||||
</ul>
|
||||
|
||||
<h3>Studies and formations</h3>
|
||||
|
||||
<p>
|
||||
<strong>Year <i class="bi bi-arrow-right"></i> Year</strong>
|
||||
<br>
|
||||
<em>Graduation, Diploma ...</em>, University, City, Country
|
||||
</p>
|
||||
<p>
|
||||
<strong>Year <i class="bi bi-arrow-right"></i> Year</strong>
|
||||
<br>
|
||||
<em>Graduation, Diploma ...</em>, University, City, Country
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
{{- end -}}
|
File diff suppressed because one or more lines are too long
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
Binary file not shown.
After Width: | Height: | Size: 179 KiB |
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,19 @@
|
|||
name = 'Fha Theme'
|
||||
license = 'MIT'
|
||||
licenselink = 'https://github.com/owner/repo/LICENSE'
|
||||
description = 'A simple theme used for blogging, portfolio and documenting. Based on Bootstrap. '
|
||||
|
||||
# The home page of the theme, where the source can be found
|
||||
homepage = 'https://fhanotes.fhahome.dev/hugo-theme'
|
||||
|
||||
# If you have a running demo of the theme
|
||||
demosite = 'https://owner.github.io/repo'
|
||||
|
||||
# Taxonomy terms
|
||||
tags = ['blog', 'portfolio', 'search']
|
||||
features = ['Mermaid', 'Search', 'Bootstrap', 'CV', 'Portfolio', 'Photo']
|
||||
|
||||
# If the theme has a single author
|
||||
[author]
|
||||
name = 'Hautecoeur Frédéric'
|
||||
homepage = 'https://fhanotes.fhahome.dev/'
|
Loading…
Reference in New Issue