Compare commits

...

37 Commits

Author SHA1 Message Date
Wen Junhua e9552734d8
Merge 2cf1371c3e into bce395070c 2024-01-21 14:43:42 +11:00
James Panther bce395070c
🔀 Merge pull request #741 from wolfspyre/author-picture
♻️ Render author image with picture partial
2024-01-21 14:41:56 +11:00
James Panther 9433645cb6
🔀 Merge pull request #785 from pomeloy/fix
Fix picture partial img/source attributes
2024-01-21 14:36:51 +11:00
James Panther c282e97333
🔀 Merge pull request #730 from stereobooster/fix-bug-in-picture
fix bug in picture with params
2024-01-21 14:31:01 +11:00
James Panther 6d4cf0584b
📝 Update changelog 2024-01-21 14:29:38 +11:00
James Panther 3ce38cc6f0
🔀 Merge pull request #786 from pomeloy/features
Do not render article-meta figure if there is nothing to display
2024-01-21 14:27:23 +11:00
pomeloy 9285958da9
Do not render article-meta figure if there is nothing to display 2024-01-21 14:25:52 +11:00
James Panther c045ea2c3c
🔀 Merge pull request #790 from aminelch/dev
Added my personal blog to users section.
2024-01-21 14:10:57 +11:00
Amine LOUHICHI a754abafa8
Add https://aminelch.github.io to users section 2024-01-21 14:10:03 +11:00
James Panther f7032c7844
🔀 Merge pull request #781 from stupidjoey/dev
add stupidjoey.net
2024-01-21 14:07:57 +11:00
stupidjoey c53eaf28ef
add stupidjoey.net 2024-01-21 14:05:18 +11:00
James Panther c83eb3b698
🔀 Merge pull request #777 from jnsgruk/patch-1
Add jnsgr.uk to list of users
2024-01-21 13:55:54 +11:00
Jon Seager eb866438a9
Add jnsgr.uk to list of users 2024-01-21 13:54:15 +11:00
James Panther 4b85f9a13c
🔀 Merge pull request #769 from jamesjarvis/dev
Add jamesjarvis.io to list of users
2024-01-21 09:57:42 +11:00
James Jarvis 83d7a1422c
Add jamesjarvis.io to list of users 2024-01-21 09:53:02 +11:00
James Panther 0e8f764870
📝 Update changelog 2024-01-21 09:45:25 +11:00
James Panther 83d5984a53
🔀 Merge pull request #788 from pomeloy/fix2
Fix vertical offset when using locale switcher
2024-01-21 09:43:59 +11:00
James Panther 31fcdcf64e
🔀 Merge pull request #791 from pomeloy/revert-789-safari-fix
Revert "💄 Fix Safari status bar style"
2024-01-21 09:38:28 +11:00
pomeloy c5f342c7f6
Revert "💄 Fix Safari status bar style" 2024-01-20 08:49:12 +01:00
James Panther b21e8497e5
🔥 Remove users no longer using theme 2024-01-20 15:20:56 +11:00
James Panther 08d0427688
📝 Update changelog 2024-01-20 15:01:30 +11:00
pomeloy 1cf7d8bdd3
Update translations.html 2024-01-19 18:30:51 +01:00
pomeloy 7d1b63b11d
Fix vertical offset when using locale switcher 2024-01-19 18:04:00 +01:00
pomeloy 9a341f1724
Fix picture partial img/source attributes
Remove duplicate src attribute from image tag.
Remove not allowed src attribute from source tag.
Add default sizes attributes to img and source tag.
Fix inconsistent srcset width.
2024-01-19 16:17:28 +01:00
Wen Junhua 2cf1371c3e fix: remove debug logs 2023-12-31 13:26:09 +08:00
Wen Junhua a1a2e10481
Merge branch 'dev' into feat/add-icon-script 2023-12-31 13:24:13 +08:00
Wen Junhua 97a3f0064c feat: port script to node 2023-12-31 13:24:02 +08:00
Wen Junhua a7fa3be37d
Merge branch 'dev' into feat/add-icon-script 2023-12-26 17:19:40 +09:00
Wen Junhua 679898570c docs: update script docs 2023-12-25 23:27:14 +09:00
Wen Junhua db07288d01 chore: clean up code 2023-12-25 23:24:47 +09:00
Wen Junhua 3c81e00bed chore: clean up code 2023-12-25 23:17:40 +09:00
Wen Junhua eb527de54b feat: add docs update 2023-12-25 23:13:32 +09:00
Wen Junhua 3a998b4598 feat: add script to auto update icons 2023-12-25 22:17:25 +09:00
Wolf Noble 8e2de6c6dc
Update author.html
remove superfluous log element
2023-12-07 20:18:51 -06:00
Wolf Noble a1a6d6f468
Update author.html
remove superfluous warning
2023-12-06 17:06:39 -06:00
Wolf Noble 92658f1b88 💄 ♻️ 🚸 render author image with picture partial 2023-12-05 15:41:43 -06:00
stereobooster f2af0198fa fix bug in picture with params 2023-11-29 14:51:44 +01:00
19 changed files with 911 additions and 68 deletions

View File

@ -33,7 +33,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
- Hamburger menu is not dismissed when links are clicked ([#705](https://github.com/jpanther/congo/pull/705))
- KaTeX, table and code elements wider than the page are not formatted correctly ([#753](https://github.com/jpanther/congo/pull/753))
- Status bar styling is not applied in Safari on iOS ([#789](https://github.com/jpanther/congo/pull/789))
- 'ß' character is output at the top of articles ([#764](https://github.com/jpanther/congo/pull/764))
- Article metadata element is output when there is no metadata to display ([#786](https://github.com/jpanther/congo/pull/786))
- Header elements not vertically centered when using locale switcher ([#788](https://github.com/jpanther/congo/pull/788))
### Removed

View File

@ -8,13 +8,9 @@ function getCSSValue(varName) {
function setThemeColor() {
var metaThemeColor = document.querySelector("meta[name=theme-color]");
var metaAppleMobileWebAppStatusBarStyle = document.querySelector("meta[name=apple-mobile-web-app-status-bar-style]");
document.documentElement.classList.contains("dark")
? metaThemeColor.setAttribute("content", getCSSValue("--color-neutral-800"))
: metaThemeColor.setAttribute("content", getCSSValue("--color-neutral"));
document.documentElement.classList.contains("dark")
? metaAppleMobileWebAppStatusBarStyle.setAttribute("content", getCSSValue("--color-neutral-800"))
: metaAppleMobileWebAppStatusBarStyle.setAttribute("content", getCSSValue("--color-neutral"));
return true;
}

View File

@ -17,7 +17,7 @@ Sitios web reales que se han creado con Congo.
La lista a continuación es solo un puñado de sitios web creados con el tema Congo. Échales un vistazo para descubrir algunos excelentes ejemplos de lo que el tema puede hacer.
| Website | Detalles |
| Website | Details |
| ---------------------------------------------------------------------- | ------------------------------- |
| [jamespanther.com](https://jamespanther.com) | Personal site - Theme author |
| [antoinesoetewey.com](https://antoinesoetewey.com/) | Personal site |
@ -39,7 +39,6 @@ La lista a continuación es solo un puñado de sitios web creados con el tema Co
| [Jh123x](https://jh123x.com/) | Personal site and Blog |
| [sforzando LLC. and Inc.](https://sfz.dev/) | Corporate site and Blog |
| [szegedkungfu.hu](https://balance-se.github.io/) | Sports association site |
| [jcransom.com](https://www.jcransom.com/) | Personal Site and Blog |
| [cbrincoveanu.com](https://www.cbrincoveanu.com/) | Personal site and Blog |
| [medical-humanities](https://medical-humanities.org) | Academic site |
| [boyersnet.com](https://boyersnet.com) | Personal site and Blog |
@ -64,5 +63,12 @@ La lista a continuación es solo un puñado de sitios web creados con el tema Co
| [simaosilva.com](https://simaosilva.com) | Personal Site |
| [kom.al](https://kom.al) | Personal Site |
| [andrea.mortaro.it](https://andrea.mortaro.it) | Personal Site and Blog |
| [yoganath.me](https://yoganath.me) | Personal Site and Blog |
| [josh-v.com](https://josh-v.com) | Personal Site and Tech blog |
| [rshmhrj.io](https://rshmhrj.io/) | Personal Site and Tech blog |
| [jamesjarvis.io](https://jamesjarvis.io) | Personal Site and Blog |
| [jnsgr.uk](https://jnsgr.uk) | Personal site and blog |
| [stupidjoey.net](https://stupidjoey.net) | Personal Site and Tech blog |
| [aminelch.github.io](https://aminelch.github.io) | Personal Site and Blog |
**¿Usuaria de congo?** Para agregar tu sitio a esta lista, [haz un pull request](https://github.com/jpanther/congo/blob/dev/exampleSite/content/users/index.md).

View File

@ -39,7 +39,6 @@ Congoを使用して構築された実際のウェブサイト。
| [Jh123x](https://jh123x.com/) | Personal site and Blog |
| [sforzando LLC. and Inc.](https://sfz.dev/) | Corporate site and Blog |
| [szegedkungfu.hu](https://balance-se.github.io/) | Sports association site |
| [jcransom.com](https://www.jcransom.com/) | Personal Site and Blog |
| [cbrincoveanu.com](https://www.cbrincoveanu.com/) | Personal site and Blog |
| [medical-humanities](https://medical-humanities.org) | Academic site |
| [boyersnet.com](https://boyersnet.com) | Personal site and Blog |
@ -64,5 +63,12 @@ Congoを使用して構築された実際のウェブサイト。
| [simaosilva.com](https://simaosilva.com) | Personal Site |
| [kom.al](https://kom.al) | Personal Site |
| [andrea.mortaro.it](https://andrea.mortaro.it) | Personal Site and Blog |
| [yoganath.me](https://yoganath.me) | Personal Site and Blog |
| [josh-v.com](https://josh-v.com) | Personal Site and Tech blog |
| [rshmhrj.io](https://rshmhrj.io/) | Personal Site and Tech blog |
| [jamesjarvis.io](https://jamesjarvis.io) | Personal Site and Blog |
| [jnsgr.uk](https://jnsgr.uk) | Personal site and blog |
| [stupidjoey.net](https://stupidjoey.net) | Personal Site and Tech blog |
| [aminelch.github.io](https://aminelch.github.io) | Personal Site and Blog |
**Congoを使っていますか** あなたのウェブサイトを加えるために[Pull Request](https://github.com/jpanther/congo/blob/dev/exampleSite/content/users/index.md)を投げてください。

View File

@ -39,7 +39,6 @@ The list below is just a handful of the websites that are built using the Congo
| [Jh123x](https://jh123x.com/) | Personal site and Blog |
| [sforzando LLC. and Inc.](https://sfz.dev/) | Corporate site and Blog |
| [szegedkungfu.hu](https://balance-se.github.io/) | Sports association site |
| [jcransom.com](https://www.jcransom.com/) | Personal Site and Blog |
| [cbrincoveanu.com](https://www.cbrincoveanu.com/) | Personal site and Blog |
| [medical-humanities](https://medical-humanities.org) | Academic site |
| [boyersnet.com](https://boyersnet.com) | Personal site and Blog |
@ -67,6 +66,9 @@ The list below is just a handful of the websites that are built using the Congo
| [yoganath.me](https://yoganath.me) | Personal Site and Blog |
| [josh-v.com](https://josh-v.com) | Personal Site and Tech blog |
| [rshmhrj.io](https://rshmhrj.io/) | Personal Site and Tech blog |
| [jamesjarvis.io](https://jamesjarvis.io) | Personal Site and Blog |
| [jnsgr.uk](https://jnsgr.uk) | Personal site and blog |
| [stupidjoey.net](https://stupidjoey.net) | Personal Site and Tech blog |
| [aminelch.github.io](https://aminelch.github.io) | Personal Site and Blog |
**Congo user?** To add your site to this list, [submit a pull request](https://github.com/jpanther/congo/blob/dev/exampleSite/content/users/index.md).

View File

@ -39,12 +39,10 @@ showEdit: false
| [Jh123x](https://jh123x.com/) | Personal site and Blog |
| [sforzando LLC. and Inc.](https://sfz.dev/) | Corporate site and Blog |
| [szegedkungfu.hu](https://balance-se.github.io/) | Sports association site |
| [jcransom.com](https://www.jcransom.com/) | Personal Site and Blog |
| [cbrincoveanu.com](https://www.cbrincoveanu.com/) | Personal site and Blog |
| [medical-humanities](https://medical-humanities.org) | Academic site |
| [boyersnet.com](https://boyersnet.com) | Personal site and Blog |
| [major.io](https://major.io) | Personal site and Blog |
| [Rpengの博客](https://we1.top) | Personal site and Blog |
| [顾宇的博客](https://www.guyu.me/) | Personal Blog (in Chinese) |
| [cgutierr-zgz.github.io](https://cgutierr-zgz.github.io/) | Personal site and Tech blog |
| [adam.sr](https://adam.sr) | Personal site and Blog |
@ -65,6 +63,12 @@ showEdit: false
| [simaosilva.com](https://simaosilva.com) | Personal Site |
| [kom.al](https://kom.al) | Personal Site |
| [andrea.mortaro.it](https://andrea.mortaro.it) | Personal Site and Blog |
| [yoganath.me](https://yoganath.me) | Personal Site and Blog |
| [josh-v.com](https://josh-v.com) | Personal Site and Tech blog |
| [rshmhrj.io](https://rshmhrj.io/) | Personal Site and Tech blog |
| [jamesjarvis.io](https://jamesjarvis.io) | Personal Site and Blog |
| [jnsgr.uk](https://jnsgr.uk) | Personal site and blog |
| [stupidjoey.net](https://stupidjoey.net) | Personal Site and Tech blog |
| [aminelch.github.io](https://aminelch.github.io) | Personal Site and Blog |
**想成为Congo的用户** 要将您的网站添加到此列表中,请提交[Pull Request](https://github.com/jpanther/congo/blob/dev/exampleSite/content/users/index.md)来添加。

View File

@ -20,7 +20,9 @@
<figure>
{{- with $img -}}
{{ partial "picture.html" (dict "img" . "alt" $altText "class" $class "x2" $x2) }}
{{ $lazy := $.Page.Site.Params.enableImageLazyLoading | default true }}
{{ $webp := $.Page.Site.Params.enableImageWebp | default true }}
{{ partial "picture.html" (dict "img" . "alt" $altText "class" $class "x2" $x2 "lazy" $lazy "webp" $webp) }}
{{- else -}}
<img src="{{ .Destination | safeURL }}" alt="{{ $altText }}" class="{{ $class }}" />
{{- end -}}

View File

@ -10,14 +10,23 @@
<h1 class="mt-0 text-4xl font-extrabold text-neutral-900 dark:text-neutral">
{{ .Title | emojify }}
</h1>
{{ if or
(.Params.showDate | default (.Site.Params.article.showDate | default true))
(and (.Params.showDateUpdated | default (.Site.Params.article.showDateUpdated | default false)) (ne (partial "functions/date.html" .Date) (partial "functions/date.html" .Lastmod)))
(and (.Params.showWordCount | default (.Site.Params.article.showWordCount | default false)) (ne .WordCount 0))
(and (.Params.showReadingTime | default (.Site.Params.article.showReadingTime | default true)) (ne .ReadingTime 0))
(.Params.showEdit | default (.Site.Params.article.showEdit | default false))
}}
<div class="mb-12 mt-8 text-base text-neutral-500 print:hidden dark:text-neutral-400">
{{ partial "article-meta.html" (dict "context" . "scope" "single") }}
</div>
{{ end }}
{{ with $feature }}
<div class="prose">
{{ $altText := $.Params.featureAlt | default $.Params.coverAlt | default "" }}
{{ $class := "mb-6 -mt-4 rounded-md" }}
{{ partial "picture.html" (dict "img" . "alt" $altText "class" $class "lazy" false) }}
{{ $webp := $.Page.Site.Params.enableImageWebp | default true }}
{{ partial "picture.html" (dict "img" . "alt" $altText "class" $class "lazy" false "webp" $webp) }}
{{ with $.Params.coverCaption }}
<figcaption class="-mt-3 mb-6 text-center">{{ . | markdownify }}</figcaption>
{{ end }}

View File

@ -1,19 +1,12 @@
{{ if .Params.showAuthor | default (.Site.Params.article.showAuthor | default true) }}
<div class="flex">
{{ $lazy := .Params.enableImageLazyLoading|default .Site.Params.enableImageLazyLoading | default true }}
{{ $altText := ($.Site.Language.Params.Author.name | default "Author") }}
{{ with .Site.Language.Params.Author.image }}
{{ $authorImage := resources.Get . }}
{{ if $authorImage }}
{{ $authorImage := $authorImage.Fill "192x192 Center" }}
<img
class="!mb-0 !mt-0 me-4 h-24 w-24 rounded-full"
width="96"
height="96"
alt="{{ $.Site.Language.Params.Author.name | default "Author" }}"
src="{{ $authorImage.RelPermalink }}"
{{ if $.Site.Params.enableImageLazyLoading | default true }}
loading="lazy"
{{ end }}
/>
{{ $imgClass := "!mb-0 !mt-0 me-4 w-24 h-auto rounded-full" }}
{{ partial "picture.html" (dict "img" $authorImage "alt" $altText "class" $imgClass "lazy" $lazy ) }}
{{ end }}
{{ end }}
<div class="place-self-center">

View File

@ -2,7 +2,6 @@
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="theme-color" content="rgb(255,255,255)" />
<meta name="apple-mobile-web-app-status-bar-style" content="rgb(255,255,255)" />
{{/* Title */}}
{{ if .IsHome -}}
<title>{{ .Site.Title | emojify }}</title>

View File

@ -4,17 +4,13 @@
{{ end }} flex flex-col items-center justify-center text-center"
>
<header class="mb-3 flex flex-col items-center">
{{ $lazy := .Params.enableImageLazyLoading | default .Site.Params.enableImageLazyLoading | default true }}
{{ $altText := ($.Site.Language.Params.Author.name | default "Author") }}
{{ with .Site.Language.Params.Author.image }}
{{ $authorImage := resources.Get . }}
{{ if $authorImage }}
{{ $authorImage := $authorImage.Fill "288x288 Center" }}
<img
class="mb-2 h-36 w-36 rounded-full"
width="144"
height="144"
alt="{{ $.Site.Language.Params.Author.name | default "Author" }}"
src="{{ $authorImage.RelPermalink }}"
/>
{{ $imgClass := "mb-2 h-auto w-36 rounded-full" }}
{{ partial "picture.html" (dict "img" $authorImage "alt" $altText "class" $imgClass "lazy" $lazy) }}
{{ end }}
{{ end }}
<h1 class="text-4xl font-extrabold">

View File

@ -1,8 +1,8 @@
{{ $img := .img }}
{{ $alt := .alt }}
{{ $class := .class }}
{{ $lazy := .lazy | default $.Page.Site.Params.enableImageLazyLoading | default true }}
{{ $webp := .webp | default $.Page.Site.Params.enableImageWebp | default true }}
{{ $lazy := .lazy }}
{{ $webp := .webp }}
{{ $lqip := .lqip | default false }}
{{ $x2 := .x2 | default false }}
@ -57,7 +57,7 @@
<source
{{ if lt .Width 660 }}
{{ with .Resize (printf "%dx%d webp" .Width .Height) }}
src="{{ .RelPermalink }}"
srcset="{{ .RelPermalink }}"
{{ end }}
{{ else }}
srcset=" {{- (.Resize "330x webp").RelPermalink }} 330w,
@ -70,19 +70,18 @@
{{ end }}
{{ end }}
{{ if gt .Width 1320 }}
,{{ (.Resize "1320x webp").RelPermalink }} 2x
,{{ (.Resize "1320x webp").RelPermalink }} 1320w
{{ else }}
{{ with .Resize (printf "%dx%d webp" .Width .Height) }}
,{{ .RelPermalink }} {{ .Width }}w
{{ end }}
{{ end }}"
src="{{ (.Resize "660x webp").RelPermalink }}"
{{ end }}
sizes="100vw"
type="image/webp"
/>
{{ end }}
<img
src="{{ .RelPermalink }}"
width="{{ $width }}"
height="{{ $height }}"
{{ with $class }}class="{{ . }}"{{ end }}
@ -91,20 +90,20 @@
{{ if lt .Width 660 }}
src="{{ .RelPermalink }}"
{{ else }}
src="{{ (.Resize "660x").RelPermalink }}"
srcset=" {{- (.Resize "330x").RelPermalink }} 330w,
{{- (.Resize "660x").RelPermalink }}
660w
{{- (.Resize "660x").RelPermalink }} 660w
{{ if gt .Width 1024 }}
,{{ (.Resize "1024x").RelPermalink }} 1024w
{{ else }}
,{{ .RelPermalink }} {{ .Width }}w
{{ end }}
{{ if gt .Width 1320 }}
,{{ (.Resize "1320x").RelPermalink }} 2x
,{{ (.Resize "1320x").RelPermalink }} 1320w
{{ else }}
,{{ .RelPermalink }} {{ .Width }}w
{{ end }}"
src="{{ (.Resize "660x").RelPermalink }}"
sizes="100vw"
{{ end }}
/>
</picture>

View File

@ -20,10 +20,10 @@
>
</button>
{{ if eq $dir "down" }}
<div class="invisible h-2 w-full bg-transparent group-hover:visible"></div>
<div class="invisible w-full bg-transparent group-hover:visible"></div>
{{ end }}
<div
class="{{ cond (eq $dir "down") "top-8" "bottom-7" }} invisible absolute z-50 flex flex-col whitespace-nowrap rounded border border-neutral-300 bg-neutral text-start text-base shadow group-hover:visible ltr:right-0 rtl:left-0 dark:border-neutral-600 dark:bg-neutral-800"
class="{{ if not (eq $dir "down") }} bottom-7 {{ end }} invisible absolute z-50 flex flex-col whitespace-nowrap rounded border border-neutral-300 bg-neutral text-start text-base shadow group-hover:visible ltr:right-0 rtl:left-0 dark:border-neutral-600 dark:bg-neutral-800"
>
{{ $siteLanguages := site.Languages }}
{{ $pageLang := .Page.Lang }}

View File

@ -19,7 +19,9 @@
{{ with $href }}<a href="{{ . }}">{{ end }}
{{- with $img -}}
{{ partial "picture.html" (dict "img" . "alt" $altText "class" $class) }}
{{ $lazy := $.Page.Site.Params.enableImageLazyLoading | default true }}
{{ $webp := $.Page.Site.Params.enableImageWebp | default true }}
{{ partial "picture.html" (dict "img" . "alt" $altText "class" $class "lazy" $lazy "webp" $webp) }}
{{- else -}}
<img src="{{ $url.String }}" alt="{{ $altText }}" class="{{ $class }}"/>
{{- end -}}

View File

@ -13,7 +13,9 @@
{{ $altText = (.Get "caption") | markdownify | plainify }}
{{ end }}
{{ partial "picture.html" (dict "img" $image "alt" $altText "x2" true) }}
{{ $lazy := $.Page.Site.Params.enableImageLazyLoading | default true }}
{{ $webp := $.Page.Site.Params.enableImageWebp | default true }}
{{ partial "picture.html" (dict "img" $image "alt" $altText "x2" true "lazy" $lazy "webp" $webp) }}
{{- if .Get "href" }}</a>{{ end -}}
{{- if .Get "caption" -}}

743
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -9,7 +9,8 @@
"dev": "NODE_ENV=development ./node_modules/tailwindcss/lib/cli.js -i ./assets/css/main.css -o ./assets/css/compiled/main.css --jit -w",
"build": "NODE_ENV=production ./node_modules/tailwindcss/lib/cli.js -i ./assets/css/main.css -o ./assets/css/compiled/main.css --jit",
"example": "hugo server --bind 0.0.0.0 -p 8008 --source exampleSite --themesDir ../.. --buildDrafts -b http://localhost/congo/ ",
"lighthouse": "lhci autorun"
"lighthouse": "lhci autorun",
"add-icon": "node scripts/index.js add-icon"
},
"repository": {
"type": "git",
@ -32,6 +33,7 @@
"@tailwindcss/typography": "^0.5.10",
"chart.js": "^4.4.1",
"fuse.js": "^7.0.0",
"jsdom": "^23.0.1",
"katex": "^0.16.9",
"mermaid": "^10.7.0",
"prettier": "^3.2.4",

11
scripts/index.js 100644
View File

@ -0,0 +1,11 @@
#!/usr/bin/env node
const { program } = require("commander");
const { add_icon_to_congo } = require("./update_icon");
// Adds an icon to the project.
program
.command("add-icon <icon_name>")
.description("Add icon to the project")
.action(add_icon_to_congo);
program.parse(process.argv);

View File

@ -0,0 +1,97 @@
const jsdom = require("jsdom");
const fs = require("fs");
const DOC_DIR = "./exampleSite/content/samples/icons";
const FONTAWESOME_VERSION = "v6.5.1";
const DEFAULT_TABLE_DELIMITER = "| -------------------- | --------------------------------- |";
/**
* Saves an icon to the congo project and update documentation.
* @param {string} icon_name Icon name from Font Awesome to download
* @returns null
*/
const add_icon_to_congo = async (icon_name) => {
try {
const icon_url = create_icon_url(icon_name, FONTAWESOME_VERSION);
const file = await get_file(icon_url);
const final_svg = modify_svg_string(file);
const icon_download_path = create_icon_download_path(icon_name);
save_file(icon_download_path, final_svg);
add_documentation(icon_name);
} catch (e) {
console.log(e);
return;
}
};
const modify_svg_string = (svg_string) => {
try {
dom = new jsdom.JSDOM(svg_string);
svg = dom.window.document.documentElement.querySelector("svg");
svg.querySelector("path").setAttribute("fill", "currentColor");
return svg.outerHTML;
} catch (e) {
throw new Error("Invalid SVG file");
}
};
const create_icon_url = (icon_name, fontawesome_version) => {
return `https://site-assets.fontawesome.com/releases/${fontawesome_version}/svgs/brands/${icon_name}.svg`;
};
const create_icon_download_path = (icon_name) => {
return `./assets/icons/${icon_name}.svg`;
};
const get_file = async (url) => {
console.log("Getting file at " + url + "...");
const response = await fetch(url);
if (response.status >= 400) {
throw new Error("Could not download icon / icon not found");
}
console.log("File retrieved!");
return response.text();
};
const save_file = (file_path, file) => {
console.log("Saving file at " + file_path + "...");
fs.writeFile(file_path, file, function (err) {
if (err) throw err;
console.log("File saved!");
});
};
const add_documentation = async (icon_name) => {
files = get_md_docs();
for (const file of files) {
const file_path = `${DOC_DIR}/${file}`;
const file_contents = fs.readFileSync(file_path, "utf8");
const file_result = process_file(file_contents, icon_name);
// Save file_result to file_path
fs.writeFile(file_path, file_result, function (err) {
if (err) throw err;
});
console.log(`Updated ${file_path}`);
}
};
/**
* Process the file contents to include the icon name.
* @param {string} file_contents contents of the documentation files.
* @returns {string} processed file contents.
*/
const process_file = (file_contents, icon_name) => {
const [headers, table] = file_contents.split(DEFAULT_TABLE_DELIMITER);
const table_rows = table.split("\n").map((x) => x.trim()).filter((row) => row !== "");
table_rows.push(table_rows[0].replace("amazon", icon_name));
table_rows.sort();
const new_table = table_rows.join("\n");
return `${headers.trimEnd()}\n${DEFAULT_TABLE_DELIMITER}\n${new_table}\n`;
};
const get_md_docs = () => {
return fs.readdirSync(DOC_DIR).filter((file) => file.endsWith(".md"));
};
module.exports = { add_icon_to_congo };