Compare commits

...

40 Commits
v0.1 ... v0.4.5

Author SHA1 Message Date
Mark Dumay
c996f7b902 Merge pull request #39 from markdumay/develop
Update dependencies
2022-10-20 04:49:29 +02:00
mark
6d1af55263 Update dependencies 2022-10-20 04:45:43 +02:00
Mark Dumay
176d14fe8a Merge pull request #38 from markdumay/develop
Upgrade dependencies
2022-10-01 13:06:53 +02:00
Mark Dumay
294526883d Update lint.yml
Drop support for Node 12.x, add Node 18.x
2022-10-01 13:02:40 +02:00
mark
4b9bf2c254 Fix lint issue 2022-10-01 10:25:46 +02:00
mark
954154c2a5 Upgrade dependencies 2022-10-01 10:21:17 +02:00
Mark Dumay
c8f33170da Merge pull request #37 from markdumay/develop
Develop
2022-07-22 11:09:00 +02:00
mark
0aa9877169 Fix bootstrap v5.2.0 build issue 2022-07-22 11:06:23 +02:00
mark
f4c4ea28ed Update dependencies 2022-07-22 10:49:13 +02:00
mark
12d406ea38 Adjust figure caption rendering 2022-07-22 10:38:51 +02:00
Mark Dumay
2e1040b25b Merge pull request #36 from markdumay/develop
Update dependencies
2022-05-22 08:12:50 +02:00
mark
c019703a30 Fix eslint-plugin-node dependency 2022-05-22 08:09:10 +02:00
mark
81a3be47a7 Update dependencies 2022-05-22 07:56:50 +02:00
Mark Dumay
e2c5c92e9b Merge pull request #35 from markdumay/develop
Media
2022-04-18 07:47:23 +02:00
mark
791f318614 Bump version 2022-04-18 07:44:22 +02:00
mark
7be58d48dc Add theme data 2022-04-18 07:41:54 +02:00
Mark Dumay
70d9d054ce Merge pull request #34 from markdumay/develop
Layout
2022-04-18 05:26:13 +02:00
mark
7be7cb171c Bump version 2022-04-18 05:20:59 +02:00
mark
4889daf3e2 Adjust spacing 2022-04-18 05:20:18 +02:00
mark
db3fc14da4 Adjust spacing 2022-04-17 08:53:58 +02:00
mark
c535323ea0 Adjust navbar spacing 2022-04-17 08:43:12 +02:00
Mark Dumay
74156590c5 Merge pull request #33 from markdumay/develop
Fix css in production
2022-04-16 09:50:57 +02:00
mark
a2f91fac9b Fix css in production 2022-04-16 09:41:57 +02:00
Mark Dumay
ec682d687b Merge pull request #32 from markdumay/develop
Code highlighting
2022-04-16 08:54:02 +02:00
mark
4cf595d901 Fix indentation 2022-04-16 08:51:26 +02:00
mark
e5c7b3c5a4 Update title and description 2022-04-16 08:47:25 +02:00
mark
3024924f50 Bump version 2022-04-16 08:44:44 +02:00
mark
b5721351ea Enable code highlighting 2022-04-16 08:44:21 +02:00
Mark Dumay
7a45644625 Merge pull request #31 from markdumay/develop
Bump package version for release
2022-04-14 19:04:54 +02:00
mark
03ba42ca55 Bump package version for release 2022-04-14 19:02:06 +02:00
Mark Dumay
c9da39ee46 Merge pull request #30 from markdumay/develop
Develop
2022-04-14 08:56:14 +02:00
mark
a70cae1574 Add child theme 2022-04-14 08:47:46 +02:00
mark
dd5e55848d Bump Hugo version 2022-04-14 06:06:05 +02:00
mark
c52635f6d1 Remove obsolete translation 2022-04-14 06:05:44 +02:00
mark
0d8161e605 Add publish config 2022-04-13 14:36:22 +02:00
Mark Dumay
2192ec30b7 Update npm-publish.yml 2022-04-13 14:24:01 +02:00
Mark Dumay
7cfbf72847 Merge pull request #29 from markdumay/develop
Develop
2022-04-13 14:20:57 +02:00
mark
7fb5ccb5a5 Merge branch 'develop' of https://github.com/markdumay/hugo-theme-hinode into develop
Sync local branch
2022-04-13 14:05:19 +02:00
mark
d461180dce Add scope to package name 2022-04-13 13:53:00 +02:00
Mark Dumay
d5046426cc Create npm-publish.yml 2022-04-13 13:47:48 +02:00
28 changed files with 2318 additions and 1835 deletions

View File

@@ -14,7 +14,7 @@ jobs:
strategy:
matrix:
node-version: [12.x, 14.x, 16.x]
node-version: [14.x, 16.x, 18.x]
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
steps:

35
.github/workflows/npm-publish.yml vendored Normal file
View File

@@ -0,0 +1,35 @@
# This workflow will run tests using node and then publish a package to GitHub Packages when a release is created
# For more information see: https://help.github.com/actions/language-and-framework-guides/publishing-nodejs-packages
name: Node.js Package
on:
workflow_dispatch:
branches: [ main ]
release:
types: [created]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16
- run: npm ci
- run: npm test
publish-npm:
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16
registry-url: https://registry.npmjs.org/
- run: npm ci
- run: npm publish
env:
NODE_AUTH_TOKEN: ${{secrets.npm_token}}

View File

@@ -1,4 +1,5 @@
assets/scss/common/_variables.scss
assets/scss/components/_syntax.scss
assets/scss/vendor
assets/scss/app.scss
node_modules

View File

@@ -72,10 +72,7 @@ Start a new Hinode project in three steps:
### 1. Create a new site
<!-- Hinode is available as a child theme, and a starter theme:
- Use the Hinode child theme, if you do **not** plan to customize a lot, and/or need future Hinode updates.
- Use the Hinode starter theme, if you plan to customize a lot, and/or do **not** need future Hinode updates.
Hinode is available as a [child theme][repository_child], and a [main theme][repository]. The child theme uses [npm][npm] to link to the latest available version of the Hinode theme. As such, it is less applicable if you plan to customize a lot. Vice versa, the main theme allows for heavy customization, but is not synchronized with the latest available Hinode theme automatically.
Not quite sure? Use the Hinode child theme.
@@ -85,7 +82,7 @@ Not quite sure? Use the Hinode child theme.
git clone https://github.com/markdumay/hugo-theme-hinode-child.git my-hinode-site && cd my-hinode-site
```
#### Hinode starter theme -->
#### Hinode main theme
```bash
git clone https://github.com/markdumay/hugo-theme-hinode.git my-hinode-site && cd my-hinode-site
@@ -107,11 +104,11 @@ npm run start
The main site configuration is available in `./config/_default`. Some remarks:
- Menu items - `menus/menus.en.toml` contains language-specific items for the navigation bar and social media links for the home page's footer.
- Content - Ensure the `mainSections` in `config.toml` is synchronized with the `content` folder, default values are `["blog", "projects"]`.
- Theme color - Update `themeColor` and `themeOpacity` within the `[style]` section of `params.toml` to update the site's primary color and opacity. You can use the [WCAG Color Contrast Checker][contrast_checker] to validate the contrast ratio of your color to improve accessibility.
- Comments - Comments are powered by [utterances][utterances], a lightweight comments widget built on GitHub issues. Update the `repo` of the `[comments]` section of `params.toml`.
- Security headings - The local development server uses the header configuration as provided by `server.toml`. Similar settings are provided in the `netlify.toml` file provided in the repository's root when deploying to [Netlify][netlify].
- **Menu items** - `menus/menus.en.toml` contains language-specific items for the navigation bar and social media links for the home page's footer.
- **Content** - Ensure the `mainSections` in `config.toml` is synchronized with the `content` folder, default values are `["blog", "projects"]`.
- **Theme color** - Update `themeColor` and `themeOpacity` within the `[style]` section of `params.toml` to update the site's primary color and opacity. You can use the [WCAG Color Contrast Checker][contrast_checker] to validate the contrast ratio of your color to improve accessibility.
- **Comments** - Comments are powered by [utterances][utterances], a lightweight comments widget built on GitHub issues. Update the `repo` of the `[comments]` section of `params.toml`.
- **Security headings** - The local development server uses the header configuration as provided by `server.toml`. Similar settings are defined in the `netlify.toml` file provided in the repository's root when deploying to [Netlify][netlify].
## Contributing
@@ -137,7 +134,7 @@ The Hinode theme is inspired by the following themes:
## License
The `hugo-theme-hinode` codebase is released under the [MIT license][license]. The documentation (including the "README") is licensed under the Creative Commons ([CC BY-NC 4.0)][cc-by-nc-4.0] license.
The `hugo-theme-hinode` and `hugo-theme-hinode-child` codebase is released under the [MIT license][license]. The documentation (including the "README") is licensed under the Creative Commons ([CC BY-NC 4.0)][cc-by-nc-4.0] license.
<!-- MARKDOWN PUBLIC LINKS -->
[blist]: https://github.com/apvarun/blist-hugo-theme
@@ -158,8 +155,9 @@ The `hugo-theme-hinode` codebase is released under the [MIT license][license]. T
<!-- MARKDOWN MAINTAINED LINKS -->
<!-- TODO: add blog link
[blog]: https://markdumay.com
-->
[blog]: https://github.com/markdumay
-->
[demo]: https://hinode-demo.markdumay.org/
[license]: https://github.com/markdumay/hugo-theme-hinode/blob/main/LICENSE
[repository]: https://github.com/markdumay/hugo-theme-hinode.git
[repository_child]: https://github.com/markdumay/hugo-theme-hinode-child.git

BIN
assets/img/notepad.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 173 KiB

View File

@@ -155,3 +155,42 @@ Source:
}
}
}());
/*
Source:
- https://simplernerd.com/hugo-add-copy-to-clipboard-button/
*/
const svgCopy =
'<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true"><path fill-rule="evenodd" d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z"></path><path fill-rule="evenodd" d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z"></path></svg>';
const svgCheck =
'<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true"><path fill-rule="evenodd" fill="rgb(63, 185, 80)" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path></svg>';
const addCopyButtons = (clipboard) => {
// 1. Look for pre > code elements in the DOM
document.querySelectorAll("pre > code").forEach((codeBlock) => {
// 2. Create a button that will trigger a copy operation
const button = document.createElement("button");
button.className = "clipboard-button";
button.type = "button";
button.innerHTML = svgCopy;
button.addEventListener("click", () => {
clipboard.writeText(codeBlock.innerText).then(
() => {
button.blur();
button.innerHTML = svgCheck;
setTimeout(() => (button.innerHTML = svgCopy), 2000);
},
(error) => (button.innerHTML = "Error")
);
});
// 3. Append the button directly before the pre tag
const pre = codeBlock.parentNode;
pre.parentNode.insertBefore(button, pre);
});
};
if (navigator && navigator.clipboard) {
addCopyButtons(navigator.clipboard);
}

View File

@@ -9,6 +9,7 @@ $themeColor: {{ site.Params.style.themeColor | default "#007bff" }};
// Import Bootstrap configuration
@import "bootstrap/scss/variables";
@import "bootstrap/scss/maps";
@import "bootstrap/scss/mixins";
@import "bootstrap/scss/utilities";
@@ -60,10 +61,12 @@ $themeColor: {{ site.Params.style.themeColor | default "#007bff" }};
@import "components/blockquote.scss";
@import "components/buttons.scss";
@import "components/card.scss";
@import "components/clipboard.scss";
@import "components/comments.scss";
@import "components/navbar.scss";
@import "components/img.scss";
@import "components/search.scss";
@import "components/syntax.scss";
@import "components/vimeo.scss";
@import "common/styles.scss";
@import "layouts/reboot.scss";

View File

@@ -1,5 +1,6 @@
// Bootstrap variables overrides for theme
$primary: $themeColor;
$enable-negative-margins: true;
// Font awesome variables overrides for theme
$fa-font-path: "../fonts";

View File

@@ -0,0 +1,44 @@
// Adapted from https://simplernerd.com/hugo-add-copy-to-clipboard-button/
.clipboard-button {
position: absolute;
right: 0;
padding: 2px 7px 5px;
margin: 5px;
color: #767676;
border-color: #767676;
background-color: #ededed;
border: 1px solid;
border-radius: 6px;
font-size: 0.8em;
z-index: 1;
opacity: 0;
transition: 0.1s;
}
.clipboard-button > svg {
fill: #767676;
}
.clipboard-button:hover {
cursor: pointer;
border-color: #696969;
background-color: #e0e0e0;
}
.clipboard-button:hover > svg {
fill: #696969;
}
.clipboard-button:focus {
outline: 0;
}
.highlight {
position: relative;
}
.highlight:hover > .clipboard-button {
opacity: 1;
transition: 0.2s;
}

View File

@@ -0,0 +1,85 @@
/* Background */ .bg { color: #272822; background-color: #fafafa }
/* PreWrapper */ .chroma { color: #272822; background-color: #fafafa; }
/* Other */ .chroma .x { }
/* Error */ .chroma .err { color: #960050; background-color: #1e0010 }
/* CodeLine */ .chroma .cl { }
/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; }
/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; }
/* LineHighlight */ .chroma .hl { background-color: #ffffcc }
/* LineNumbersTable */ .chroma .lnt { white-space: pre; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f }
/* LineNumbers */ .chroma .ln { white-space: pre; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f }
/* Line */ .chroma .line { display: flex; }
/* Keyword */ .chroma .k { color: #00a8c8 }
/* KeywordConstant */ .chroma .kc { color: #00a8c8 }
/* KeywordDeclaration */ .chroma .kd { color: #00a8c8 }
/* KeywordNamespace */ .chroma .kn { color: #f92672 }
/* KeywordPseudo */ .chroma .kp { color: #00a8c8 }
/* KeywordReserved */ .chroma .kr { color: #00a8c8 }
/* KeywordType */ .chroma .kt { color: #00a8c8 }
/* Name */ .chroma .n { color: #111111 }
/* NameAttribute */ .chroma .na { color: #75af00 }
/* NameBuiltin */ .chroma .nb { color: #111111 }
/* NameBuiltinPseudo */ .chroma .bp { color: #111111 }
/* NameClass */ .chroma .nc { color: #75af00 }
/* NameConstant */ .chroma .no { color: #00a8c8 }
/* NameDecorator */ .chroma .nd { color: #75af00 }
/* NameEntity */ .chroma .ni { color: #111111 }
/* NameException */ .chroma .ne { color: #75af00 }
/* NameFunction */ .chroma .nf { color: #75af00 }
/* NameFunctionMagic */ .chroma .fm { color: #111111 }
/* NameLabel */ .chroma .nl { color: #111111 }
/* NameNamespace */ .chroma .nn { color: #111111 }
/* NameOther */ .chroma .nx { color: #75af00 }
/* NameProperty */ .chroma .py { color: #111111 }
/* NameTag */ .chroma .nt { color: #f92672 }
/* NameVariable */ .chroma .nv { color: #111111 }
/* NameVariableClass */ .chroma .vc { color: #111111 }
/* NameVariableGlobal */ .chroma .vg { color: #111111 }
/* NameVariableInstance */ .chroma .vi { color: #111111 }
/* NameVariableMagic */ .chroma .vm { color: #111111 }
/* Literal */ .chroma .l { color: #ae81ff }
/* LiteralDate */ .chroma .ld { color: #d88200 }
/* LiteralString */ .chroma .s { color: #d88200 }
/* LiteralStringAffix */ .chroma .sa { color: #d88200 }
/* LiteralStringBacktick */ .chroma .sb { color: #d88200 }
/* LiteralStringChar */ .chroma .sc { color: #d88200 }
/* LiteralStringDelimiter */ .chroma .dl { color: #d88200 }
/* LiteralStringDoc */ .chroma .sd { color: #d88200 }
/* LiteralStringDouble */ .chroma .s2 { color: #d88200 }
/* LiteralStringEscape */ .chroma .se { color: #8045ff }
/* LiteralStringHeredoc */ .chroma .sh { color: #d88200 }
/* LiteralStringInterpol */ .chroma .si { color: #d88200 }
/* LiteralStringOther */ .chroma .sx { color: #d88200 }
/* LiteralStringRegex */ .chroma .sr { color: #d88200 }
/* LiteralStringSingle */ .chroma .s1 { color: #d88200 }
/* LiteralStringSymbol */ .chroma .ss { color: #d88200 }
/* LiteralNumber */ .chroma .m { color: #ae81ff }
/* LiteralNumberBin */ .chroma .mb { color: #ae81ff }
/* LiteralNumberFloat */ .chroma .mf { color: #ae81ff }
/* LiteralNumberHex */ .chroma .mh { color: #ae81ff }
/* LiteralNumberInteger */ .chroma .mi { color: #ae81ff }
/* LiteralNumberIntegerLong */ .chroma .il { color: #ae81ff }
/* LiteralNumberOct */ .chroma .mo { color: #ae81ff }
/* Operator */ .chroma .o { color: #f92672 }
/* OperatorWord */ .chroma .ow { color: #f92672 }
/* Punctuation */ .chroma .p { color: #111111 }
/* Comment */ .chroma .c { color: #75715e }
/* CommentHashbang */ .chroma .ch { color: #75715e }
/* CommentMultiline */ .chroma .cm { color: #75715e }
/* CommentSingle */ .chroma .c1 { color: #75715e }
/* CommentSpecial */ .chroma .cs { color: #75715e }
/* CommentPreproc */ .chroma .cp { color: #75715e }
/* CommentPreprocFile */ .chroma .cpf { color: #75715e }
/* Generic */ .chroma .g { }
/* GenericDeleted */ .chroma .gd { }
/* GenericEmph */ .chroma .ge { font-style: italic }
/* GenericError */ .chroma .gr { }
/* GenericHeading */ .chroma .gh { }
/* GenericInserted */ .chroma .gi { }
/* GenericOutput */ .chroma .go { }
/* GenericPrompt */ .chroma .gp { }
/* GenericStrong */ .chroma .gs { font-weight: bold }
/* GenericSubheading */ .chroma .gu { }
/* GenericTraceback */ .chroma .gt { }
/* GenericUnderline */ .chroma .gl { }
/* TextWhitespace */ .chroma .w { }

View File

@@ -1,17 +1,17 @@
defaultMarkdownHandler = "goldmark"
[highlight]
anchorLineNos = false
codeFences = true
guessSyntax = true
hl_Lines = ""
lineAnchors = ""
lineNoStart = 1
lineNos = true
lineNumbersInTable = false
noClasses = false
# style = "monokai" # This parameter affects nothing, see https://github.com/razonyang/hugo-theme-bootstrap#syntax-highlighting.
tabWidth = 2
anchorLineNos = false
codeFences = true
guessSyntax = true
hl_Lines = ""
lineAnchors = ""
lineNoStart = 1
lineNos = false
lineNumbersInTable = false
noClasses = false
# style = "monokailight" ## Update the 'create:syntax' command in package.json to modify the style
tabWidth = 2
[goldmark]
[goldmark.extensions]

View File

@@ -10,38 +10,38 @@ module.exports = {
'./layouts/**/*.html',
'./content/**/*.md',
],
safelist: {
standard: [
/lazyloaded/,
/table/,
/thead/,
/tbody/,
/tr/,
/th/,
/td/,
/h5/,
/alert-link/,
/container-xxl/,
/container-fluid/,
/^bg-opacity-\d+/,
/svg.*/,
/fa.*/,
/ratio.*/,
/suggestion.*/,
],
...whitelister([
safelist: [
/lazyloaded/,
/table/,
/thead/,
/tbody/,
/tr/,
/th/,
/td/,
/h5/,
/alert-link/,
/container-xxl/,
/container-fluid/,
/^bg-opacity-\d+/,
/svg.*/,
/fa.*/,
/ratio.*/,
/suggestion.*/,
...whitelister([
'./assets/scss/components/_blockquote.scss',
'./assets/scss/components/_buttons.scss',
'./assets/scss/components/_card.scss',
'./assets/scss/components/_clipboard.scss',
'./assets/scss/components/_img.scss',
'./assets/scss/components/_navbar.scss',
'./assets/scss/components/_search.scss',
'./assets/scss/components/_syntax.scss',
'./assets/scss/layouts/_reboot.scss',
'./assets/scss/layouts/type.scss',
'./node_modules/bootstrap/scss/_dropdown.scss',
'./node_modules/bootstrap/scss/_utilities.scss',
]),
},
],
}),
],
}

View File

@@ -0,0 +1,57 @@
---
author: "Mark Dumay"
title: "Code Highlighting"
date: 2022-04-16
description: "Examples on how to enable code highlighting"
tags: ["code"]
thumbnail: img/notepad.jpg
credits: Photo by <a href="https://unsplash.com/@frederickjmedina">Frederick Medina</a> on <a href="https://unsplash.com/photos/PdfRE-xB--s">Unsplash</a>
---
## Code Fencing
Use code fencing to highlight the syntax of a specific language.
```json
{
"version": "0.2.0",
"themes": [],
"projects": [],
"configuration": {}
}
```
```html
<div class="highlight">
<pre>
<code>some code...</code>
</pre>
</div>
```
## Highlight Partial
Use the `highlight` partial to customize the layout of a specific code block.
{{< highlight go "linenos=table,hl_lines=8 15-17,linenostart=199" >}}
// GetTitleFunc returns a func that can be used to transform a string to
// title case.
//
// The supported styles are
//
// - "Go" (strings.Title)
// - "AP" (see https://www.apstylebook.com/)
// - "Chicago" (see https://www.chicagomanualofstyle.org/home.html)
//
// If an unknown or empty style is provided, AP style is what you get.
func GetTitleFunc(style string) func(s string) string {
switch strings.ToLower(style) {
case "go":
return strings.Title
case "chicago":
return transform.NewTitleConverter(transform.ChicagoStyle)
default:
return transform.NewTitleConverter(transform.APStyle)
}
}
{{< / highlight >}}

BIN
images/screenshot.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 903 KiB

BIN
images/tn.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

View File

@@ -1,7 +1,7 @@
{{ define "main" -}}
<div class="p-5">
<div class="p-4">
<h1>{{ .Title }}</h1>
<div class="container-fluid">
<div class="container-fluid p-0">
<div class="row row-cols-1 row-cols-sm-2 row-cols-md-3 g-4">
{{ $max := sub (len .Pages) 1 -}}
{{ range $index, $element := (.Paginate .RegularPagesRecursive).Pages -}}

View File

@@ -3,7 +3,7 @@
{{ $datestr := (partial "utilities/date.html" (dict "date" .Date "language" $.Page.Language "format" "long")) -}}
<div class="container-fluid">
<div class="row row-cols-1 row-cols-sm-3 align-items-center p-5">
<div class="row row-cols-1 row-cols-sm-3 align-items-center p-3">
<div class="col col-md-2 d-none d-md-block"></div>
<div class="col col-sm-12 col-md-8">
{{ range .Params.tags -}}
@@ -18,7 +18,7 @@
{{ else -}}
&nbsp;&bull;&nbsp;
{{ end -}}
{{ i18n "readingTime"}}{{ .ReadingTime }}&nbsp;{{ i18n "minutesShort" }} {{ i18n "read" }}
{{ .ReadingTime }}&nbsp;{{ i18n "minutesShort" }} {{ i18n "read" }}
&nbsp;&bull;
{{ .WordCount }}&nbsp;{{ i18n "words" }}
</small>
@@ -27,7 +27,7 @@
</div>
{{ if .Params.thumbnail -}}
<div class="row row-cols-1 row-cols-sm-3 align-items-center p-5">
<div class="row row-cols-1 row-cols-sm-3 align-items-center p-3">
<div class="col col-md-2 d-none d-md-block"></div>
<div class="col col-sm-12 col-md-8">
{{- partial "image.html" (dict "url" .Params.thumbnail "ratio" "21x9" "outerClass" "img-wrap" "innerClass" "rounded" "title" .Params.title "caption" .Params.credits) -}}
@@ -36,7 +36,7 @@
</div>
{{ end -}}
<div class="row row-cols-1 row-cols-sm-2 p-5">
<div class="row row-cols-1 row-cols-sm-2 p-3">
<div class="col col-md-2 d-none d-md-block"></div>
<div class="col col-sm-12 col-md-8">
{{ .Content }}
@@ -69,7 +69,7 @@
{{- if and .Site.Params.comments.enabled .Params.showComments | default true -}}
<div class="container-fluid">
<div class="row row-cols-1 row-cols-sm-2 p-5">
<div class="row row-cols-1 row-cols-sm-2 p-3">
<div class="col col-md-2 d-none d-md-block"></div>
<div class="col col-sm-12 col-md-8">
<hr>

View File

@@ -3,14 +3,14 @@
{{ range $section, $taxonomy := .Site.Sections -}}
{{ if eq $section 0 -}}
<div class="p-5">
<div class="p-4">
<h1>Recent posts</h1>
<div class="container-fluid">
<div class="row row-cols-1 row-cols-sm-2 row-cols-md-3 g-4">
<div class="container-fluid p-0">
<div class="row row-cols-1 row-cols-sm-2 row-cols-md-3">
{{ $items := first 3 ($taxonomy.Pages.ByDate.Reverse) -}}
{{ $max := sub (len $items) 1 -}}
{{ range $index, $element := $items -}}
<div class="col">
<div class="col gx-4">
{{- partial "assets/blog-card.html" $element -}}
</div>
{{ if (lt $index $max) -}}
@@ -27,13 +27,13 @@
{{ end -}}
</div>
{{ else -}}
<div class="p-5">
<div class="p-4">
<h1>{{ $taxonomy.Title }}</h1>
<div class="container-fluid">
<div class="row row-cols-1 g-4">
{{ $items := first 3 ($taxonomy.Pages) -}}
{{ range $index, $element := $items -}}
<div class="col">
<div class="col p-0">
{{- partial "assets/project-card.html" $element -}}
</div>
{{ end -}}

View File

@@ -4,11 +4,11 @@
{{- partial "image.html" (dict "url" .Params.thumbnail "ratio" "16x9" "outerClass" "card-img-wrap" "innerClass" "card-img-top" "title" .Params.title) -}}
</a>
{{ end }}
<div class="card-body d-flex flex-column">
<div class="card-body d-flex flex-column p-0">
<p class="card-text">
<small class="text-muted text-uppercase">
{{- partial "utilities/date.html" (dict "date" .Date "language" $.Page.Language "format" "long") -}}
&bull; {{ i18n "readingTime"}}{{ .ReadingTime }}&nbsp;{{ i18n "minutesShort" }} {{ i18n "read" }}
&bull; {{ .ReadingTime }}&nbsp;{{ i18n "minutesShort" }} {{ i18n "read" }}
{{ if isset .Params "tags" -}}
{{ range first 1 .Params.tags -}}
&bull; <a href="{{ $.Site.BaseURL }}tags/{{ . | urlize }}" class="text-decoration-none text-primary" aria-label="Tag: {{ . }}">{{ . }}</a>

View File

@@ -1,14 +1,14 @@
<nav class="navbar navbar-expand-sm bg-white navbar-light ps-4 pe-4">
<nav class="navbar navbar-expand-sm bg-white navbar-light m-3">
<div class="container-fluid">
<a class="navbar-brand" href="{{ .Site.Home.RelPermalink }}">
{{ if .Site.Params.main.logo -}}
<img src="{{ .Site.Params.main.logo }}" alt="{{ .Site.Title }} logo" height="30">
{{ else -}}
<span class="fw-bold ">{{ .Site.Title }}</span>
<span class="fw-bold">{{ .Site.Title }}</span>
{{ end -}}
</a>
<button class="navbar-toggler collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent"
<button class="navbar-toggler collapsed me-n3" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent"
aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="toggler-icon top-bar"></span>
<span class="toggler-icon middle-bar"></span>

View File

@@ -12,7 +12,7 @@
{{ $indexTemplate := resources.Get "js/index.js" -}}
{{ $jsIndex := $indexTemplate | resources.ExecuteAsTemplate "index.js" . }}
{{ $js := (slice $jsIndex) | resources.Concat "js/main.js" }}
{{ $js := (slice $jsIndex) | resources.Concat "js/main.js" }}
{{ if not hugo.IsProduction }}
<script src="{{ $js.RelPermalink }}"></script>

View File

@@ -1,9 +1,9 @@
<div class="container-fluid">
<div class="row row-cols-1 row-cols-sm-4 bg-primary p-5 bg-opacity-{{ .Site.Params.style.themeOpacity | default "25" | safeHTML }} align-items-center">
<div class="row row-cols-1 row-cols-sm-4 bg-primary p-3 bg-opacity-{{ .Site.Params.style.themeOpacity | default "25" | safeHTML }} align-items-center">
<div class="col col-md-2 d-none d-md-block"></div>
<div class="col col-sm-6 col-md-4">
<div class="fs-3 fw-bold">{{ .Site.Params.socialTitle }}</div>
{{ .Site.Params.socialCaption }}
<p>{{ .Site.Params.socialCaption }}</p>
</div>
<div class="col text-sm-start text-center col-sm-6 col-md-4">
{{ range .Site.Menus.social -}}

View File

@@ -1,5 +1,5 @@
<div class="container-fluid">
<div class="row row-cols-1 row-cols-sm-4 bg-primary p-5 bg-opacity-{{ .Site.Params.style.themeOpacity | default "25" | safeHTML }} align-items-center">
<div class="row row-cols-1 row-cols-sm-4 bg-primary p-3 bg-opacity-{{ .Site.Params.style.themeOpacity | default "25" | safeHTML }} align-items-center">
<div class="col col-md-2 d-none d-md-block"></div>
<div class="col col-sm-6 col-md-4">
<p class="fs-1 fw-bold">{{ .Site.Params.introTitle }}</p>

View File

@@ -13,7 +13,7 @@
/><!-- Closing img tag -->
{{- if .Get "link" }}</a>{{ end -}}
{{- if or (or (.Get "title") (.Get "caption")) (.Get "attr") -}}
<figcaption>
<figcaption class="figure-caption">
{{ with (.Get "title") -}}
<h4>{{ . }}</h4>
{{- end -}}

View File

@@ -1,6 +1,6 @@
{{ define "main" }}
<div class="container-fluid">
<div class="row row-cols-1 row-cols-sm-3 align-items-center p-5">
<div class="row row-cols-1 row-cols-sm-3 align-items-center p-3">
<div class="col col-md-2 d-none d-md-block"></div>
<div class="col col-sm-12 col-md-8">
<h1>{{ .Name | humanize }}</h1>

3707
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,13 +1,18 @@
{
"name": "hugo-theme-hinode",
"version": "0.1.0",
"name": "@markdumay/hugo-theme-hinode",
"version": "0.4.5",
"description": "Hinode is a clean blog theme for Hugo, an open-source static site generator",
"main": "index.js",
"publishConfig": {
"access": "public",
"registry": "https://registry.npmjs.org/"
},
"scripts": {
"init": "shx rm -rf .git && git init -b main",
"create": "exec-bin node_modules/.bin/hugo/hugo new",
"prestart": "npm run clean",
"start": "exec-bin node_modules/.bin/hugo/hugo server --bind=0.0.0.0 --disableFastRender",
"prod": "exec-bin node_modules/.bin/hugo/hugo server --bind=0.0.0.0 --disableFastRender -e production",
"prebuild": "npm run clean",
"build": "exec-bin node_modules/.bin/hugo/hugo --gc --minify",
"build:preview": "npm run build -D -F",
@@ -24,7 +29,9 @@
"precheck": "npm version",
"check": "exec-bin node_modules/.bin/hugo/hugo version",
"copy:fonts": "shx cp ./node_modules/@fortawesome/fontawesome-free/webfonts/* ./static/fonts/",
"create:syntax": "exec-bin node_modules/.bin/hugo/hugo gen chromastyles --style=monokailight > ./assets/scss/components/_syntax.scss",
"postinstall": "hugo-installer --version otherDependencies.hugo --extended --destination node_modules/.bin/hugo",
"upgrade": "npx npm-check-updates -u",
"version": "auto-changelog -p && git add CHANGELOG.md"
},
"repository": {
@@ -38,26 +45,26 @@
},
"homepage": "https://github.com/markdumay/hugo-theme-hinode#readme",
"devDependencies": {
"@fortawesome/fontawesome-free": "^6.0.0",
"@fullhuman/postcss-purgecss": "^4.1.3",
"autoprefixer": "^10.4.2",
"bootstrap": "^5.1.3",
"eslint": "^7.32.0",
"eslint-config-standard": "^16.0.3",
"@fortawesome/fontawesome-free": "^6.2.0",
"@fullhuman/postcss-purgecss": "^5.0.0",
"autoprefixer": "^10.4.12",
"bootstrap": "^5.2.2",
"eslint": "^8.25.0",
"eslint-config-standard": "^17.0.0",
"eslint-plugin-import": "^2.26.0",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^5.2.0",
"eslint-plugin-n": "^15.3.0",
"eslint-plugin-promise": "^6.1.1",
"exec-bin": "^1.0.0",
"flexsearch": "^0.7.21",
"hugo-installer": "^3.1.0",
"markdownlint-cli2": "^0.4.0",
"postcss-cli": "^9.1.0",
"flexsearch": "^0.7.31",
"hugo-installer": "^4.0.1",
"markdownlint-cli2": "^0.5.1",
"postcss-cli": "^10.0.0",
"purgecss-whitelister": "^2.4.0",
"shx": "^0.3.4",
"stylelint": "^14.6.1",
"stylelint-config-standard-scss": "^3.0.0"
"stylelint": "^14.14.0",
"stylelint-config-standard-scss": "^5.0.0"
},
"otherDependencies": {
"hugo": "0.92.2"
"hugo": "0.104.3"
}
}

View File

@@ -1,7 +1,7 @@
name = "Hinode"
license = "MIT"
licenselink = "https://github.com/markdumay/hugo-theme-hinode/blob/main/LICENSE"
description = "Hinode is a clean blog theme for Hugo, an open-source static site generator."
description = "A clean blog theme for your Hugo site based on Bootstrap 5."
homepage = "https://github.com/markdumay/hugo-theme-hinode"
demosite = "https://hinode-demo.markdumay.org/"
tags = ["blog", "minimal", "modern", "customizable", "search", "bootstrap"]